Offer 來了:Java 面試核心知識點精講 (原理篇)

Offer 來了:Java 面試核心知識點精講 (原理篇)

作者: 王磊
出版社: 電子工業
出版在: 2019-11-01
ISBN-13: 9787121376184
ISBN-10: 7121376180





內容描述


本書是對Java程序員面試必備知識點的總結,詳細講解了JVM原理、多線程、數據結構和算法、分佈式緩存、設計模式等面試必備知識點,在講解時不拖泥帶水,力求精簡。本書總計9章,第1章講解JVM原理,涉及JVM運行機制、JVM內存模型、常用垃圾回收算法和JVM類加載機制等內容;第2章講解Java基礎知識,涉及集合、異常分類及處理、反射、註解、內部類、泛型和序列化等內容;第3章講解Java並發編程知識,涉及Java多線程的工作原理及應用、Java線程池的工作原理及應用,以及鎖、進程調度算法等內容;第4章講解數據結構知識,涉及棧、隊列、鏈表、散列表、二叉樹、紅黑樹、圖和位圖等內容;第5章講解Java中的常用算法,涉及二分查找、冒泡排序、插入排序、快速排序、希爾排序、歸並排序、桶排序、基數排序等算法;第6章講解網絡與負載均衡原理,涉及TCP/IP、HTTP、常用負載均衡算法和LVS原理等內容;第7章講解數據庫及分佈式事務原理,涉及數據庫存儲引擎、數據庫並發操作和鎖、數據庫分佈式事務等內容;第8章講解分佈式緩存的原理及應用,涉及分佈式緩存介紹、Ehcache原理及應用、Redis原理及應用、分佈式緩存設計的核心問題等內容;第9章講解設計模式,涉及常見的23種經典設計模式。本書可作為Java程序員的技術面試參考用書,也可作為Java程序員、技術經理和架構師的日常技術參考用書。


目錄大綱


第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實現有返回值的線程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實現328


作者介紹


王磊,現任國內某知名互聯網公司大數據技術架構師,有十餘年豐富的物聯網及大數據研發和技術架構經驗,對物聯網及大數據的原理和技術實現有深刻的理解。長期從事海外項目的研發和交付工作,對異地多活數據中心的建設及高可用、高並發系統的設計有豐富的實戰經驗。




相關書籍

高級前端程序員面試筆試寶典

作者 平文 楚秦

2019-11-01

Python 程序員面試算法寶典

作者 猿媛之家 組編 張波 楚秦 等

2019-11-01

程序員面試筆試通關寶典

作者 聚慕課教育研發中心

2019-11-01