欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

再谈源码阅读

程序员文章站 2024-02-01 18:14:04
在软件开发中遇到问题的时候,我倾向于在不需要阅读源码的情况下解决问题,我会优先去查官方文档、FAQ、google或*等网站,去看下有没有前人已经遇到过同类问题。阅读源码来解决问题,算是杀手锏。当然,还有另一种需求,就是希望通过阅读源码了解软件的设计细节,来达到学习的目的,例如 ......

再谈源码阅读

在软件开发中遇到问题的时候,我倾向于在不需要阅读源码的情况下解决问题,我会优先去查官方文档、faq、google或*等网站,去看下有没有前人已经遇到过同类问题。阅读源码来解决问题,算是杀手锏。当然,还有另一种需求,就是希望通过阅读源码了解软件的设计细节,来达到学习的目的,例如,通过阅读dubbo的源码,我可以了解一个rpc框架的设计细节。

前提

阅读源码之前要做一定的准备工作。

首先,确保自己掌握了相关的基础知识,例如,如果你要阅读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面试题、个人成长和自我管理等主题,为读者提供一线开发者的工作和成长经验,期待你能在这里有所收获。再谈源码阅读