前言
Java 作為企業級開發的主流語言,其面試考察範圍極廣。本文精選 50 道高頻面試題,涵蓋 J2EE 架構、集合框架、多線程、JVM 原理、設計模式等核心領域,幫助開發者系統梳理知識體系,應對各類技術面試。
一、企業級架構與設計模式
1. MVC 架構的技術實現
核心組件:Model(業務邏輯,由 JavaBean/EJB 實現)、View(表示層,JSP/Thymeleaf)、Controller(流程控制,Servlet/Spring MVC)。優勢在於關注點分離,組件可復用、易維護。
2. J2EE 的本質定位
J2EE 是 Sun 制定的企業級分布式應用標準平台,包含 JDBC、JNDI、EJB、JMS、JTA 等技術規範,支援多層(Client/Web/Business/EIS)、分布式、基於組件的應用模型。
3. Struts 框架運作機制
基於 MVC 的開源框架,核心是 Controller Servlet 分發請求至 Action,提供標籤庫簡化表單開發,內建 XML 處理、JavaBean 自動映射、國際化支援等工具類。
4. Web Service 核心協議解析
- SOAP:基於 XML 的輕量級通訊協議
- WSDL:用 XML 描述服務接口的標準格式
- UDDI:服務註冊與發現的註冊中心規範
- JAXP/JAXM:Java 處理 XML 解析與訊息傳遞的統一 API
5. C/S 與 B/S 架構深度對比
| 維度 | C/S (Client/Server) | B/S (Browser/Server) |
| 硬體環境 | 專用網路、局域網 | 廣域網、僅需瀏覽器 |
| 安全性 | 高,面向固定用戶群 | 相對較弱,面向不特定用戶 |
| 維護升級 | 整體升級困難 | 組件化,無縫熱更新 |
| 資訊流向 | 中心化、交互性低 | 多向流動(B2B/B2C/B2G) |
6. J2EE 核心服務組件
- JNDI:命名目錄服務,實現分布式組件的查找與定位
- JMS:消息服務,支援點對點與發布/訂閱模式
- JTA:事務 API,提供分布式事務統一管理
7. 常用設計模式與應用場景
23 種 GoF 模式中,企業級開發高頻使用:
- 工廠模式:封裝對象創建邏輯,如 `ConnectionProvider` 實例化
- 單例模式:確保全局唯一實例,如配置管理器
- 代理模式:AOP 切面實現基礎,如 Spring 事務代理
- 觀察者模式:事件驅動架構,如 Spring 事件機制
- 模板方法:定義算法骨架,如 `JdbcTemplate` 查詢流程
8. UML 建模要點
掌握用例圖、類圖、序列圖、活動圖、部署圖等核心圖表,用於需求分析與架構設計文檔。
9. RMI 遠程調用原理
基於 Stub/Skeleton 機制,實現跨 JVM 對象方法調用,參數經序列化(marshal)傳輸,返回值反序列化(unmarshal)。
二、Java 基礎核心考點
10. 基礎語法陷阱題
- 數組長度:`arr.length`(屬性),而非 `length()`
- 訪問修飾符:掌握 public/protected/default/private 四級可見性矩陣
- 匿名內部類:可實現接口或繼承類,但無構造器,外部變量需 `final`
- static nested class vs inner class:前者無外部類引用,獨立存在
- & vs &&:位運算 vs 短路邏輯與
11. 集合框架深度解析
| 集合類型 | 實現類 | 特性 | 適用場景 |
| List | ArrayList/Vector/LinkedList | 有序、可重複 | 按索引高頻訪問/頻繁增刪 |
| Set | HashSet/TreeSet/LinkedHashSet | 無序/有序、不可重複 | 去重/唯一性業務 |
| Map | HashMap/Hashtable/TreeMap | 鍵值對、Key 唯一 | 鍵值映射/快速查找 |
核心區別:
- ArrayList vs Vector:線程安全性、擴容策略(2倍 vs 1.5倍)
- HashMap vs Hashtable:null 支援、同步機制、JDK 版本演進
- Collection vs Collections:接口 vs 工具類(排序/同步/搜尋)
12. 物件導向核心特性
- 封裝:隱藏內部實現,暴露公共接口
- 繼承:代碼復用,建立 IS-A 關係
- 多態:重寫(Override)與重載(Overload),動態綁定
- 抽象:抽象類(可含實現)vs 接口(全抽象、多實現)
13. 異常處理體系
- Error:嚴重系統錯誤(OOM、StackOverflow),不可恢復
- Exception:受檢異常(需 try-catch/throws)vs 運行時異常(NPE、IndexOutOfBounds)
- 關鍵字:try-catch-finally、throw/throws、try-with-resources (JDK7+)
14. 字符串與包裝類
- String 不可變:拼接建議用 `StringBuilder`(非線程安全)或 `StringBuffer`(同步)
- String s = new String("xyz"):創建 2 個對象(堆中對象 + 常量池引用)
- 自動裝箱/拆箱:int ↔ Integer,緩存範圍 -128~127
15. 多線程與並發
- synchronized vs volatile:鎖提供原子性+可見性,volatile 僅保證可見性
- 線程安全集合:ConcurrentHashMap (CAS+分段鎖)、CopyOnWriteArrayList
- 線程池核心參數:coreSize、maxSize、keepAliveTime、workQueue、RejectedExecutionHandler
16. JVM 記憶體模型與 GC
- 堆 vs 棧:堆存對象實例(GC 管理),棧存局部變量/方法幀(線程私有)
- GC 算法:標記-清除、標記-整理、複製、分代收集(新生代/老年代)
- 類加載機制:雙親委派模型,Bootstrap → Extension → Application ClassLoader
17. 序列化與反射
- Serializable:標記接口,配合 `ObjectOutputStream` 實現對象持久化/網絡傳輸
- 反射:運行時動態獲取類信息,框架核心基礎(Spring IOC、Hibernate)
18. I/O 模型演進
- BIO:同步阻塞,一連接一線程
- NIO:同步非阻塞,Channel + Buffer + Selector
- AIO (NIO.2):異步非阻塞,回調/CompletionHandler
三、進階題目精選
19. 設計模式實戰應用
- 策略模式:支付渠道封裝(支付寶/微信/銀聯)
- 責任鏈:過濾器鏈、異常處理鏈
- 命令模式:操作撤銷/重做、隊列任務
- 觀察者:事件總線、消息通知
- 中介者:MVC 中 Controller 協調 Model/View
20. 排序算法複雜度對比
| 算法 | 時間複雜度 | 空間複雜度 | 穩定性 |
| 快速排序 | O(nlogn) | O(logn) | 不穩定 |
| 歸併排序 | O(nlogn) | O(n) | 穩定 |
| 堆排序 | O(nlogn) | O(1) | 不穩定 |
| 冒泡/插入/選擇 | O(n²) | O(1) | 穩定/穩定/不穩定 |
21. 實戰技巧題
- 2 * 8 高效計算:`2 << 3`(位運算)
- switch 支援類型:byte/short/char/int/String (JDK7+)/enum
- try-finally-return 執行順序:finally 在 return 之前執行
- hashCode 與 equals 契約:equals 相等 ⇒ hashCode 必相等;hashCode 相等 ≠ equals 相等
- 參數傳遞:Java 僅支援值傳遞(引用的值)
總結與備考建議
- 建立知識圖譜:將零散考點串聯成「語法基礎 → 集合框架 → 並發編程 → JVM 原理 → 架構設計」完整鏈路
- 重點攻克原理:不僅知「怎麼用」,更要懂「為什麼這樣設計」(如 HashMap 擴容、ConcurrentHashMap 分段鎖)
- 手寫核心代碼:單例雙檢鎖、生產者消費者、LRU 緩存、線程池實現
- 項目實戰關聯:面試中將理論映射到實際項目(如「如何解決生產環境 OOM?」)
- 關注新特性:JDK 8+ Stream/Lambda、JDK 9+ 模組化、JDK 17 LTS 新特性
面試金句:「技術廣度決定選擇,技術深度決定高度。掌握核心原理,才能在技術浪潮中立於不敗之地。」