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

Java 筆試高頻 30 題精解:多執行緒、集合、IO、泛型與記憶體模型

     編輯:Java 綜合教學

Java 筆試高頻 30 題精解:多執行緒、集合、IO、泛型與記憶體模型

整理自實戰面經,涵蓋基礎語法、核心類庫、JVM 底層機制與設計模式應用。每題附帶解析與延伸知識點,適合面試複習與知識查漏補缺。

第一部分:多執行緒與並發

1. Thread 類的方法有哪些?

答案:start()、run()、getPriority()(exit() 屬於 System 類)

解析:start() 啟動新執行緒並呼叫 run();直接呼叫 run() 相當於普通方法調用,不具備多執行緒特性。

2. 關於 Exception 類的正確描述?

答案:繼承自 Throwable

延伸:Error(系統錯誤,不可恢復)與 Exception(程式異常,可捕獲)同繼承 Throwable。RuntimeException 及其子類為非受檢異常,其餘為受檢異常。

3. 執行緒池中 GC 執行緒是守護執行緒嗎?

答案:是

解析:JVM 只有非守護執行緒存活時才運行;最後一個非守護執行緒結束,守護執行緒隨 JVM 退出。GC 是典型守護執行緒。

4. volatile 能保證執行緒安全嗎?

答案:不能

解析:volatile 僅保證可見性(讀取主記憶體最新值)與禁止指令重排序,無法保證複合操作原子性(如 count++)。需配合 synchronized、AtomicInteger 或鎖機制。

第二部分:字串、物件建立與記憶體模型

5. String str1 = "hello"; String str2 = "he" + new String("llo"); str1 == str2 結果?

答案:false

解析:new String() 在堆中建立新物件,== 比較參考位址。字串常量池僅儲存字面值與編譯期常量表達式結果。

6. 不透過建構函數能創建物件嗎?

答案:能 四種方式:new、反射 Class.newInstance()/Constructor.newInstance()、clone()、反序列化 ObjectInputStream.readObject()。後兩者不調用建構函數。

7. ArrayList list = new ArrayList(20); 擴容幾次?

答案:0 次

解析:指定初始容量 20,底層陣列一次分配足夠空間,添加 20 個元素不觸發擴容(預設 10 容量才會擴容)。

第三部分:集合框架與繼承關係

8. 集合繼承關係正確的是?

答案:LinkedList 實作 List、HashSet 繼承 AbstractSet

關鍵圖譜:Collection → List → ArrayList/LinkedList;Collection → Set → AbstractSet → HashSet/TreeSet;Map → HashMap/TreeMap(WeakHashMap 實作 Map,不繼承 HashMap)。

9. 0.6332 的資料型別?

答案:double

解析:浮點字面值預設為 double,float 需加 f 後綴(0.6332f)。

第四部分:IO 流與序列化

10. 面向字元的輸入流是?

答案:InputStreamReader

口訣:Reader/Writer 為字元流,InputStream/OutputStream 為位元組流。BufferedReader 包裝 FileReader,ObjectInputStream 包裝 FileInputStream。

11. 介面修飾符可以是?

答案:final、abstract

解析:介面隱含 public abstract 方法與 public static final 常數。private/protected 違背介面公開契約;final 可修飾介面防止被繼承;abstract 為隱含修飾符。

第五部分:泛型與類型系統

12. 存在使 i + 1 < i 成立的數嗎?

答案:存在

解析:int 最大值 Integer.MAX_VALUE(2147483647)+1 溢位變負數。延伸:Double.NaN 使 i > j || i <= j 不成立。

13. 泛型通配符 ? extends T 與 ? super T 差異?

PECS 原則:Producer Extends(讀取用 extends)、Consumer Super(寫入用 super)。? extends Animal 可讀取 Animal 及子類,不可寫入;? super Dog 可寫入 Dog 及子類,讀取只能當 Object。

第六部分:類初始化順序與多態

14. 靜態區塊、構造區塊、建構子執行順序?

順序:父類靜態 → 子類靜態 → 父類構造區塊 → 父類建構子 → 子類構造區塊 → 子類建構子。

驗證程式碼:輸出 static A → static B → I'm A class → HelloA → I'm B class → HelloB。

15. 多重 catch 區塊匹配順序?

答案:僅執行首個匹配區塊。FileNotFoundException 為 IOException 子類,若 catch IOException 在前,子類區塊不可達(編譯錯誤)。

第七部分:參數傳遞與物件引用

16. Java 是值傳遞還是引用傳遞?

答案:唯有值傳遞

鐵律:基本型別傳值副本;參考型別傳參考位址副本。**可修改物件內部狀態,不可改變參考指向新物件**。

17. 序列化時哪些欄位會被保存?

答案:非 transient、非 static 的實例欄位。父類實作 Serializable 時,父類非 transient 實例欄位亦會序列化。

第八部分:加密演算法與流操作

18. 對稱加密演算法有哪些?

答案:DES、AES(DSA、RSA 為非對稱)。常見對稱:DES、3DES、RC2、RC4、AES;非對稱:RSA、DSA、ECC;單向雜湊:MD5、SHA。

19. 流物件建立錯誤的是?

答案:new BufferedReader(new FileInputStream(...))

解析:Reader 系列需包裝 Reader 子類(如 FileReader),不可直接包裝 InputStream。

第九部分:JVM 與執行期行為

20. Class.forName("com.mysql.jdbc.Driver") 作用?

核心三點:① 反射檢查驅動類是否存在;② 觸發驅動類靜態區塊,向 DriverManager 註冊自身;③ 解耦合——程式碼不直接依賴具體驅動類,支援配置檔切換資料庫。

21. Scanner 中 next() 與 nextLine() 差異?

next():以空白分隔,讀取下一個 Token,游標停在 Token 後。nextLine():讀取整行(含空白),游標移至下行行首。連用時 nextLine() 會讀到空行。

第十部分:綜合程式碼輸出題

22. switch 缺少 break 的貫穿行為

輸入 2 時,case 2、case 3 依序執行,結果 2 + 2*2 + 2*3 = 10。

23. 抽象類中可編譯通過的程式碼

答案:public abstract void method(int a); 抽象類可含抽象方法、非抽象方法、建構子、初始化區塊;不可含抽象建構子、抽象靜態方法。

24. 子類建構子隱含呼叫父類無參建構子

若父類無無參建構子,子類必須顯式 super(...) 呼叫有參建構子,否則編譯失敗。

25. 多型下欄位遮蔽與方法覆寫

父子類同名私有欄位各自獨立;覆寫方法在父類建構子中調用時,執行子類版本,但子類欄位尚未初始化(預設值),導致輸出 null 或 0。


附錄:高頻考點速記表

類別核心口訣
異常體系Error 系統崩、Runtime 邏輯錯、Checked 外部錯
集合選型List 存序、Set 去重、Map 鍵值、Queue 排隊
執行緒安全不可變最強、鎖次之、原子類再次、volatile 只保可見
JVM 記憶體堆共享、棧私有、方法區存類、程式計數器指令
設計模式單例枚舉、工廠解耦、建造器多參、代理增強
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved