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

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

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版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
9月前
|
安全 架构师 Java
理论实战源码齐飞!架构师社区疯传的SpringSecurity进阶小册真香
安全管理是Java应用开发中无法避免的问题,随着Spring Boot和微服务的流行,Spring Security受到越来越多Java开发者的重视,究其原因,还是沾了微服务的光。作为Spring家族中的一员,其在和Spring家族中的其他产品如SpringBoot、Spring Cloud等进行整合时,是拥有众多同类型框架无可比拟的优势的。
99 0
|
8月前
|
前端开发 JavaScript 程序员
《吐血整理》-顶级程序员工具集(1)
《吐血整理》-顶级程序员工具集
|
8月前
|
自然语言处理 监控 IDE
《吐血整理》-顶级程序员工具集(3)
《吐血整理》-顶级程序员工具集
|
搜索推荐 Java 测试技术
牛客社区项目(第六章)
牛客社区项目(第六章)
228 0
牛客社区项目(第六章)
|
存储 Java 数据安全/隐私保护
Java开发必学知识合集(一)
Java开发过程中,常用且重要的知识点是开发中最基本的,尤其是刚接触Java开发不久的开发者来说,基本功很重要,是直接做Java工作的基本,那么本文就来分享一下在Java开发过程中的常用的知识点,由于篇幅问题,这里只分享一部分内容,没有分享到的会在后面的博文中分享。
101 0
Java开发必学知识合集(一)
造孽啊!阿里内部的神级项目和JDK源码阅读指南竟惨遭GitHub开源
背景 今天逛GitHub,发现了一个神级项目,作者将整理/记录阅读JDK源码时的理解与体会分享出来,便于大家学习。这里将项目分享出来,让小伙伴们能更好地学习Java。
|
消息中间件 Dubbo 应用服务中间件
今年我读了四个开源项目的源码,来分享下心得(下)
今年我读了四个开源项目的源码,来分享下心得(下)
今年我读了四个开源项目的源码,来分享下心得(下)
|
算法 架构师 Java
肝了三天三夜整理出这份36万字全网最牛的开源高并发编程PDF!!
在 冰河技术 微信公众号中的【高并发】专题,更新了不少文章,有些读者反馈说,在公众号中刷历史文章不太方便,有时会忘记自己看到哪一篇了,当打开一篇文章时,似乎之前已经看过了,但就是不知道具体该看哪一篇了。相信很多小伙伴都会有这样的问题。那怎么办呢?最好的解决方案就是我把这些文章整理成PDF电子书,免费分享给大家,这样,小伙伴们看起来就方便多了。今天,我就将 冰河技术 微信公众号【高并发】专题中的文章,整理成《深入理解高并发编程(第1版)》 分享给大家,希望这本电子书能够给大家带来实质性的帮助。后续,我也会持续在 冰河技术 微信公众号中更新【高并发】专题,如果这本电子书能够给你带来帮助,请关注 冰
670 0
肝了三天三夜整理出这份36万字全网最牛的开源高并发编程PDF!!
|
前端开发 JavaScript 算法
重磅:硬核前端面试开源项目汇总(进大厂必备)
重磅:硬核前端面试开源项目汇总(进大厂必备)
928 0