09 | 学习开源代码该如何入手?

2019-08-10 李玥
《消息队列高手课》
课程介绍


讲述:李玥

时长:大小13.40M


你好,我是李玥。对于很多开源软件来说,如果我们把它作为我们业务系统的重要组成部分之一,真正地用于生产,仅仅知道如何使用是远远不够的,你必须掌握它的实现原理和很多细节,这样才能找到最佳的使用姿势,当你的系统出现问题时,你才有可能基于它的实现原理,再根据一些现象来排查问题原因。
掌握这些开源软件的最佳方式就是去学习它的源代码。很多同学跟我说:“我也很想去看一些开源软件的代码,也尝试去看过,但是面对上千个源码文件,几十万行代码,完全不知道从哪儿入手啊。”
这节课我们就针对这个情况来聊一聊,学习开源软件的代码该如何入手。
有一点我提前说明一下,对于这节课里面涉及到的一些名词,我会直接使用英文,主要目的是方便你直接对应到那些开源软件英文官网上的标题。

通过文档来了解开源项目

学习源代码应该从哪儿入手呢?最佳的方式就是先看它的文档。
通过看文档,你可以快速地掌握这个软件整体的结构,它有哪些功能特性,它涉及到的关键技术、实现原理和它的生态系统等等。在掌握了这些之后,你对它有个整体的了...

展开全文
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。

精选留言

  • 陈珙
    2019-08-12
    老师在后续课程是否可以再开放一些”程序员史诗般必读文章”给我们学习下
    
    49
  • 南山
    2019-08-11
    读源码的习惯是喜欢按照一条主线来看,经常会被一些细节绕晕。多谢老师指路。
    后续就按照:灵魂->官方文档->问题&答案找答案->核心类结构图+流程图->原理细节文字步骤说明->点成线->线成网->实际应用(可遇不可求)->官方文档->灵魂
    多写总结,多思考知识点之间多关联,多动手,一切都是水到渠成的事儿~~~

    作者回复: 👍👍👍

    
    18
  • linqw
    2019-08-10
    学习完这篇写下自己的理解,老师有空帮忙看下哦
    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
    展开

    作者回复: 👍👍👍

    1
    18
  • hhhh
    2019-08-10
    这篇文章,解决我很大的疑惑啊!自己看代码就是先找main,真尴尬。。
    2
    12
  • 纯齐
    2019-08-12
    请教下,有什么好办法找出开源项目的“灵魂”?

    作者回复: 建议去从文档中找。

    如果这个项目是基于某个Paper的,一般文档中的显著位置都会标注。

    
    10
  • 钱
    2019-08-21
    这节直指痛点,之前阅读源码就是这样半途而废的。
    再启程,参考老师的建议
    1:先整体,再局部
    2:先英文,再中文
    3:先灵魂,再原理
    4:先文档,再源码
    5:阅读前先思考,带上问题和答案去验证,阅读完了,记得总结——流程图、时序图、文字描述
    6:我觉得还需要加上些基础,比如:数据结构、操作系统原理、计算机网络原理、设计模式等
    7:最重要的在于坚持,遇到困难还能继续前进
    展开
    
    7
  • innocent
    2019-08-10
    您好,请问一下作为一个对Scala不是非常熟悉的Java程序员如何阅读Kafka的源码。

    作者回复: 花点儿时间学一下基础语法,特别是lambda,至少读懂源码就没什么问题了。

    1
    5
  • Switch
    2019-10-13
    分析的RocketMQ Producer的发送流程。
    https://blog.csdn.net/q547550831/article/details/102483994
    
    3
  • 秦跃
    2019-08-19
    请问您提的问题对的入口如何快速定位?有时在main
    
    3
  • 编程界的小学生
    2020-07-07
    带着问题和答案读源码的确是最有效,收获最快的一种阅读源码方式,那么问题来源于哪?可以来源于你开发中真实遇到的问题也可以去网上搜面试题,网上答案几乎都给你原理,你知道这个问题的原理后,带着她去看源码,香。
    
    2
  • 虫子💯
    2020-06-15
    老师好,我直接去kafka官网找这篇灵魂了,找了两天还是没找到,虽然谷歌搜标题很快,但还是觉得我这样不是真正会找。
    
    1
  • xfan
    2019-10-30
    我照着例子试了一下,有一个问题
    为什么kafka的不同的topic 的Leader可以不一样,这个Leader等同于分布式系统中的master节点吗

    作者回复: 你可以理解master和leader的含义是一样的。

    对于“为什么kafka的不同的topic 的Leader可以不一样”这个问题,我在《22 | Kafka和RocketMQ的消息复制实现的差异点在哪?》这节课中有专门讲到,你可以参考一下。

    
    1
  • 静水流深
    2019-10-30
    葵花宝典到手!
    
    1
  • xiaomao
    2019-08-15
    开源项目的学习方法,科学家出论文=>大牛实现。先看论文,再看代码。看代码就有了目标,就可以带着论文中解决的问题去找解决之道。先有谷歌大数据的三驾马车,后有大数据生态
    
    1
  • paradox
    2019-08-10
    带着问题看源码类似于监督学习,不带问题看源码类似于非监督学习,两者各有场景。碰到问题查源码是前者,没碰到问题想总结用后者。
    
    1
  • Geek_926921
    2021-08-01
    自己在阅读源码时大多数是想了解某个方法的具体功能是怎么实现的,还有就是项目中可能不满足这个开源的功能,想自己自定义某一块的功能,这个时候也需要去查看对应的源码,然后进行修改,打包成自己项目独有的一个定制化功能。
    
    
  • 非洲黑猴子
    2021-06-04
    源码版本经常改怎么办?今天读完明天就变了... 谢谢
    
    
  • 芋头
    2021-03-26
    总结一下:1.官方文档2寻找项目核心paper3带着问题和答案去读源码,因为源码是一种网状结构,掌握算法及相关流程
    
    
  • 拉布拉多
    2021-03-11
    这篇文章,解决我很大的疑惑啊!自己看代码就是先找main,真尴尬。。然后我每次都坚持不了多久
    
    
  • fightFoyU
    2021-02-07
    老师你好,我习惯都是先看官方文档,了解其核心理念,也就是所谓的关键词,然后看官方demo,跟踪main方法的调用。对于某些执行流程,可以通过打断点的方式,可以获取堆栈信息,从而了解它的执行流程。有些开源库也用到了第三方库,像netty,广泛用于各大开源软件,阅读源码的时候可能对其依赖的三方库也有一定的了解。一个开源项目就像是搭积木的过程,我们需要知道各个不同的积木是如何联系在一起完成整个功能的。
    
    