09 | 学习开源代码该如何入手?
李玥
该思维导图由 AI 生成,仅供参考
你好,我是李玥。对于很多开源软件来说,如果我们把它作为我们业务系统的重要组成部分之一,真正地用于生产,仅仅知道如何使用是远远不够的,你必须掌握它的实现原理和很多细节,这样才能找到最佳的使用姿势,当你的系统出现问题时,你才有可能基于它的实现原理,再根据一些现象来排查问题原因。
掌握这些开源软件的最佳方式就是去学习它的源代码。很多同学跟我说:“我也很想去看一些开源软件的代码,也尝试去看过,但是面对上千个源码文件,几十万行代码,完全不知道从哪儿入手啊。”
这节课我们就针对这个情况来聊一聊,学习开源软件的代码该如何入手。
有一点我提前说明一下,对于这节课里面涉及到的一些名词,我会直接使用英文,主要目的是方便你直接对应到那些开源软件英文官网上的标题。
通过文档来了解开源项目
学习源代码应该从哪儿入手呢?最佳的方式就是先看它的文档。
通过看文档,你可以快速地掌握这个软件整体的结构,它有哪些功能特性,它涉及到的关键技术、实现原理和它的生态系统等等。在掌握了这些之后,你对它有个整体的了解,然后再去看它的源代码,就不会再有那种盲人摸象找不到头绪的感觉了。
首先强调一点是,你必须去看这些开源软件官方网站上的文档,尽量不要去网上搜一些翻译的中文文档。为什么呢?
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
学习开源代码的关键在于深入了解其实现原理和细节,而不仅仅是使用方法。最佳的学习方式是从阅读官方文档开始,尤其是背后的论文或博文,再逐步阅读源代码。阅读源码时,建议带着问题和答案去读,这样难度低、周期短、收获快。通过这种方式,读者可以逐步了解开源项目的用途、解决的问题、适用场景、功能以及如何使用,为深入学习源代码打下基础。最后,建议读者在阅读源码的过程中,将主要的流程用流程图或时序图画出来,以及将重点的算法和原理用文字写出来。这样的学习方式能够帮助读者更全面、深入地理解项目源码。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《消息队列高手课》,新⼈⾸单¥59
《消息队列高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(59)
- 最新
- 精选
- 南山读源码的习惯是喜欢按照一条主线来看,经常会被一些细节绕晕。多谢老师指路。 后续就按照:灵魂->官方文档->问题&答案找答案->核心类结构图+流程图->原理细节文字步骤说明->点成线->线成网->实际应用(可遇不可求)->官方文档->灵魂 多写总结,多思考知识点之间多关联,多动手,一切都是水到渠成的事儿~~~
作者回复: 👍👍👍
2019-08-11238 - linqw学习完这篇写下自己的理解,老师有空帮忙看下哦 1、在还没阅读开源项目代码之前,会先把Java的一些常用的源代码先看完,感觉所有的源代码都是这些基础的砖块叠加上去的,最近也在撸rocketmq源码,也是先把用到的一些其他框架先熟悉如netty、logger,然后看其官方文档,对整体的框架和基本的概念有比较感性的认知,再者写一些demo。然后先把rocketmq中的公共的模块的源代码先看,比如logger、loggappend、namesrv,如namesrv内部维护broker、cluster、topic、queue的路由信息,producer再发送消息前,需先将namesrv其broker的路由信息缓存到本地,为此需和namesrv维护长连接,定时的从namesrv获取新的路由信息,broker端需和namesrv为此常连接,broker定时的发送配置信息到namesrv,namesrv需开启定时任务将其超过时间没有收到心跳包的broker连接关闭。为了namesrv中的配置参数可以更改,可以从System中的properties中获取,也为了这些配置持久化也会在接收到配置参数时保存到文件中,namesrv需维护配置参数的设置获取,如发送消息前选择topic等,为了区分不同的命令,维护RequestProcessor,对接收到不同的RemotingCommand做不同的处理序列化和反序列化,参数检验等。很多开源框架都会做一个admin,便以实时的更改配置参数,实时的监控项目中的配置参数。 2、打算先把并发包先分析完,然后开始分析下rocketmq,这个是自己分析的一些知识点https://juejin.im/user/5bd8718051882528382d8728/posts
作者回复: 👍👍👍
2019-08-10228 - 纯齐请教下,有什么好办法找出开源项目的“灵魂”?
作者回复: 建议去从文档中找。 如果这个项目是基于某个Paper的,一般文档中的显著位置都会标注。
2019-08-1214 - innocent您好,请问一下作为一个对Scala不是非常熟悉的Java程序员如何阅读Kafka的源码。
作者回复: 花点儿时间学一下基础语法,特别是lambda,至少读懂源码就没什么问题了。
2019-08-1027 - xfan我照着例子试了一下,有一个问题 为什么kafka的不同的topic 的Leader可以不一样,这个Leader等同于分布式系统中的master节点吗
作者回复: 你可以理解master和leader的含义是一样的。 对于“为什么kafka的不同的topic 的Leader可以不一样”这个问题,我在《22 | Kafka和RocketMQ的消息复制实现的差异点在哪?》这节课中有专门讲到,你可以参考一下。
2019-10-301 - 汤小高带着问题阅读源代码,但是怎么快速定位每个问题对应的源代码入口?
作者回复: 一般通过文档或者测试用例结合文件名去找。
2019-12-19 - 陈珙老师在后续课程是否可以再开放一些”程序员史诗般必读文章”给我们学习下2019-08-12182
- hhhh这篇文章,解决我很大的疑惑啊!自己看代码就是先找main,真尴尬。。2019-08-10319
- 钱这节直指痛点,之前阅读源码就是这样半途而废的。 再启程,参考老师的建议 1:先整体,再局部 2:先英文,再中文 3:先灵魂,再原理 4:先文档,再源码 5:阅读前先思考,带上问题和答案去验证,阅读完了,记得总结——流程图、时序图、文字描述 6:我觉得还需要加上些基础,比如:数据结构、操作系统原理、计算机网络原理、设计模式等 7:最重要的在于坚持,遇到困难还能继续前进2019-08-2115
- 编程界的小学生带着问题和答案读源码的确是最有效,收获最快的一种阅读源码方式,那么问题来源于哪?可以来源于你开发中真实遇到的问题也可以去网上搜面试题,网上答案几乎都给你原理,你知道这个问题的原理后,带着她去看源码,香。2020-07-076
收起评论