課程簡介
深入剖析Java中高級特性,涵蓋泛型、反射、注解、動態(tài)代理等核心知識,并解析JDK9至20的新特性及協(xié)程技術(shù)。同時,聚焦Java并發(fā)基礎(chǔ)與GC算法,助力學(xué)員構(gòu)建高效、穩(wěn)定的分布式系統(tǒng)架構(gòu)。
目標(biāo)收益
掌握J(rèn)ava泛型原理與應(yīng)用,提升代碼復(fù)用性和類型安全性。
深入理解反射與注解機(jī)制,實現(xiàn)靈活編程與框架開發(fā)。
學(xué)習(xí)并發(fā)編程精髓,構(gòu)建高性能、高可用的Java應(yīng)用。
培訓(xùn)對象
課程大綱
第一天 Java幾大核心特性剖析1. 泛型 |
1.為什么需要泛型?為什么弱類型語言不需要泛型? 2.泛型類/泛型方法/泛型接口 3.泛型上下界 4.編程語言的協(xié)變、逆變、不變、泛型通配符、 PECS原則 5.泛型擦除原理、問題 |
2. 反射 |
1.反射與元編程 2.反射相關(guān)的API:Class/Field/Method/Parameter 3.反射典型的案例分析 4.反射和設(shè)計模式-工廠的結(jié)合 5.反射與泛型的結(jié)合 |
3. 注解 |
1.注解與注釋的區(qū)別與聯(lián)系 2.注解的用法:定義、使用、解析注解 3. 注解為什么必須和反射結(jié)合? 4. 注解的進(jìn)階用法 5. 注解的高級用法:元注解、注解的繼承、注解的組合 6. 注解的典型案例 |
4. 動態(tài)代理 |
1.靜態(tài)代理的2種實現(xiàn)方式 2.動態(tài)代理的幾種實現(xiàn)方式 3.動態(tài)代理的典型案例 |
5. JDK9 - 20新特性 |
1. JDK各版本與LTS:OracleJDK、OpenJDK、KonaJDK 2. JDK9 - 20 各個版本的新特性,JDK的3 個LTS版本:JDK8, 11, 17 3. JDK8的主要進(jìn)步,比如函數(shù)式編程 4. JDK11的主要進(jìn)步,比如模塊化 5. JDK17的主要進(jìn)步,比如ZGC |
6. 協(xié)程 |
1.Java協(xié)程發(fā)展史 2.C++/Go中,協(xié)程的大規(guī)模工程應(yīng)用 3. 為什么大家都要搞協(xié)程? 4. 協(xié)程的實現(xiàn)原理 5. 協(xié)程的典型案例 |
第二天 Java并發(fā)基礎(chǔ) 與 GC算法剖析 第1講:多線程基礎(chǔ) |
線程的優(yōu)雅關(guān)閉; InterruptedException與interrupt(); synchronized關(guān)鍵字; wait與notify; volatile關(guān)鍵字; 重排序問題; 內(nèi)存可見性問題; 重排序與內(nèi)存可見性的關(guān)系; JMM與happen-before ; Linux內(nèi)存屏障 ; JDK內(nèi)存屏障; 常用無鎖編程實踐 |
第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. 原理:數(shù)據(jù)分片;最終一致性; 3. 原理:偽共享與緩存行填充; 4. LongAdder核心實現(xiàn)原理 5. LongAccumulator實現(xiàn)原理 6. DoubleAdder/DoubleAccumulator實現(xiàn)原理 |
第3講:Lock與Condition |
1.鎖的公平性vs.非公平性 ; 鎖實現(xiàn)的基本原理 ; 阻塞隊列與喚醒機(jī)制 ; unlock()實現(xiàn)分析 2.類繼承層次 ; AQS的兩對模板方法 ; WriteLock公平vs.非公平實現(xiàn) ; ReadLock公平vs.非公平實現(xiàn) ; 3.Condition與Lock的關(guān)系 ; Condition的使用場景 ; Condition實現(xiàn)原理 ;await()實現(xiàn)分析; 4.為什么引入StampedLock ; “樂觀讀”的實現(xiàn)原理 悲觀讀/寫:“阻塞”與“自旋”策略實現(xiàn)差異 ; |
第4講: GC - CMS剖析 |
1.GC算法的基本分類、背景知識(比如3色標(biāo)記法、讀寫屏障) 2.對CMS算法的常見誤解 3.Young GC – ParNew算法解析 4. Old GC – CMS算法解析 5. Full GC算法解析 |
第5講:GC – G1剖析 |
1.G1相對CMS,改進(jìn)的地方 2.G1與 CMS內(nèi)存布局的對比 3.G1算法 – 年輕代解析 4.G1算法 – 年老代解析 |
第6講:GC – ZGC剖析 |
1.ZGC相對 CMS/G1,先進(jìn)性體現(xiàn)在哪? 2.ZGC核心技術(shù) – 染色指針 3.ZGC算法解析 4.ZGC還有哪些不足? |
第三天 Java并發(fā)編程 – 高級 第1課:同步工具類 |
Semaphore; CountDownLatch; CyclicBarrier 使用場景;實現(xiàn)原理 Exchanger Phaser 使用場景;實現(xiàn)原理 |
第2課:并發(fā)容器 |
1.BlockingQueue ArrayBlockingQueue PriorityBlockingQueue 2.BlockingQueue(續(xù)) DelayQueue SynchronousQueue 3.BlockingDequeCopyOnWrite CopyOnWriteArrayListCopyOnWriteArraySet 4.ConcurrentLinkedQueue/ Deque 使用場景與實現(xiàn)原理 5.ConcurrentHashMap 使用場景與實現(xiàn)原理 6.ConcurrentSkipListMap/Set 使用場景與實現(xiàn)原理 |
第3課:線程池與Future |
1.線程池-實現(xiàn)原理剖析:線程池的實現(xiàn)原理;線程池的類繼承體系;線程池的優(yōu)雅關(guān)閉 ;任務(wù)的提交過程分析 線程池的4種拒絕策略 ; 2.Callable與Future:Callable與Runnable;Future的廣泛用途;Future的實現(xiàn)原理 3.ScheduledThreadPool Executor:實現(xiàn)原理分析 4.Executors工具類與總結(jié):實現(xiàn)原理分析;異步編程總結(jié); |
第4講:ForkJoinPool |
1.ForkJoinPool用法 ;工作竊取隊列 ;狀態(tài)變量 ctl解析 2.ForkJoinPool原理解析:阻塞棧Treiber Stack ;Worker線程的阻塞-喚醒機(jī)制任務(wù)的提交過程分析 3.ForkJoinPool原理解析(續(xù)1):工作竊取算法順序鎖 SeqLock ;ForkJoinTask的fork/join ; 4.ForkJoinPool原理解析(續(xù)2):join的層層嵌套 ;ForkJoinPool的優(yōu)雅關(guān)閉 |
第5課:CompletableFuture |
1.CompletableFuture使用場景:最簡單的用法;提交任務(wù);四種任務(wù)原型 ;CompletionStage接口 ; 2.CompletableFuture實現(xiàn)原理:CompletableFuture的構(gòu)造: 任務(wù)類型的適配 ;任務(wù)的鏈?zhǔn)綀?zhí)行過程分析thenApply與thenApplyAsync的區(qū)別 3.CompletableFuture實現(xiàn)原理(續(xù)):任務(wù)的網(wǎng)狀執(zhí)行:有向無環(huán)圖 ;內(nèi)部的計算圖分析 ; |
第6課 JDK8以后對JUC包的改動 |
JUC包隨Java版本發(fā)展的變化 1.JDK8相對JDK7,對并發(fā)包的改動 2.JDK11相對JDK8,對并發(fā)包的改動 3.JDK17相對JDK11,對并發(fā)包的改動 |
第四天 Java現(xiàn)網(wǎng)問題排查 與 GC調(diào)優(yōu) 第1課 現(xiàn)網(wǎng)問題排查與解決入門 |
1. 現(xiàn)網(wǎng)問題排查的基本方法論 2. 問題與工具 |
第2課 內(nèi)存泄漏 |
內(nèi)存泄漏 - 排查方法與案例 1.dump與MAT工具 2.jemalloc/jeprof 3.NMT與jcmd 4.典型案例 |
第3課 CPU飆高 |
CPU飆高 - 排查方法與案例 1.Linux常見cpu相關(guān)命令、jstack 2.CPU火焰圖 3.典型案例 |
第4課 其它問題與工具 |
1.阿里arthas工具 2.典型案例 |
第5課GC調(diào)優(yōu) |
1.GC調(diào)優(yōu)的目標(biāo)、方法論 2.GC算法深入解析 3.案例 |
第一天 Java幾大核心特性剖析1. 泛型 1.為什么需要泛型?為什么弱類型語言不需要泛型? 2.泛型類/泛型方法/泛型接口 3.泛型上下界 4.編程語言的協(xié)變、逆變、不變、泛型通配符、 PECS原則 5.泛型擦除原理、問題 |
2. 反射 1.反射與元編程 2.反射相關(guān)的API:Class/Field/Method/Parameter 3.反射典型的案例分析 4.反射和設(shè)計模式-工廠的結(jié)合 5.反射與泛型的結(jié)合 |
3. 注解 1.注解與注釋的區(qū)別與聯(lián)系 2.注解的用法:定義、使用、解析注解 3. 注解為什么必須和反射結(jié)合? 4. 注解的進(jìn)階用法 5. 注解的高級用法:元注解、注解的繼承、注解的組合 6. 注解的典型案例 |
4. 動態(tài)代理 1.靜態(tài)代理的2種實現(xiàn)方式 2.動態(tài)代理的幾種實現(xiàn)方式 3.動態(tài)代理的典型案例 |
5. JDK9 - 20新特性 1. JDK各版本與LTS:OracleJDK、OpenJDK、KonaJDK 2. JDK9 - 20 各個版本的新特性,JDK的3 個LTS版本:JDK8, 11, 17 3. JDK8的主要進(jìn)步,比如函數(shù)式編程 4. JDK11的主要進(jìn)步,比如模塊化 5. JDK17的主要進(jìn)步,比如ZGC |
6. 協(xié)程 1.Java協(xié)程發(fā)展史 2.C++/Go中,協(xié)程的大規(guī)模工程應(yīng)用 3. 為什么大家都要搞協(xié)程? 4. 協(xié)程的實現(xiàn)原理 5. 協(xié)程的典型案例 |
第二天 Java并發(fā)基礎(chǔ) 與 GC算法剖析 第1講:多線程基礎(chǔ) 線程的優(yōu)雅關(guān)閉; InterruptedException與interrupt(); synchronized關(guān)鍵字; wait與notify; volatile關(guān)鍵字; 重排序問題; 內(nèi)存可見性問題; 重排序與內(nèi)存可見性的關(guān)系; JMM與happen-before ; Linux內(nèi)存屏障 ; JDK內(nèi)存屏障; 常用無鎖編程實踐 |
第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. 原理:數(shù)據(jù)分片;最終一致性; 3. 原理:偽共享與緩存行填充; 4. LongAdder核心實現(xiàn)原理 5. LongAccumulator實現(xiàn)原理 6. DoubleAdder/DoubleAccumulator實現(xiàn)原理 |
第3講:Lock與Condition 1.鎖的公平性vs.非公平性 ; 鎖實現(xiàn)的基本原理 ; 阻塞隊列與喚醒機(jī)制 ; unlock()實現(xiàn)分析 2.類繼承層次 ; AQS的兩對模板方法 ; WriteLock公平vs.非公平實現(xiàn) ; ReadLock公平vs.非公平實現(xiàn) ; 3.Condition與Lock的關(guān)系 ; Condition的使用場景 ; Condition實現(xiàn)原理 ;await()實現(xiàn)分析; 4.為什么引入StampedLock ; “樂觀讀”的實現(xiàn)原理 悲觀讀/寫:“阻塞”與“自旋”策略實現(xiàn)差異 ; |
第4講: GC - CMS剖析 1.GC算法的基本分類、背景知識(比如3色標(biāo)記法、讀寫屏障) 2.對CMS算法的常見誤解 3.Young GC – ParNew算法解析 4. Old GC – CMS算法解析 5. Full GC算法解析 |
第5講:GC – G1剖析 1.G1相對CMS,改進(jìn)的地方 2.G1與 CMS內(nèi)存布局的對比 3.G1算法 – 年輕代解析 4.G1算法 – 年老代解析 |
第6講:GC – ZGC剖析 1.ZGC相對 CMS/G1,先進(jìn)性體現(xiàn)在哪? 2.ZGC核心技術(shù) – 染色指針 3.ZGC算法解析 4.ZGC還有哪些不足? |
第三天 Java并發(fā)編程 – 高級 第1課:同步工具類 Semaphore; CountDownLatch; CyclicBarrier 使用場景;實現(xiàn)原理 Exchanger Phaser 使用場景;實現(xiàn)原理 |
第2課:并發(fā)容器 1.BlockingQueue ArrayBlockingQueue PriorityBlockingQueue 2.BlockingQueue(續(xù)) DelayQueue SynchronousQueue 3.BlockingDequeCopyOnWrite CopyOnWriteArrayListCopyOnWriteArraySet 4.ConcurrentLinkedQueue/ Deque 使用場景與實現(xiàn)原理 5.ConcurrentHashMap 使用場景與實現(xiàn)原理 6.ConcurrentSkipListMap/Set 使用場景與實現(xiàn)原理 |
第3課:線程池與Future 1.線程池-實現(xiàn)原理剖析:線程池的實現(xiàn)原理;線程池的類繼承體系;線程池的優(yōu)雅關(guān)閉 ;任務(wù)的提交過程分析 線程池的4種拒絕策略 ; 2.Callable與Future:Callable與Runnable;Future的廣泛用途;Future的實現(xiàn)原理 3.ScheduledThreadPool Executor:實現(xiàn)原理分析 4.Executors工具類與總結(jié):實現(xiàn)原理分析;異步編程總結(jié); |
第4講:ForkJoinPool 1.ForkJoinPool用法 ;工作竊取隊列 ;狀態(tài)變量 ctl解析 2.ForkJoinPool原理解析:阻塞棧Treiber Stack ;Worker線程的阻塞-喚醒機(jī)制任務(wù)的提交過程分析 3.ForkJoinPool原理解析(續(xù)1):工作竊取算法順序鎖 SeqLock ;ForkJoinTask的fork/join ; 4.ForkJoinPool原理解析(續(xù)2):join的層層嵌套 ;ForkJoinPool的優(yōu)雅關(guān)閉 |
第5課:CompletableFuture 1.CompletableFuture使用場景:最簡單的用法;提交任務(wù);四種任務(wù)原型 ;CompletionStage接口 ; 2.CompletableFuture實現(xiàn)原理:CompletableFuture的構(gòu)造: 任務(wù)類型的適配 ;任務(wù)的鏈?zhǔn)綀?zhí)行過程分析thenApply與thenApplyAsync的區(qū)別 3.CompletableFuture實現(xiàn)原理(續(xù)):任務(wù)的網(wǎng)狀執(zhí)行:有向無環(huán)圖 ;內(nèi)部的計算圖分析 ; |
第6課 JDK8以后對JUC包的改動 JUC包隨Java版本發(fā)展的變化 1.JDK8相對JDK7,對并發(fā)包的改動 2.JDK11相對JDK8,對并發(fā)包的改動 3.JDK17相對JDK11,對并發(fā)包的改動 |
第四天 Java現(xiàn)網(wǎng)問題排查 與 GC調(diào)優(yōu) 第1課 現(xiàn)網(wǎng)問題排查與解決入門 1. 現(xiàn)網(wǎng)問題排查的基本方法論 2. 問題與工具 |
第2課 內(nèi)存泄漏 內(nèi)存泄漏 - 排查方法與案例 1.dump與MAT工具 2.jemalloc/jeprof 3.NMT與jcmd 4.典型案例 |
第3課 CPU飆高 CPU飆高 - 排查方法與案例 1.Linux常見cpu相關(guān)命令、jstack 2.CPU火焰圖 3.典型案例 |
第4課 其它問題與工具 1.阿里arthas工具 2.典型案例 |
第5課GC調(diào)優(yōu) 1.GC調(diào)優(yōu)的目標(biāo)、方法論 2.GC算法深入解析 3.案例 |