這份面試寶典是從我 去年開始收集的,一方面是給公司招聘用,另外一方面是想用它來挖掘在 Java 技術棧中,還有那些知識點是我不知道的,我想找到這些技術盲點,而後修復它,以此來提升本身的技術水平。java
說回面試的事,這份面試清單原本是隻有咱們內部使用的,可到後來有不少朋友在微信上聯繫到我,讓我幫他們找一些面試方面的資料,並且這些關係也不太好拒絕,一呢,是由於這些找個人人要麼是個人朋友的弟弟妹妹,要麼是個人表弟表妹們;二呢,我也不想馬馬虎虎的對付,俗話說的好「受人之事忠人之命」,不能辜負這份信任。但最後就有了這麼一個想法,要不要把我整理的這面試寶典,去幫助更多的人。程序員
說實話剛開始的時候是比較猶豫的,首先這麼作會不會有點幫人「做弊」的嫌疑,最後我終於想通了,以爲這未必是一件壞事。面試
第一:有更多的人所以而學到了更多的知識,這不算是一件壞事,剛好相反。redis
第二:這只是一種經驗的高度提煉,讓那些有技術能力的人,學會如何表達本身所掌握的知識,這也是一件好事。算法
第三:若是隻是死記硬背這些面試題,若是面試官能再深刻問糾一些細節,也可識破之中的「玄機」。spring
第四:學習有不少種方式,但只有好學者纔會臨池學書。若是是不想學的人,不管你提供什麼資料,他都會視而不見,我只是爲好學者,提供一份自我實現的學習資料而已。設計模式
就像以前聽過的一個故事,爲何在美國有些企業只要看你是哈佛的學歷就會直接錄取你呢?由於在美國上大學仍是挺貴的,首先你能上的起哈佛說明你的家境還不錯;第二,你能進入哈佛,也說明你腦子不笨;再者就是,哈佛確實能給你提供不錯的教育環境。綜合以上特質,因此這些企業纔敢直接聘請那些有哈佛學歷的人。數組
因此對應到咱們這份面試題也是同樣,首先你若是能真的記住其中大部分的答案:第一,說明你的腦子不笨;第二,說明你有上進心,也願意學習;第三,記住了這份面試題以後,即便你的能力剛開始沒有那麼好,但有了理論支撐以後,再去工做實踐的時候,就有了理論指導,結果也不會太差。安全
面試題模塊介紹微信
說了這麼多,下面進入咱們本文的主題,咱們這份面試題,包含的內容了十九了模塊:Java 基礎、容器、多線程、反射、對象拷貝、Java Web 模塊、異常、網絡、設計模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。以下圖所示:
適宜閱讀人羣
須要面試的初/中/高級 java 程序員
想要查漏補缺的人
想要不斷完善和擴充本身 java 技術棧的人
{ 程序計數器 , 虛擬機棧 ,本地方法棧 , 堆 ,方法區 ,元空間 } // 每一個區域要能介紹一下
2. Minor GC 觸發條件 : eden區剩餘內存是否足夠 兩種狀況分開分析
FULL GC 觸發條件 : Minor GC 平均晉升空間大小 > 老年代連續剩餘空間,則觸發FULL GC
深刻一些,:GC root對象有哪些?爲何選擇他們作GC root對象
4. 垃圾收集算法 : { 標記清除算法 、標記整理算法 、 複製算法、 分代收集算法 }
深刻一些: 各個算法的優勢和適用場景
5. 垃圾收集器 : { serial 、 parallel 、 CMS 、 G1 }
CMS 、G1 重點 , 介紹工做流程和優缺點
6. 內存泄漏
例子: { 單例 , 容器 等等}
緣由 : 長生命週期持有短生命週期引用
7. 引用類型 ; { 強引用、 軟引用、 弱引用 、 虛引用 }
有哪些類加載器 , 可否自定義 Java.Object.String 的類加載器 ?
深刻一些 : HashMap 爲何線程不安全? 可否舉例 = { 併發resize()觸發閉環結構 ,覆蓋put操做 }
爲何 HashMap的size 爲 2的冪次方 ?
HashMap resize()過程可否介紹 ?
HashMap效率受什麼影響 (負載因子、hash數組size)?
HashMap中擾動函數的做用 ?
5. equals 和 == 區別
爲啥重寫equals要重寫hashCode()
hash值相等,而兩個對象不必定equals
6 . 高頻】 String StringBuffer StringBuilder 區別 和各自使用場景
深刻一些 : String 是如何實現它不可變的? 爲何要設置String爲不可變對象 ? (字節一面這個問題給我問懵了)
7. 接口和抽象類區別
8. 重寫和重載的區別
9. 深拷貝和淺拷貝區別
10. Java三大特性
11. Object的方法 : { finalize 、 clone、 getClass 、 equals 、 hashCode }
深刻一些 : 單例模式爲何採用雙檢測機制 ? 單例爲何用Volatile修飾? 裝飾模式和代理模式區別?
1. 線程的狀態 : { new ,runnalbe , wait , time-wait , block , terminated }
2. 進程 、 線程 、 協程 的含義和區別 // 我的理解 是一組漸進提出的概念
3. 進程間通訊方式 : { 管道 、FIFO 、 信號量 、 共享內存 、 消息隊列 、 Socket }
4. 如何避免死鎖 ? 死鎖的四個必要條件
5. Sleep和wait的區別
8. volatile的做用 : { 指令重拍 、 保證變量的可見性(設計JMM)}
9. ThreadLocal 底層原理
10. 【高頻】 線程池
線程池構造器涉及哪些參數 : { corePoolSize , maximumPoolSzie , timeout , timeUnit , RejectHandler , 等待隊列 , 線程工廠 }
介紹線程池工做過程?
線程池拒絕策略那些?
適用Executor建立線程池的弊端?
11. AQS 框架原理和 源碼理解
1. 用戶態和內核態的區別
2. fork()做用
4. 虛擬內存做用? 內存分頁的做用?
5. 缺頁異常的介紹
6 . OOM問題和 StackOverFlow的區別
1. 【高頻】MyISAM 和 InnoDB的區別 : {是否支持行鎖 、 是否支持十五 、 是否支持 MVCC 、 底層索引結構不一樣 }
2. 事務特性ACID
深刻一些 : 爲何要有一致性 ? AID不是已經保證了一致性了嗎 ?
3. 併發事務帶來的問題 : { 髒讀 、 修改丟失 、 不可重複讀 、 幻影讀 }
5 【高頻】 MVCC機制
6 . 【高頻】索引
爲何索引使用B+樹結構,而不是B樹
爲何索引使用B+樹結構,而不是紅黑樹 : { 磁盤預讀取 、紅黑樹高度 }
7. 聚簇索引和非聚簇索引區別? 主鍵索引和二級索引瞭解嗎?
8 . 爲何不對每一個列建立索引呢?
9 【高頻】SQL語句優化 ,SQL題目(字節要求擼代碼)
10. explain中 rows type key extra字段的含義?
11. count(1) count(*) count(列值)的區別