源码分析体会

Posted 爱户外的程序猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了源码分析体会相关的知识,希望对你有一定的参考价值。

为什么要读源码

直接目标——学习框架

  1. 浅层知识细节太多,极其容易遗忘。如果一想起某个框架,你只记得一些琐碎的使用细节,那么连“如何使用这个框架”这个技能本身,也终究是会失去的。

  2. 如果框架对你都是黑盒,那么你就不敢用

  3. 熟悉源码,是对一些“微言大义”的佐证。每个框架 在其官网都有一句/段的概括,若是不熟悉整个上下文,这段精炼的概括是很难读出感觉的。此外,直接附着在源码上的注释,通常也很精炼,文档上很难看到。

  4. 世界很奇怪,打败微信的不会是另一个微信;光靠写代码,也不会提高写代码的水平。只有输出没有输入是不行的,要不断的学习优秀源码的实现。

深层知识/感觉才是有价值的

只有深层知识才可以通用,通用很重要

  1. 通用是必要的,对于java来说,如果只会spring + mybatis等入门框架,那么留给你的就是一些简单的后台系统(业务级的系统),你永远无法去做部门级、公司级、apache级的项目。

  2. 通用是有很大好处的,你学习一个新的东西会越来越快。如果你曾经精研过netty的io 原理,那么当你碰到kafka 的io 部分时,可以一笔跳过。

东西都是共通的, 当你把分层、异步、反应式这些基础的东西 理解透彻后,分析一个框架的源码就是一两天的事情。虽然短时间内增大了学习负担,但一旦理解透彻,疑惑不在脑中徘徊,长期来说省去了纠结、疑虑和google的时间。源码的学习 可以反哺源码学习的能力,从程序员的职业生涯来讲,成长来自解决足够复杂的事情,这需要你有足够高的学习和工作效率,决不能将工作产出绑死在工作时间上,学习源码是提高专业工作效率的重要部分。

如果不深挖一下,一个java开发很少有机会认识到学习linux 有多么必要。

分析方法

前期准备

  1. demo例子

  2. 如果条件允许的话,最好能熟练使用框架。使用的过程中最好积累一些疑问,以作为分析源码时的切入点,在分析过程中想办法解决这几个问题。

  3. 阅读官方文档,搜索一些博客,对其主要设计、理念心中有数

  4. 了解下框架涉及的一些底层技术,比如NIO等

  5. 程序=数据结构+算法,识别其数据部分(也就是输入输出是什么),猜测其核心逻辑(算法)

分析过程

  1. 多画图。相对文字而言,图的信息密度更高

  2. 类图。所有用面向对象思想实现的框架都可以画类图,类图反映了代码的组织。一个框架如果代码量很大的话,一定要解决一个事情,即代码和数据是如何分散在各个小单元的,类图通常反应了作者对框架所解决问题的逻辑抽象。

  3. 序列图。包括初始化流程,和主干流程。 对源码分析进行整理浓缩,跟踪主要路径,直到细化到你已经熟悉的知识。以java为例,一个序列图的尾部,通常是类似java/io 等已熟知的类。

  4. 重要的不是画这些图,而是以这些图为抓手,串一个下整个过程,分析的过程才是最重要的。找到感觉,积累成功的心理体验。

一些技巧

  1. 只分析主要功能的主要流程,忽略异常处理、特殊逻辑处理等。没错,80%的代码都没干“正经”事。有兴趣可以找源码0.0.1 版本的代码看下。

  2. 能有一段较长的、可以集中注意力的时间

  3. 世界很复杂,但基础的逻辑真的很有限。源码很复杂,但基础的原理真的很有限。

  4. 在你学习一定数量的框架之前,你收到的全是负反馈(因为有那么多不会的),但一旦越过瓶颈点,尤其是你学过一些很难的框架之后,再去看一些简单框架的源码,你就会有一种“藐视敌人的英雄气概”。无论做什么事情,成功过一次很重要。


扫码关注笔者微信订阅号,查看更多技术文章

以上是关于源码分析体会的主要内容,如果未能解决你的问题,请参考以下文章

鸿蒙内核源码分析:双向循环链表篇

集合对象-ArrayList实现原理源码分析

集合对象-ArrayList实现原理源码分析

集合对象-ArrayList实现原理源码分析

Spring Ioc 源码分析之Bean的加载和构造

深入浅出Mybatis系列---SQL执行流程分析(源码篇)(转)