JAVA 开源代码学习方法

主要步骤:

  1. 看官方文档、使用手册、安装部署教程。先安装一个docker版进行基本功能学习。
  2. 了解基本业务架构与技术架构。
  3. 搭建开发环境,比如IDE、Nodejs、JDK、Maven、数据库等等。进行基础数据导入,启动工程。
  4. 工程启动后进行核心业务流程的测试,查看过程。比如发一个简单调用请求,通过Debug查看整个调用链。
  5. 查看以及程序启动了多少个进程或者线程,各个进程线程都是做什么用的。很多线程是程序启动的时候创建的...Executor.submit(()...,或者根据某个事件比如@EventListener(ApplicationReadyEvent.class)等需要重点关注,而且还可能再创建子线程来执行。
  6. 深入学习某个模块或深入学习未来准备修改的模块。
  7. 大型项目有几十万上百万行代码没必要每一行都看就算看了也不一定全部都懂,关注并且深入研究自己感兴趣或者想进行修改的部分其他模块大概了解做什么的怎么实现的就好。
  8. 很多开源项目没什么文档,除了基础软件比如JDK这类的注释比较详细,不细的话没法用。大部分开源库都没什么注释可能是因为好代码不需要注释,垃圾代码注释了也没用,尽量把代码写的比注释还容易懂才是王道。

一些调试技巧:

  1. 比如订阅发布模式,可以通过判断获是否获取到元素了,在获取到的位置断点。然后通过端点会看山下文相关信息。 idea的view可以查看原始字符串等的详细信息。
  2. 对于一些复杂逻辑招不到代码在哪里,不知道数据库中数据是通过什么流程进去的,可以找到数据库操作的入口,比如SQL语句,save等方法进行断点反推。根据执行的方法名类名进行查询推算出是在哪里进行创建线程或者线程池执行的。主要工程很多地方用到动态代理很难直接看出调用链,需要通过搜索加推测。

对于没有非常详细代码架构流程说明文档的代码,只能通过调试推算出各个模块功能与流程。当然对于简单的系统都是类似的你学会一个基本可以推算出所有类似系统。也就是学习一遍就可以打遍天下。

重点关注:
线程、进程启动入口、数据库入口、请求入口。还可以关注算法、设计模式等