今年我读了四个开源项目的源码,来分享下心得(上)

简介: 今年我读了四个开源项目的源码,来分享下心得(上)

Hola,我是 yes。

今年来看了 RocketMQ、Kafka、Dubbo 、Tomcat 的源码,之前也有读者询问过如何读源码,索性就来分享一下。

其实还看了一点点 Linux、Redis、jdk8,这几个阅读的目的和上面几个是不同的,下面会提到。

image.png

相信通过今天的分享你不会被源码轻易劝退,其实没什么,不就是代码吗?

而且你一直在看源码,可能你没意识到,你看别人的代码不就是源码?

你新入职一个公司要熟悉代码的时候不就是看源码?

这和你看开源框架源码没有本质的区别,要真说区别无非是代码的质量、整体的设计区别罢了。

那时候你怎么做的?

反正最终结果你应该都是上手了的。

那就得了,开源框架的一样,最终你也会上手。

所以没啥好怕的,不要被劝退了。

我先分享一下我入职一家新公司接手项目的时候是怎么做的。


入职新公司接手项目就是在读源码


新入职接手项目的时候,我先拉上了产品经理和原先这个项目的主力开发开了个会。

这个会的目的就是让产品经理介绍一下这个项目的背景、要解决什么问题、有哪些功能。

开发在旁边补充、解答我的疑惑,毕竟产品经理不太了解细节上的数据交互。

这个会议下来你就能得知这个项目到底是干嘛的,能提供哪些功能。

业务上的理解对你之后读源码非常的重要!!

然后我会去要文档、架构图、流程图、时序图等等(有多少要多少,没的话没办法)。

看完之后对整个项目有了大致的了解。

然后让项目跑起来,跑起来之后,开始用这个软件,各种功能点一点,毕竟听产品经理说和自己实际用还是有区别的。

基本上项目主流程都过了一遍之后,开始看源码。

这个时候看源码,单看文件的命名其实已经能知道这个文件对应着哪个模块了,有种胸有成竹的感觉。

然后具体深入细节就看分配到的任务了,几个需求接下来渐渐地细节就都全清楚了。

稳了。

所以入职接手项目是需要了解背景、总览全局然后再细化。

读开源项目的源码也是如此,自顶向下。


如何阅读开源项目的源码


读源码我个人分为两种情况:为了提升自己和为了找问题。


为了提升自己而读源码

我默认你是知道你要看的开源项目是干嘛的,比如 RocketMQ 是消息队列,消息队列是干嘛的你应该先知道。

我也默认你用过这个开源项目,业务上没用过自己私下也要先用用,了解简单功能怎么用,让它先跑起来。

首先看官网、wiki。

我截个 RocketMQ 的:


image.png


了解具体涉及到的概念、名称、特性、架构这是第一步。

这一步能让你脑子里有个角色分布图和数据流转图,让你明白整体项目的主要角色及之间的交互。

image.png

然后看源码目录,你得先知道每个目录是干嘛的涉及哪些功能,这其实和你看业务源码一样。

image.png


然后就是找突破口了,这种开源项目都有 demo ,跑,打断点就完事儿了!

比如 RocketMQ 的:

image.png


比如 Dubbo 的:

image.png


这就是突破口。

然后就开始源码之路了,是的还是得自己啃,硬啃,这是读源码的必经之路!

但是这时候你不是像无头苍蝇一样乱啃。

你是在知晓大体会涉及到的角色和数据流转之后读源码,这很不一样!

你会对一些方法调用有一种“认可感”,因为你知晓大致的流程,所以觉得本该如此。

读源码有时候会觉得代码很多,分支好多。

没事,先拷贝一份,然后把一些异常处理和不常见的分支先删了。

整体核心流程先理清楚!

并且理清楚了一个流程之后开始画图,流程图、脑图都上。

清楚之后再看没删减的代码,把异常处理的一些也理解了,补充完整流程图、脑图等。

看看我之前分析 Kafka 的时候画的图,就类似这样的搞清楚一个流程:


image.png

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1月前
|
算法 前端开发 语音技术
推荐6款2023年爆火的开源项目,你值得一试!
推荐6款2023年爆火的开源项目,你值得一试!
推荐6款2023年爆火的开源项目,你值得一试!
|
9月前
|
Java 程序员
GitHub最新发布Java面试突击手册+P5-P8学习图谱,一夜直接竟爆火
什么是金九银十? “金九银十指的是每年的九十月份都是人才招聘的高峰期,因为跟春节和春运紧接,到人才市场,人都是满的,所以称为金九;伴随的十月则称为银十。”
|
9月前
|
设计模式 NoSQL Java
直击面试!阿里技术官手码12W字面试小册在Github上爆火
临近金三银四,想必有不少老哥已经在为面试做准备了。大家想必也知道现在面试就是看项目经验+基本技术+个人潜力(也就是值不值得培养)。总之就是每一次面试都是对我们能力的检验(无论是软实力还是硬实力)。软实力其实就是简历包装,自我介绍,与面试官交谈技巧等等;所谓硬实力就是我们所掌握的技术情况了。所以每次面试之前需要做好充分的准备,切不可临时抱佛脚。技术基础打好后,面试前算题巩固也是必不可少的!
|
8月前
|
消息中间件 NoSQL Java
Github霸榜!2023最新一线大厂Java八股文合集PDF版震撼开源
前言 金九银十已到,也不知道大家准备得怎么样,有没有为找到心仪的工作开始面试了,有没有准备不充分在各大平台找资料临时抱佛脚的朋友,不管你是找工作还是找资料,一定要看看我花1个多月为大家整理收集的“2023最新一线大厂Java八股文合集”,当你看了这份资料,定会有惊人发现。
753 0
|
10月前
|
Java 程序员
Github霸榜半年的阿里并发编程速成笔记究竟有什么魅力?
大家都知道金三银四是程序员跳槽的黄金时期,很多程序员都想着能抓住这一机会,挺进大厂!我曾经整理过一份详细的大厂岗位需求表,很多20K以上的Java岗位,基本都要求具备高并发分布式的相关经验。老练的面试官知道,对于一个 Java 程序员而言,如果对并发编程有全面而深入的了解,那说明技术功底足够扎实。所以,并发编程也是大厂面试的必考项。并发编程,也直接成为了资深开发和小白开发本质的分水岭。
造孽啊!阿里内部的神级项目和JDK源码阅读指南竟惨遭GitHub开源
背景 今天逛GitHub,发现了一个神级项目,作者将整理/记录阅读JDK源码时的理解与体会分享出来,便于大家学习。这里将项目分享出来,让小伙伴们能更好地学习Java。
|
消息中间件 Dubbo 应用服务中间件
今年我读了四个开源项目的源码,来分享下心得(下)
今年我读了四个开源项目的源码,来分享下心得(下)
今年我读了四个开源项目的源码,来分享下心得(下)
|
机器学习/深度学习 自然语言处理 算法
优秀程序员都应该学习的 GitHub 上开源的数据结构与算法项目
优秀程序员都应该学习的 GitHub 上开源的数据结构与算法项目
555 0
优秀程序员都应该学习的 GitHub 上开源的数据结构与算法项目
|
前端开发 JavaScript 程序员
GitHub 标星 54K + 2K!这才是程序员写逼格满满的 PPT 的正确姿势!
GitHub 标星 54K + 2K!这才是程序员写逼格满满的 PPT 的正确姿势!
391 0
GitHub 标星 54K + 2K!这才是程序员写逼格满满的 PPT 的正确姿势!
|
设计模式 监控 Cloud Native
我不服!这开源项目居然才890个星!?(下)
我不服!这开源项目居然才890个星!?(下)
162 0
我不服!这开源项目居然才890个星!?(下)

热门文章

最新文章