Java 底层进阶学习总览(针对你的现状)
大二上,已学习 MiniSpring(IoC + DI + 生命周期),目标:中间件/底层工具方向
📍 你当前的位置
text
【已通关】
├─ Java 基础语法 ✅
├─ Spring Boot 三层架构 ✅
├─ 反射三板斧(创建/调用/改字段)✅
├─ 注解定义与读取 ✅
├─ 手写 MiniSpring(IoC + DI + @PostConstruct)✅
│
【下一站】→ 从这里开始
├─ 动态代理(AOP 底层)
├─ 类加载器(插件/热部署底层)
├─ JVM 内存与垃圾回收
├─ 并发编程
└─ 字节码操作(ASM/Javassist)
🗺️ 完整学习路线图(按优先级排序)
🔴 第一优先级:动态代理(1~2 周)
为什么先学它?
-
你刚学完 IoC,AOP 就是 IoC 的"孪生兄弟",趁热打铁
-
动态代理是 Spring AOP、MyBatis Mapper、RPC 框架的共同底层
-
学会它,你就能在你的 MiniSpring 上加上"方法拦截"功能
核心内容:
| 知识点 | 说明 |
|---|---|
JDK 动态代理 |
Proxy.newProxyInstance() + InvocationHandler |
CGLIB 代理 |
通过继承实现代理(Spring 默认用这个) |
Proxy vs CGLIB |
什么时候用哪个,面试必问 |
| 实战 | 手写一个 @MyLog 注解,用动态代理自动打印方法耗时 |
验收标准:能在 MiniSpring 里实现"方法执行前后自动打印日志"
🔴 第二优先级:类加载器 + 类加载机制(1 周)
为什么学它?
-
你想做"插件/热部署",这块是绕不过去的坎
-
理解 Tomcat 怎么隔离不同 Web 应用
-
理解 Java SPI 机制(Dubbo、JDBC 都用它)
核心内容:
| 知识点 | 说明 |
|---|---|
双亲委派模型 |
Bootstrap → Extension → Application ClassLoader |
自定义 ClassLoader |
重写 findClass(),打破双亲委派 |
Class.forName vs ClassLoader.loadClass |
区别和适用场景 |
| 实战 | 写一个"插件加载器",扫描文件夹下的 .class,动态加载并执行 |
验收标准:能写出一个简易的"插件热加载"Demo
🟡 第三优先级:JVM 内存与垃圾回收(2~3 周)
为什么学它?
-
你简历里写"对底层源码尚有不足",JVM 是最大的短板
-
面试必问,工作中调优必用
-
理解反射创建的对象的"生命周期"
核心内容:
| 知识点 | 说明 |
|---|---|
JVM 内存区域 |
堆、栈、方法区、程序计数器 |
对象创建过程 |
类加载检查 → 分配内存 → 初始化零值 → 设置对象头 → 执行 <init> |
垃圾回收算法 |
标记-清除、复制、标记-整理 |
垃圾收集器 |
CMS、G1、ZGC |
| 实战 | 用 jmap、jstack、jconsole 分析一个 OOM 程序 |
验收标准:能画出 JVM 内存结构图,能解释"为什么反射创建对象比 new 慢"
🟡 第四优先级:并发编程(3~4 周)
为什么学它?
-
中间件里到处是并发:线程池、锁、CAS、AQS
-
你简历里没提并发,但这是中级开发的硬门槛
核心内容:
| 知识点 | 说明 |
|---|---|
synchronized |
锁升级过程(偏向锁 → 轻量级锁 → 重量级锁) |
volatile |
可见性、禁止指令重排 |
CAS + AQS |
ReentrantLock、CountDownLatch 底层 |
线程池 |
ThreadPoolExecutor 七大参数、拒绝策略 |
并发容器 |
ConcurrentHashMap、CopyOnWriteArrayList |
| 实战 | 手写一个简易线程池 |
验收标准 :能手写一个简易线程池,能解释 ConcurrentHashMap 的锁分段
🟢 第五优先级:字节码操作(2~3 周)
为什么学它?
-
这是中间件/底层工具的天花板技能
-
Lombok、热补丁、APM 监控、字节码增强全靠它
-
学完它,你就能看懂 Skywalking、Arthas 的源码
核心内容:
| 知识点 | 说明 |
|---|---|
Javassist |
用 Java 字符串拼接的方式改字节码(入门首选) |
ASM |
基于指令集,性能最好但最难学 |
Java Agent |
premain / agentmain,无侵入增强 |
Instrumentation |
retransformClasses 热替换 |
| 实战 | 写一个"方法耗时统计 Agent",不修改源码,自动统计所有方法耗时 |
验收标准:能写一个简易的 Java Agent,实现"无侵入方法耗时统计"
📅 推荐时间安排(大二上 + 大二下)
| 学期 | 主攻方向 | 产出 |
|---|---|---|
| 大二上(现在) | 动态代理 + 类加载器 | 把 MiniSpring 升级成支持 AOP;写一个插件加载器 |
| 大二上寒假 | JVM 内存 + GC | 写一篇 JVM 学习笔记,做一个 OOM 分析 Demo |
| 大二下 | 并发编程 + 字节码 | 手写线程池;写一个 Java Agent |
| 大二下暑假 | 综合实战 | 做一个"基于 Java Agent 的无侵入监控工具" |
🎯 最终目标:你能做出什么?
学完上面这些,你将具备以下能力:
| 能力 | 对应项目 |
|---|---|
| 手写 IoC + AOP 容器 | 你的 MiniSpring 升级版 |
| 动态加载插件 | 一个简易的"插件化框架" |
| 无侵入监控 | 一个 Java Agent,自动统计方法耗时 |
| JVM 调优 | 能定位 OOM、CPU 飙高、死锁 |
| 并发编程 | 能写线程安全的工具类 |
这些能力,足够你在大三找一份"Java 后端开发"的实习,或者加入学校的实验室做底层方向的研究。
💡 给你的三个建议
-
不要贪多 :先花 2 周把动态代理吃透,再往下走。一个知识点吃透,比十个知识点浅尝辄止强一百倍。
-
每学一个知识点,就写一个 Demo :你今天写的 MiniSpring 就是最好的证明。代码量上去了,理解自然就深了。
-
不要焦虑进度 :你现在大二上,已经比 90% 的同龄人走得远了。慢即是快,扎实的底层功底,会在你大三找实习时爆发。