分享一些阅读Java相关框架源码的经验

阅读源码实际上是Debug源码

其实所谓的阅读源码并不是单纯的阅读,而是调试源码。光看不动手,啥也不会有。调试源码我一般会从这几个方面着手。

样例和单元测试
很多源码都是samples样例项目以及单元测试,你可以从这些可执行的代码入手。例如Spring Authorization Server中的单元测试和样例。

重视日志
日志作为了解逻辑执行的记录,每个程序员都应该知道它的重要性。线上故障排除,大多都靠日志来定位追踪,因此在看源码的时候更应该去看日志。学会看日志,重视日志不仅仅对看源码有帮助,对日常开发也很有帮助。一个优秀的开发者一定是一个优秀的日志阅读者,所以你要把看日志这个事重视起来。

目标明确
阅读的时候一定要有目标地去阅读,比如今天的阅读是为了搞清楚某个类的初始化流程,或者弄明白某个机制等等。不在这个目标之内的细节和概念都可以先放到一边

双更新模式:操作不合理,导致数据一致性问题
我们来看下常见的一个错误编码方式:

public void putValue(key,value){
    // 保存到redis
    putToRedis(key,value);
    // 保存到MySQL
    putToDB(key,value);//操作失败了
}
public void putValue(key,value){
    // 保存到MySQL
    putToDB(key,value);
    // 保存到redis
    putToRedis(key,value);
}

考虑到下面的场景:操作 A 更新 a 的值为 1,操作 B 更新 a 的值为 2。由于数据库和 Redis 的操作,并不是原子的,它们的执行时长也不是可控制的。当两个请求的时序发生了错乱,就会发生缓存不一致的情况。

public void putValue(key,value){
    // 删除redis数据
    deleteFromRedis(key);
    // 保存到数据库
    putToDB(key,value);
}

你可能感兴趣的:(java)