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

Java 面試核心題庫精選 (下):異常處理、集合、JDBC、Servlet、JSP、RMI 深度解析

     編輯:Java 相關知識

異常處理機制核心考點

Q: Checked vs Unchecked Exception 差異?

Checked (受檢) : 編譯期強制處理 (try-catch 或 throws),如 IOException、SQLException。代表可預期、可恢復的錯誤。
Unchecked (非受檢) : 繼承 RuntimeException,編譯期不強制處理,如 NullPointerException、IllegalArgumentException。通常代表程式邏輯錯誤。

Q: throw vs throws 差異?

  • throw:方法體內拋出具體異常實例:throw new IOException()。
  • throws:方法簽名上宣告可能拋出的異常類型:void read() throws IOException。

Q: finally 塊執行時機與用途?

永遠執行 (除非 System.exit() 或 JVM 崩潰)。核心用途:資源釋放 (關閉流、釋放鎖、斷開資料庫連線)。Java 7+ 建議使用 try-with-resources 自動管理。

Q: finalize() 方法現狀?

已棄用 (Deprecated since Java 9)。不可靠、效能差、無法保證執行時機。替代方案:Cleaner、PhantomReference 或 try-with-resources。

集合框架高頻考點

Q: ArrayList vs LinkedList 選擇依據?

ArrayList:陣列實作,隨機存取 O(1),尾端新增 O(1) 擴容均攤,中間增刪 O(n)。
LinkedList:雙向鏈表,循序存取優,首尾增刪 O(1),隨機存取 O(n)。
實務建議: 90% 場景用 ArrayList,頻繁首尾操作用 ArrayDeque (非執行緒安全) 或 LinkedList。

Q: HashMap 1.7 vs 1.8 關鍵變化?

  • 資料結構:陣列+鏈表 → 陣列+鏈表/紅黑樹 (鏈表長度>8 且陣列長度>64 樹化)。
  • 擴容機制:重新計算 hash 分佈 → 利用高位 bit 判斷留在原桶或遷移至新桶+舊容量位置,避免重新 hash。
  • 解決高併發死循環:1.7 頭插法擴容易導致鏈表成環,1.8 尾插法保持順序。

Q: ConcurrentHashMap 線程安全實現?

1.7:Segment 分段鎖 (預設 16 段),ReentrantLock。
1.8:放棄 Segment,採用 CAS + synchronized (鎖頭節點) + 紅黑樹,細粒度鎖、效能更優。

JDBC 與資料庫連線池

Q: PreparedStatement 優於 Statement 原因?

  1. 預編譯:資料庫解析、優化、生成執行計畫僅一次,重複執行效能高。
  2. 防 SQL 注入:參數化查詢,參數視為資料而非 SQL 片段。
  3. 批次處理:addBatch() / executeBatch() 大幅提升大量寫入效能。

Q: 連線池核心原理與關鍵參數?

啟動時預建連線物件池,借用/歸還替代建立/關閉。關鍵參數:initialSize、maxActive、maxIdle、minIdle、maxWait、validationQuery (驗證連線有效性)、testOnBorrow、removeAbandoned。

Servlet / JSP 核心機制

Q: Servlet 生命週期三階段?

  1. init():載入實例化時執行一次,初始化資源。
  2. service() (doGet/doPost):每請求一執行緒調用,處理業務邏輯。
  3. destroy():容器卸載前執行一次,釋放資源。

Q: forward vs sendRedirect 差異?

特性forward (轉發)sendRedirect (重導向)
請求對象同一個 request/response新請求 (瀏覽器發起第二次請求)
地址列不變變為新 URL
速度快 (伺服器內部)較慢 (經瀏覽器)
適用場景同一 Web 應用內流程控制跨應用、登入後導向、防止表單重複提交

Q: Session vs Cookie 差異?

  • 儲存位置:Session 伺服器端 (記憶體/資料庫/Redis),Cookie 客戶端瀏覽器。
  • 容量:Session 無上限 (視記憶體),Cookie 單個 4KB、域名下限 20~50 個。
  • 安全性:Session 相對安全 (SessionID 在 Cookie/URL),Cookie 明文可竄改。
  • 生命週期:Session 靠超時時間 (預設 30min),Cookie 可設定持久化過期時間。

Q: JSP 九大內建物件?

request, response, session, application, out, pageContext, config, page, exception。

RMI (Remote Method Invocation) 核心架構

  • Stub/Skeleton 層:客戶端 Stub 代理遠端呼叫,序列化參數、網路傳輸、反序列化結果。
  • Remote Reference 層:管理遠端物件引用語義 (單點/複制)。
  • Transport 層:TCP/IP 連線管理、防火牆穿透。

關鍵步驟: 定義 Remote 介面 → 實作類繼承 UnicastRemoteObject → rmic 生成 Stub → 啟動 rmiregistry → 註冊 (Naming.bind) → 客戶端查找 (Naming.lookup) → 透過 Stub 呼叫遠端方法。

總結

此題庫涵蓋 Java 後端開發核心知識體系。面試重點不在背誦定義,而在於理解原理 (為什麼)、取捨 (何時用什麼)、避坑 (常見誤區)。建議結合原始碼 (如 HashMap、ConcurrentHashMap、ThreadPoolExecutor) 深度掌握。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved