本文精選 Java 面試高頻考點,涵蓋面向對象設計原理、Java 語言核心特性、集合框架底層實現、垃圾回收機制等模組。每題附帶標準解析與進階延伸,助你構建完整知識體系,應對初中級開發崗位面試。
定義:隱藏對象內部狀態與實現細節,僅暴露公共方法供外部交互。
三大權限修飾符:
public:全域可見protected:同包 + 子類可見private:僅類內可見核心優勢:
本質:子類獲取父類非私有屬性與方法,實現代碼復用與擴展。
Java 單繼承限制:一個類只能 extends 一個父類,但可 implements 多個介面。
定義:同一操作作用於不同對象產生不同行為(編譯時多態:重載;運行時多態:重寫)。
實現條件:繼承關係 + 方法重寫 + 父類引用指向子類對象。
核心:關注「做什麼」而非「怎麼做」。抽象類可包含抽象/具體方法;介面(JDK 8 前)僅含抽象方法。
抽象 vs 封裝:抽象關注行為邊界,封裝關注實現細節隱藏。封裝是實現抽象的手段之一。
| 維度 | 介面 | 抽象類 |
|---|---|---|
| 方法類型 | 隱含 public abstract(JDK8+ 可有 default/static/private) | 可混合抽象與具體方法 |
| 繼承關係 | implements,可多實現 | extends,單繼承 |
| 變量 | 隱含 public static final | 可定義實例/靜態變量 |
| 構造器 | 無 | 有(供子類調用) |
| 設計意圖 | 定義行為契約 | 提供部分實現與共享狀態 |
byte(1B) short(2B) int(4B) long(8B)
float(4B) double(8B) boolean(~1B) char(2B)
自動裝箱:基本類型 → 包裝類型(如 int → Integer.valueOf())
自動拆箱:包裝類型 → 基本類型(如 Integer → intValue())
陷阱:頻繁拆裝箱產生大量臨時對象,影響性能;== 比較包裝類型時需注意緩存範圍(-128~127)。
| 重載 | 重寫 | |
|---|---|---|
| 範圍 | 同一類內 | 父子類間 |
| 方法名 | 相同 | 相同 |
| 參數列表 | 必須不同 | 必須相同 |
| 返回類型 | 可不同 | 兼容/相同 |
| 綁定時機 | 編譯期 | 運行期 |
結論:Java 只有值傳遞。
方法內修改引用指向的對象內容會影響外部,但修改引用本身(指向新對象)不影響外部。
Thread 類,重寫 run()Runnable 介面(推薦:避免單繼承限制,便於線程池管理)ExecutorService 線程池(生產環境首選)synchronized 方法:鎖住當前實例(this)synchronized 靜態方法:鎖住 Class 對象synchronized(this) { } 同步塊:細粒度鎖,減小鎖範圍死鎖條件:互斥 + 請求保持 + 不剝佔 + 循環等待。
預防策略:統一鎖獲取順序(如按 hashCode 排序),打破循環等待條件。
Collection
├─ List(有序、可重複) → ArrayList, LinkedList, Vector
├─ Set(無序、不可重複) → HashSet, LinkedHashSet, TreeSet
└─ Queue(隊列) → PriorityQueue, ArrayDeque
Map(鍵值對、Key 唯一) → HashMap, LinkedHashMap, TreeMap, Hashtable
具體實現類決定存儲方式(有序/無序、可重複/不可重複),語義由具體類定義,不宜在介面層強制約束。
| Iterator | ListIterator | |
|---|---|---|
| 適用集合 | Collection 所有實現 | 僅 List |
| 遍歷方向 | 單向 | 雙向 |
| 增強功能 | 無 | add/set/previous/索引獲取 |
ConcurrentModificationExceptionhashCode() 計算索引,equals() 解決哈希衝突| HashMap | Hashtable | |
|---|---|---|
| 同步性 | 非線程安全 | 同步(效能低) |
| Null 支持 | 允許 1 個 null Key + 多個 null Value | 完全不允許 null |
| 迭代器 | Fail-fast Iterator | Enumeration(舊API) |
| 推薦場景 | 單線程/配合 ConcurrentHashMap | 遺留類,不推薦新代碼使用 |
| 操作 | ArrayList(動態數組) | LinkedList(雙向鏈表) |
|---|---|---|
| 隨機訪問 | O(1) ✓ | O(n) ✗ |
| 頭尾增刪 | O(n) / O(1)* | O(1) ✓ |
| 中間增刪 | O(n) 搬移元素 | O(n) 定位 + O(1) 操作 |
| 記憶體 | 緊湊,僅存數據 | 額外存前後指針 |
* 尾部擴容均攤 O(1)
Comparable:內部比較器,compareTo(this, other),類自然排序Comparator:外部比較器,compare(o1, o2),多種排序策略System.gc()(僅建議)finalize():GC 前調用(不推薦使用,JDK9 已棄用),釋放非記憶體資源| Serial(串行) | Parallel(吞吐量優先) | |
|---|---|---|
| 特點 | 單線程,Stop-the-world | 多線程並行,關注吞吐量 |
| 適用場景 | Client 模式、小應用 | Server 模式、大數據/批處理 |
下篇預告:異常處理體系、I/O 流與 NIO、反射與註解、JVM 調優實戰、Spring 生態核心原理等進階專題。