這 32 道題覆蓋 Java 基礎、集合、併發、JVM、異常等核心領域,是中高級開發者必須掌握的知識體系。本文提供標準答案與深度解析,助你面試通關、查漏補缺。
final:修飾符。類不可繼承、方法不可重寫、變量不可修改(引用不變,對象內容可變)、參數不可改變。finally:異常處理塊,try-catch 後必執行(除 System.exit()、JVM 崩潰),用於資源清理。finalize():Object 方法,GC 回收前調用,不推薦使用(不可預測、性能差、Java 9 標記棄用),資源釋放用 try-with-resources 或 Cleaner。extends 一個類 或 implements 一個接口(不能同時),本質是隱式繼承/實現的子類實例創建。Outer.this),可訪問外部所有成員(含私有),創建需 new Outer().new Inner()。Outer$Inner.class vs Outer$1.class(匿名)。& 位運算 / 邏輯與(不短路);&& 短路邏輯與,右運算元可能不執行。Dictionary,HashMap 實現 Map。fail-fast,Hashtable enumeration + iterator。-ea 啟用,-da 禁用。assert expr1 : expr2,expr1 為 false 拋 AssertionError,expr2 為錯誤信息。不可用於公共方法參數校驗(斷言可關閉)。System.gc() 僅建議。s.intern() 可手動入池。12 / -11。規則:floor(x + 0.5),負數向零方向取整。s1+1 提升為 int,賦值需強轉。s1 += 1 隱含強轉,正確。sleep():Thread 靜態方法,釋放 CPU,不釋放鎖,指定時間後進入就緒態。wait():Object 實例方法,必須在 synchronized 同步塊中調用,釋放鎖並進入等待隊列,需 notify/notifyAll 喚醒重新競爭鎖。break/continue label 可實現有限跳轉。length 屬性;String 有 length() 方法。HashSet 先比 hashCode() 再 equals();TreeSet 用 compareTo()。== 比引用,equals() 比內容(需正確重寫)。NullPointerException、IndexOutOfBoundsException、ClassCastException、IllegalArgumentException、ArithmeticException。OutOfMemoryError、StackOverflowError,不可恢復);Exception(程序可處理的異常狀態,分 Checked/Unchecked)。public static final 常量、public abstract 方法(Java 8+ 默認/靜態/私有方法)。static(靜態屬類)、不能 private(需子類實現)、可 synchronized(鎖子類實例)、可 native(本地方法)。implements 接口;抽象類可繼承實體類(但實體類無抽象方法則無意義)。run() 直接調用同步執行,start() 啟動新線程執行 run()。super() 調用父構造器。synchronized 方法:阻塞(同一對象鎖)。synchronized 方法:可訪問(無鎖競爭)。Class 對象,與實例方法鎖互不干擾。2 << 3(左移 3 位),位運算最快。equals() 相等則 hashCode() 必須相等,反之不強制。用於 Hash 集合會導致元素丟失、查找失效。byte/short/char/int、包裝類、enum、String (Java 7+)。不支持 long/float/double/boolean。public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) instance = new Singleton();
}
}
return instance;
}
}
這 32 題串聯起 Java 核心知識網。建議:
面試題不是背誦對象,而是檢驗知識體系完整性的試金石。真正的掌握,是能在項目中正確選型、排查疑難雜癥、設計高併發系統。