阅读Java_如何阅读 Java 开源代码?

最近正在学习阅读源码,看到的大神许鹏的方法,感觉很有用,分享给大家

源码阅读其实是一个逆向的工程,这期间必须会遇到种种问题。一般来说,我会遵循这样一个思维范式——Problem domain→model→architecture&implementation→improvement→best practice。

1.首先搞清楚要分析的产品解决的问题是什么,这个问题在哪个大的范畴里,也就是要搞清楚problem domain。一个著名的开源产品必定在Wikipedia上有相应的条目,所以一开始去看wikipedia是破题的一种极好方式。

2.清楚要分析产品的大体框架和关键性的概念,也就是理解清楚architecture和key concept。

3.将分析的产品实实在在的运行起来,我一般选择debian或archlinux作为工作平台,它们提供了丰富的软件包,可以很快的将东西安装并运行。熟悉Linux本身对于开源项目的源码阅读还是大有裨益的。

4.修改日志级别,得到丰富的日志信息。有了这个为基础,再来开始真正的源码阅读和分析。

5.源码分析的时候,要始终问这几个问题。进程以及线程的启动顺序

搞清楚调用关系call flow这一部分代码是在同一个进程中么,同一个线程中么,运行在同一台机器中么

每一个线程都要问清楚,什么时候启动的,什么时候停止的

消息传递的路径,针对每一个函数,搞清楚,input是谁传给我的,output要传给谁,由哪个来传

搞清楚上述的问题之后,就将最开始提到的对architecture的了解做到具体而微了。有了这个基础之后,再继续往下问当前实现的性能如何,比如i/o, cpu, network 这个需要做相应的测试方面的试验

当前的解决方案还有优化空间吗,比如针对spark中的scheduling问题,就有sparrow的优化机制提出

6. 碰到具体的问题一时解决不了怎么办用好google,用好stackoverflow

将碰到的问题模型化,写一些验证性的代码,或者是写一个小的demo来验证,我在解决许多很妖的bug,也是采用类似的思路

找到相应的用户论坛,发帖虚心请教

如果还是不行,就先搁一搁,去看能看懂的地方

7. 编程语言选择源码阅读中可能遇到的一个问题就是这个语言是新近出来的,我根本没学过,我需要系统去掌握该语言之后,才能来看源码么。我的看法是可以边看边学,在掌握语言的过程中,牢牢把握住这几个问题基本语法:数据类型、控制语句、函数定义

是否支持FP

多态和继承

现代编程语言基本上都混合了面向过程,面向对象和函数式编程的特点,即便是C++或新近的java8都如此。

Storm用Clojure来编写,而Spark使用Scala,就语言的偏好来说,我更喜欢Clojure一些。

稍微总结一下,我想源码分析心中要有两幅大图,将整体与局部很好的结合起来思考一是太极图,要有整体性的思维,要对architecture有掌握,对其在整个生态系统中的定位要清楚,东方式的思维强调整体性

二是数学中常见的笛卡尔坐标体系,将大的问题拆分之后一一研究,做到具体而微,西方式的思维强调个性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值