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

2017 年 Java 面試高頻題精選:基礎、集合、並發、JVM 全覆蓋

     編輯:Java 綜合教學

基礎語法與特性

  1. switch 支持 String? Java 7+ 支持;之前僅支持 byte/short/char/int/枚舉。
  2. == vs equals:== 比較引用地址 (基本類型比值);equals() 比較邏輯內容 (需重寫)。
  3. Object 常用方法:equals/hashCode/toString/clone/getClass/notify/notifyAll/wait/finalize。
  4. 四種引用:強 (不回收)、軟 (內存不足回收、緩存)、弱 (GC 必回收、WeakHashMap)、虛 (幽靈引用、堆外內存追蹤)。
  5. hashCode 與 equals 契約:equal 則 hashCode 必相等;HashMap 先比 hashCode 定桶位,再用 equals 精確比較,提升性能。
  6. String/StringBuffer/StringBuilder:String 不可變;Buffer 線程安全;Builder 非線程安全、性能最優 (單線程首選)。
  7. Override vs Overload:重寫 (同簽名、子類覆蓋父類) vs 重載 (同名、參數列表不同)。
  8. 抽象類 vs 接口:單繼承 vs 多實現;抽象類可有構造器/非抽象方法/狀態;接口默認方法 (Java 8+) 模糊邊界但設計意圖不同 (is-a vs can-do)。

XML 解析

  • DOM:樹模型、全量載入內存、隨機訪問、適合小文檔。
  • SAX:事件驅動、流式、低內存、單向遍歷、適合大文檔。
  • PULL (XmlPullParser):類 SAX 但可控制解析進度、Android 內置、靈活。

並發基石

  1. wait vs sleep:wait 釋放鎖、需 notify 喚醒、Object 方法;sleep 不釋放鎖、時間到自醒、Thread 靜態方法。
  2. 堆 vs 棧:堆存對象/數組 (GC 管理);棧存基本類型變量/引用/幀 (線程私有、自動釋放)。
  3. 多態實現:動態綁定,JVM 根據對象實際類型分發虛方法表。
  4. GC 算法:標記-清除 (碎片)、標記-整理 (無碎片)、複製 (年輕代)、分代收集 (年輕代/老年代不同策略)。
  5. GC 根:棧局部變量、靜態屬性、常量、JNI 引用、同步鎖持有對象。

集合框架精華

集合底層線程安全特點
ArrayList動態數組否隨機訪問快,擴容 1.5x
LinkedList雙向鏈表否首尾增刪 O(1),無隨機訪問
Vector數組是 (synchronized)歷史遺留,性能差
HashMap數組+鏈表/紅黑樹 (JDK8)否允許 null key/value,擴容 2x
Hashtable數組+鏈表是不允許 null,已過時
ConcurrentHashMap分段鎖 (JDK7) / CAS+synchronized (JDK8)是 (高並發)推薦多線程環境

HashMap 1.8 關鍵點

  • 鏈表長度 > 8 且數組長度 > 64 → 樹化 (紅黑樹)。
  • 樹化節點 < 6 → 退化鏈表。
  • 擴容時 e.hash & oldCap == 0 留原位,否則移至 j + oldCap (均勻分佈)。
  • Fail-Fast:modCount 機制,迭代器檢測並發修改拋 ConcurrentModificationException。

JVM 內存區域 (JDK 8+)

  • 程序計數器、虛擬機棧、本地方法棧 (線程私有)。
  • 堆 (共享、GC 主戰場)、方法區 (元空間 Metaspace、類元數據、常量池、靜態變量)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved