改之师兄:源码阅读 最佳实践

2023-11-05 03:48

本文主要是介绍改之师兄:源码阅读 最佳实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 原则

原则1:了解使用

仔细查看使用文档和说明,写较为详细的 demo 程序。

原则2:了解全局

了解该产品解决了哪些问题,并了解其周边产品及优缺点。

原则3:了解原理

查看其内部架构文档,如果有了周边产品的了解,可以从周边产品推算出其实现基本原理。不过当对其它产品了解比较深刻的时候,这个原则很容易就可以达到了。

2. 方式

单步 Debug

单步 Debug 是比直接阅读源码来得更加直观快速的方式,通过单步 Debug 的主要目的是了解整个源码的大概逻辑和流程。

  • 针对应用程序(Tomcat、Hadoop):找启动脚本 -> 找到 main 入口 -> 开始 Debug
  • 库、框架(FastJSON、Spring):找到关键类 -> 打断点 -> 查看堆栈

「无法 Debug?」

很多时候我们拿到的都是「无法运行」的代码,比如说构建起来很麻烦的源码、只有一个 lib 包。在这个时候只能采取一些其它手段了。

  • 在我看来,最有效的方式还是 Debug。如果遇到了比较难构建的源码,那么暂时放弃构建它的想法,可以直接新建一个工程并添加其 Jar 包依赖,写测试代码的方式进行 Debug。至于测试代码,可以从源码的官方文档、或者它的测试用例中找到;

  • 如果以上也是比较麻烦的话,那就直接强行裸看代码吧,不过裸看代码也有一些简便的方法让你更好的裸看代码,比如接下来的。

梳理整个工程的类依赖关系图

以 Intellij IDEA 的为例:

  • 右键 Java 类
  • 点击 Diagrams
  • 点击 Show Diagrams

查找方法调用关系

以 Intellij IDEA 的 Mac OS X 的快捷键为例:

  • Alt + F7 (Find Usage)
  • Ctrl + Alt + H (Call Hierarchy)

搜索关键字

这个一般在无头绪的时候才会使用的。比如出现了框架内部的错误,里面包含了特殊关键字,如错误日志或者没有堆栈的方法。

这个在 Intellij IDEA 中比较好用,可以包含依赖的三方库进行全文搜索。快捷键:

  • Ctrl + Shift + F (Find in path)

搜索三方库需要选择 Custom -> Project and Libraries

如果是 Eclipse 的话,似乎只能是大概知道是哪个 Jar 包之后,解压 source 包再全文搜索吧 = =

3. 其他

我好像就上面几个方法,看任何源码(Hadoop、Spring、Netty、公司内部的)都能够很快上手。如果想到啥或者有啥比较典型的实例的话,再补充吧。


转自:http://yihongwei.com/2015/09/java-source-code-practice/

这篇关于改之师兄:源码阅读 最佳实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/347205

相关文章

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再