第1章 JVM 1
1.1 JVM的運行機製 1
1.2 多綫程 2
1.3 JVM的內存區域 3
1.3.1 程序計數器:綫程私有,無內存溢齣問題 4
1.3.2 虛擬機棧:綫程私有,描述Java方法的執行過程 4
1.3.3 本地方法區:綫程私有 5
1.3.4 堆:也叫作運行時數據區,綫程共享 5
1.3.5 方法區:綫程共享 5
1.4 JVM的運行時內存 6
1.4.1 新生代:Eden區、ServivorTo區和ServivorFrom區 7
1.4.2 老年代 8
1.4.3 永久代 8
1.5 垃圾迴收與算法 9
1.5.1 如何確定垃圾 9
1.5.2 Java中常用的垃圾迴收算法 10
1.6 Java中的4種引用類型 13
1.7 分代收集算法和分區收集算法 14
1.7.1 分代收集算法 14
1.7.2 分區收集算法 15
1.8 垃圾收集器 15
1.8.1 Serial垃圾收集器:單綫程,復製算法 16
1.8.2 ParNew垃圾收集器:多綫程,復製算法 16
1.8.3 Parallel Scavenge垃圾收集器:多綫程,復製算法 16
1.8.4 Serial Old垃圾收集器:單綫程,標記整理算法 16
1.8.5 Parallel Old垃圾收集器:多綫程,標記整理算法 17
1.8.6 CMS垃圾收集器 18
1.8.7 G1垃圾收集器 18
1.9 Java網絡編程模型 19
1.9.1 阻塞I/O模型 19
1.9.2 非阻塞I/O模型 19
1.9.3 多路復用I/O模型 20
1.9.4 信號驅動I/O模型 21
1.9.5 異步I/O模型 21
1.9.6 Java I/O 21
1.9.7 Java NIO 22
1.10 JVM的類加載機製 28
1.10.1 JVM的類加載階段 28
1.10.2 類加載器 29
1.10.3 雙親委派機製 30
1.10.4 OSGI 32
第2章 Java基礎 33
2.1 集閤 33
2.1.1 List:可重復 34
2.1.2 Queue 34
2.1.3 Set:不可重復 35
2.1.4 Map 36
2.2 異常分類及處理 39
2.2.1 異常的概念 39
2.2.2 異常分類 40
2.2.3 異常處理方式:拋齣異常、使用try catch捕獲並處理異常 41
2.3 反射機製 42
2.3.1 動態語言的概念 42
2.3.2 反射機製的概念 43
2.3.3 反射的應用 43
2.3.4 Java的反射API 43
2.3.5 反射的步驟 43
2.3.6 創建對象的兩種方式 45
2.3.7 Method的invoke方法 45
2.4 注解 46
2.4.1 注解的概念 46
2.4.2 標準元注解:@Target、@Retention、@Documented、@Inherited 46
2.4.3 注解處理器 47
2.5 內部類 49
2.5.1 靜態內部類 49
2.5.2 成員內部類 50
2.5.3 局部內部類 51
2.5.4 匿名內部類 51
2.6 泛型 52
2.6.1 泛型標記和泛型限定:E、T、K、V、N、? 53
2.6.2 泛型方法 53
2.6.3 泛型類 54
2.6.4 泛型接口 55
2.6.5 類型擦除 56
2.7 序列化 56
2.7.1 Java序列化API的使用 57
2.7.2 序列化和反序列化 58
第3章 Java並發編程 59
3.1 Java綫程的創建方式 59
3.1.1 繼承Thread類 59
3.1.2 實現Runnable接口 60
3.1.3 通過ExecutorService和Callable<Class>實現有返迴值的綫程 61
3.1.4 基於綫程池 62
3.2 綫程池的工作原理 62
3.2.1 綫程復用 63
3.2.2 綫程池的核心組件和核心類 63
3.2.3 Java綫程池的工作流程 65
3.2.4 綫程池的拒絕策略 66
3.3 5種常用的綫程池 68
3.3.1 newCachedThreadPool 68
3.3.2 newFixedThreadPool 68
3.3.3 newScheduledThreadPool 69
3.3.4 newSingleThreadExecutor 69
3.3.5 newWorkStealingPool 69
3.4 綫程的生命周期 70
3.4.1 新建狀態:New 71
3.4.2 就緒狀態:Runnable 71
3.4.3 運行狀態:Running 71
3.4.4 阻塞狀態:Blocked 71
3.4.5 綫程死亡:Dead 72
3.5 綫程的基本方法 72
3.5.1 綫程等待:wait方法 72
3.5.2 綫程睡眠:sleep方法 73
3.5.3 綫程讓步:yield方法 73
3.5.4 綫程中斷:interrupt方法 73
3.5.5 綫程加入:join方法 74
3.5.6 綫程喚醒:notify方法 75
3.5.7 後颱守護綫程:setDaemon方法 75
3.5.8 sleep方法與wait方法的區彆 76
3.5.9 start方法與run方法的區彆 76
3.5.10 終止綫程的4種方式 77
3.6 Java中的鎖 79
3.6.1 樂觀鎖 79
3.6.2 悲觀鎖 79
3.6.3 自鏇鎖 80
3.6.4 synchronized 81
3.6.5 ReentrantLock 89
3.6.6 synchronized和ReentrantLock的比較 94
3.6.7 Semaphore 95
3.6.8 AtomicInteger 96
3.6.9 可重入鎖 97
3.6.10 公平鎖與非公平鎖 97
3.6.11 讀寫鎖:ReadWriteLock 98
3.6.12 共享鎖和獨占鎖 98
3.6.13 重量級鎖和輕量級鎖 99
3.6.14 偏嚮鎖 99
3.6.15 分段鎖 100
3.6.16 同步鎖與死鎖 100
3.6.17 如何進行鎖優化 100
3.7 綫程上下文切換 101
3.7.1 上下文切換 102
3.7.2 引起綫程上下文切換的原因 102
3.8 Java阻塞隊列 103
3.8.1 阻塞隊列的主要操作 104
3.8.2 Java中的阻塞隊列實現 108
3.9 Java並發關鍵字 113
3.9.1 CountDownLatch 113
3.9.2 CyclicBarrier 114
3.9.3 Semaphore 116
3.9.4 volatile關鍵字的作用 117
3.10 多綫程如何共享數據 119
3.10.1 將數據抽象成一個類,並將對這個數據的操作封裝在類的方法中 119
3.10.2 將Runnable對象作為一個類的內部類,將共享數據作為這個類的成員變量 121
3.11 ConcurrentHashMap並發 122
3.11.1 減小鎖粒度 122
3.11.2 ConcurrentHashMap的實現 123
3.12 Java中的綫程調度 123
3.12.1 搶占式調度 123
3.12.2 協同式調度 124
3.12.3 Java綫程調度的實現:搶占式 124
3.12.4 綫程讓齣CPU的情況 125
3.13 進程調度算法 125
3.13.1 優先調度算法 125
3.13.2 高優先權優先調度算法 126
3.13.3 時間片的輪轉調度算法 127
3.14 什麼是CAS 128
3.14.1 CAS的概念:比較並交換 128
3.14.2 CAS的特性:樂觀鎖 128
3.14.3 CAS自鏇等待 129
3.15 ABA問題 129
3.16 什麼是AQS 130
3.16.1 AQS的原理 130
3.16.2 state:狀態 131
3.16.3 AQS共享資源的方式:獨占式和共享式 131
第4章 數據結構 133
4.1 棧及其Java實現 133
4.2 隊列及其Java實現 136
4.3 鏈錶 138
4.3.1 鏈錶的特點 139
4.3.2 單嚮鏈錶的操作及其Java實現 139
4.3.3 雙嚮鏈錶及其Java實現 143
4.3.4 循環鏈錶 146
4.4 散列錶 146
4.4.1 常用的構造散列函數 147
4.4.2 Hash的應用 148
4.5 二叉排序樹 148
4.5.1 插入操作 149
4.5.2 刪除操作 149
4.5.3 查找操作 151
4.5.4 用Java實現二叉排序樹 151
4.6 紅黑樹 155
4.6.1 紅黑樹的特性 156
4.6.2 紅黑樹的左鏇 156
4.6.3 紅黑樹的右鏇 157
4.6.4 紅黑樹的添加 157
4.6.5 紅黑樹的刪除 158
4.7 圖 159
4.7.1 無嚮圖和有嚮圖 159
4.7.2 圖的存儲結構:鄰接矩陣 160
4.7.3 圖的存儲結構:鄰接錶 161
4.7.4 圖的遍曆 162
4.8 位圖 164
4.8.1 位圖的數據結構 164
4.8.2 位圖的Java實現 165
第5章 Java中的常用算法 167
5.1 二分查找算法 167
5.1.1 二分查找算法的原理 168
5.1.2 二分查找算法的Java實現 168
5.2 冒泡排序算法 169
5.2.1 冒泡排序算法的原理 169
5.2.2 冒泡排序算法的Java實現 170
5.3 插入排序算法 171
5.3.1 插入排序算法的原理 171
5.3.2 插入排序算法的Java實現 172
5.4 快速排序算法 173
5.4.1 快速排序算法的原理 173
5.4.2 快速排序算法的Java實現 174
5.5 希爾排序算法 175
5.5.1 希爾排序算法的原理 176
5.5.2 希爾排序算法的Java實現 177
5.6 歸並排序算法 178
5.6.1 歸並排序算法的原理 178
5.6.2 歸並排序算法的Java實現 178
5.7 桶排序算法 180
5.7.1 桶排序算法的原理 180
5.7.2 桶排序算法的Java實現 181
5.8 基數排序算法 182
5.8.1 基數排序算法的原理 182
5.8.2 基數排序算法的Java實現 183
5.9 其他算法 184
5.9.1 剪枝算法 184
5.9.2 迴溯算法 186
5.9.3 最短路徑算法 186
第6章 網絡與負載均衡 188
6.1 網絡 188
6.1.1 OSI七層網絡模型 188
6.1.2 TCP/IP四層網絡模型 189
6.1.3 TCP三次握手/四次揮手 190
6.1.4 HTTP的原理 195
6.1.5 CDN的原理 199
6.2 負載均衡 201
6.2.1 四層負載均衡與七層負載均衡的對比 201
6.2.2 負載均衡算法 203
6.2.3 LVS的原理及應用 205
6.2.4 Nginx反嚮代理與負載均衡 211
第7章 數據庫及分布式事務 214
7.1 數據庫的基本概念及原則 214
7.1.1 存儲引擎 214
7.1.2 創建索引的原則 216
7.1.3 數據庫三範式 217
7.1.4 數據庫事務 218
7.1.5 存儲過程 219
7.1.6 觸發器 219
7.2 數據庫的並發操作和鎖 220
7.2.1 數據庫的並發策略 220
7.2.2 數據庫鎖 220
7.2.3 數據庫分錶 223
7.3 數據庫分布式事務 223
7.3.1 CAP 223
7.3.2 兩階段提交協議 224
7.3.3 三階段提交協議 225
7.3.4 分布式事務 227
第8章 分布式緩存的原理及應用 230
8.1 分布式緩存介紹 230
8.2 Ehcache的原理及應用 231
8.2.1 Ehcache的原理 231
8.2.2 Ehcache的應用 234
8.3 Redis的原理及應用 235
8.3.1 Redis的原理 235
8.3.2 Redis的應用 249
8.4 分布式緩存設計的核心問題 252
8.4.1 緩存預熱 253
8.4.2 緩存更新 253
8.4.3 緩存淘汰策略 253
8.4.4 緩存雪崩 253
8.4.5 緩存穿透 254
8.4.6 緩存降級 255
第9章 設計模式 256
9.1 設計模式簡介 256
9.2 工廠模式的概念及Java實現 259
9.3 抽象工廠模式的概念及Java實現 261
9.4 單例模式的概念及Java實現 265
9.5 建造者模式的概念及Java實現 268
9.6 原型模式的概念及Java實現 271
9.7 適配器模式的概念及Java實現 274
9.8 裝飾者模式的概念及Java實現 280
9.9 代理模式的概念及Java實現 282
9.10 外觀模式的概念及Java實現 284
9.11 橋接模式的概念及Java實現 288
9.12 組閤模式的概念及Java實現 291
9.13 享元模式的概念及Java實現 293
9.14 策略模式的概念及Java實現 296
9.15 模闆方法模式的概念及Java實現 299
9.16 觀察者模式的概念及Java實現 302
9.17 迭代器模式的概念及Java實現 305
9.18 責任鏈模式的概念及Java實現 308
9.19 命令模式的概念及Java實現 312
9.20 備忘錄模式的概念及Java實現 315
9.21 狀態模式的概念及Java實現 317
9.22 訪問者模式的概念及Java實現 320
9.23 中介者模式的概念及Java實現 324
9.24 解釋器模式的概念及Java實現
· · · · · · (
收起)