Java 核心基礎是面試的「硬骨頭」,也是區分初中高級工程師的關鍵分水嶺。本文精選 10 道高頻經典題目,不僅給出標準答案,更深入剖析 底層原理、常見誤區、實戰陷阱,助你在面試中展現技術深度。
| 關鍵字 | 類型 | 核心作用 | 關鍵點 |
|---|---|---|---|
final | 修飾符 | 不可變/不可繼承/不可覆寫 | 修飾類不可繼承、修飾方法不可覆寫、修飾變量引用不可變 (對象內容仍可修改)、編譯期常量優化 |
finally | 程式碼塊 | 異常處理的清理保證 | 配合 try-catch,無論是否拋出異常皆執行 (除非 JVM 退出/線程死亡),用於釋放資源 (關流、解鎖) |
finalize() | Object 方法 | GC 前的最後掙扎 | 已棄用 (Java 9),不可靠、效能差、無法保證執行時間/順序,替代方案:try-with-resources / Cleaner / PhantomReference |
// 編譯期常量 (基本類型/String) 會進入常量池,調用處直接內聯
static final int CONST = 100;
// 引用類型 final:引用不可變,但對象內容可變
final List list = new ArrayList<>();
list.add("ok"); // 合法
// list = new ArrayList<>(); // 編譯錯誤
| 維度 | HashMap (JDK 1.2+) | Hashtable (JDK 1.0) |
|---|---|---|
| 同步性 | 非線程安全 (高效) | 所有方法 synchronized (低效) |
| Null 支援 | 允許 1 個 null key、多個 null value | 完全不允許 null |
| 繼承體系 | Map 介面 | Dictionary 抽象類 (舊) |
| 迭代器 | fail-fast | enumerator (非 fail-fast) |
| 初始容量/擴容 | 16 / 2倍 (力為2的冪次) | 11 / 2n+1 |
| 現代替代 | 單執行緒首選 | 已淘汰,多執行緒用 ConcurrentHashMap |
關鍵補充:若常量池已有 `"xyz"` (如之前代碼用過),則僅創建 1 個堆對象。面試可畫圖說明:字串常量池 (JDK 7 移至堆) vs 堆對象。
| 維度 | Thread.sleep() | Object.wait() |
|---|---|---|
| 所屬類 | Thread (靜態方法) | Object (實例方法) |
| 鎖行為 | 不釋放鎖 (持有 synchronized 鎖睡覺) | 釋放鎖,進入等待隊列 |
| 喚醒方式 | 時間到自動喚醒 / interrupt() | notify()/notifyAll() / interrupt() / 時間到 |
| 調用前提 | 無 | 必須在 synchronized 同步塊/方法中 |
| 典型場景 | 定時輪詢、延遲重試 | 生產者消費者、線程協作 |
陷阱提醒:`sleep(0)` 會觸發上下文切換,讓出 CPU 時間片;`wait(0)` 表示無限等待直到被喚醒。
s1 = s1 + 1:編譯錯誤。`s1 + 1` 整型提升為 `int`,無法隱式賦值給 `short`,需強轉 `(short)(s1 + 1)`。s1 += 1:正確。複合賦值運算符隱含強轉:`s1 = (short)(s1 + 1)` (JLS 規範)。| 維度 | Overload (重載) | Override (重寫) |
|---|---|---|
| 發生範圍 | 同一類內 | 父子類之間 |
| 方法簽名 | 方法名相同,參數列表不同 (類型/個數/順序) | 方法名、參數列表、返回類型 (协變) 完全相同 |
| 返回類型 | 可不同 | 相同或子類型 (JDK 5+ 協變返回) |
| 拋出異常 | 無限制 | 子類異常 ≤ 父類異常 (里氏替換) |
| 訪問權限 | 無限制 | 子類 ≥ 父類 (不能縮小) |
| 多態類型 | 編譯期靜態綁定 | 運行期動態綁定 |
不能。編譯器無法根據返回類型區分呼叫哪個方法。參數列表必須不同。
題目重複,核心答案一致。
== 比較引用地址 (基本類型比值);equals() 比較邏輯內容 (需重寫)。// HashMap.putVal 判重邏輯 (JDK 1.8)
if (p.hash == hash &&
((k = p.key) == key || (key != null && key.equals(k)))) {
// 找到相同 key,覆蓋 value
e = p;
}
| 維度 | Error (錯誤) | Exception (異常) |
|---|---|---|
| 性質 | JVM 層級嚴重問題,通常不可恢復 | 程式邏輯/運行期可預期問題,可捕獲處理 |
| 典型例子 | OutOfMemoryError, StackOverflowError, NoClassDefFoundError | NullPointerException, IOException, SQLException, 業務異常 |
| 處理策略 | 不應捕獲,只能預防 (調優參數、修代碼) | 應捕獲處理,或向上拋出由全局處理器統一處理 |
| 繼承 | Throwable → Error | Throwable → Exception → RuntimeException (非受檢) / 受檢異常 |
面試官通常考察你對「非受檢異常」的熟悉度,而非背誦列表。掌握分類即可:
最佳實踐:業務邏輯驗證失敗拋 IllegalArgumentException 或自定義業務異常 (繼承 RuntimeException),避免濫用 NPE。
掌握這 10 題的深度解析,Java 基礎關基本通關。建議動手寫 Demo 驗證每個知識點,面試時才能侃侃而談。