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

阿里 Java 開發高頻面試題精選(四):基礎核心、集合、並發、JVM、架構全覆蓋

     編輯:Java 綜合教學

阿里 Java 開發高頻面試題精選(四):基礎核心、集合、並發、JVM、架構全覆蓋

Java 三大特性

封裝、繼承、多態。

抽象類 vs 接口

  • 共同點:均不可實例化,位於繼承樹頂端,含抽象方法需子類實現;
  • 不同點:接口只能有常量和抽象方法(Java 8 前),無構造器/初始化塊;抽象類可有普通成員/方法/構造器;單繼承 vs 多實現;接口更抽象(無默認實現)。

棧 vs 堆、值傳遞 vs 引用傳遞

  • 棧:基本類型變量、對象引用,作用域結束自動釋放;
  • 堆:new 對象/數組,GC 管理,無引用時變垃圾;
  • Java 只有值傳遞:基本類型傳值,引用類型傳引用的值(地址副本)。

單例模式

構造器私有、靜態方法獲取實例。優點:受控訪問、節省資源、可變實例數;缺點:擴展難、職責重、濫用導致連接池溢出/狀態丟失。

重載 vs 重寫

  • 重載:同類中,同名、參數列表不同(個數/類型/順序),返回類型無關;
  • 重寫:父子類,同名、同參數、同返回類型,子類權限 ≥ 父類,@Override 校驗。

子父類轉換與構造順序

子類自動向上轉型為父類。構造順序:子類構造器 → 父類構造器 → 父類執行 → 子類執行。

final / finally / finalize

  • final:修飾屬性/方法/類 → 不可變/不可覆蓋/不可繼承;
  • finally:異常塊,總是執行;
  • finalize:Object 方法,GC 前調用,可覆蓋釋放資源。

synchronized vs volatile

  • volatile:變量級,保證可見性、禁止重排序,無鎖、不阻塞;
  • synchronized:鎖級,保證原子性+可見性+有序性,鎖監視器,同步線程內存,開銷大;
  • 本質區別:volatile 單變量同步,synchronized 整線程內存同步。

集合體系

  • Collection → Set(無序唯一)、List(有序可重);Map(Key-Value, Key 唯一);
  • 集合接口不實現 Cloneable/Serializable:具體實現決定語義,接口層面無意義。

hashCode/equals 契約

  • equals 真 → hashCode 必相等;
  • hashCode 相等 → equals 不一定真;
  • HashMap 依賴兩者定位桶、判斷鍵唯一,實現錯誤導致覆蓋/查找失效。

HashMap vs Hashtable

  • HashMap:非同步、允許 null key/value、Iterator fail-fast;
  • Hashtable:同步、不允許 null、Enumeration;
  • 並發首選 ConcurrentHashMap(Segment/CAS 細粒度鎖)。

Comparable vs Comparator

  • Comparable:內部比較(compareTo),類本身實現,如 String/Integer;
  • Comparator:外部比較器(compare),不修改原類,策略模式;
  • 自定義類排序 → 實現 Comparable;第三方/多策略 → Comparator。

HashMap 工作原理(核心)

  1. Entry 內部類存 K-V;
  2. Entry[] table 數組,邏輯分桶;
  3. hash(key.hashCode()) → indexFor 定位桶;
  4. 鏈表解決衝突,equals 保證 Key 唯一;
  5. Value 的 hashCode/equals 無關緊要。

String / StringBuffer / StringBuilder

  • String:final char[],不可變,線程安全;
  • StringBuffer:同步方法,線程安全;
  • StringBuilder:非同步,高性能,單線程首選。

ArrayList vs LinkedList

  • ArrayList:數組,查快增刪慢;
  • LinkedList:雙向鏈表,增刪快查慢。

GC 機制

  • 引用計數:簡單但難解決循環引用;
  • 可達性分析(GC Roots 遍歷):主流 JVM 採用,準確判斷存活。

序列化與反序列化

對象 → 字節序列(持久化/網絡傳輸/跨進程)→ 對象。核心目的:跨進程傳遞格式化數據。

Java 靈活性體現

反射機制:運行時獲取類信息、動態調用、ORM 映射基石。

sleep vs wait

  • sleep:Thread 靜態方法,不釋放鎖,指定時間後自動恢復;
  • wait:Object 實例方法,釋放鎖,進入等待池,需 notify/notifyAll 喚醒進入鎖池。

IO vs NIO

  • IO:流導向、阻塞;NIO:緩衝區導向、非阻塞、Selector 多路複用;
  • NIO 單線程管理多 Channel,高併發優勢明顯。

Socket 基本步驟

  1. 創建 Socket;
  2. 獲取輸入/輸出流;
  3. 協議讀寫;
  4. 關閉 Socket。

深/淺克隆

  • 淺:僅復制對象引用;
  • 深:遞歸復制引用對象圖。

UDP vs TCP

  • TCP:面向連接、可靠、字節流、三次握手/四次揮手;
  • UDP:無連接、不可靠、報文、無序、高效(視頻/直播)。

紅黑樹

自平衡 BST,5 大約束 → 最長路徑 ≤ 2×最短路徑,查詢 O(log n)。

反射應用

POJO 屬性↔數據庫字段映射:約定大於配置,自動拼 SQL / 封裝 ResultSet。

三次握手 / 四次揮手

握手:SYN → SYN+ACK → ACK(雙方分配資源);
揮手:FIN → ACK → FIN → ACK(全雙工單向關閉)。

equals vs ==

  • ==:比較棧內容(基本類型值 / 引用地址);
  • equals:比較堆內容(對象邏輯相等),可重寫;
  • equals 真 → == 不一定真。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved