Java 学习笔记,从集合框架到JVM 调优

70 篇文章系统整理 Java 核心知识。20 篇必问高频,每篇聚焦一个面试主题——配套源码解读、图解与生产最佳实践。

LEARNING PATH · 学习路径

VII 卷完整体系,一次吃透 Java 核心

HOW TO USE · 使用方法

建议按顺序阅读,每卷独立成体系

VII 卷由浅入深,从基础的集合框架源码逐步深入到分布式系统设计。每一篇都可以独立阅读,也可以顺次推进建立完整的知识图谱。

01

先看目录

根据薄弱环节选择想看的卷

02

单点突破

从「必问」标签的文章开始

03

深入源码

理解底层实现,不只是背答案

04

串联知识

把不同卷的知识点形成网络

05

实战输出

用自己的话复述给面试官听

「面试不是背诵答案——
而是真正理解每一个字背后的设计哲学。」

EXPAND · 逐卷展开

下面把 VII 个部分逐一摊开。每个标题旁就是你的面试战场,点击即可进入对应文章。

I

集合框架源码

—— 数据结构·源码·线程安全

HashMap 红黑树、ConcurrentHashMap CAS、ArrayList 扩容——从 JDK 源码级理解每一行代码的设计意图。面试必考,工作必用。

  1. 01HashMap 源码精讲:数组+链表+红黑树从 put() 方法一路追到 resize(),理解 hash 扰动、链表转红黑树的阈值 8、扩容时的 rehash 优化。面试率最高的集合类。高级必问
  2. 02HashMap 高频面试题全解:null key、遍历顺序、线程安全HashMap 为什么允许 null key?遍历顺序为什么不保证?多线程下 HashMap 会出什么问题?一次搞懂所有高频追问。中级必问
  3. 03HashMap vs Hashtable vs LinkedHashMap 横向对比三者都是 Map 实现,设计目标截然不同。从线程安全、有序性、性能三个维度做横向对比,面试追问利器。中级
  4. 04ConcurrentHashMap 演进:JDK7 分段锁 → JDK8 CAS+synchronized为什么抛弃分段锁?CAS 在哪里用?synchronized 锁的是哪个对象?size() 怎么保证准确?逐一拆解。高级必问
  5. 05ConcurrentHashMap 深度剖析:put 流程、size 统计与扩容完整跟踪一次 put 操作:hash 计算 → CAS 写入 → 链表/红黑树转换 → 扩容协助。面试中最有区分度的回答。深度
  6. 06ArrayList vs LinkedList:从源码看使用场景ArrayList 随机访问 O(1),LinkedList 中间插入 O(n)——用数据说话,打破「LinkedList 插入快」的常见误区。初级
  7. 07ArrayList 扩容机制与性能调优1.5 倍扩容公式、ensureCapacity 预分配、System.arraycopy 开销——写出高性能的集合操作代码。中级
  8. 08HashSet 与 TreeSet 底层原理:Map 的「马甲」HashSet 内部就是 HashMap,TreeSet 内部就是 TreeMap。理解委托模式,一个知识点覆盖两个类。中级
  9. 09Iterator 与 fail-fast:集合遍历的安全边界modCount 怎么检测并发修改?fail-fast 和 fail-safe 有什么区别?ConcurrentModificationException 的正确处理方式。中级
下一卷 · II · 并发编程
II

并发编程

—— 线程·锁·JMM·异步

线程池参数调优、AQS 锁框架、volatile 内存语义、CompletableFuture 编排——P6+ 面试重中之重,从原理到生产级实战。

  1. 10线程创建五种方式:Thread、Runnable、Callable、线程池、CompletableFuture不止继承 Thread 和实现 Runnable。Callable+Future、线程池提交、CompletableFuture.supplyAsync——生产级写法全在这。初级
  2. 11线程生命周期:6 种状态与 12 次转换NEW → RUNNABLE → BLOCKED → WAITING → TIMED_WAITING → TERMINATED,每一次转换对应什么 API?画出完整状态机。中级
  3. 12synchronized 锁升级:偏向锁 → 轻量级锁 → 重量级锁对象头 Mark Word 结构、锁标志位、Monitor 对象——JDK 6 之后 synchronized 不再是「重量级」的代名词。高级必问
  4. 13volatile 深入:可见性、有序性与 happens-beforevolatile 不保证原子性——i++ 为什么不安全?内存屏障怎么阻止指令重排?DCL 单例为什么要 volatile?高级必问
  5. 14CompletableFuture 异步编排:从回调地狱到流式组合thenApply、thenCompose、allOf、exceptionally——用 CompletableFuture 写出优雅的多任务编排代码。中级
  6. 15线程池 ThreadPoolExecutor:7 大参数与 4 种拒绝策略corePoolSize、maximumPoolSize、keepAliveTime、workQueue 类型选择——生产环境线程池参数怎么定?附带调优公式。高级必问
  7. 16AQS 框架与 ReentrantLock:独占锁、公平锁、ConditionAQS 的 state + CLH 队列是一切锁的基石。ReentrantLock 的 lock/unlock 全流程、公平 vs 非公平的实现差异,以及「锁竞争最后不还是 CAS 竞争吗」这个追问的答案。深度
  8. 17读写锁 ReentrantReadWriteLock 与 StampedLock读多写少场景的利器。ReadWriteLock 的锁降级、StampedLock 的乐观读——什么时候用哪种?高级
  9. 18ThreadLocal 原理与内存泄漏:弱引用的坑ThreadLocal 的 Entry 为什么用弱引用?内存泄漏在什么场景发生?remove() 为什么必须调用?TransmittableThreadLocal 解决了什么?高级必问
  10. 19并发工具全解:CountDownLatch、CyclicBarrier、Semaphore、Phaser四大并发工具的使用场景、底层实现与区别。CountDownLatch 是一次性的,CyclicBarrier 可复用——面试题总爱在这里挖坑。中级
  11. 20JMM 内存模型:happens-before 八条规则全解主内存与工作内存、8 条 happens-before 规则、内存屏障 LoadLoad/StoreStore——理解 JMM 才能真正理解并发。深度
  12. 21CAS 与原子操作:AtomicInteger 到 LongAdderCAS 的 ABA 问题怎么解决?AtomicStampedReference 原理。LongAdder 为什么比 AtomicLong 快 10 倍?分段思想的又一次胜利。高级
  13. 22线程安全设计模式:不可变对象、Thread-safe Singleton、生产者-消费者5 种单例写法(含 DCL 和枚举)、不可变对象的设计、BlockingQueue 实现生产者-消费者——并发编程的最佳实践。中级
  14. 23Fork/Join 框架与并行 Stream分治思想的并行实现。work-stealing 算法、RecursiveTask 使用、parallelStream 的线程安全陷阱。中级
下一卷 · III · JVM 原理与调优
III

JVM 原理与调优

—— 内存·GC·类加载·故障排查

堆内存分代、G1/ZGC 对比、类加载双亲委派、CPU 100% 排查——深入 JVM 内核,掌握线上问题定位与性能调优。

  1. 24JVM 堆内存:年轻代三区与老年代的生命周期Eden + Survivor0 + Survivor1 + Old Gen,对象在哪里出生、在哪里晋升、什么时候进入老年代——GC 调优的基础。中级必问
  2. 25对象创建全过程:类加载检查 → TLAB → 内存分配 → 初始化new 一个对象,JVM 内部发生了什么?指针碰撞 vs 空闲列表、TLAB 分配、对象头布局——从字节码到内存的完整链路。高级
  3. 26对象存活判定:引用计数 vs 可达性分析Python 用引用计数,Java 用可达性分析——为什么?循环引用怎么处理?finalize() 该不该用?中级
  4. 27GC Roots 详解:哪些对象不会被回收?栈帧引用、静态变量、常量引用、JNI 引用、同步锁、JVM 内部引用——6 类 GC Roots 逐一解析,外加 6 大内存泄漏模式与 MAT 定位法。中级必问
  5. 28GC 日志分析实战:读懂每一行 GC 输出GC 日志里的 Young GC、Full GC、Mixed GC 怎么看?pause 时间、heap 变化、GC cause——用真实日志手把手分析。高级
  6. 29JVM 调优参数手册:30 个最常用参数速查-Xms、-Xmx、-Xmn、-XX:MetaspaceSize、-XX:+UseG1GC 等 30 个核心参数,每个附带推荐值和使用场景。中级
  7. 30内存泄漏排查:Heap Dump + MAT + VisualVM 实战从 jmap 导出堆转储到 MAT 分析大对象,完整排查一次内存泄漏。ThreadLocal 泄漏、连接池泄漏、缓存泄漏——三大典型场景。高级
  8. 31CPU 100% 排查:top → jstack → 代码定位五步法线上 CPU 飙高怎么办?top 找进程 → top -Hp 找线程 → jstack 抓栈 → printf 转 16 进制 → 定位代码行。完整 SOP。高级
  9. 32类加载机制:双亲委派模型与三种破坏场景Bootstrap → Extension → Application 三层委派。SPI 机制(JDBC/SLF4J)如何打破双亲委派?Tomcat 的类加载隔离怎么做?高级必问
  10. 33自定义类加载器:热部署与模块化隔离loadClass vs findClass 的区别。自定义类加载器实现热部署、OSGi 的模块化隔离——框架开发者必备技能。高级
  11. 34JVM 运行时数据区全景:堆、栈、方法区、程序计数器6 大运行时区域各自的职责、线程共享性、溢出场景。方法区 → 元空间的演进历史。StackOverflowError vs OutOfMemoryError。中级必问
  12. 35垃圾收集器全览:Serial → Parallel → CMS → G1 → ZGC五代收集器的设计目标与取舍。CMS 的并发标记问题、G1 的 Region 化、ZGC 的染色指针——面试中最有深度的回答。深度
  13. 36JIT 编译优化:逃逸分析与标量替换分层编译 5 级 + 去优化:逃逸分析如何让对象「不出方法」?标量替换把对象拆成基本类型、「栈上分配」的真相——JVM 性能调优的底层抓手。深度
  14. 37OOM 排查实战:六种 OutOfMemoryError 全解Java heap space、Metaspace、Direct buffer、Unable to create new native thread、GC overhead limit——每种 OOM 的根因与解法。高级
下一卷 · IV · Java 高级特性
IV

Java 高级特性

—— 函数式·泛型·反射·设计模式

Lambda 底层实现、泛型擦除与桥方法、注解处理器、23 种设计模式——超越 CRUD,写出框架级代码。

  1. 38Lambda 底层实现:invokedynamic 与函数式接口Lambda 编译后不是匿名内部类!invokedynamic + LambdaMetafactory 的工作原理。Predicate、Function、Consumer、Supplier 四大核心接口。中级
  2. 39Stream API 深度使用:map、flatMap、reduce、Collector惰性求值、短路操作、自定义 Collector、groupingBy + downstream——把 Stream 用到极致。中级
  3. 40泛型深入:擦除机制、通配符 PECS 与桥方法List<String> 和 List<Integer> 运行时是同一个类?extends vs super 怎么选?编译器生成的桥方法长什么样?高级
  4. 41try-with-resources 底层原理:编译器做了什么?AutoCloseable 接口、编译器自动生成的 finally 块、异常抑制(suppressed)——TWR 比 try-finally 好在哪里。中级
  5. 42异常处理最佳实践:自定义异常与全局处理什么时候自定义异常?异常链怎么传递?Spring 的 @ExceptionHandler 全局异常处理设计。中级
  6. 43受检 vs 非受检异常:设计哲学与选型为什么 Spring 全面拥抱 RuntimeException?受检异常的优点和缺点?新项目该怎么选?中级
  7. 44接口进化:默认方法、静态方法与私有方法Java 8 给接口加了默认方法(解决多继承冲突)、Java 9 加了私有方法——接口的演进方向。初级
  8. 45注解体系:元注解、自定义注解与运行时处理@Retention、@Target、@Repeatable 等元注解。如何自定义注解并通过反射在运行时处理?Spring 的注解驱动是怎么实现的?中级
  9. 46反射原理:性能开销分析与 Spring IoC 中的应用反射为什么慢?Method.setAccessible(true) 做了什么?Spring 怎么用反射实现依赖注入?如何优化反射性能?高级
  10. 47面试必会设计模式:单例、工厂、策略、观察者、模板方法5 种最高频面试设计模式,每种给出 JDK/Spring 中的真实应用案例。不是纸上谈兵,是面试官想听到的回答。中级必问
  11. 48IO 模型:BIO、NIO 与 Reactor 模式阻塞 vs 非阻塞、同步 vs 异步。NIO 的 Channel/Buffer/Selector 三件套。Reactor 模式如何支撑 Netty 的高性能?高级
  12. 49序列化机制:Serializable、transient 与 serialVersionUIDserialVersionUID 为什么重要?transient 字段怎么恢复?Externalizable 接口。为什么生产环境推荐 Protobuf/Hessian?中级
  13. 50四种引用类型:强引用、软引用、弱引用、虚引用SoftReference 做缓存、WeakReference 做 ThreadLocal、PhantomReference 做清理——四种引用的使用场景与 GC 行为。中级
  14. 51Java 8 → 21 核心特性速览:var、record、sealed、虚拟线程Java 8 Lambda → 10 var → 14 record → 17 sealed class → 21 虚拟线程。每个版本最值得用的特性一览。中级
下一卷 · V · Spring 生态核心原理
V

Spring 生态核心原理

—— IoC·AOP·事务·自动装配

Bean 生命周期、三级缓存解循环依赖、事务传播与失效、Boot 自动装配 SPI——面试几乎必问的 Spring 全家桶。

  1. 52Spring IoC 容器原理:BeanFactory 与 ApplicationContextIoC 不是「帮你 new 对象」那么简单。BeanFactory vs ApplicationContext、三级缓存、容器启动流程——面试最有深度的回答。高级必问
  2. 53Spring AOP 原理:JDK 动态代理 vs CGLIB有接口用 JDK 代理,没接口用 CGLIB——Spring Boot 2.x 之后默认改 CGLIB 了。切面执行顺序、代理失效场景全解。高级必问
  3. 54Bean 生命周期:从实例化到销毁的完整流程实例化 → 属性注入 → Aware 回调 → BeanPostProcessor → InitializingBean → init-method → 使用 → 销毁。14 步完整链路。深度
  4. 55Spring 事务传播机制与 @Transactional 失效的 8 种场景7 种传播行为(REQUIRED/REQUIRES_NEW/NESTED 等)。自调用失效、异常类型不匹配、private 方法——@Transactional 踩坑大全。高级必问
  5. 56Spring Boot 自动装配:@EnableAutoConfiguration 原理spring.factories → AutoConfiguration → @Conditional 条件装配。自己写一个 Starter 需要几步?从原理到实战。高级
  6. 57Spring 循环依赖:三级缓存解决方案singletonObjects → earlySingletonObjects → singletonFactories。为什么两级不够?构造器注入为什么不行?Spring Boot 2.6 之后默认禁止循环依赖。深度
  7. 58Spring MVC 请求处理全流程:DispatcherServlet 到 ViewDispatcherServlet → HandlerMapping → HandlerAdapter → Controller → ViewResolver。一次 HTTP 请求在 Spring 内部的完整旅程。中级
  8. 59Spring 核心注解速查:@Autowired vs @Resource、@Component vs @Bean@Autowired byType vs @Resource byName、@Component 扫描 vs @Bean 显式声明、@Value vs @ConfigurationProperties——别再搞混了。初级
下一卷 · VI · 数据库与中间件实战
VI

数据库与中间件实战

—— MySQL·Redis·MQ·分库分表

B+ 树索引、MVCC 事务隔离、Redis 持久化与缓存策略、RocketMQ 原理、分库分表方案——后端工程师的硬核中间件能力。

下一卷 · VII · 分布式系统设计
VII

分布式系统设计

—— CAP·一致性·高可用·实战

分布式锁四种实现、事务 2PC/TCC/Saga、限流熔断降级、高可用架构设计——从工程师到架构师的跃迁之路。

☕ 开始你的 Java 进阶之旅!

建议从集合框架开始,这是所有 Java 开发者的基本功。掌握底层原理,面试和工作都能游刃有余。