课程简介
深入剖析Java中高级特性,涵盖泛型、反射、注解、动态代理等核心知识,并解析JDK9至20的新特性及协程技术。同时,聚焦Java并发基础与GC算法,助力学员构建高效、稳定的分布式系统架构。
目标收益
掌握Java泛型原理与应用,提升代码复用性和类型安全性。
深入理解反射与注解机制,实现灵活编程与框架开发。
学习并发编程精髓,构建高性能、高可用的Java应用。
培训对象
课程大纲
第一天 Java几大核心特性剖析1. 泛型 |
1.为什么需要泛型?为什么弱类型语言不需要泛型? 2.泛型类/泛型方法/泛型接口 3.泛型上下界 4.编程语言的协变、逆变、不变、泛型通配符、 PECS原则 5.泛型擦除原理、问题 |
2. 反射 |
1.反射与元编程 2.反射相关的API:Class/Field/Method/Parameter 3.反射典型的案例分析 4.反射和设计模式-工厂的结合 5.反射与泛型的结合 |
3. 注解 |
1.注解与注释的区别与联系 2.注解的用法:定义、使用、解析注解 3. 注解为什么必须和反射结合? 4. 注解的进阶用法 5. 注解的高级用法:元注解、注解的继承、注解的组合 6. 注解的典型案例 |
4. 动态代理 |
1.静态代理的2种实现方式 2.动态代理的几种实现方式 3.动态代理的典型案例 |
5. JDK9 - 20新特性 |
1. JDK各版本与LTS:OracleJDK、OpenJDK、KonaJDK 2. JDK9 - 20 各个版本的新特性,JDK的3 个LTS版本:JDK8, 11, 17 3. JDK8的主要进步,比如函数式编程 4. JDK11的主要进步,比如模块化 5. JDK17的主要进步,比如ZGC |
6. 协程 |
1.Java协程发展史 2.C++/Go中,协程的大规模工程应用 3. 为什么大家都要搞协程? 4. 协程的实现原理 5. 协程的典型案例 |
第二天 Java并发基础 与 GC算法剖析 第1讲:多线程基础 |
线程的优雅关闭; InterruptedException与interrupt(); synchronized关键字; wait与notify; volatile关键字; 重排序问题; 内存可见性问题; 重排序与内存可见性的关系; JMM与happen-before ; Linux内存屏障 ; JDK内存屏障; 常用无锁编程实践 |
第2讲:Atomic类 |
1. JUC包的全貌 2. Java/Mysq1/Redis中的悲观锁与乐观锁 3. CAS详解自旋与阻塞: AtomicInteger/Long/Boolean/Double 4. ABA问题 与 AtomicReference/AtomicStampedReference/AtomicMarkableReference 5.为什么需要FieldUpdater; 6. AtomicXXXArray的常见误解 1. JDK 8 Striped64 与 LongAdder介绍 2. 原理:数据分片;最终一致性; 3. 原理:伪共享与缓存行填充; 4. LongAdder核心实现原理 5. LongAccumulator实现原理 6. DoubleAdder/DoubleAccumulator实现原理 |
第3讲:Lock与Condition |
1.锁的公平性vs.非公平性 ; 锁实现的基本原理 ; 阻塞队列与唤醒机制 ; unlock()实现分析 2.类继承层次 ; AQS的两对模板方法 ; WriteLock公平vs.非公平实现 ; ReadLock公平vs.非公平实现 ; 3.Condition与Lock的关系 ; Condition的使用场景 ; Condition实现原理 ;await()实现分析; 4.为什么引入StampedLock ; “乐观读”的实现原理 悲观读/写:“阻塞”与“自旋”策略实现差异 ; |
第4讲: GC - CMS剖析 |
1.GC算法的基本分类、背景知识(比如3色标记法、读写屏障) 2.对CMS算法的常见误解 3.Young GC – ParNew算法解析 4. Old GC – CMS算法解析 5. Full GC算法解析 |
第5讲:GC – G1剖析 |
1.G1相对CMS,改进的地方 2.G1与 CMS内存布局的对比 3.G1算法 – 年轻代解析 4.G1算法 – 年老代解析 |
第6讲:GC – ZGC剖析 |
1.ZGC相对 CMS/G1,先进性体现在哪? 2.ZGC核心技术 – 染色指针 3.ZGC算法解析 4.ZGC还有哪些不足? |
第三天 Java并发编程 – 高级 第1课:同步工具类 |
Semaphore; CountDownLatch; CyclicBarrier 使用场景;实现原理 Exchanger Phaser 使用场景;实现原理 |
第2课:并发容器 |
1.BlockingQueue ArrayBlockingQueue PriorityBlockingQueue 2.BlockingQueue(续) DelayQueue SynchronousQueue 3.BlockingDequeCopyOnWrite CopyOnWriteArrayListCopyOnWriteArraySet 4.ConcurrentLinkedQueue/ Deque 使用场景与实现原理 5.ConcurrentHashMap 使用场景与实现原理 6.ConcurrentSkipListMap/Set 使用场景与实现原理 |
第3课:线程池与Future |
1.线程池-实现原理剖析:线程池的实现原理;线程池的类继承体系;线程池的优雅关闭 ;任务的提交过程分析 线程池的4种拒绝策略 ; 2.Callable与Future:Callable与Runnable;Future的广泛用途;Future的实现原理 3.ScheduledThreadPool Executor:实现原理分析 4.Executors工具类与总结:实现原理分析;异步编程总结; |
第4讲:ForkJoinPool |
1.ForkJoinPool用法 ;工作窃取队列 ;状态变量 ctl解析 2.ForkJoinPool原理解析:阻塞栈Treiber Stack ;Worker线程的阻塞-唤醒机制任务的提交过程分析 3.ForkJoinPool原理解析(续1):工作窃取算法顺序锁 SeqLock ;ForkJoinTask的fork/join ; 4.ForkJoinPool原理解析(续2):join的层层嵌套 ;ForkJoinPool的优雅关闭 |
第5课:CompletableFuture |
1.CompletableFuture使用场景:最简单的用法;提交任务;四种任务原型 ;CompletionStage接口 ; 2.CompletableFuture实现原理:CompletableFuture的构造: 任务类型的适配 ;任务的链式执行过程分析thenApply与thenApplyAsync的区别 3.CompletableFuture实现原理(续):任务的网状执行:有向无环图 ;内部的计算图分析 ; |
第6课 JDK8以后对JUC包的改动 |
JUC包随Java版本发展的变化 1.JDK8相对JDK7,对并发包的改动 2.JDK11相对JDK8,对并发包的改动 3.JDK17相对JDK11,对并发包的改动 |
第四天 Java现网问题排查 与 GC调优 第1课 现网问题排查与解决入门 |
1. 现网问题排查的基本方法论 2. 问题与工具 |
第2课 内存泄漏 |
内存泄漏 - 排查方法与案例 1.dump与MAT工具 2.jemalloc/jeprof 3.NMT与jcmd 4.典型案例 |
第3课 CPU飙高 |
CPU飙高 - 排查方法与案例 1.Linux常见cpu相关命令、jstack 2.CPU火焰图 3.典型案例 |
第4课 其它问题与工具 |
1.阿里arthas工具 2.典型案例 |
第5课GC调优 |
1.GC调优的目标、方法论 2.GC算法深入解析 3.案例 |
第一天 Java几大核心特性剖析1. 泛型 1.为什么需要泛型?为什么弱类型语言不需要泛型? 2.泛型类/泛型方法/泛型接口 3.泛型上下界 4.编程语言的协变、逆变、不变、泛型通配符、 PECS原则 5.泛型擦除原理、问题 |
2. 反射 1.反射与元编程 2.反射相关的API:Class/Field/Method/Parameter 3.反射典型的案例分析 4.反射和设计模式-工厂的结合 5.反射与泛型的结合 |
3. 注解 1.注解与注释的区别与联系 2.注解的用法:定义、使用、解析注解 3. 注解为什么必须和反射结合? 4. 注解的进阶用法 5. 注解的高级用法:元注解、注解的继承、注解的组合 6. 注解的典型案例 |
4. 动态代理 1.静态代理的2种实现方式 2.动态代理的几种实现方式 3.动态代理的典型案例 |
5. JDK9 - 20新特性 1. JDK各版本与LTS:OracleJDK、OpenJDK、KonaJDK 2. JDK9 - 20 各个版本的新特性,JDK的3 个LTS版本:JDK8, 11, 17 3. JDK8的主要进步,比如函数式编程 4. JDK11的主要进步,比如模块化 5. JDK17的主要进步,比如ZGC |
6. 协程 1.Java协程发展史 2.C++/Go中,协程的大规模工程应用 3. 为什么大家都要搞协程? 4. 协程的实现原理 5. 协程的典型案例 |
第二天 Java并发基础 与 GC算法剖析 第1讲:多线程基础 线程的优雅关闭; InterruptedException与interrupt(); synchronized关键字; wait与notify; volatile关键字; 重排序问题; 内存可见性问题; 重排序与内存可见性的关系; JMM与happen-before ; Linux内存屏障 ; JDK内存屏障; 常用无锁编程实践 |
第2讲:Atomic类 1. JUC包的全貌 2. Java/Mysq1/Redis中的悲观锁与乐观锁 3. CAS详解自旋与阻塞: AtomicInteger/Long/Boolean/Double 4. ABA问题 与 AtomicReference/AtomicStampedReference/AtomicMarkableReference 5.为什么需要FieldUpdater; 6. AtomicXXXArray的常见误解 1. JDK 8 Striped64 与 LongAdder介绍 2. 原理:数据分片;最终一致性; 3. 原理:伪共享与缓存行填充; 4. LongAdder核心实现原理 5. LongAccumulator实现原理 6. DoubleAdder/DoubleAccumulator实现原理 |
第3讲:Lock与Condition 1.锁的公平性vs.非公平性 ; 锁实现的基本原理 ; 阻塞队列与唤醒机制 ; unlock()实现分析 2.类继承层次 ; AQS的两对模板方法 ; WriteLock公平vs.非公平实现 ; ReadLock公平vs.非公平实现 ; 3.Condition与Lock的关系 ; Condition的使用场景 ; Condition实现原理 ;await()实现分析; 4.为什么引入StampedLock ; “乐观读”的实现原理 悲观读/写:“阻塞”与“自旋”策略实现差异 ; |
第4讲: GC - CMS剖析 1.GC算法的基本分类、背景知识(比如3色标记法、读写屏障) 2.对CMS算法的常见误解 3.Young GC – ParNew算法解析 4. Old GC – CMS算法解析 5. Full GC算法解析 |
第5讲:GC – G1剖析 1.G1相对CMS,改进的地方 2.G1与 CMS内存布局的对比 3.G1算法 – 年轻代解析 4.G1算法 – 年老代解析 |
第6讲:GC – ZGC剖析 1.ZGC相对 CMS/G1,先进性体现在哪? 2.ZGC核心技术 – 染色指针 3.ZGC算法解析 4.ZGC还有哪些不足? |
第三天 Java并发编程 – 高级 第1课:同步工具类 Semaphore; CountDownLatch; CyclicBarrier 使用场景;实现原理 Exchanger Phaser 使用场景;实现原理 |
第2课:并发容器 1.BlockingQueue ArrayBlockingQueue PriorityBlockingQueue 2.BlockingQueue(续) DelayQueue SynchronousQueue 3.BlockingDequeCopyOnWrite CopyOnWriteArrayListCopyOnWriteArraySet 4.ConcurrentLinkedQueue/ Deque 使用场景与实现原理 5.ConcurrentHashMap 使用场景与实现原理 6.ConcurrentSkipListMap/Set 使用场景与实现原理 |
第3课:线程池与Future 1.线程池-实现原理剖析:线程池的实现原理;线程池的类继承体系;线程池的优雅关闭 ;任务的提交过程分析 线程池的4种拒绝策略 ; 2.Callable与Future:Callable与Runnable;Future的广泛用途;Future的实现原理 3.ScheduledThreadPool Executor:实现原理分析 4.Executors工具类与总结:实现原理分析;异步编程总结; |
第4讲:ForkJoinPool 1.ForkJoinPool用法 ;工作窃取队列 ;状态变量 ctl解析 2.ForkJoinPool原理解析:阻塞栈Treiber Stack ;Worker线程的阻塞-唤醒机制任务的提交过程分析 3.ForkJoinPool原理解析(续1):工作窃取算法顺序锁 SeqLock ;ForkJoinTask的fork/join ; 4.ForkJoinPool原理解析(续2):join的层层嵌套 ;ForkJoinPool的优雅关闭 |
第5课:CompletableFuture 1.CompletableFuture使用场景:最简单的用法;提交任务;四种任务原型 ;CompletionStage接口 ; 2.CompletableFuture实现原理:CompletableFuture的构造: 任务类型的适配 ;任务的链式执行过程分析thenApply与thenApplyAsync的区别 3.CompletableFuture实现原理(续):任务的网状执行:有向无环图 ;内部的计算图分析 ; |
第6课 JDK8以后对JUC包的改动 JUC包随Java版本发展的变化 1.JDK8相对JDK7,对并发包的改动 2.JDK11相对JDK8,对并发包的改动 3.JDK17相对JDK11,对并发包的改动 |
第四天 Java现网问题排查 与 GC调优 第1课 现网问题排查与解决入门 1. 现网问题排查的基本方法论 2. 问题与工具 |
第2课 内存泄漏 内存泄漏 - 排查方法与案例 1.dump与MAT工具 2.jemalloc/jeprof 3.NMT与jcmd 4.典型案例 |
第3课 CPU飙高 CPU飙高 - 排查方法与案例 1.Linux常见cpu相关命令、jstack 2.CPU火焰图 3.典型案例 |
第4课 其它问题与工具 1.阿里arthas工具 2.典型案例 |
第5课GC调优 1.GC调优的目标、方法论 2.GC算法深入解析 3.案例 |