再谈源码阅读

栏目: Java · 发布时间: 5年前

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

再谈源码阅读

再谈源码阅读

在软件开发中遇到问题的时候,我倾向于在不需要阅读源码的情况下解决问题,我会优先去查官方文档、FAQ、google或stackoverflow等网站,去看下有没有前人已经遇到过同类问题。阅读源码来解决问题,算是终极大招。当然,还有另一种需求,就是希望通过阅读源码了解软件的设计细节,来达到学习的目的,例如,通过阅读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. 最好能在阅读的过程中输出一些笔记或文档,例如模块划分图、函数的流程图、针对某个业务场景,在几个模块之间的时序图等等,这些文档可以先手写,然后再形成电子版存档。

上述就是我自己针对源码阅读的一些经验,如果你有好的经验或想法,欢迎在留言区与我交流 ,如果觉得有所收获,麻烦点个好看。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Flexible Rails

Flexible Rails

Peter Armstrong / Manning Publications / 2008-01-23 / USD 44.99

Rails is a fantastic tool for web application development, but its Ajax-driven interfaces stop short of the richness you gain with a tool like Adobe Flex. Simply put, Flex is the most productive way t......一起来看看 《Flexible Rails》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具