Cache 解决算法 Charles 断点调试 breakpoint John 易筋 ARTS 打卡 Week 08

用户头像
John(易筋)
关注
发布于: 2020 年 07 月 13 日

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.



Given nums = [-2, 0, 3, -5, 2, -1]
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3



Constraints:

  1. You may assume that the array does not change.

  2. There are many calls to sumRange function.



1 穷举解法

发现速度很慢,因为约束说了,这是要重复使用的。只跑赢了5%的速度。



public class NumArray {
private int[] nums;
public NumArray(int[] nums) {
this.nums = nums;
}
public int sumRange(int i, int j) {
int sum = 0;
for (; i <= j && j < nums.length; i++) {
sum += nums[i];
}
return sum;
}
}



2 Cache的方式解法

因为题目强调了,sumRange方法需要被多次调用,那么一定要有缓存,才能达到O(1)的速度。

这里有个公式sums[i + 1] = sums[i] + nums[i]可以把前面多少个数的和缓存起来,求区间数据只要用return sums[j + 1] - sums[i]; 就可以O(1)算出来。



public class NumArray {
private int[] sums;
public NumArray(int[] nums) {
sums = new int[nums.length + 1];
for (int i = 0; i < nums.length; i++) {
sums[i + 1] = sums[i] + nums[i];
}
}
public int sumRange(int i, int j) {
return sums[j + 1] - sums[i];
}
}



2. Review: 阅读并点评至少一篇英文技术文章

Xcode 调试的5个常用技能。

  1. 慢动画调试

  2. 控件的frame显示出来

  3. view的层级显示

  4. 增加注释快捷键 ⌥ + ⌘ + / (Option + Command + Slash)

  5. 重命名类或者方法,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的需求。



这里就用访问博主的博客为例子说明:

https://blog.csdn.net/zgpeace



没有修改之前的页面,用手机访问:

一、添加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】。

  1. 网页显示的结果页面



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)



发布于: 2020 年 07 月 13 日 阅读数: 41
用户头像

John(易筋)

关注

问渠那得清如许?为有源头活水来 2018.07.17 加入

工作10+年,架构师,曾经阿里巴巴资深无线开发,汇丰银行架构师/专家。开发过日活过亿的淘宝Taobao App,擅长架构、算法、数据结构、设计模式、iOS、Java Spring Boot。易筋为阿里巴巴花名。

评论

发布
暂无评论
Cache解决算法 Charles断点调试breakpoint John 易筋 ARTS 打卡 Week 08