再谈源码阅读

source code

在软件开发中遇到问题的时候,我倾向于在不须要阅读源码的状况下解决问题,我会优先去查官方文档、FAQ、google或stackoverflow等网站,去看下有没有前人已经遇到过同类问题。阅读源码来解决问题,算是杀手锏。固然,还有另外一种需求,就是但愿经过阅读源码了解软件的设计细节,来达到学习的目的,例如,经过阅读Dubbo的源码,我能够了解一个RPC框架的设计细节。java

前提

阅读源码以前要作必定的准备工做。面试

首先,确保本身掌握了相关的基础知识,例如,若是你要阅读Linux内核源码,要掌握C语言的语法、操做系统的基本概念和原理,若是你要阅读Spring的源码,要掌握Java语言基础、Maven的使用、一些设计模式等等;算法

第二,要学会使用这个软件或框架,了解这个软件或框架的使用场景,有什么功能,同类竞品有哪些,在学习使用软件或框架的过程当中,最重要的参考资料是官方文档,一款优质的软件或框架,官方文档通常包括三块:快速开始,即一些demo;参考文档,最详细的文档,包括概念、特性的解读;FAQ:对于使用者来讲常见的问题的解答;后端

第三,初步了解代码的总体组织结构,每一个文件夹是作什么用的。设计模式

调试环境

调试环境很是重要,有了调试环境,就能够根据须要进行断点,对阅读源码很是有帮助。至于说如何搭建调试环境,不一样的状况有不一样的处理办法,例如MAT的源码,我是先将它的核心逻辑剥离出来,而后本身用单元测试进行调试;对于Dubbo源码,我则是写了一个Dubbo服务提供者、一个Dubbo服务消费者,以及安装了ZK以后才搭建起来的;对于Spring最简单了,利用Spring Boot启动一个hello word的demo就能够。框架

场景阅读

在作完上述准备工做后,我会按照使用功能或场景来阅读源码,例如,在阅读MAT(内存分析工具)的源码的时候,我是按照如下几个步骤来阅读:文件解析、索引建立、类直方图查询、支配树查询、线程视图查询等等;在阅读Spring源码的时候,我会按照Spring容器的启动、IoC的工做过程、AOP的工做过程、静态属性的引入等功能来阅读;在阅读Dubbo源码的时候,我会按照服务发布、服务订阅、服务调用三个主要场景进行源码阅读。按照功能或场景阅读,可让咱们从总体上对代码有所理解,而后就能够进入本身关注的一些细节了,例如:在MAT中,索引文件是如何建立的,在Dubbo中,请求的超时机制和心跳机制是如何实现的。函数

总结

阅读源码的过程当中,我总结出了一些须要注意的点:工具

  1. 自顶向下阅读,先把握总体的、大的流程,而后再根据须要切入到对应的分支
  2. 忽略一些细节,例如参数的检查、错误的处理、数据形式的转换和存储
  3. 尽可能准备好调试环境
  4. 要关注核心的业务逻辑或算法
  5. 最好能在阅读的过程当中输出一些笔记或文档,例如模块划分图、函数的流程图、针对某个业务场景,在几个模块之间的时序图等等,这些文档能够先手写,而后再造成电子版存档。

上述就是我本身针对源码阅读的一些经验,若是你有好的经验或想法,欢迎在留言区与我交流单元测试


本号专一于后端技术、JVM问题排查和优化、Java面试题、我的成长和自我管理等主题,为读者提供一线开发者的工做和成长经验,期待你能在这里有所收获。学习

javaadu
相关文章
相关标签/搜索