[Java核心技術面試精講](https://time.geekbang.org/column/intro/100006701)
## 你將獲得
* Java核心技術原理;
* Java面試必考知識點;
* 完整的Java知識體系。
## 講師介紹
楊曉峰,前Oracle北京Java平臺部門,首席工程師,OpenJDK Committer,從JDK 8開始參與了JDK的開發和測試工作,曾領導Java核心類庫北京團隊,主要負責前沿版本的核心類庫新特性相關任務。專注于Java以及其他編程語言的新特性,尤其是在云計算等前沿領域的應用和演進。
## 課程介紹
Java的誕生已經超過了20年。一直以來,Java以其語法簡單,開發者可以快速上手,適應眾多領域,具有跨平臺能力等特性,吸引了無數程序員學習和使用。基于Java優秀的特性和龐大的使用基礎,各大公司對Java工程師的需求也是源源不斷。
但作為面試者,想進入BAT并成長為一名高級Java工程師卻沒那么容易。雖然面試者具備了一定的工作年限要求,也長期使用Java語言進行開發,但面試時,面對刨根問底的提問,經常感覺get不到面試官的點,自己回答的也是馬馬虎虎,甚至無法完整描述自己開發過的系統或者使用過的技術,因此也就很難得到滿意的面試結果。
那如何才能在Java面試中做到游刃有余呢?本專欄就從大廠面試考察的知識點和能力出發,精選出典型的Java面試題,每期針對1道題目,不僅給出面試的典型回答和考點分析,還會剖析知識點,將其講清講透,讓你徹底領悟題目背后所考察的能力,幫你梳理復習Java知識體系。
專欄分為5大模塊。
* **Java基礎**:將圍繞Java語言基本特性和機制,由點帶面,幫你構建牢固的Java技術功底。
* **Java進階**:主要將圍繞并發編程、Java虛擬機等領域展開,助你攻堅大廠Java面試的核心陣地。
* **Java應用開發擴展**:將聚焦數據庫編程、主流開源框架、分布式開發等,讓你掌握Java開發的十八般兵器。
* **Java安全基礎**:幫助你理解常見的應用安全問題和處理方法,掌握如何寫出符合大廠規范的安全代碼。
* **Java性能基礎**:幫助你掌握相關工具、方法論與基礎實踐。
## 課程目錄

## 適合人群
有面試/晉升需求的Java程序員;希望夯實Java基礎的程序員;團隊Leader;面試官。
- 前言
- 開篇詞
- 開篇詞 -以面試題為切入點,有效提升你的Java內功
- 模塊一 Java基礎
- 第1講 談談你對Java平臺的理解?
- 第2講 Exception和Error有什么區別?
- 第3講 談談final、finally、 finalize有什么不同?
- 第4講 強引用、軟引用、弱引用、幻象引用有什么區別?
- 第5講 String、StringBuffer、StringBuilder有什么區別?
- 第6講 動態代理是基于什么原理?
- 第7講 int和Integer有什么區別?
- 第8講 對比Vector、ArrayList、LinkedList有何區別?
- 第9講 對比Hashtable、HashMap、TreeMap有什么不同?
- 第10講 如何保證集合是線程安全的? ConcurrentHashMap如何實現高效地線程安全?
- 第11講 Java提供了哪些IO方式? NIO如何實現多路復用?
- 第12講 Java有幾種文件拷貝方式?哪一種最高效?
- 第13講 談談接口和抽象類有什么區別?
- 第14講 談談你知道的設計模式?
- 模塊二 Java進階
- 第15講 synchronized和ReentrantLock有什么區別呢?
- 第16講 synchronized底層如何實現?什么是鎖的升級、降級?
- 第17講 一個線程兩次調用start()方法會出現什么情況?
- 第18講 什么情況下Java程序會產生死鎖?如何定位、修復?
- 第19講 Java并發包提供了哪些并發工具類?
- 第20講 并發包中的ConcurrentLinkedQueue和LinkedBlockingQueue有什么區別?
- 第21講 Java并發類庫提供的線程池有哪幾種? 分別有什么特點?
- 第22講 AtomicInteger底層實現原理是什么?如何在自己的產品代碼中應用CAS操作?
- 第23講 請介紹類加載過程,什么是雙親委派模型?
- 第24講 有哪些方法可以在運行時動態生成一個Java類?
- 第25講 談談JVM內存區域的劃分,哪些區域可能發生OutOfMemoryError?
- 第26講 如何監控和診斷JVM堆內和堆外內存使用?
- 第27講 Java常見的垃圾收集器有哪些?
- 第28講 談談你的GC調優思路?
- 第29講 Java內存模型中的happen-before是什么?
- 第30講 Java程序運行在Docker等容器環境有哪些新問題?
- 模塊三 Java安全基礎
- 第31講 你了解Java應用開發中的注入攻擊嗎?
- 第32講 如何寫出安全的Java代碼?
- 模塊四 Java性能基礎
- 第33講 后臺服務出現明顯“變慢”,談談你的診斷思路?
- 第34講 有人說“Lambda能讓Java程序慢30倍”,你怎么看?
- 第35講 JVM優化Java代碼時都做了什么?
- 模塊五 Java應用開發擴展
- 第36講 談談MySQL支持的事務隔離級別,以及悲觀鎖和樂觀鎖的原理和應用場景?
- 第37講 談談Spring Bean的生命周期和作用域?
- 第38講 對比Java標準NIO類庫,你知道Netty是如何實現更高性能的嗎?
- 第39講 談談常用的分布式ID的設計方案?Snowflake是否受冬令時切換影響?
- 周末福利
- 周末福利 談談我對Java學習和面試的看法
- 周末福利 一份Java工程師必讀書單
- 結束語
- 結束語 技術沒有終點
- 結課測試 Java核心技術的這些知識,你真的掌握了嗎?