Cache 解决算法 Charles 断点调试 breakpoint John 易筋 ARTS 打卡 Week 08
1. Algorithm: 每周至少做一个 LeetCode 的算法题
303. Range Sum Query - Immutable
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.
Constraints:
You may assume that the array does not change.
There are many calls to sumRange function.
1 穷举解法
发现速度很慢,因为约束说了,这是要重复使用的。只跑赢了5%的速度。
2 Cache的方式解法
因为题目强调了,sumRange方法需要被多次调用,那么一定要有缓存,才能达到O(1)的速度。
这里有个公式sums[i + 1] = sums[i] + nums[i]
可以把前面多少个数的和缓存起来,求区间数据只要用return sums[j + 1] - sums[i];
就可以O(1)算出来。
2. Review: 阅读并点评至少一篇英文技术文章
Xcode 调试的5个常用技能。
慢动画调试
控件的frame显示出来
view的层级显示
增加注释快捷键 ⌥ + ⌘ + / (Option + Command + Slash)
重命名类或者方法,command点击需要命名的类
My Top 5 Xcode Tricks
https://medium.com/swlh/my-top-5-xcode-tricks-9c4301a2118a
3. Tips: 学习至少一个技术技巧
博客:
什么是运行时应用程序自我保护(RASP)Runtime Application Self-Protection
说明
用Charles的时候,经常遇到要修改request或者response的需求。
这里就用访问博主的博客为例子说明:
没有修改之前的页面,用手机访问:
一、添加Charles断点
1、用Charles抓包发起一次接口请求
2、对要打断点的接口右键,选择【Breakpoints】.
1. 启动断点功能enable breakpoint
2. 在需要加断点的url右键
3. 选择Beakpoints
二、Charles断点设置
1、点击Charles菜单-【Proxy】-【Breakpoint...】,此时会弹出【Breakpoints Settings】对话框
2、双击【Location】内的接口地址,此时会弹出【Edit Breakpoint】对话框
3、在【Query】项输入:*
4、勾选【Request】【Response】
三、修改接口返回值
1、再次发起接口请求,此时会弹出下面的对话框
2、点击【Edit Request】> Headers > Execute, 笔者这里没有修改,get的请求暂时不需要改。
3、点击【Edit Response】> Headers > Execute, 笔者把HTML的【程序员易筋】改为【程序员易筋666】。
网页显示的结果页面
4. Share: 分享一篇有观点和思考的技术文章
极客大学架构师训练营 系统架构 消息队列 负载均衡 数据库备份 第10课 听课总结
消息队列与异步架构
同步调用
发邮件时序图:同步调用,每个调用都会阻塞等待。
同步调用:线程前后执行,都要一步一步同步等待结果。
多个耗时操作同步调用
异步调用
异步调用:写入消息队列里面,就直接返回。1毫秒就可以返回,比同步调用快了1,000倍以上。
有回调的异步调用
多次异步调用,不阻塞应用线程
消息队列构建异步调用架构
重要角色:
消息生产者
消息队列
消息消费者
点对点模型
发布订阅模型
消息队列的好处
实现异步处理,提升写操作处理性能。
支付、订单等需要消息队列,提升的是写操作的性能,特别是双十一这种大促的时候感受等待的时间比较长。
缓存提升的是读的性能,消息队列提升的是写的性能。
更好的伸缩性
削峰填谷
比如服务器的处理能力为100TPS,100并发;当来了200TPS,200并发的时候,消息队列还是按照100TPS,100并发来处理。
失败隔离和自我修复
因为发布者不直接依赖消费者,所以消息系统可以将消费者系统错误与生产者系统组件隔离。
生产者和消费者互相不受双方失败影响。
这意味着任意时刻,我们都可以对后端服务器执行维护和发布操作。我们可以重启、添加或删除服务器,而不影响生产者可用性,这样简化了部署和服务器管理的难度。
解耦
事件驱动架构 EDA (Event Driven Architecture)
同步调用耦合度高、事件驱动异步调用耦合度低
主要 MQ 产品比较
RabbitMQ 的主要特点是性能好,社区活跃,但是 RabbitMQ 用 Erlang 开发,对不熟悉 Erlang 的同学而言不便于二次开发和维护。(社区 49 Million)
ActiveMQ 影响比较广泛,可以跨平台,使用 Java 开发,对 Java 比较友好。 (社区 27 Million)
RocketMQ 是阿里推出的一个开源产品,也是使用 Java 开发,性能比较哈,可靠性也比较高。(社区 35 Million)
Kafka, LinkedIn 出品,Scala开发,专门针对分布式场景进行了优化,因此分布式的伸缩性比较好。(社区 63 Million)
版权声明: 本文为 InfoQ 作者【John(易筋)】的原创文章。
原文链接:【http://xie.infoq.cn/article/a15ee9fe10d21f6f0bd47d336】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论