在编程的道路上,通过阅读优秀的代码来提升自己是很好的办法。一直想阅读一些开源项目,可是没有合适的机会开始。最近做项目的时候用到了shiro,需要做集群的session共享,经过查找发现tomcat的session本身就支持,发现自己对于使用了这么久的东西还是不甚了解,所以就乘此机会来学习学习。
阅读源码已经两周了,之所以没有边读边总结是觉得一开始难以总揽全局,可能会以偏概全,所以在对整体上有所把握之后,来记录一下自己的所学.

方法

其实这些方法是阅读之前就有个雏形,然后参考了别人阅读源码的方式(其实在做一件事之前搞清楚方法总是事半功倍的),再加上自己实践中的心得总结出来的。

  1. 准备源码,IDE,写一个最简单的例子,使程序正常运行
  2. 最好准备一些问题,读源码的基础一定是自己使用已经很多了,在使用过程中积累的一些问题可以总结记录下来,在读源码的时候一一解决。
  3. 第一步不要在意细节,先理清主干。把程序运行起来,逐步调试,画出程序运行的时序图。注意:
    • 不要每一个函数都逐步调试进入,对于不重要的先画在时序图里面,简单记录(猜测)功能
    • 遇到新的线程先不去仔细查看,先记录,继续
  4. 经过上面已经明白了整体脉络,接下来就查看自己上面遗留了那些问题,针对每一个问题(分支)再仔细阅读
  5. 根据第二步理出来的问题逐一解答,再次有针对性的阅读
  6. 这个时候对于源码已经了解比较深入了,可以考虑学习一些设计模式,关键数据结构,关键算法,优秀的思想,一些关键类,关键方法

工具

不同语言、不同目的阅读源码的方法、工具也不尽相同,对于java我是用了以下工具,特别是断点调试,对于跟踪程序执行顺序有很大帮助,还有UML工具astah——通过绘制时序图等很容易理清源码思路。还有就是有问题或者想法要及时记录,显然haroopad是一款不错的markdown工具。

  • IDE为eclipse
  • 使用astah绘制时序图
  • haroopad记录markdown笔记

本次阅读

我阅读的tomcat源码版本是7.0.69,参考的是《深入剖析tomcat》,书中tomcat的版本是4、5,已经比较老了,有些东西已经变了,不过并不影响对于某些原理的理解和整体的把握。

How Tomcat works — 一、怎样阅读源码的更多相关文章

  1. 从SpringBoot启动,阅读源码设计

    目录 一.背景说明 二.SpringBoot工程 三.应用上下文 四.资源加载 五.应用环境 六.Bean对象 七.Tomcat服务 八.事件模型 九.配置加载 十.数据库集成 十一.参考源码 服务启 ...

  2. 【转】使用 vim + ctags + cscope + taglist 阅读源码

    原文网址:http://my.oschina.net/u/554995/blog/59927 最近,准备跟学长一起往 linux kernel 的门里瞧瞧里面的世界,虽然我们知道门就在那,但我们还得找 ...

  3. Spring源码解析——如何阅读源码(转)

    最近没什么实质性的工作,正好有点时间,就想学学别人的代码.也看过一点源码,算是有了点阅读的经验,于是下定决心看下spring这种大型的项目的源码,学学它的设计思想. 手码不易,转载请注明:xingoo ...

  4. Spring源码解析——如何阅读源码

    最近没什么实质性的工作,正好有点时间,就想学学别人的代码.也看过一点源码,算是有了点阅读的经验,于是下定决心看下spring这种大型的项目的源码,学学它的设计思想. 手码不易,转载请注明:xingoo ...

  5. 阅读源码(III)

    往期系列: <由阅读源码想到> <由阅读源码想到 | 下篇> Medium上有一篇文章Why You Don't Deserve That Dream Developer Jo ...

  6. 阅读源码(IV)

    往期系列: <由阅读源码想到> <由阅读源码想到 | 下篇> <阅读源码(III)> Eric S.Raymond的写于2014年的<How to learn ...

  7. 使用 vim + ctags + cscope + taglist 阅读源码

    转自:http://my.oschina.net/u/554995/blog/59927 最近,准备跟学长一起往 linux kernel 的门里瞧瞧里面的世界,虽然我们知道门就在那,但我们还得找到合 ...

  8. 转载~Linux 平台下阅读源码的工具

    Linux 平台下阅读源码的工具 前言 看源代码是一个程序员必须经历的事情,也是可以提升能力的一个捷径.个人认为: 要完全掌握一个软件的方法只有阅读源码在Windows下有sourceinsight这 ...

  9. Linux 平台下阅读源码的工具链

    原文:http://blog.jobbole.com/101322/ 前言 看源代码是一个程序员必须经历的事情,也是可以提升能力的一个捷径.个人认为: 要完全掌握一个软件的方法只有阅读源码. 在Win ...

随机推荐

  1. Ubuntu安装pyenv实现python多版本控制

    Ubuntu安装pyenv实现python多版本控制 git clone git://github.com/yyuu/pyenv.git ~/.pyenv echo 'export PYENV_ROO ...

  2. h5上传视频文件

    从一开始我就掉坑里了,<input type="file" style="display: block;" id="img-upload&quo ...

  3. Monitor类:Object synchronization method was called from an unsynchronized block of code.

    最近,在维护以前老系统的时候,发现了这样一个错误:Object synchronization method was called from an unsynchronized block of co ...

  4. js获取复选框值

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. 简易webpack 入门

    webpack 模块打包机 作用:将浏览器不识别的语言转化成浏览器识别的语言 工作流程 通过一个入口文件 找到这个入口文件所依赖的所有模块,将这些文件打包成一个或多个文件 如何使用: 1.安装 cnp ...

  6. 2.SpringMVC注解开发

    1.创建SpringMVC项目 配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-a ...

  7. MySQL--Insert Buffer

    在进行数据插入时,需要将数据插入到聚集索引和非聚集索引中,而对于非聚集索引,需要先确定数据要插入的索引页,再将索引页加载到内存中进行修改,而在业务上很难保证插入数据在非聚集索引上也是连续的,因此插入操 ...

  8. C++内存读写例子

    /************************************************************* // 声明头文件 #ifndef LyShark__h #define L ...

  9. 每天学点SpringCloud(四):Feign的使用及自定义配置

    Feign:SpringCloud的官网对它的定义是这样的: 是一个声明式的Web服务客户端.它支持Feign本身的注解.JAX-RS注解以及SpringMVC的注解.Spring Cloud集成Ri ...

  10. .net core 发布linux报错“The configured user limit (128) on the number of inotify instances has been reached”

    https://stackoverflow.com/questions/45875981/error-while-reading-json-file-in-dotnet-core-the-config ...