首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 面試高頻題精選:從基礎語法到併發集合

     編輯:Java 相關知識

核心概念辨析

Error vs Exception:嚴重性與可恢復性

  • Error:JVM 層級嚴重問題(如 OutOfMemoryError、StackOverflowError),應用無法恢復,不應捕獲處理。
  • Exception:程式邏輯或環境可預期的異常(如 IOException、NullPointerException),可通過 try-catch 處理並恢復。

Abstract Class vs Interface:設計契約的兩種形式

維度Abstract ClassInterface
方法實現可有具體方法與抽象方法Java 8 前全抽象;8+ 支持 default/static 私有方法
繼承關係單繼承(extends)多實現
構造器可有構造器(供子類調用)無構造器
成員變量任意修飾符隱含 public static final
適用場景"is-a" 關係,共享代碼"can-do" 能力,定義契約

關鍵字組合限制

abstract 方法不能同時是 static、native、synchronized。

  • static 屬於類,無多態;abstract 要求子類實現,矛盾。
  • native 由本地代碼實現;abstract 無方法體,語義衝突。
  • synchronized 是實現細節,不屬於方法簽名,接口/抽象方法不可標註。

繼承與實現規則

  • Interface 可繼承多個 Interface(extends)。
  • Abstract Class 可實現 Interface(implements),無需實現所有方法。
  • Abstract Class 可繼承 Concrete Class,但父類必須有可訪問的構造器。

多線程核心

start() vs run()

  • start():啟動新線程,由 JVM 調度執行 run()。
  • run():普通方法調用,仍在當前線程執行,不具備多線程特性。

構造器不可 Override

構造器不屬於繼承體系,子類無法覆蓋父類構造器,但可重載多個構造器。

synchronized 方法鎖機制

一個對象的 synchronized 方法同一時間僅允許一個線程進入。其他線程嘗試進入該對象的任意 synchronized 方法均會阻塞(鎖對象為 this)。

經典算法與位運算

高效計算 2 × 8

int result = 2 << 3; // 左移 3 位 = 乘以 2^3 = 8,結果 16

位運算效率高於乘法指令,嵌入式/高性能場景常用。

equals 與 hashCode 契約

錯誤觀點:兩個對象 equals 相等,hashCode 可以不同。

正確規則:equals(true) ⇒ hashCode 必須相等。違反將導致 HashMap/HashSet 失效。

參數傳遞:值傳遞鐵律

Java 只有值傳遞。傳遞對象時,傳的是「引用的副本」。方法內可修改對象內部狀態,但無法改變外部引用指向。

switch 支持類型演進

版本支持類型
Java 1.0~6int, short, char, byte, enum
Java 7+ String
Java 12++ switch 表達式、模式匹配
長期不支持long, float, double, boolean

單例模式寫法對比

餓漢式(線程安全、類加載即創建)

public class Singleton {
    private static final Singleton INSTANCE = new Singleton();
    private Singleton() {}
    public static Singleton getInstance() { return INSTANCE; }
}

懶漢式雙重檢查鎖(DCL,Java 5+ volatile 保證可見性)

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;
    }
}

靜態內部類(推薦:延遲加載+線程安全+簡潔)

public class Singleton {
    private Singleton() {}
    private static class Holder { static final Singleton INSTANCE = new Singleton(); }
    public static Singleton getInstance() { return Holder.INSTANCE; }
}

HashMap vs Hashtable

特性HashMapHashtable
線程安全非同步,高併發需外部同步或用 ConcurrentHashMap方法級 synchronized,性能低
Null 鍵值允許一個 null key、多個 null value不允許 null
繼承體系實現 Map 接口繼承 Dictionary 類(已過時)
遍歷方式Iterator (fail-fast)Enumerator + Iterator
contains 方法分為 containsKey/containsValue單一 contains 易混淆

趣味智力題

3L/5L 桶量 4L 水(兩種解法)

  1. 5L滿→倒3L(剩2L)→倒掉3L→5L倒入3L(3L裝2L)→5L滿→倒滿3L(需1L,5L剩4L)
  2. 3L滿→倒5L→3L滿→倒5L(5L裝1L,3L剩1L)→倒掉5L→3L倒入5L→3L滿→倒5L(得4L)

天平 3 次分 140kg 鹽為 90/50(7kg/2kg 砝碼)

  1. 第1次:7+2=9kg 砝碼稱 9kg 鹽
  2. 第2次:9kg 鹽+7kg 砝碼稱 16kg 鹽
  3. 第3次:16kg 鹽+9kg 鹽+2kg 砝碼稱 27kg 鹽
  4. 已得 9+16+27=52kg,剩 88kg……(此題經典解法較長,面試常考思路而非完整步驟)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved