2021 都捲成這樣了,眨眼迎來 2022 還不趕緊動起來?

獨角函獸發表於2022-01-04

國內的網際網路面試,恐怕是現存的、最接近科舉考試的制度。

而且,我國的八股文確實是獨樹一幟。以美國為例,北美工程師面試比較重視演算法(Coding),近幾年也會加入 Design 輪(系統設計和麵向物件設計 OOD)和 BQ 輪(Behavioral question,行為面試問題)。

那麼為什麼國內面試不採取這樣的考察方式呢?簡單來說,網際網路 IT 行業的求職者太多了,如果考察的是清一溜的演算法題和設計題,那麼會要求面試官有極高的技術水平,還要花大量的時間成本和精力。

也許現行的八股文面試不是最優的解法,但的確是最符合當前國內 IT 環境的做法。

所以,我採訪了超過 20 位資深大廠面試官後,一直在儘量精煉準確的整理一套切實可行的八股文,現在已經有 329 位粉絲通過這套題走入了理想的崗位,所以分享出來給大夥看看,有什麼不足之處歡迎評論補充。

篇幅所限本文就只貼一下題目了,同學們可以自己先看看有哪些題是會的,答案的話我整理的一本《Java 面試八股文》PDF 裡都有。
 

一、Java 基礎 44 道

1. 解釋下什麼是物件導向?物件導向和麵向過程的區別?

2. 物件導向的三大特性?分別解釋下?

3. JDK、JRE、JVM 三者之間的關係?

4. 過載和重寫的區別?

5. Java 中是否可以重寫一個 private 或者 static 方法?

6. 構造方法有哪些特性?

7. 在 Java 中定義一個不做事且沒有引數的構造方法有什麼作用?

8. Java 中建立物件的幾種方式?

9. 抽象類和介面有什麼區別?

10. 靜態變數和例項變數的區別?

11. 12、short s1 = 1;s1 = s1 + 1;有什麼錯?那麼 short s1 = 1; s1 += 1;呢?有沒有錯誤?

12. Integer 和 int 的區別?

13. 裝箱和拆箱的區別

14. switch 語句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上?

15. 16、final、finally、finalize 的區別

16. == 和 equals 的區別?

17. 兩個物件的 hashCode() 相同,則 equals() 也一定為 true 嗎?

18. 為什麼重寫 equals() 就一定要重寫 hashCode() 方法?

19. & 和 && 的區別?

20. Java 中的引數傳遞時傳值呢?還是傳引用?

21. Java 中的 Math.round(-1.5) 等於多少?

22. 如何實現物件的克隆?

23. 深克隆和淺克隆的區別?

24. 什麼是 Java 的序列化,如何實現 Java 的序列化?

25. 什麼情況下需要序列化?

26. Java 的泛型是如何工作的 ? 什麼是型別擦除 ?

27. 什麼是泛型中的限定萬用字元和非限定萬用字元 ?

28. List 和 List 之間有什麼區別 ?

29. Java 中的反射是什麼意思?有哪些應用場景?

30. 反射的優缺點?

31. Java 中的動態代理是什麼?有哪些應用?

32. 怎麼實現動態代理?

33. static 關鍵字的作用?

34. super 關鍵字的作用?

35. 位元組和字元的區別?

36. String 為什麼要設計為不可變類?

37. String、StringBuilder、StringBuffer 的區別?

38. String 字串修改實現的原理?

39. String str = "i" 與 String str = new String("i") 一樣嗎?

40. String 類的常用方法都有那些?

41. final 修飾 StringBuffer 後還可以 append 嗎?

42. Java 中的 IO 流的分類?說出幾個你熟悉的實現類?

43. 位元組流和字元流有什麼區別?

44. BIO、NIO、AIO 有什麼區別?

二、Java 異常 9 道

1. finally 塊中的程式碼什麼時候被執行?

2. finally 是不是一定會被執行到?

3. try-catch-finally 中,如果 catch 中 return 了,finally 還會執行嗎?

4. try-catch-finally 中那個部分可以省略?

5. Error 和 Exception 的區別?

6. 執行時異常與受檢異常有何異同?

7. throw 和 throws 的區別?

8. 常見的異常類有哪些?

9. 主執行緒可以捕獲到子執行緒的異常嗎?

三、Java 集合 24 道

1. Java 中常用的容器有哪些?

2. ArrayList 和 LinkedList 的區別?

3. ArrayList 實現 RandomAccess 介面有何作用?為何 LinkedList 卻沒實現這個介面?

4. ArrayList 的擴容機制?

5. Array 和 ArrayList 有何區別?什麼時候更適合用 Array?

6. HashMap 的實現原理/底層資料結構?JDK1.7 和 JDK1.8

7. HashMap 的 put 方法的執行過程?

8. HashMap 的 get 方法的執行過程?

9. HashMap 的 resize 方法的執行過程?

10. HashMap 的 size 為什麼必須是 2 的整數次方?

11. HashMap 多執行緒死迴圈問題?

12. HashMap 的 get 方法能否判斷某個元素是否在 map 中?

13. HashMap 與 HashTable 的區別是什麼?

14. HashMap 與 ConcurrentHashMap 的區別是什麼?

15. HashTable 和 ConcurrentHashMap 的區別?

16. ConcurrentHashMap 的實現原理是什麼?

17. HashSet 的實現原理?

18. HashSet 怎麼保證元素不重複的?

19. LinkedHashMap 的實現原理?

20. Iterator 怎麼使用?有什麼特點?

21. Iterator 和 ListIterator 有什麼區別?

22. Iterator 和 Enumeration 介面的區別?

23. fail-fast 與 fail-safe 有什麼區別?

24. Collection 和 Collections 有什麼區別?

四、Java 併發 42 道

1. 並行和併發有什麼區別?

2. 執行緒和程式的區別?

3. 守護執行緒是什麼?

4. 建立執行緒的幾種方式?

5. Runnable 和 Callable 有什麼區別?

6. 執行緒狀態及轉換?

7. sleep() 和 wait() 的區別?

8. 執行緒的 run() 和 start() 有什麼區別?

9. 在 Java 程式中怎麼保證多執行緒的執行安全?

10. Java 執行緒同步的幾種方法?

11. Thread.interrupt() 方法的工作原理是什麼?

12. 談談對 ThreadLocal 的理解?

13. 在哪些場景下會使用到 ThreadLocal?

14. 說一說自己對於 synchronized 關鍵字的瞭解?

15. 如何在專案中使用 synchronized 的?

16. 說說 JDK1.6 之後的 synchronized 關鍵字底層做了哪些優化,可以詳細介紹一下這些優化嗎?

17. 談談 synchronized 和 ReenTrantLock 的區別?

18. synchronized 和 volatile 的區別是什麼?

19. 談一下你對 volatile 關鍵字的理解?

20. 說下對 ReentrantReadWriteLock 的理解?

21. 說下對悲觀鎖和樂觀鎖的理解?

22. 樂觀鎖常見的兩種實現方式是什麼?

23. 樂觀鎖的缺點有哪些?

24. CAS 和 synchronized 的使用場景?

25. 簡單說下對 Java 中的原子類的理解?

26. atomic 的原理是什麼?

27. 說下對同步器 AQS 的理解?

28. AQS 的原理是什麼?

29. AQS 對資源的共享模式有哪些?

30. AQS 底層使用了模板方法模式,你能說出幾個需要重寫的方法嗎?

31. 說下對訊號量 Semaphore 的理解?

32. CountDownLatch 和 CyclicBarrier 有什麼區別?

33. 說下對執行緒池的理解?為什麼要使用執行緒池?

34. 建立執行緒池的引數有哪些?

35. 如何建立執行緒池?

36. 執行緒池中的的執行緒數一般怎麼設定?需要考慮哪些問題?

37. 執行 execute() 方法和 submit() 方法的區別是什麼呢?

38. 說下對 Fork 和 Join 平行計算框架的理解?

39. JDK 中提供了哪些併發容器?

40. 談談對 CopyOnWriteArrayList 的理解?

41. 談談對 BlockingQueue 的理解?分別有哪些實現類?

42. 談談對 ConcurrentSkipListMap 的理解?

五、Java JVM 42 道

1. 說一下 Jvm 的主要組成部分?及其作用?

2. 談談對執行時資料區的理解?

3. 堆和棧的區別是什麼?

4. 堆中存什麼?棧中存什麼?

5. 為什麼要把堆和棧區分出來呢?棧中不是也可以儲存資料嗎?

6. Java 中的引數傳遞時傳值呢?還是傳引用?

7. Java 物件的大小是怎麼計算的?

8. 物件的訪問定位的兩種方式?

9. 判斷垃圾可以回收的方法有哪些?

10. 垃圾回收是從哪裡開始的呢?

11. 被標記為垃圾的物件一定會被回收嗎?

12. 談談對 Java 中引用的瞭解?

13. 談談對記憶體洩漏的理解?

14. 記憶體洩露的根本原因是什麼?

15. 舉幾個可能發生記憶體洩漏的情況?

16. 儘量避免記憶體洩漏的方法?

17. 常用的垃圾收集演算法有哪些?

18. 為什麼要採用分代收集演算法?

19. 分代收集下的年輕代和老年代應該採用什麼樣的垃圾回收演算法?

20. 什麼是浮動垃圾?

21. 什麼是記憶體碎片?如何解決?

22. 常用的垃圾收集器有哪些?

23. 談談你對 CMS 垃圾收集器的理解?

24. 談談你對 G1 收集器的理解?

25. 說下你對垃圾回收策略的理解/垃圾回收時機?

26. 談談你對記憶體分配的理解?大物件怎麼分配?空間分配擔保?

27. 說下你用過的 JVM 監控工具?

28. 如何利用監控工具調優?

29. JVM 的一些引數?

30. 談談你對類檔案結構的理解?有哪些部分組成?

31. 談談你對類載入機制的瞭解?

32. 類載入各階段的作用分別是什麼?

33. 有哪些類載入器?分別有什麼作用?

34. 類與類載入器的關係?

35. 談談你對雙親委派模型的理解?工作過程?為什麼要使用

36. 怎麼實現一個自定義的類載入器?需要注意什麼?

37. 怎麼打破雙親委派模型?

38. 有哪些實際場景是需要打破雙親委派模型的?

39. 談談你對編譯期優化和執行期優化的理解?

40. 為何 HotSpot 虛擬機器要使用直譯器與編譯器並存的架構?

41. 說下你對 Java 記憶體模型的理解?

42. 記憶體間的互動操作有哪些?需要滿足什麼規則?

六、SSM 框架 37 道

1. 使用 Spring 框架的好處是什麼?

2. 解釋下什麼是 AOP?

3. AOP 的代理有哪幾種方式?

4. 怎麼實現 JDK 動態代理?

5. AOP 的基本概念:切面、連線點、切入點等?

6. 通知型別(Advice)型(Advice)有哪些?

7. 談談你對 IOC 的理解?

8. Bean 的生命週期?

9. Bean 的作用域?

10. Spring 中的單例 Bean 的執行緒安全問題了解嗎?

11. 談談你對 Spring 中的事物的理解?

12. Spring 中的事務隔離級別?

13. Spring 中的事物傳播行為?

14. Spring 常用的注入方式有哪些?

15. Spring 框架中用到了哪些設計模式?

16. ApplicationContext 通常的實現有哪些?

17. 談談你對 MVC 模式的理解?

18. SpringMVC 的工作原理/執行流程?

19. SpringMVC 的核心元件有哪些?

20. SpringMVC 常用的註解有哪些?

21. @RequestMapping 的作用是什麼?

22. 如何解決 POST 請求中文亂碼問題,GET 的又如何處理呢?

23. SpringMVC 的控制器是不是單例模式,如果是會有什麼問題,怎麼解決?

24. SpringMVC 怎麼樣設定重定向和轉發的?

25. SpringMVC 裡面攔截器是怎麼寫的?

26. SpringMVC 和 Struts2 的區別有哪些?

27. 談談你對 MyBatis 的理解?

28. MyBaits 的優缺點有哪些?

29. MyBatis 與 Hibernate 有哪些不同?

30. MyBatis 中 #{} 和 ${}的區別是什麼?

31. MyBatis 是如何進行分頁的?分頁外掛的原理是什麼?

32. MyBatis 有幾種分頁方式?

33. MyBatis 邏輯分頁和物理分頁的區別是什麼?

34. MyBatis 是否支援延遲載入?如果支援,它的實現原理是什麼?

35. 說一下 MyBatis 的一級快取和二級快取?

36. Mybatis 有哪些執行器(Executor)?

37. MyBatis 動態 SQL 是做什麼的?都有哪些動態 SQL?能簡述一下動態 SQL 的執行原理不?

七、MySQL 31 道

1. 請說下你對 MySQL 架構的瞭解?

2. 一條 SQL 語句在資料庫框架中的執行流程?

3. 資料庫的三正規化是什麼?

4. char 和 varchar 的區別?

5. varchar(10) 和 varchar(20) 的區別?

6. 談談你對索引的理解?

7. 索引的底層使用的是什麼資料結構?

8. 談談你對 B+ 樹的理解?

9. 為什麼 InnoDB 儲存引擎選用 B+ 樹而不是 B 樹呢?

10. 談談你對聚簇索引的理解?

11. 談談你對雜湊索引的理解?

12. 談談你對覆蓋索引的認識?

13. 索引的分類?

14. 談談你對最左字首原則的理解?

15. 怎麼知道建立的索引有沒有被使用到?或者說怎麼才可以知道這條語句執行很慢的原因?

16. 什麼情況下索引會失效?即查詢不走索引?

17. 查詢效能的優化方法?

18. InnoDB 和 MyISAM 的比較?

19. 談談你對水平切分和垂直切分的理解?

20. 主從複製中涉及到哪三個執行緒?

21. 主從同步的延遲原因及解決辦法?

22. 談談你對資料庫讀寫分離的理解?

23. 請你描述下事務的特性?

24. 談談你對事務隔離級別的理解?

25. 解釋下什麼叫髒讀、不可重複讀和幻讀?

26. MySQL 預設的隔離級別是什麼?

27. 談談你對 MVCC 的瞭解?

28. 說一下 MySQL 的行鎖和表鎖?

29. InnoDB 儲存引擎的鎖的演算法有哪些?

30. MySQL 問題排查都有哪些手段?

31. MySQL 資料庫 CPU 飆升到 500% 的話他怎麼處理?

八、Redis 12 道

1. 談下你對 Redis 的瞭解?

2. Redis 一般都有哪些使用場景?

3. Redis 有哪些常見的功能?

4. Redis 支援的資料型別有哪些?

5. Redis 為什麼這麼快?

6. 什麼是快取穿透?怎麼解決?

7. 什麼是快取雪崩?該如何解決?

8. 怎麼保證快取和資料庫資料的一致性?

9. Redis 持久化有幾種方式?

10. Redis 怎麼實現分散式鎖?

11. Redis 淘汰策略有哪些?

12. Redis 常見效能問題和解決方案?

九、計算機網路 45 道

1. 為什麼需要三次握手?兩次不行?

2. 為什麼需要四次揮手?三次不行?

3. TCP 與 UDP 有哪些區別?各自應用場景?

4. HTTP1.0,1.1,2.0 的版本區別

5. POST 和 GET 有哪些區別?各自應用場景?

6. HTTP 哪些常用的狀態碼及使用場景?

7. HTTP 狀態碼 301 和 302 的區別,都有哪些用途?

8. 在互動過程中如果資料傳送完了,還不想斷開連線怎麼辦,怎麼維持?

9. HTTP 如何實現長連線?在什麼時候會超時?

10. TCP 如何保證有效傳輸及擁塞控制原理

11. IP 地址有哪些分類?

12. GET 請求中 URL 編碼的意義

13. 什麼是 SQL 注入?舉個例子?

14. 談一談 XSS 攻擊,舉個例子?

15. 講一下網路五層模型,每一層的職責?

16. 簡單說下 HTTPS 和 HTTP 的區別

17. 對稱加密與非對稱加密的區別

18. 簡單說下每一層對應的網路協議有哪些?

19. ARP 協議的工作原理?

20. TCP 的主要特點是什麼?

21. UDP 的主要特點是什麼?

22. TCP 和 UDP 分別對應的常見應用層協議有哪些?

23. 為什麼 TIME-WAIT 狀態必須等待 2MSL 的時間呢?

24. 保活計時器的作用?

25. TCP 協議是如何保證可靠傳輸的?

26. 談談你對停止等待協議的理解?

27. 談談你對 ARQ 協議的理解?

28. 談談你對滑動視窗的瞭解?

29. 談下你對流量控制的理解?

30. 談下你對 TCP 擁塞控制的理解?使用了哪些演算法?

31. 什麼是粘包?

32. TCP 黏包是怎麼產生的?

33. 怎麼解決拆包和粘包?

34. forward 和 redirect 的區別?

35. HTTP 方法有哪些?

36. 在瀏覽器中輸入 URL 地址到顯示主頁的過程?

37. DNS 的解析過程?

38. 談談你對域名快取的瞭解?

39. 談下你對 HTTP 長連線和短連線的理解?分別應用於哪些場景?

40. HTTPS 的工作過程?

41. HTTP 和 HTTPS 的區別?

42. HTTPS 的優缺點?

43. 什麼是數字簽名?

44. 什麼是數字證照?

45. Cookie 和 Session 有什麼區別?

十、作業系統 32 道

1. 簡單說下你對併發和並行的理解?

2. 同步、非同步、阻塞、非阻塞的概念

3. 程式和執行緒的基本概念

4. 程式與執行緒的區別?

5. 為什麼有了程式,還要有執行緒呢?

6. 程式的狀態轉換

7. 程式間的通訊方式有哪些?

8. 程式的排程演算法有哪些?

9. 什麼是死鎖?

10. 產生死鎖的原因?

11. 死鎖產生的必要條件?

12. 解決死鎖的基本方法?

13. 怎麼預防死鎖?

14. 怎麼避免死鎖?

15. 怎麼解除死鎖?

16. 什麼是緩衝區溢位?有什麼危害?

17. 分頁與分段的區別?

18. 實體地址、邏輯地址、虛擬記憶體的概念

19. 頁面置換演算法有哪些?

20. 談談你對動態連結庫和靜態連結庫的理解?

21. 外中斷和異常有什麼區別?

22. 一個程式從開始執行到結束的完整過程,你能說出來多少?

23. 什麼是使用者態和核心態

24. 使用者態和核心態是如何切換的?

25. 程式終止的方式

26. 守護程式、殭屍程式和孤兒程式

27. 如何避免殭屍程式?

28. 介紹一下幾種典型的鎖?

29. 常見記憶體分配記憶體錯誤

30. 記憶體交換中,被換出的程式儲存在哪裡?

31. 原子操作的是如何實現的

32. 抖動你知道是什麼嗎?它也叫顛簸現象

十一、訊息佇列與分散式 26 道

1. 訊息佇列的基本作用?

2. 訊息佇列的優缺點有哪些?

3. 如何保證訊息佇列的高可用?

4. 如何保證訊息不被重複消費?或者說,如何保證訊息消費的冪等性?

5. 如何保證訊息的可靠性傳輸?或者說,如何處理訊息丟失的問題?

6. 如何保證訊息的順序性?

7. 大量訊息在 MQ 里長時間積壓,該如何解決?

8. MQ 中的訊息過期失效了怎麼辦?

9. RabbitMQ 有哪些重要的角色?

10. RabbitMQ 有哪些重要的元件?

11. RabbitMQ 有幾種廣播型別?

12. Kafka 可以脫離 zookeeper 單獨使用嗎?為什麼?

13. Kafka 有幾種資料保留的策略?

14. Kafka 的分割槽策略有哪些?

15. 談下你對 Zookeeper 的認識?

16. Zookeeper 都有哪些功能?

17. 談下你對 ZAB 協議的瞭解?

18. Zookeeper 怎麼保證主從節點的狀態同步?

19. Zookeeper 有幾種部署模式?

20. 說一下 Zookeeper 的通知機制?

21. 叢集中為什麼要有主節點?

22. 叢集中有 3 臺伺服器,其中一個節點當機,這個時候 Zookeeper 還可以使用嗎?

23. 說一下兩階段提交和三階段提交的過程?分別有什麼問題?

24. Zookeeper 當機如何處理?

25. 說下四種型別的資料節點 Znode?

26. Zookeeper 和 Dubbo 的關係?

好了,本文就寫到這了,上述所有題目的答案我都整理成 PDF了 , 新增助理即可免費領取

相關文章