在编程的道路上,通过阅读优秀的代码来提升自己是很好的办法。一直想阅读一些开源项目,可是没有合适的机会开始。最近做项目的时候用到了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. 使用spring代码中控制事务

    1.首先需要在代码中注入事务管理器 @Autowired private PlatformTransactionManager transactionManager; 2.代码中使用如下 public ...

  2. django安装及简单使用

    1 web应用2 cs和bs架构3 http协议----重点 -特点:1 2 3 4 -请求头: 请求首行 get / http/1.1\r\n key:value\r\n key:value\r\n ...

  3. 《NoSQL精粹》读后感

    <NoSQL精粹>作者Pramod J. Sadalaga.Martin Flower著,译者爱飞翔. 本书以关系型数据库开头,讲解了关系型数据库的优缺点,然后引入了NoSQL数据库,并且 ...

  4. post和get请求的参数乱码

    对于做Java WEB项目同学来说,中文乱码问题是一个经常遇到而又非常头痛的问题,而最容易出现乱码的环节就是在浏览器向服务器发送请求的过程,至于出现乱码的原因不是本文的关注的重点,想了解的朋友可以参考 ...

  5. gitlab 之 项目管理

    首先git是什么? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git的读音为/gɪt/. Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常 ...

  6. 网站模仿——LOFTER个人主页

    代码片段 码云链接:https://gitee.com/gulveig/codes/e7q95kub6clvxt2ydi84g83

  7. 【腾讯Bugly干货分享】WebSocket 浅析

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/7aXMdnajINt0C5dcJy2USg 前言 在W ...

  8. VSCode插件开发全攻略(九)常用API总结

    更多文章请戳VSCode插件开发全攻略系列目录导航. 本文提炼一些常见的API使用场景供参考,本文内容有待完善. 编辑器相关 修改当前激活编辑器内容 替换当前编辑器全部内容: vscode.windo ...

  9. MySQL 游标(PREPARE预处理语句)

    概述 本章节介绍使用游标来批量进行表操作,包括批量添加索引.批量添加字段等.如果对存储过程.变量定义.预处理还不是很熟悉先阅读我前面写过的关于这三个概念的文章,只有先了解了这三个概念才能更好的理解这篇 ...

  10. 使用Nginx+Uwsgi部署Python Flask项目

    第一次用Flask做Web(也是第一次用Python做Web),在部署的时候遇到了不少问题,现在将过程就下来,供在这方面也有疑惑的人参考.(PS:使用Apache+mod_wsgi部署模式的可以参考另 ...