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

Java 面試高頻 10 題精講:JVM、集合、多線程、GC 核心考點

     編輯:Java 相關知識

1. 什麼是 JVM?為什麼 Java 是跨平台的?

JVM(Java Virtual Machine)是執行字節碼的虛擬機。Java 源碼編譯為 .class 字節碼,JVM 屏蔽了底層 OS 與硬件差異,實現「一次編譯,到處運行」。

2. JDK 與 JRE 的區別?

  • JRE:Java Runtime Environment,包含 JVM + 核心類庫,僅用於運行程序。
  • JDK:Java Development Kit = JRE + 編譯器(javac) + 工具(javadoc, jdb 等),用於開發。

3. Java 面向對象四大特性?

  1. 封裝:隱藏內部細節,通過 public/protected/private 控制訪問權限。
  2. 繼承:子類復用父類字段與方法,單繼承,支持多層繼承。
  3. 多態:同一接口對應不同實現,運行時動態綁定(重寫)。
  4. 抽象:抽象類/接口定義行為契約,具體實現交由子類。

4. 靜態方法能訪問非靜態變量嗎?

不能直接訪問。靜態屬於類,類加載時初始化;非靜態屬於實例,需 new 對象後才存在。若在靜態方法中直接用非靜態變量,編譯報錯。解決:new MyClass().nonStaticField。

5. Override(重寫)vs Overload(重載)?

維度OverrideOverload
發生位置父子類之間同一類內部
方法名相同相同
參數列表必須相同必須不同(個數/類型/順序)
返回類型相同或协变類型可不同
訪問權限不能降低可任意
異常不能拋出更寬泛的受檢異常無限制

6. Java 支持多繼承嗎?

類單繼承,接口多實現。一個類只能 extends 一個父類,但可 implements 多個接口(Java 8+ 接口支持 default 方法,變相實現多繼承行為)。

7. 進程與線程的區別?

  • 進程:資源分配基本單位,擁有獨立地址空間,開銷大。
  • 線程:CPU 調度基本單位,屬於進程,共享進程堆/方法區,擁有獨立棧/程序計數器,切換開銷小。

8. 垃圾回收目的與觸發時機?

目的:識別並回收不再使用的對象,釋放內存。觸發:Eden 區滿、老年代滿、Metaspace 不足、手動 System.gc()(僅建議)、JVM 內存達到閾值等。

9. finalize() 什麼時候調用?作用?

對象被 GC 回收前調用(非決定性),用於釋放非 Java 資源(如文件句柄、Socket、JNI 內存)。不推薦依賴,建議實現 AutoCloseable 配合 try-with-resources 顯式關閉。

10. 對象引用置 null,GC 會立即回收嗎?

不會。對象變為「不可達」,需等待下一次 GC 掃描到才會回收。System.gc() 僅建議,不保證立即執行。

面試加分提示

  • 能畫出 JVM 內存模型(堆/棧/方法區/程序計數器/本地方法棧)並說明各區域 GC 行為。
  • 熟悉 CMS / G1 / ZGC 三大收集器原理與適用場景。
  • 理解 happens-before 原則與 volatile/synchronized 內存語義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved