设定目标
凡事皆有目的,阅读源码也是一样。
从大的方面来说,我们阅读源码的目的是为了提升自己的技术能力,运用到工作中,遇到问题快速定位,升职加薪等等。 从小的方面来说,阅读某一段源码的目的就是要搞清楚它的原理,就是死磕,就是那种探索真相的固执。 目的是抽象的,目标是具体的,我们阅读源码之前一定要给自己设定一个目标。
前提研究
在阅读源代码之前,我们有一些前提工作必须要做:研究学习源码里面设计到的一些理论原理或者相关协议等。比如,看Cassandra源码前,我们必须熟悉理解Gossip协议;看etcd源码前,要求我们必须先研究Raft协议;看Zookeeper源码前,必须要学习Paxos理论;看BoltDB源码前,我们必须吃透B+树。
提出问题
在阅读源代码之前,我们首先问问自己,如果这个系统让你去做,你会怎么设计怎么实现呢。 在我们看源代码的过程中,肯定有许多不理解或未接触过的知识,这时候就需要我们将这些问题列出来。然后通过Google或者进一步通过源码来解决这些问题,在我们Google的过程中,也可能会提出一些新的问题,将这些问题都列出来。 我们自己列出来的问题库,对我们来说也是不错的学习资料,以后可以进行重点复习。
忽略不必要细节,死磕重要细节
首先,一定要带着问题阅读源码。
其次,一定要忽略不必要的细节。
再次,一定要死磕重要的细节。
多多实践
最后一步,最最最最重要的就是要多实践。
比如,ConcurrentHashMap是不是强一致性的?可以启动多个线程去不断调用get()、put()、size()方法,看看是不是强一致性的。
多做总结
我们之所以要阅读源码,就是为了学习开源项目里面好的编码规范、一些开发技巧、具体实现原理等。
在看完源代码之后,我们提出的问题肯定都已经有了答案了,这时候一定要做一做总结。 做总结能帮助我们重新梳理一下思路,让我们对源代码有一个更整体更深刻的认识,同时,也方便我们日后的复习,毕竟我们总是健忘的,需要隔一段时间进行复习强化。