採訪236位第一批秋招上岸的同學後,我整理了這份Java面試手冊

java架構師追風 發佈 2022-08-19T00:24:53.896058+00:00

不知不覺又是一年秋招了,現在已入八月,快的人甚至已經成功上岸了,當然時間還有的是,大部分同學也都還在準備中。


不知不覺又是一年秋招了,現在已入八月,快的人甚至已經成功上岸了,當然時間還有的是,大部分同學也都還在準備中。

入行這麼些年,每年都會有很多讀者或者朋友跟我訴苦,無非都是覺得自己技術還不錯,就是面試發揮總是不理想云云,其實仔細想想也不奇怪,就跟上學時每個班想必都有一兩個同學平時學習紮實,考試時成績卻總是不上不下。

同理,技術好不代表面試表現好,面試表現不好,自然得不到好的工作機會,所以想拿到好的offer除了平時夯實基礎外一些面試準備也很重要,應廣大讀者要求,我整理了一下今年各廠面試的一些高頻題,希望對大家能有一些幫助。

篇幅所限,這裡只貼下題目,完整的權威答案我整理成一份文檔了,會放在文末,需要的同學翻到文末直接下載就行

一、Java基礎 44 道

  • 八種基本數據類型的大小,以及他們的封裝類
  • 引用數據類型
  • Switch能否用string做參數
  • equals與==的區別
  • 自動裝箱,常量池
  • Object有哪些公用方法
  • Java的四種引用,強弱軟虛,用到的場景
  • hashCode的作用
  • HashMap的hashcode的作用
  • 為什麼重載hashCode方法?
  • ArrayList、LinkedList、Vector的區別
  • String、StringBuffer與StringBuilder的區別
  • Map、Set、List、Queue、Stack的特點與用法
  • HashMap和Hashtable的區別
  • JDK7與JDK8中HashMap的實現
  • HashMap和ConcurrentHashMap的區別,HashMap的底層源碼
  • ConcurrentHashMap能完全替代HashTable嗎
  • 為什麼HashMap是線程不安全的
  • 如何線程安全的使用HashMap
  • 多並發情況下HashMap是否還會產生死循環
  • TreeMap、HashMap、LindedHashMap的區別
  • Collection包結構,與Collections的區別
  • try?catch?finally,try里有return,finally還執行麼
  • Excption與Error包結構,OOM你遇到過哪些情況,SOF你遇到過哪些情況
  • Java(OOP)面向對象的三個特徵與含義
  • Override和Overload的含義去區別
  • Interface與abstract類的區別
  • Static?class?與non?static?class的區別
  • java多態的實現原理
  • foreach與正常for循環效率對比
  • Java?IO與NIO
  • java反射的作用於原理
  • 泛型常用特點
  • 解析XML的幾種方式的原理與特點:DOM、SAX
  • Java1.7與1.8,1.9,10 新特性
  • 設計模式:單例、工廠、適配器、責任鏈、觀察者等等
  • JNI的使用
  • AOP是什麼
  • OOP是什麼
  • AOP與OOP的區別

二、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集合 30 道

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

2.詳細說說 Arraylist 和 LinkedList的區別?

3.ArrayList實現 RandomAccess接口有何作用?

4.說一說Vector 和 ArrayList 的區別?

5.說說ArrayList 的擴容機制?

6.Array和ArrayList有何區別?

7.遍歷一個List有哪些不同的方式?

8.comparable和comparator的區別?

9.Collection和Collections有什麼區別?

10.說一下PriorityQueue?

11.說一下HashSet的實現原理?

12.HashMap的實現原理/底層數據結構?

13.HashMap 的長度為什麼是 2 的冪次方?

14.說說HashMap的put方法執行流程?

15.說說HashMap的get方法執行流程?

16.說說HashMap的resize方法執行過程?

17.HashMap什麼時候會樹化?

18.HashMap底層為什麼選擇紅黑樹而不用其他樹,比如二叉查找樹?

19.HashMap擴容(加載)因子為何默認是 0.75f?

20.HashMap怎麼計算 key 的 hash 值的?

21.HashMap是怎麼解決哈希衝突的?

22.HashMap多線程操作導致死循環問題知道嗎?

23.說說LinkedHashMap 的實現原理?

24.說說HashMap 和 HashSet 區別?

25.說下HashMap 和 Hashtable 的區別?

26.說一下HashMap 和 TreeMap 區別?

27.為什麼HashMap中String、Integer這樣的包裝類適合作為Key?

28.說一下Queue 與 Deque 的區別?

29.說說ArrayDeque 與 LinkedList 的區別?

30.說一下 HashSet、LinkedHashSet 和 TreeSet 三者的異同?

四、Java並發 48 道

1、並發編程三要素?

2、實現可見性的方法有哪些?

3、多線程的價值?

4、創建線程的有哪些方式?

5、創建線程的三種方式的對比?

6、線程的狀態流轉圖

7、Java 線程具有五中基本狀態

8、什麼是線程池?有哪幾種創建方式?

9、四種線程池的創建:

10、線程池的優點?

11、常用的並發工具類有哪些?

12、CyclicBarrier 和 CountDownLatch 的區別

13、synchronized 的作用?

14、volatile 關鍵字的作用

15、什麼是 CAS

16、CAS 的問題

17、什麼是 Future?

18、什麼是 AQS

19、AQS 支持兩種同步方式:

20、ReadWriteLock 是什麼

21、FutureTask 是什麼

22、synchronized 和 ReentrantLock 的區別

23、什麼是樂觀鎖和悲觀鎖

24、線程 B 怎麼知道線程 A 修改了變量

25、synchronized、volatile、CAS 比較

26、sleep 方法和 wait 方法有什麼區別?

27、ThreadLocal 是什麼?有什麼用?

28、為什麼 wait()方法和 notify()/notifyAll()方法要在同步塊中被調用

29、多線程同步有哪幾種方法?

30、線程的調度策略

31、ConcurrentHashMap 的並發度是什麼

32、Linux 環境下如何查找哪個線程使用 CPU 最長

33、Java 死鎖以及如何避免?

34、死鎖的原因

35、怎麼喚醒一個阻塞的線程

36、不可變對象對多線程有什麼幫助

37、什麼是多線程的上下文切換

38、如果你提交任務時,線程池隊列已滿,這時會發生什麼

39、Java 中用到的線程調度算法是什麼

40 、 什 麼 是 線 程 調 度 器 (Thread Scheduler) 和 時 間 分 片 (TimeSlicing)?

41、什麼是自旋

42、Java Concurrency API 中的 Lock 接口(Lock interface)是什麼?對比同步它有什麼優勢?

43、單例模式的線程安全性

44、Semaphore 有什麼作用

45、Executors 類是什麼?

46、線程類的構造方法、靜態塊是被哪個線程調用的

47、同步方法和同步塊,哪個是更好的選擇?

48、Java 線程數過多會造成什麼異常?

五、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了

需要的同學轉發本文+關注+私信【0818】即可下載!

關鍵字: