Java面試一戰到底(基礎捲)
內容描述
本書立足於當前主流互聯網企業對Java開發人員的技術要求,分析並總結面試中常見的面試考點以提升Java開發人員的技術實力。通過結合作者和行業內多位閱歷豐富的Java開發人員、面試官和獵頭的工作經驗,總結出高效的面試技巧,助力Java開發人員早日走出面試困惑期,收獲滿意的工作機會和豐厚的薪資。本書第1章講解Java語言開發環境的搭建過程。第2章和第3章講解Java開發人員面試中常見的數據結構和算法考點。第4章講解Java開發人員面試中常見的Java基礎相關的考點。第5章和第6章講解Java開發人員面試中常見的並發編程考點。第7章和第8章講解Java開發人員可能會面臨的面試形式和應對面試所需的技巧。 本書內容翔實,貼近面試實踐,考點講解詳盡,適用於所有Java語言面試候選人、分佈式系統開發愛好者以及電腦相關專業的學生閱讀,也可供具有一到三年Java開發經驗的讀者夯實基礎,提升開發技術。
目錄大綱
目 錄
第一篇 準備開發環境
第1章 開發環境搭建 1
1.1 Java語言版本構成及特性 1
1.2 JDK的安裝 3
1.3 IntelliJ IDEA的安裝 4
1.4 Apache Maven的安裝 5
1.5 IntelliJ IDEA插件安裝 5
1.6 小結 6
第二篇 數據結構和算法
第2章 數據結構 7
2.1 線性表 8
2.1.1 線性表的定義 8
2.1.2 線性表的類型 8
2.1.3 線性表的抽象類型的定義 8
2.1.4 線性表常見面試考點 9
2.2 順序表 10
2.2.1 順序表添加元素 10
2.2.2 順序表查找元素 10
2.2.3 順序表刪除元素 11
2.2.4 順序表的實現 11
2.2.5 順序表常見面試考點 15
2.3 單鏈表 15
2.3.1 單鏈表添加元素 16
2.3.2 單鏈表查找元素 16
2.3.3 單鏈表刪除元素 17
2.3.4 單鏈表的實現 17
2.3.5 單鏈表常見面試考點 23
2.4 雙向鏈表 23
2.4.1 雙向鏈表添加元素 24
2.4.2 雙向鏈表查找元素 24
2.4.3 雙向鏈表刪除元素 25
2.4.4 雙向循環鏈表 25
2.4.5 雙向鏈表常見面試考點 26
2.5 棧 26
2.5.1 順序棧 27
2.5.2 鏈式棧 31
2.5.3 棧常見面試考點 34
2.6 隊列 34
2.6.1 順序隊列 35
2.6.2 循環隊列 39
2.6.3 鏈式隊列 43
2.6.4 優先隊列 46
2.6.5 隊列常見面試考點 50
2.7 樹 50
2.7.1 樹結構的相關概念 51
2.7.2 二叉樹 52
2.7.3 斜樹 52
2.7.4 滿二叉樹 53
2.7.5 完全二叉樹 53
2.7.6 二叉樹存儲結構 54
2.7.7 二叉樹的遍歷 56
2.7.8 二叉排序樹 56
2.7.9 AVL樹 64
2.7.10 2-3-4樹 79
2.7.11 紅黑樹 86
2.7.12 哈夫曼樹 106
2.7.13 樹常見面試考點 114
2.8 樹和森林 115
2.8.1 普通樹轉化為二叉樹 115
2.8.2 森林轉化為二叉樹 116
2.8.3 樹的遍歷 117
2.8.4 森林的遍歷 117
2.8.5 樹和森林常見面試考點 117
2.9 圖 118
2.9.1 圖的相關概念 118
2.9.2 圖的鄰接矩陣存儲結構 119
2.9.3 圖的鄰接表存儲結構 122
2.9.4 圖的十字鏈表存儲結構 126
2.9.5 圖的遍歷 132
2.9.6 最小生成樹 136
2.9.7 Prim算法求解最小生成樹 137
2.9.8 Kruskal算法求解最小生成樹 146
2.9.9 Dijkstra算法求解最短路徑 152
2.9.10 圖的常見面試考點 159
第3章 算法 160
3.1 字符串相關算法 160
3.1.1 驗證迴文字符串 160
3.1.2 分割迴文字符串 162
3.1.3 單詞拆分 164
3.1.4 前綴樹 167
3.1.5 有效的字母異位詞 170
3.1.6 無重復字符的最長子串 172
3.1.7 電話號碼的字母組合 174
3.1.8 串聯所有單詞的子串 176
3.1.9 字符串相關算法常見面試考點 179
3.2 數組相關算法 179
3.2.1 乘積最大連續子序列 179
3.2.2 求眾數 181
3.2.3 旋轉數組 183
3.2.4 移動零 186
3.2.5 求兩個數組的交集 187
3.2.6 遞增的三元子序列 189
3.2.7 搜索二維矩陣 191
3.2.8 除自身以外數組的乘積 194
3.2.9 數組相關算法常見面試考點 197
3.3 排序算法 197
3.3.1 冒泡排序算法 197
3.3.2 選擇排序算法 199
3.3.3 插入排序算法 201
3.3.4 希爾排序算法 203
3.3.5 歸並排序算法 206
3.3.6 快速排序算法 208
3.3.7 堆排序算法 213
3.3.8 計數排序算法 219
3.3.9 桶排序算法 221
3.3.10 基數排序算法 224
3.3.11 排序算法常見面試考點 227
第三篇 Java基礎
第4章 Java中的集合框架 229
4.1 集合框架概述 229
4.2 ArrayList 230
4.2.1 ArrayList類的使用方式 230
4.2.2 ArrayList類的聲明 232
4.2.3 ArrayList類的屬性 233
4.2.4 ArrayList類的構造器 233
4.2.5 ArrayList類添加元素的方法 234
4.2.6 ArrayList類查詢元素方法 238
4.2.7 ArrayList類更新元素方法 240
4.2.8 ArrayList類刪除元素方法 240
4.2.9 ArrayList類批量方法 242
4.2.10 ArrayList類導出數組方法 244
4.2.11 ArrayList類排序方法 245
4.2.12 ArrayList類的迭代器 247
4.2.13 ArrayList常見面試考點 253
4.3 LinkedList 253
4.3.1 LinkedList類的使用方式 253
4.3.2 LinkedList類的聲明 255
4.3.3 LinkedList類的屬性 256
4.3.4 LinkedList類的內部類Node 256
4.3.5 LinkedList類的構造器 257
4.3.6 LinkedList類添加元素方法 257
4.3.7 LinkedList類查詢元素的方法 260
4.3.8 LinkedList類更新元素方法 261
4.3.9 LinkedList類刪除元素的方法 262
4.3.10 LinkedList類批量方法 263
4.3.11 LinkedList類的迭代器 265
4.3.12 LinkedList常見面試考點 269
4.4 Deque 270
4.4.1 Deque類的使用方式 270
4.4.2 Queue接口 271
4.4.3 Deque接口 272
4.4.4 LinkedList類的addFirst()方法 276
4.4.5 LinkedList類的addLast()方法 276
4.4.6 LinkedList類的offerFirst()方法 277
4.4.7 LinkedList類的offerLast()方法 277
4.4.8 LinkedList類的removeFirst()方法 278
4.4.9 LinkedList類的removeLast()方法 279
4.4.10 LinkedList類的pollFirst()方法 280
4.4.11 LinkedList類的pollLast()方法 280
4.4.12 LinkedList類的getFirst()方法 280
4.4.13 LinkedList類的getLast()方法 281
4.4.14 LinkedList類的peekFirst()方法 281
4.4.15 LinkedList類的peekLast()方法 281
4.4.16 LinkedList類的add()方法 282
4.4.17 LinkedList類的offer()方法 282
4.4.18 LinkedList類的remove()方法 282
4.4.19 LinkedList類的poll()方法 283
4.4.20 LinkedList類的element()方法 283
4.4.21 LinkedList類的peek()方法 283
4.4.22 LinkedList類的removeFirstOccurrence()方法 284
4.4.23 LinkedList類的removeLastOccurrence()方法 284
4.4.24 LinkedList類的push()方法 285
4.4.25 LinkedList類的pop()方法 286
4.4.26 Deque常見面試考點 286
4.5 PriorityQueue 286
4.5.1 PriorityQueue類的使用方式 286
4.5.2 PriorityQueue類的聲明 287
4.5.3 PriorityQueue類的屬性 288
4.5.4 PriorityQueue類的構造器 289
4.5.5 PriorityQueue類的add()方法 294
4.5.6 PriorityQueue類的offer()方法 294
4.5.7 PriorityQueue類的poll()方法 297
4.5.8 PriorityQueue類的peek()方法 297
4.5.9 PriorityQueue常見面試考點 298
4.6 HashMap 298
4.6.1 HashMap類的使用方式 298
4.6.2 Entry接口 300
4.6.3 Map接口 301
4.6.4 HashMap類的聲明 307
4.6.5 HashMap類的屬性 307
4.6.6 HashMap靜態內部類Node 309
4.6.7 HashMap靜態內部類TreeNode 311
4.6.8 HashMap的存儲結構 312
4.6.9 HashMap的類構造器 312
4.6.10 HashMap類的put()方法 313
4.6.11 HashMap類的hash()方法 314
4.6.12 HashMap類的putVal()方法 314
4.6.13 HashMap類的resize()方法 318
4.6.14 HashMap類的putTreeVal()方法 323
4.6.15 HashMap類的treeifyBin()方法 324
4.6.16 HashMap類的remove()方法 330
4.6.17 HashMap類的get()方法 334
4.6.18 HashMap常見面試考點 335
4.7 LinkedHashMap 335
4.7.1 LinkedHashMap類的使用方式 336
4.7.2 LinkedHashMap類的聲明 339
4.7.3 LinkedHashMap靜態內部類Entry 339
4.7.4 LinkedHashMap類的屬性 339
4.7.5 LinkedHashMap類的構造器 340
4.7.6 LinkedHashMap類的put()方法 341
4.7.7 LinkedHashMap類的get()方法 345
4.7.8 LinkedHashMap類的getOrDefault()方法 345
4.7.9 LinkedHashMap類的containsValue()方法 346
4.7.10 LinkedHashMap類的removeEldestEntry()方法 346
4.7.11 LinkedHashMap類常見面試考點 346
4.8 TreeMap 346
4.8.1 TreeMap類的使用方式 347
4.8.2 TreeMap類的聲明 348
4.8.3 TreeMap靜態內部類Entry 352
4.8.4 TreeMap類的屬性 353
4.8.5 TreeMap類的構造器 354
4.8.6 TreeMap類的putAll()方法 355
4.8.7 TreeMap類的buildFromSorted()方法 355
4.8.8 TreeMap類的put()方法 358
4.8.9 TreeMap類的get()方法 361
4.8.10 TreeMap類的remove()方法 362
4.8.11 TreeMap類的firstKey()方法 365
4.8.12 TreeMap類的lastKey()方法 365
4.8.13 TreeMap類常見面試考點 366
4.9 HashSet 366
4.9.1 HashSet類的使用方式 366
4.9.2 HashSet類的聲明 367
4.9.3 HashSet類的屬性 367
4.9.4 HashSet類的構造器 368
4.9.5 HashSet類的add()方法 369
4.9.6 HashSet類的remove()方法 369
4.9.7 HashSet類的contains()方法 369
4.9.8 HashSet類的iterator()方法 370
4.9.9 HashSet類常見面試考點 372
4.10 LinkedHashSet 372
4.10.1 LinkedHashSet類的使用方式 372
4.10.2 LinkedHashSet類的聲明 373
4.10.3 LinkedHashSet類構造器 373
4.10.4 LinkedHashSet類常見面試考點 374
4.11 TreeSet 374
4.11.1 TreeSet類的使用方式 375
4.11.2 TreeSet類的聲明 377
4.11.3 TreeSet類的屬性 379
4.11.4 TreeSet類的構造器 379
4.11.5 TreeSet類的add()方法 380
4.11.6 TreeSet類的first()方法 381
4.11.7 TreeSet類的last()方法 382
4.11.8 TreeSet類的descendingIterator()方法 382
4.11.9 TreeSet類常見面試考點 385
第四篇 Java並發編程
第5章 線程基礎 387
5.1 線程的概念 387
5.1.1 進程與線程的關系 387
5.1.2 線程的概念常見面試考點 388
5.2 線程的創建 388
5.2.1 繼承Thread類 388
5.2.2 實現Runnable接口 389
5.2.3 實現Callable接口 390
5.2.4 線程池 391
5.2.5 線程創建的常見面試考點 394
5.3 線程的生命周期 394
5.3.1 初始狀態 395
5.3.2 就緒狀態 396
5.3.3 運行中狀態 396
5.3.4 阻塞狀態 396
5.3.5 等待狀態 396
5.3.6 超時等待狀態 396
5.3.7 終止狀態 396
5.3.8 線程的生命周期常見面試考點 397
5.4 線程中斷 397
5.4.1 線程中斷的概念 397
5.4.2 線程中斷的響應 397
5.4.3 線程中斷的操作 397
5.4.4 線程中斷常見面試考點 401
5.5 線程的優先級和守護線程 401
5.5.1 線程優先級的特性 402
5.5.2 守護線程 406
5.5.3 線程優先級和守護線程常見面試考點 408
5.6 線程常用方法 408
5.6.1 sleep()方法 408
5.6.2 wait()方法 410
5.6.3 notify()/notifyAll()方法 411
5.6.4 yield()方法 413
5.6.5 join()方法 415
5.6.6 線程常用方法常見面試考點 416
5.7 線程組 416
5.7.1 線程組的概念 416
5.7.2 一級關聯 417
5.7.3 多級關聯 419
5.7.4 線程組自動歸屬 420
5.7.5 批量管理線程 421
5.7.6 線程組常見面試考點 422
5.8 Thread類代碼解析 423
5.8.1 Thread類常用屬性 423
5.8.2 Thread類的構造器 424
5.8.3 Thread類的start()方法 427
5.8.4 Thread類的run()方法 431
5.8.5 Thread類的exit()方法 431
5.8.6 Thread類的interrupt()方法 431
5.8.7 Thread類的interrupted()方法 434
5.8.8 Thread類的isInterrupted()方法 435
5.8.9 Thread類的join()方法 435
5.8.10 Thread類的sleep()方法 438
5.8.11 Thread類常見面試考點 441
5.9 volatile 442
5.9.1 硬件系統架構 442
5.9.2 緩存一致性問題 443
5.9.3 緩存一致性協議 444
5.9.4 as-if-serial 445
5.9.5 程序順序規則 446
5.9.6 指令重排序 447
5.9.7 volatile內存語義 450
5.9.8 volatile常見面試考點 451
5.10 synchronized 451
5.10.1 synchronized的作用 451
5.10.2 synchronized的使用方式 452
5.10.3 synchronized死鎖問題 462
5.10.4 synchronized的特性 464
5.10.5 synchronized的實現原理 464
5.10.6 synchronized的存儲結構 469
5.10.7 自旋鎖 473
5.10.8 鎖消除 474
5.10.9 鎖粗化 475
5.10.10 偏向鎖 475
5.10.11 輕量級鎖 478
5.10.12 重量級鎖 480
5.10.13 synchronized實現線程通信 481
5.10.14 synchronized常見面試考點 488
5.11 ThreadLocal 488
5.11.1 ThreadLocal的使用方式 488
5.11.2 ThreadLocal原理分析 490
5.11.3 靜態內部類ThreadLocalMap 492
5.11.4 ThreadLocal類的set()方法 499
5.11.5 ThreadLocal類的get()方法 499
5.11.6 ThreadLocal與內存泄漏 500
5.11.7 ThreadLocal常見面試考點 501
第6章 並發編程工具 502
6.1 AbstractQueuedSynchronizer 502
6.1.1 AbstractOwnableSynchronizer代碼分析 502
6.1.2 AbstractQueuedSynchronizer內部類 503
6.1.3 AbstractQueuedSynchronizer的屬性 506
6.1.4 AbstractQueuedSynchronizer獨占模式 506
6.1.5 AbstractQueuedSynchronizer共享模式 516
6.1.6 AbstractQueuedSynchronizer條件模式 522
6.1.7 AbstractQueuedSynchronizer常見面試考點 546
6.2 Lock 547
6.2.1 Lock接口加鎖方法 547
6.2.2 Lock接口解鎖方法 549
6.2.3 Lock接口的newCondition()方法 549
6.3 ReentrantLock 549
6.3.1 ReentrantLock的使用方式 549
6.3.2 ReentrantLock類圖 551
6.3.3 ReentrantLock內部類Sync代碼解析 552
6.3.4 ReentrantLock內部類FairSync代碼解析 554
6.3.5 ReentrantLock內部類NonfairSync代碼解析 555
6.3.6 ReentrantLock構造器代碼解析 556
6.3.7 ReentrantLock公平鎖代碼解析 557
6.3.8 ReentrantLock非公平鎖代碼解析 559
6.3.9 公平鎖與非公平鎖比較 560
6.3.10 ReentrantLock常見面試考點 561
6.4 Semaphore 561
6.4.1 Semaphore的使用方式 561
6.4.2 Semaphore類圖 563
6.4.3 Semaphore內部類Sync代碼解析 563
6.4.4 Semaphore內部類FairSync代碼解析 565
6.4.5 Semaphore內部類NonfairSync代碼解析 566
6.4.6 Semaphore構造器代碼解析 566
6.4.7 Semaphore公平模式代碼解析 567
6.4.8 Semaphore非公平模式代碼解析 570
6.4.9 Semaphore常見面試考點 571
6.5 CountDownLatch 571
6.5.1 CountDownLatch的使用方式 572
6.5.2 CountDownLatch類圖 575
6.5.3 CountDownLatch內部類Sync代碼解析 575
6.5.4 CountDownLatch構造器代碼解析 576
6.5.5 await()方法代碼解析 577
6.5.6 await(long timeout, TimeUnit unit)方法代碼解析 578
6.5.7 countDown()方法代碼解析 579
6.5.8 CountDownLatch常見面試考點 580
6.6 CyclicBarrier 580
6.6.1 CyclicBarrier的使用方式 580
6.6.2 CyclicBarrier的屬性 583
6.6.3 CyclicBarrier內部類Generation代碼解析 583
6.6.4 CyclicBarrier構造器代碼解析 584
6.6.5 await()方法代碼解析 584
6.6.6 reset()方法代碼解析 588
6.6.7 CyclicBarrier常見面試考點 588
6.7 ReentrantReadWriteLock 589
6.7.1 ReentrantReadWriteLock的使用方式 589
6.7.2 ReentrantReadWriteLock類圖 591
6.7.3 ReentrantReadWriteLock的屬性 592
6.7.4 ReentrantReadWriteLock構造器代碼解析 592
6.7.5 ReentrantReadWriteLock內部類Sync代碼解析 593
6.7.6 ReentrantReadWriteLock內部類FairSync代碼解析 595
6.7.7 ReentrantReadWriteLock內部類NonfairSync代碼解析 595
6.7.8 ReentrantReadWriteLock內部類ReadLock代碼解析 596
6.7.9 ReentrantReadWriteLock內部類WriteLock代碼解析 597
6.7.10 ReentrantReadWriteLock寫鎖代碼解析 599
6.7.11 ReentrantReadWriteLock讀鎖代碼解析 602
6.7.12 ReentrantReadWriteLock常見面試考點 607
6.8 ArrayBlockingQueue 607
6.8.1 ArrayBlockingQueue的使用方式 608
6.8.2 ArrayBlockingQueue的屬性 609
6.8.3 ArrayBlockingQueue構造器代碼解析 610
6.8.4 ArrayBlockingQueue入隊方法代碼解析 612
6.8.5 ArrayBlockingQueue出隊方法代碼解析 614
6.8.6 ArrayBlockingQueue常見面試考點 617
6.9 LinkedBlockingQueue 618
6.9.1 LinkedBlockingQueue的使用方式 618
6.9.2 LinkedBlockingQueue內部類Node代碼解析 620
6.9.3 LinkedBlockingQueue的屬性 621
6.9.4 LinkedBlockingQueue構造器代碼解析 622
6.9.5 LinkedBlockingQueue入隊方法代碼解析 623
6.9.6 LinkedBlockingQueue出隊方法代碼解析 625
6.9.7 LinkedBlockingQueue常見面試考點 629
6.10 DelayQueue 629
6.10.1 DelayQueue的使用方式 629
6.10.2 DelayQueue的聲明 632
6.10.3 DelayQueue的屬性 632
6.10.4 DelayQueue構造器代碼解析 633
6.10.5 DelayQueue入隊方法代碼解析 633
6.10.6 DelayQueue出隊方法代碼解析 635
6.10.7 DelayQueue工作原理解析 639
6.10.8 DelayQueue常見面試考點 640
6.11 LinkedBlockingDeque 640
6.11.1 LinkedBlockingDeque的使用方式 640
6.11.2 LinkedBlockingDeque的聲明 644
6.11.3 LinkedBlockingDeque內部類Node代碼解析 647
6.11.4 LinkedBlockingDeque的屬性 648
6.11.5 LinkedBlockingDeque構造器代碼解析 649
6.11.6 LinkedBlockingDeque入隊方法代碼解析 650
6.11.7 LinkedBlockingDeque出隊方法代碼解析 654
6.11.8 LinkedBlockingDeque常見面試考點 658
6.12 CopyOnWriteArrayList 658
6.12.1 CopyOnWriteArrayList的使用方式 658
6.12.2 CopyOnWriteArrayList的屬性 660
6.12.3 CopyOnWriteArrayList構造器代碼解析 660
6.12.4 CopyOnWriteArrayList添加元素方法代碼解析 661
6.12.5 CopyOnWriteArrayList更新元素方法代碼解析 663
6.12.6 CopyOnWriteArrayList刪除元素方法代碼解析 664
6.12.7 CopyOnWriteArrayList查找元素方法代碼解析 666
6.12.8 CopyOnWriteArrayList工作原理解析 667
6.12.9 CopyOnWriteArrayList常見面試考點 668
6.13 ConcurrentHashMap 668
6.13.1 ConcurrentHashMap的使用方式 669
6.13.2 ConcurrentHashMap類的屬性 670
6.13.3 ConcurrentHashMap內部類Node代碼解析 671
6.13.4 ConcurrentHashMap內部類TreeNode代碼解析 672
6.13.5 ConcurrentHashMap內部類TreeBin代碼解析 674
6.13.6 ConcurrentHashMap內部類ForwardingNode代碼解析 675
6.13.7 ConcurrentHashMap類put()方法代碼解析 676
6.13.8 ConcurrentHashMap類putIfAbsent()方法代碼解析 676
6.13.9 ConcurrentHashMap類putVal()方法代碼解析 677
6.13.10 ConcurrentHashMap類initTable()方法代碼解析 679
6.13.11 ConcurrentHashMap類helpTransfer()方法代碼解析 680
6.13.12 ConcurrentHashMap類treeifyBin()方法代碼解析 682
6.13.13 ConcurrentHashMap類tryPresize()方法代碼解析 683
6.13.14 ConcurrentHashMap類transfer()方法代碼解析 684
6.13.15 ConcurrentHashMap類get()方法代碼解析 690
6.13.16 ConcurrentHashMap常見面試考點 690
6.14 Unsafe 690
6.14.1 Unsafe單例設計模式 691
6.14.2 Unsafe類內存操作相關方法 691
6.14.3 Unsafe類CAS相關方法 695
6.14.4 Unsafe類線程調度相關方法 697
6.14.5 Unsafe類Class相關方法 698
6.14.6 Unsafe類對象相關方法 700
6.14.7 Unsafe類數組相關方法 701
6.14.8 Unsafe類volatile相關方法 703
6.14.9 Unsafe類內存屏障相關方法 704
6.14.10 Unsafe類常見面試考點 704
6.15 LockSupport 704
6.15.1 LockSupport的使用方式 705
6.15.2 LockSupport構造器代碼解析 706
6.15.3 LockSupport靜態代碼塊 707
6.15.4 LockSupport類阻塞方法代碼解析 708
6.15.5 LockSupport類喚醒方法代碼解析 709
6.15.6 LockSupport常見面試考點 709
6.16 原子類 710
6.16.1 AtomicInteger的使用方式 711
6.16.2 AtomicInteger類的屬性 712
6.16.3 AtomicInteger構造器代碼解析 712
6.16.4 AtomicInteger常用方法代碼解析 713
6.16.5 ABA問題 715
6.16.6 AtomicStampedReference代碼解析 717
6.16.7 原子類常見面試考點 718
6.17 線程池 719
6.17.1 ThreadPoolExecutor的使用方式 719
6.17.2 ThreadPoolExecutor構造器代碼解析 722
6.17.3 ThreadPoolExecutor工作流程 726
6.17.4 ThreadPoolExecutor內部類Worker代碼解析 727
6.17.5 ThreadPoolExecutor的狀態 729
6.17.6 ThreadPoolExecutor提交任務代碼解析 731
6.17.7 ThreadPoolExecutor類execute()方法代碼解析 733
6.17.8 ThreadPoolExecutor類addWorker()方法代碼解析 735
6.17.9 ThreadPoolExecutor類runWorker()方法代碼解析 738
6.17.10 ThreadPoolExecutor類getTask()方法代碼解析 741
6.17.11 ThreadPoolExecutor類processWorkerExit()方法代碼解析 742
6.17.12 ThreadPoolExecutor類shutdown()方法代碼解析 743
6.17.13 ThreadPoolExecutor類shutdownNow()方法代碼解析 743
6.17.14 線程池常見面試考點 744
第五篇 面試與技巧
第7章 剖析面試 745
7.1 什麽是面試 745
7.1.1 讓面試官記住你 746
7.1.2 讓面試官信任你 747
7.2 面試環節分析 748
7.2.1 筆試 748
7.2.2 語音面試 748
7.2.3 視頻面試 748
7.2.4 現場面試 749
7.2.5 壓力面試 750
7.2.6 背景調查 750
7.2.7 在線考試 751
第8章 面試技巧 752
8.1 第一類候選人 752
8.2 第二類候選人 755
8.3 第三類候選人 755
8.4 第四類候選人 756
參考文獻 762
作者介紹
週冠亞,上海交通大學軟件工程碩士,資深Java開發工程師。先後就職於飛牛網、萬達網絡科技有限公司、上海2345網絡科技有限公司、美團點評,目前就職於上海某知名電子商務公司,主要從事後端Java開發工作,擁有豐富的軟件開發經驗,熟悉Java、高並發、微服務、大數據及相關軟件架構,已出版《Spring 5企業級開發實戰》(清華大學出版社,2018年)。