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

Java 面試核心知識體系總結:從基礎到進階的完整知識圖譜

     編輯:Java 相關知識

前言

本文系統梳理 Java 面試高頻核心知識點,涵蓋面向對象、異常、數據類型、IO、集合、多線程、反射、GC、類加載等十大模塊,旨在為開發者構建完整知識體系,助力面試與技術進階。

1. 面向對象四大特性

  • 封裝、繼承、多態、抽象
  • 多態實現機制:繼承 + 重寫、接口 + 實現

2. 異常體系

分類

  • 編譯時異常:需顯式處理(try-catch / throws),如 IOException
  • 運行時異常:系統自動處理,可選捕獲,如 NullPointerException

處理策略

  • 知曉如何處理 → try-catch
  • 不知如何處理 → throws 向上拋出
  • 運行時異常一般不顯式處理,交給默認處理器

3. 數據類型

類型大小默認值
byte1 字節0
char2 字節'\u0000'
short2 字節0
int4 字節0
float4 字節0.0f
double8 字節0.0
long8 字節0L
boolean1 字節false

String:引用類型,底層 char[],final 類不可繼承

4. IO 體系

  • 字節流:InputStream/OutputStream
  • 字符流:Reader/Writer(InputStreamReader/OutputStreamWriter 為轉換橋樑)
  • 轉換:InputStreamReader(is)、OutputStreamWriter(os)

5. 集合框架

線程安全性

集合線程安全同步包裝
ArrayList/HashSet/HashMap不安全Collections.synchronizedXxx()
Vector/Hashtable安全(同步鎖)性能差,已過時
ConcurrentHashMap 等高併發安全java.util.concurrent 包

ConcurrentHashMap 核心原理 (JDK 7/8 差異大,此處綜述)

  • 分段鎖(Segment 繼承 ReentrantLock)+ HashEntry 數組 + 鏈表/紅黑樹
  • 默認 16 段,理論支持 16 線程並發寫無阻塞
  • 讀操作無鎖:volatile 保證可見性,HashEntry 字段 final 保證鏈表不變
  • 擴容時只鎖定當前段,不鎖全表

6. 多線程

創建方式

  • 繼承 Thread 類
  • 實現 Runnable 接口(推薦,解耦任務與執行)

wait vs sleep

特性wait()sleep()
所屬類ObjectThread
釋放鎖是否
用途線程通信暫停執行
喚醒notify/notifyAll時間到/中斷

volatile vs synchronized

維度volatilesynchronized
作用級別變量變量/方法/類
可見性✅✅
原子性❌✅
阻塞不阻塞可能阻塞
指令重排禁止禁止
編譯器優化禁止允許

線程池 (Executor 框架)

  • 核心優勢:降低創建銷毀開銷、提升響應速度、統一管理監控
  • 四大工廠方法:newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool、newSingleThreadExecutor
  • 執行流程:corePoolSize → 隊列 → maximumPoolSize → 拒絕策略
  • 線程回收:keepAliveTime 超時且當前線程數 > corePoolSize

Semaphore 限流

Semaphore semaphore = new Semaphore(n); // n 個許可證
semaphore.acquire(); // 獲取許可,阻塞直到可用
try {
    // 臨界區代碼
} finally {
    semaphore.release(); // 釋放許可
}

7. 反射機制

獲取 Class 對象三種方式

  1. Class.forName("全限定名")
  2. 類名.class
  3. 對象.getClass()

動態代理

  • JDK 動態代理:基於接口,InvocationHandler + Proxy.newProxyInstance()
  • CGLIB:基於繼承,字節碼生成子類,無需接口
  • 應用:Spring AOP、Hibernate 延遲加載

8. 垃圾回收 (GC)

對象存活判定

  • 可達性分析 (GC Roots):棧局部變量、方法區靜態屬性/常量、JNI 引用
  • 引用計數法已廢棄(循環引用無法解決)

核心算法

算法特點適用代
標記-清除碎片多,效率低老年代 (DVM)
複製無碎片,內存利用率 50%新生代 (98% 朝生夕死)
標記-整理無碎片,適合存活率高老年代
分代收集新生代複製 + 老年代標記整理現代 JVM 通用

JVM 內存結構

  • 方法區:類信息、常量、靜態變量
  • Java 棧:棧幀、局部變量表、方法調用
  • Java 堆:對象實例、數組(GC 主戰場)

四種引用強度

  1. 強引用:寧願 OOM 不回收
  2. 軟引用:內存不足時回收,適合緩存
  3. 弱引用:GC 掃描即回收,生命週期更短
  4. 虛引用:不決定生命週期,跟蹤被回收狀態,需配合 ReferenceQueue

9. 類加載器

四層結構 (雙親委派)

  1. 啟動類加載器:C++ 實現,加載 jre/lib 核心庫
  2. 擴展類加載器:加載 jre/lib/ext
  3. 應用類加載器:加載 classpath
  4. 自定義類加載器:繼承 ClassLoader

類初始化觸發條件 (6 種)

  1. new 實例化
  2. 讀/寫靜態字段
  3. 調用靜態方法
  4. 反射調用
  5. 初始化子類 (觸發父類)
  6. JVM 啟動主類

初始化步驟

  1. 加載鏈接 (未完成時)
  2. 遞歸初始化父類 (接口除外)
  3. 執行靜態變量賦值/靜態代碼塊 (按順序)

10. 總結與建議

  • 基礎決定上限:集合、多線程、JVM、GC 是高級工程師必修課
  • 原理重於 API:知其然更要知其所以然 (如 ConcurrentHashMap 分段鎖、volatile 內存語義)
  • 實戰驗證理論:搭建 Demo 驗證 GC 行為、鎖升級、類加載順序
  • 關注版本演進:JDK 8→11→17→21 新特性 (模塊化、ZGC、Record、Pattern Matching 等)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved