本年我读了四个开源项目的源码,来分享下心得
Hola,我是 yes。本年来看了 RocketMQ、Kafka、Dubbo 、Tomcat 的源码,之前也有读者询问过如何读源码,索性就来分享一下。
实在还看了一点点 Linux、Redis、jdk8,这几个阅读的目的和上面几个是不同的,下面会提到。
https://p5.toutiaoimg.com/large/pgc-image/6778362e536341a3b5550dc7b94eade8
相信通过本日的分享你不会被源码轻易劝退,实在没什么,不就是代码吗?
而且你不停在看源码,可能你没意识到,你看别人的代码不就是源码?
你新入职一个公司要熟悉代码的时间不就是看源码?
这和你看开源框架源码没有本质的区别,要真说区别无非是代码的质量、整体的计划区别罢了。
当时间你怎么做的?
反正最终结果你应该都是上手了的。
那就得了,开源框架的一样,最终你也会上手。
以是没啥好怕的,不要被劝退了。
我先分享一下我入职一家新公司接手项目的时间是怎么做的。
入职新公司接手项目就是在读源码
新入职接手项目的时间,我先拉上了产品经理和原先这个项目的主力开发开了个会。
这个会的目的就是让产品经理先容一下这个项目的背景、要办理什么问题、有哪些功能。
开发在旁边补充、解答我的迷惑,毕竟产品经理不太了解细节上的数据交互。
这个会议下来你就能得知这个项目到底是干嘛的,能提供哪些功能。
业务上的明白对你之后读源码非常的重要!!
然后我会去要文档、架构图、流程图、时序图等等(有多少要多少,没的话没办法)。
看完之后对整个项目有了大致了解。
然后让项目跑起来,跑起来之后,开始用这个软件,各种功能点一点,毕竟听产品经理说和自己现实用另有有区别的。
基本上项目主流程都过了一遍之后,开始看源码。
这个时间看源码,单看文件的定名实在已经能知道这个文件对应着哪个模块了,有种胸有成竹的感觉。
然后具体深入细节就看分配到的任务了,几个需求接下来渐渐地细节就都全清楚了。
稳了。
以是入职接手项目是需要了解背景、总览全局然后再细化。
读开源项目的源码也是云云,自顶向下。
如何阅读开源项目的源码
读源码我个人分为两种环境:为了提升自己和为了找问题。
为了提升自己而读源码
我默认你是知道你要看的开源项目是干嘛的,比如 RocketMQ 是消息队列,消息队列是干嘛的你应该先知道。
我也默认你用过这个开源项目,业务上没用过自己私下也要先用用,了解简单功能怎么用,让它先跑起来。
<hr>起首看官网、wiki。
我截个 RocketMQ 的:
https://p6.toutiaoimg.com/large/pgc-image/d594c0aacd814410b4917f16da905a84
了解具体涉及到的概念、名称、特性、架构这是第一步。
这一步能让你脑子里有个角色分布图和数据流转图,让你明白整体项目的主要角色及之间的交互。
https://p26.toutiaoimg.com/large/pgc-image/00c842f33f5a4a93b1cd528c03e67d5c
然后看源码目次,你得先知道每个目次是干嘛的涉及哪些功能,这实在和你看业务源码一样。
https://p6.toutiaoimg.com/large/pgc-image/242cf405cbfa4db1a41818946c6f81ec
然后就是找突破口了,这种开源项目都有 demo ,跑,打断点就完事儿了!
比如 RocketMQ 的:
比如 Dubbo 的:
https://p5.toutiaoimg.com/large/pgc-image/bb87e6d315fb4662a15db555e641c8cc
这就是突破口。
然后就开始了源码之路了,是的还是得自己啃,硬啃,这是读源码的必经之路!
但是这时间你不是像无头苍蝇一样乱啃。
你是在知晓大体会涉及到的角色和数据流转之下读源码,这很不一样!
你会对一些方法调用有一种“认可感”,因为你知晓大致的流程,以是以为本该云云。
读源码偶然间会以为代码许多,分支好多。
没事,先拷贝一份,然后把一些异常处理和不常见的分支先删了。
整体核心流程先理清楚!
并且理清楚了一个流程之后开始绘图,流程图、脑图都上。
清楚之后再看没删减的代码,把异常处理的一些也明白了,补充完备流程图、脑图等。
看看我之前分析 Kafka 的时间画的图,就类似这样的搞清楚一个流程:
然后这一模块就收工了!搞定!
然后各种分支发散出去,大致的流程就都清楚了,源码也就读的差不多了。
读源码的时间也会遇到一些不能明白的,先略过,主流程先搞懂。
搞懂整体核心流程之后可以抠一些细节了,比如我之前看 Dubbo 的时间就抠了一个从一段 Dubbo 源码到 CPU 分支预测的一次探险之旅
https://p5.toutiaoimg.com/large/pgc-image/2cfaa9fe024d4707adbb197dc1fba1a5
再比如之前看 Kafka 的索引计划涉及到二分查找,但是源码中是改版的二分查找。把索引项分为热区和冷区,深究下去是为了避免缺页停止。
再比如 RocketMQ 里面看预热文件的时间涉及的这个方法。
https://p26.toutiaoimg.com/large/pgc-image/1122633e365242bcab55eeafcf45a7ae
这时间又涉及到 mlock、madvise 。
https://p5.toutiaoimg.com/large/pgc-image/91d9c59f61404d679c87ae423399debc
这些就是细节,而细节往往就是我们需要学习的地方,以是在理清整体流程之后不要错过细节。
往往你以为很奇怪的地方可能就是一些“骚操作”,学的就是“骚操作”。
这一趴读源码是为了让自己得到晋升、学习学习精良开源框架是如何计划而读的源码。
为了找问题而读源码
这个目的性很强,偶然间是项目出错,一般而言有日志,以是通过日志搜就行。
如果你自己对这个框架很熟悉那当然最好,如果不熟悉通过日志搜索结合上下文实在也能找到一些缘由。
不过偶然间还是得整个链路分析下来才能排盘问题,这个看功力了。
偶然间是因为看到一些文章的说法冲突了,一篇说 A 另一篇说 B 。
如果你找不到权势巨子的信息你只能自己去看源码,通过关键字搜。
比如我这篇写的:
这就是源码之下无秘密。
https://p6.toutiaoimg.com/large/pgc-image/3a6b8dd12c714b34875b7e541ad16a42
最后
不知不觉说了这么多。
我只能告诉你不要被源码劝退,你实在不停在看源码。
然后要自顶向下的看源码,不要一头就钻进细节,先从官网等渠道对开源框架有个全面的了解,然后看源码理清主流程。
再配合流程图、时序图、脑图等记载、归类。
然后再看细节,学学精良开源框架的“骚操作”。
模仿它,学会它,从中能延展出许多额外的底层知识,比如上面提到的缺页停止,预热锁页,分支预测等等。
当然也可以先去网上搜一搜别人的源码分析文章,比如我之前的一些,然后自己再上手,这样会比较惬意温顺利。
或者一些相干的付费专栏,我个人以为不要排斥知识付费,就这么点钱,比你买个皮肤划算。
人家汇总整理知识,你花点小钱,节省你自己研究的时间,我以为不亏。
反正我自己买了许多,我自己从中有劳绩,以是我说的一点都不心虚。
最后,源码是块硬骨头这毋庸置疑,我只能告诉你看源码的准备工作和一些小心得。
道阻且长,行则将至。
冲!
有本事看redis,jvm源码 关注了 大佬 很好 转发了 转发了 转发了 转发了 转发了
页:
[1]
2