为何要阅读源码?可能原因如下:
1.面试要求
2.提升编码能力
在面试中,我们经常被问到,读过Java、Hadoop或者Spark、Flink源码吗?这时候我们可能就想着,既然要考,那就读读源码吧,可是读着读着就读不下去了,因为花费了很多时间,却读不懂,一无所获。
这里针对我们不同的需求,给我们不同的解决方案。
1.面试要求
如果因为面试,去阅读源码,其实我们可以借助外力,帮助我们,比如通过阅读源码的书籍、视频。
2.提升编码能力
需要下下功夫、花时间
其实很多人阅读困难,刚开始都是比较困难的,所以即使我们提升自己也可以先看看相关的书籍、视频、文档等。然后还有一个通用的技巧,那就是“倒推验证”,怎么个倒推验证,我们一步步来,下面我们详细介绍。
1.面试阅读源码
为了面试阅读源码,如果我们采用传统的,按部就班的去搭建环境,调试等,这样的想法和执行。存在问题如下:
1.时间来不及:
面试是当前就需要,可是阅读源码,没有几个月是搞不定的,所以很可能还没开始,就已经结束了,
2.刚开始遇到较多的问题:
在搭建环境、编译源码的时候,就会遇到各种问题,浪费几天的时间,可能环境都没搞定,最终得出结果,阅读源码太难,不可能达到。
3.准备不足
阅读源码,了解项目背景对源码阅读是非常重要的,比如项目说明文档、版本更替等。如果对这些了解,对于代码的理解也容易很多。
4.知识积累不足
如果我们是刚毕业,只知道变量、类,做过简单的项目,然后就去阅读比如Hadoop源码,肯定是搞不定的,因为这里面可能会涉及到多个设计模式,各式各样的函数、偏函数、匿名函数等使用、类、接口、抽象函数等,以及为了具备更好的移植性、方便修改等,会有各种配置文件、配置项等,还有比如代码的混合使用,Java中使用C、Scala等等,没有深厚的功底,这些会让我们头痛不已。
上面都是我们阅读源码的绊脚石,我们一个个去搬开,会花费相当长的时间,如果只是像单纯的应付面试,我们可以查看相关阅读源码的书籍:
比如
Flink,可以看下《Flink内核原理与实现》
Java,可以查看《通用源码阅读指导书》
Hadoop可以阅读《大数据处理系统:Hadoop源代码情景分析》
想获取上面两本书籍也可以加微信w3aboutyun获取,附上“源码”
2.提升编码能力
阅读源码,对我们的编码能力提升还是比较大,就像我们搞 研究,是需要看一些文献。所以阅读源码多了,我们在代码能力、代码功底就会有很大的提升。
我们在阅读代码前,首先是需要对你所阅读的代码有一个整体的认知,就比如我们阅读Hadoop源码。2008年1月,Hadoop成为Apache顶级项目。到现在2022年,已经发展了14年了,所以我们正确的认识到,我们行业顶级精英,天才级别的大神,写了14年的Hadoop项目,我们想花费多长时间来去读懂、读透。
显然我们想一周、两周、两个月来读懂读透,这是不大可能的,所以这是为什么很多的同学,在阅读源码的时候,还没有开始就已经结束的原因,很多是因为没有正确认知项目的发展和积累。这有点像我们刚会识字或者写作文,就让我们去看四大名著,而且像快速看完,这显然书达不到的。
在我们对源码有了整体的认识后,接着我们就要具体的去研读源码,那么该如何阅读源码,阅读源码的步骤:
1.首先了解项目背景
前面我们已经涉及到,项目背景是非常重要的,比如Hadoop,我们是否对他所了解。Hadoop为何产生,是为了解决在大数据量的情况下,单机很难计算和处理的数据的情况下,所以产生了价格和成本都非常昂贵的超级计算机。所以有的人就想如何通过廉价的普通的计算机来实现计算大数据量,所以Hadoop应运而生。Hadoop又分为Hdfs、Yarn等组件,当然这里面又会细分,我们了解的越详细,对我们阅读源码越方便和快捷。
2.了解项目功能、结构
了解项目功能、结构,比如哪些是通用部分,哪些是功能部分。所以这里我们需要一定猜测,这个猜测我们同样需要去验证。有的大神称其为““正向推导+验证””,这里其实也和我们的学习方法和思维关联。我们在学习比如当前的源码,你的学习思路是什么?是一直跟着文件或者文档的思路去学习,还是自己提前有一定的想法,然后去文档或者文件中去验证自己的想法,这二者的学习效果和速度是不一样的。
3.调试代码
调试代码,很多同学卡在了这里,因为跟踪代码的时候,跳来跳去,就整蒙了。要么不知道为何会跟踪到这里,要么跟踪到这里,不认识它,总之很多同学到这里有的就放弃了。
所以在这里我们该如何破解这个关卡?
1.掌握整个代码的流程走向
2.掌握类之间的主次、依赖关系
3.摸清架构层次,整体把控
4.阅读由易到难
先阅读基础模块,然后阅读依赖较多的模块。我们在刚开始阅读文档,就想去攻克难点,这样会非常容易让我们放弃,所以其实这也是做事的策略和方法。
5.总结
我们在阅读完源码后,去总结从代码深度,到类与类之间的关系,总结出代码的逻辑和实现逻辑。这样达到我们读懂源码的目的。