源码阅读技巧

内容参考极客时间从零开始学架构,在看了华仔的那篇文章后,总结了一些东西,主要从几个方面来提炼下:
1. 提取文章观点
2. 写一点自己的思考

文章内容

拒绝拿来主义

一些错误的观点

  • 只有参与开源项目开发的人才能真正理解
  • 我的项目没有使用Redis,不用的话很难深入理解
  • 数据结构和算法很重要,我只需要研究数据结构和算法就够了
  • 逐行阅读源码

观点一:不管什么身份,都可以从开源项目中学到更多

  • 例如学习Redis的网络模型,不一定要成为Redis开发,只需要具备一定的网络基础,再阅读Redis源码,就可以学习到Redis单进程的Reactor模型

观点二:数据结构和算法在开源项目中不是特别重要

观点三:采取自顶向下的学习方法,源码应该是最后一步

  • 掌握基本的功能,原理,关键设计之后再去看源码
  • 看源码的目的是为了学习代码的写作方式,以及关键技术的实现

举例:Redis的RDB持久化模式是怎么保存内存快照的,在Linux中是fork一下子进程

自顶向下学习

  • 安装
    • 安装查看依赖,猜想假设
    • 例如Redis只有一个bin目录,那么要去猜想一些问题
      • Redis没有conf是怎么配置的
      • Redis日志怎么保存
    • 查看系统提供的工具
  • 运行
    • 系统具备哪些能力
    • 系统会如何运行
    • 尝试去了解熟悉命令行工具,例如参数配置项作用和原理,去试错
  • 原理研究
    • 如何才算是系统性呢?
      • 关键特性的基本实现原理(这个项目的高性能是如何做到的)
      • 例如Memcache是如何实现的?
        • Libevent
      • 要去掌握memcache的网络模型,需要
        • 多路复用
        • Linux Epoll
        • Reactor模型
        • 多线程
    • 优缺点对比
  • 原理研究的手段
    • 通读项目的设计文档:例如Kafka的设计文档
    • 阅读网上已有的分析文档(尽可能多阅读几篇)
    • DEMO验证:通过写DEMO去进行验证
  • 测试
    • 基于一些案例做测试
    • 去试错,调整参数
  • 源码研究
    • 源码研究的目的是学习原理背后的具体编码实现,通过学习技巧来提升我们的技术能力
    • 不要阅读全部的源码

思考实战

最近在做一个发送邮件的功能,本来打算自己写一个工具类,看了一个开源项目,比较满足自己的需求,就看了文档,去使用了,项目代码量不大,就去看了下代码,到此总结一下。

首先是看了文档,知道怎么使用

下载了源码,去跑了一些Test,有了一个直观的感受

了解一些关键的类,从两方面来看
1. 工具本身封装的一些类,例如涉及Excel的一些类,如Workbook,Sheet,Row等
2. 工具自己的一些关键类

因为本身项目代码比较少,我也了解Excel的一些类,以及自己最初想做的思路就是Annotation来做,看了项目之后感觉主体思路还是比较接近的,看起来也比较容易,主要是以下步骤:

  • clone源码
  • 使用Test,Debug跟着进去,找到核心的方法以及自己想去学习的一些方法:
    • 例如怎么处理Annotation的
    • 对于Class的处理,使用反射还是自省
    • 主要流程是什么
  • 然后自己去写了Test去熟悉
  • 前提是这个项目代码量不太大…

总结

本篇文章主要就是想发下华仔的文章,自己以前学习大型项目的源码其实很少坚持下来,代码真是太多了,例如Dubbo,ES,Netty,Spring等一些项目的代码即使是开发者也不一定能全部掌握,所以也有一些经验总结,就是并不要求全,先去看文档,然后去用,最后再去看代码,看代码不要看全部,而是重点关注几点:
1. 编程手法
2. 异常处理
3. 核心功能实现
在学习的过程中一定要思维活跃:
1. 去猜
2. 去试错
3. 去写QuickStart

  • 分享一篇知乎文章: 源码阅读技巧

你可能感兴趣的:(源码阅读技巧)