先回答一个问题:你需不需要它

这门课针对的不是零基础。如果你还没写过一个能跑起来的 Java 项目,或者对「线程」「GC」「类加载」这些词只有模糊印象,直接听这门课会很吃力——它默认你已经会写业务代码,只是不确定自己写的代码在 JVM 里到底发生了什么。

它的真实使用场景是两种:一是你正准备跳槽,技术面会追问底层原理,你答得出「用了什么」但答不出「为什么」;二是你在日常开发中遇到过线上内存溢出、线程池打满、接口响应变慢这类问题,靠加日志和重启扛过去了,但没真正定位过原因。这两类人学这门课收益最直接。

课程实际处理的是什么问题

杨晓峰这门专栏的定位是面试,但它讲的不是「怎么自我介绍」「怎么谈薪资」这类流程话题。它把面试里高频出现的 Java 技术追问拆成了几条主线:JVM 内存区域怎么划分、对象在什么情况下被回收、垃圾收集器各自的取舍、类加载的过程与双亲委派、并发包里的工具类怎么选、锁的升级与 AQS 的基本思路、以及性能问题该从哪几个方向排查。

换句话说,它教的是「被追问时你怎么把一件事讲清楚」。很多面试挂掉不是因为不会用,而是因为讲不出层次——比如被问到 volatile,只答「保证可见性」就停了,讲不出它和内存屏障、和指令重排的关系。这门课的价值就在于把这些点补成一条能顺着说下去的线。

学完之后你能独立做什么

  • 拿到一段有并发问题的代码,能判断是锁粒度、可见性还是线程池配置导致的,而不是只靠猜。
  • 看懂一份 GC 日志,知道 Full GC 频繁大致该往哪个方向查。
  • 在面试中面对 JVM、并发、集合这几类追问,能把结论和原因一起讲出来,而不是背结论。
  • 对自己的项目做一次技术复盘,说清楚哪些设计是有意为之,哪些只是碰巧能用。

注意这里没有写「精通 Java」或者「拿下大厂 offer」。一门专栏课做不到这些,它解决的是「你本来会的东西,能不能讲明白」。

资料适合什么基础,该怎么用

资料包是音频加文字稿,还附了一份延伸书单和对 Java 学习路径的看法。音频适合通勤时先过一遍建立印象,但真正要吃透还是得看文字稿,遇到讲内存模型和并发细节的部分,听一遍基本留不下东西。

建议的用法不是从头听到尾。先挑自己最虚的那一块——如果你从没系统看过 JVM,就先啃内存和 GC 那几讲;如果你写过多线程但对 AQS 一知半解,就直接跳到并发部分。每讲听完,拿自己项目里的一段代码对照着想一遍:如果面试官问我这里为什么这么写,我能不能答上来。答不上来的地方,才是你真正要花时间的地方。

书单那一讲可以当参考,但不必照着买。它的作用是告诉你这个方向还有哪些经典材料,而不是让你再囤一堆看不完的东西。

一点提醒

这门课是几年前的专栏,Java 版本和部分工具链的细节已经有更新,比如某些 GC 参数的默认值、新版本引入的收集器。听的时候把原理性的部分记住,具体参数和版本相关的结论,遇到时自己再核对一遍官方文档。原理不会过期,参数会。

如果你是那种「先囤课再决定学不学」的人,这门课大概率会躺在你的收藏夹里。它更适合已经确定要面试、或者手上正好有个性能问题想搞明白的人,带着具体问题进来,收获会实在得多。

课程目录

📁 07-周末福利 (2讲) 周末福利丨一份Java工程师必读书单【公众号:CunWorkNotes】.pdf
 [3.7 MB] 周末福利丨谈谈我对Java学习和面试的看法.html
 [7.2 MB] 周末福利丨谈谈我对Java学习和面试的看法.mp3 [3.4 MB] 周末福利丨一份Java工程师必读书单.html
 [2.7 MB] 周末福利丨谈谈我对Java学习和面试的看法.pdf
 [15.0 MB] 📁 03-模块二 Java进阶 (16讲) 第29讲丨Java内存模型中的happen-before是什么?.html
 [1.6 MB] 第22讲丨AtomicInteger底层实现原理是什么?如何在自己的产品代码中应用CAS操作?.mp3 [5.1 MB] 第28讲丨谈谈你的GC调优思路?.mp3 [6.8 MB] 第26讲丨如何监控和诊断JVM堆内和堆外内存使用?.html
 [1.3 MB] 第25讲丨谈谈JVM内存区域的划分,哪些区域可能发生OutOfMemoryError?.pdf
 [1.8 MB] 第26讲丨如何监控和诊断JVM堆内和堆外内存使用?.pdf
 [1.5 MB] 第29讲丨Java内存模型中的happen-before是什么?.pdf
 [2.0 MB] 第23讲丨请介绍类加载过程,什么是双亲委派模型?.html
 [1.8 MB] 第20讲丨并发包中的ConcurrentLinkedQueue和LinkedBlockingQueue有什么区别?.mp3 [4.0 MB] 第22讲丨AtomicInteger底层实现原理是什么?如何在自己的产品代码中应用CAS操作?.pdf
 [1.6 MB] 第19讲丨Java并发包提供了哪些并发工具类?【公众号:CunWorkNotes】.pdf
 [1.7 MB] 说明【公众号:CunWorkNotes】.zip
 [484.0 B] 第23讲丨请介绍类加载过程,什么是双亲委派模型?.pdf
 [2.2 MB] 第17讲丨一个线程两次调用start()方法会出现什么情况?【公众号:CunWorkNotes】.mp3 [4.7 MB] 第24讲丨有哪些方法可以在运行时动态生成一个Java类?【公众号:CunWorkNotes】.pdf
 [1.8 MB] 第15讲丨synchronized和ReentrantLock有什么区别呢?【公众号:CunWorkNotes】.html
 [1.3 MB] 第30讲丨Java程序运行在Docker等容器环境有哪些新问题?.mp3 [4.8 MB] 第24讲丨有哪些方法可以在运行时动态生成一个Java类?.mp3 [4.0 MB] 第20讲丨并发包中的ConcurrentLinkedQueue和LinkedBlockingQueue有什么区别?.html
 [1.7 MB] 第16讲丨synchronized底层如何实现?什么是锁的升级、降级?.pdf
 [1.8 MB] 第22讲丨AtomicInteger底层实现原理是什么?如何在自己的产品代码中应用CAS操作?.html
 [1.5 MB] 第18讲丨什么情况下Java程序会产生死锁?如何定位、修复?.pdf
 [2.2 MB] 第27讲丨Java常见的垃圾收集器有哪些?.html
 [1.2 MB] 第18讲丨什么情况下Java程序会产生死锁?如何定位、修复?.html
 [1.8 MB] 第28讲丨谈谈你的GC调优思路?.pdf
 [1.7 MB] 第21讲丨Java并发类库提供的线程池有哪几种?分别有什么特点?.mp3 [5.8 MB] 第17讲丨一个线程两次调用start()方法会出现什么情况?.pdf
 [2.2 MB] 第18讲丨什么情况下Java程序会产生死锁?如何定位、修复?.mp3 [4.4 MB] 第15讲丨synchronized和ReentrantLock有什么区别呢?.mp3 [4.4 MB] 第24讲丨有哪些方法可以在运行时动态生成一个Java类?.html
 [1.3 MB] 第15讲丨synchronized和ReentrantLock有什么区别呢?.pdf
 [1.8 MB] 第19讲丨Java并发包提供了哪些并发工具类?.mp3 [4.8 MB] 第23讲丨请介绍类加载过程,什么是双亲委派模型?.mp3 [6.4 MB] 第26讲丨如何监控和诊断JVM堆内和堆外内存使用?.mp3 [5.8 MB] 第19讲丨Java并发包提供了哪些并发工具类?.html
 [1.4 MB] 第30讲丨Java程序运行在Docker等容器环境有哪些新问题?.html
 [1.2 MB] 第21讲丨Java并发类库提供的线程池有哪几种?分别有什么特点?.pdf
 [2.3 MB] 第28讲丨谈谈你的GC调优思路?.html
 [1.4 MB] 第30讲丨Java程序运行在Docker等容器环境有哪些新问题?.pdf
 [1.7 MB] 第27讲丨Java常见的垃圾收集器有哪些?.pdf
 [1.4 MB] 第27讲丨Java常见的垃圾收集器有哪些?.mp3 [5.7 MB] 第20讲丨并发包中的ConcurrentLinkedQueue和LinkedBlockingQueue有什么区别?.pdf
 [1.8 MB] 第17讲丨一个线程两次调用start()方法会出现什么情况?.html
 [1.8 MB] 第21讲丨Java并发类库提供的线程池有哪几种?分别有什么特点?.html
 [2.3 MB] 第29讲丨Java内存模型中的happen-before是什么?.mp3 [4.7 MB] 第25讲丨谈谈JVM内存区域的划分,哪些区域可能发生OutOfMemoryError?.html
 [1.3 MB] 第16讲丨synchronized底层如何实现?什么是锁的升级、降级?.html
 [1.6 MB] 第25讲丨谈谈JVM内存区域的划分,哪些区域可能发生OutOfMemoryError?.mp3 [4.9 MB] 第16讲丨synchronized底层如何实现?什么是锁的升级、降级?.mp3 [5.1 MB] 📁 05-模块四 Java性能基础 (3讲) 第34讲丨有人说“Lambda能让Java程序慢30倍”,你怎么看?.pdf
 [2.3 MB] 第33讲丨后台服务出现明显“变慢”,谈谈你的诊断思路?【公众号:CunWorkNotes】.mp3 [4.8 MB] 第35讲丨JVM优化Java代码时都做了什么?【公众号:CunWorkNotes】.html
 [1.2 MB] 第33讲丨后台服务出现明显“变慢”,谈谈你的诊断思路?.html
 [1.4 MB] 第33讲丨后台服务出现明显“变慢”,谈谈你的诊断思路?.pdf
 [2.0 MB] 第35讲丨JVM优化Java代码时都做了什么?.mp3 [4.7 MB] 第34讲丨有人说“Lambda能让Java程序慢30倍”,你怎么看?.html
 [2.0 MB] 第34讲丨有人说“Lambda能让Java程序慢30倍”,你怎么看?.mp3 [5.3 MB] 第35讲丨JVM优化Java代码时都做了什么?.pdf
 [1.4 MB] 📁 02-模块一 Java基础 (14讲) 第06讲丨动态代理是基于什么原理?.pdf
 [1.9 MB] 第07讲丨int和Integer有什么区别?.pdf
 [1.7 MB] 第11讲丨Java提供了哪些IO方式?NIO如何实现多路复用?.html
 [1.8 MB] 第14讲丨谈谈你知道的设计模式?.html
 [1.7 MB] 第02讲丨Exception和Error有什么区别?.html
 [1.4 MB] 第08讲丨对比Vector、ArrayList、LinkedList有何区别?.html
 [1.4 MB] 第04讲丨强引用、软引用、弱引用、幻象引用有什么区别?.pdf
 [1.7 MB] 第01讲丨谈谈你对Java平台的理解?【公众号:CunWorkNotes】.mp3 [3.8 MB] 第08讲丨对比Vector、ArrayList、LinkedList有何区别?【公众号:CunWorkNotes】.mp3 [5.9 MB] 说明.zip
 [484.0 B] 第04讲丨强引用、软引用、弱引用、幻象引用有什么区别?.html
 [1.5 MB] 第03讲丨谈谈final、finally、finalize有什么不同?.pdf
 [1.8 MB] 第09讲丨对比Hashtable、HashMap、TreeMap有什么不同?.mp3 [5.6 MB] 第10讲丨如何保证集合是线程安全的?ConcurrentHashMap如何实现高效地线程安全?.mp3 [5.0 MB] 第05讲丨String、StringBuffer、StringBuilder有什么区别?【公众号:CunWorkNotes】.mp3 [5.5 MB] 第06讲丨动态代理是基于什么原理?.html
 [1.3 MB] 第13讲丨谈谈接口和抽象类有什么区别?【公众号:CunWorkNotes】.mp3 [5.2 MB] 第05讲丨String、StringBuffer、StringBuilder有什么区别?.html
 [1.5 MB] 第05讲丨String、StringBuffer、StringBuilder有什么区别?.pdf
 [1.7 MB] 第14讲丨谈谈你知道的设计模式?.pdf
 [1.8 MB] 第04讲丨强引用、软引用、弱引用、幻象引用有什么区别?.mp3 [4.8 MB] 第11讲丨Java提供了哪些IO方式?NIO如何实现多路复用?.mp3 [5.4 MB] 第10讲丨如何保证集合是线程安全的?ConcurrentHashMap如何实现高效地线程安全?.html
 [1.3 MB] 第12讲丨Java有几种文件拷贝方式?哪一种最高效?.html
 [1.5 MB] 第10讲丨如何保证集合是线程安全的?ConcurrentHashMap如何实现高效地线程安全?.pdf
 [1.5 MB] 第07讲丨int和Integer有什么区别?.html
 [1.6 MB] 第12讲丨Java有几种文件拷贝方式?哪一种最高效?.mp3 [5.8 MB] 第02讲丨Exception和Error有什么区别?.mp3 [5.2 MB] 第11讲丨Java提供了哪些IO方式?NIO如何实现多路复用?.pdf
 [1.9 MB] 第03讲丨谈谈final、finally、finalize有什么不同?.html
 [1.3 MB] 第08讲丨对比Vector、ArrayList、LinkedList有何区别?.pdf
 [1.6 MB] 第07讲丨int和Integer有什么区别?.mp3 [5.2 MB] 第13讲丨谈谈接口和抽象类有什么区别?.html
 [1.4 MB] 第14讲丨谈谈你知道的设计模式?.mp3 [3.9 MB] 第02讲丨Exception和Error有什么区别?.pdf
 [1.7 MB] 第03讲丨谈谈final、finally、finalize有什么不同?.mp3 [5.2 MB] 第09讲丨对比Hashtable、HashMap、TreeMap有什么不同?.html
 [1.6 MB] 第01讲丨谈谈你对Java平台的理解?.pdf
 [1.5 MB] 第01讲丨谈谈你对Java平台的理解?.html
 [1.2 MB] 第13讲丨谈谈接口和抽象类有什么区别?.pdf
 [1.8 MB] 第12讲丨Java有几种文件拷贝方式?哪一种最高效?.pdf
 [1.7 MB] 第09讲丨对比Hashtable、HashMap、TreeMap有什么不同?.pdf
 [2.1 MB] 第06讲丨动态代理是基于什么原理?.mp3 [5.2 MB] 📁 04-模块三 Java安全基础 (2讲) 第32讲丨如何写出安全的Java代码?.pdf
 [2.0 MB] 第32讲丨如何写出安全的Java代码?【公众号:CunWorkNotes】.mp3 [4.8 MB] 第31讲丨你了解Java应用开发中的注入攻击吗?.html
 [1.1 MB] 第31讲丨你了解Java应用开发中的注入攻击吗?.pdf
 [1.3 MB] 第32讲丨如何写出安全的Java代码?.html
 [1.4 MB] 第31讲丨你了解Java应用开发中的注入攻击吗?.mp3 [4.6 MB] 📁 06-模块5 Java应用开发扩展 (4讲)(1) 第39讲丨谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?.mp3 [4.7 MB] 第39讲丨谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?【公众号:CunWorkNotes】.html
 [1.9 MB] 第37讲丨谈谈SpringBean的生命周期和作用域?.pdf
 [1.4 MB] 第38讲丨对比Java标准NIO类库,你知道Netty是如何实现更高性能的吗?.mp3 [4.3 MB] 第38讲丨对比Java标准NIO类库,你知道Netty是如何实现更高性能的吗?.pdf
 [1.7 MB] 第38讲丨对比Java标准NIO类库,你知道Netty是如何实现更高性能的吗?.html
 [1.2 MB] 第36讲丨谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?.mp3 [4.3 MB] 第37讲丨谈谈SpringBean的生命周期和作用域?.mp3 [4.6 MB] 第39讲丨谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?.pdf
 [1.9 MB] 第36讲丨谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?(1).pdf
 [1.6 MB] 第36讲丨谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?.html
 [1.6 MB] 📁 06-模块5 Java应用开发扩展 (4讲) 第37讲丨谈谈SpringBean的生命周期和作用域?.html
 [1.2 MB] 📁 01-开篇词 (1讲) 00丨开篇词丨以面试题为切入点,有效提升你的Java内功.pdf
 [2.0 MB] 00丨开篇词丨以面试题为切入点,有效提升你的Java内功.mp3 [2.8 MB] 00丨开篇词丨以面试题为切入点,有效提升你的Java内功.html
 [1.5 MB] 📁 08-结束语 (1讲) 结束语丨技术没有终点.pdf
 [1.9 MB] 结束语丨技术没有终点.html
 [1.5 MB] 结束语丨技术没有终点.mp3 [1.7 MB] 适合人群 Java开发者 面试求职者 技术爱好者 学习收获 掌握Java核心技术 提升面试技巧 优化代码性能 祝您学习愉快! 学有所成,前程似锦!