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

Java 面試核心題精選(一):JVM、集合、多線程、Big-O 等高頻考點詳解

     編輯:Java 綜合教學

Java 面試核心題精選(一):JVM、集合、多線程、Big-O 等高頻考點詳解

1. 什麼是 JVM?為何 Java 被稱為「平台無關性」語言?

  • JVM (Java Virtual Machine): 執行 Java 位元碼的虛擬機進程。Java 源碼編譯為 .class 位元碼,由 JVM 解釋執行。
  • 跨平台原理: Java 設計允許「一次編寫,到處運行」。JVM 屏蔽了底層作業系統與硬體差異(指令長度、記憶體模型等),不同平台安裝對應 JVM 即可運行相同位元碼。

2. static 關鍵字含義?能否覆寫 private 或 static 方法?

  • 含義: 修飾的成員屬於類而非實例,無需建立物件即可透過 類名.成員 訪問。
  • static 方法不可覆寫: 覆寫基於運行期動態綁定,static 方法屬於類,編譯期靜態綁定。子類定義同名靜態方法稱為「隱藏」,非覆寫。
  • private 方法不可覆寫: 子類不可見,自然無法覆寫。

3. 創建線程的三種方式?推薦哪種?

  1. 繼承 Thread 類
  2. 實現 Runnable 介面
  3. 使用 ExecutorService 線程池框架

推薦實現 Runnable / 使用線程池:

  • 避免單繼承限制(已繼承其他類時無法繼承 Thread)。
  • 線程池復用線程、控制併發數、提升效率,生產環境標準做法。

4. Java 集合框架核心介面有哪些?

  • Collection:元素集合根介面。
  • Set:不重複元素集合(HashSet, TreeSet)。
  • List:有序、可重複(ArrayList, LinkedList)。
  • Map:鍵值對映射,鍵唯一(HashMap, TreeMap)。

5. 有序陣列 vs 無序陣列:如何權衡?

操作有序陣列無序陣列
查找O(log n) 二分查找O(n) 線性掃描
插入O(n) 需移動元素O(1) 尾部直接加入

頻繁查找選有序,頻繁插入選無序。

6. 集合框架最佳實踐

  • 根據場景選型:元素固定用陣列,動態用 ArrayList;需線程安全用 CopyOnWriteArrayList 或 Collections.synchronizedList。
  • 預估大小指定初始容量(new ArrayList<>(100)),減少擴容開銷。
  • 全面使用泛型,保證類型安全、避免 ClassCastException、提升可讀性。
  • 優先用 JDK 不可變類(String, Integer 等)作為 Map Key,免去自寫 hashCode/equals。
  • 面向介面編程:List<String> list = new ArrayList<>();
  • 集合為空返回 Collections.emptyList() 或長度 0 陣列,勿返回 null。

7. 什麼是 PriorityQueue(優先級隊列)?

  • 基於優先級堆的無界隊列,元素按自然順序或自定義 Comparator 排序。
  • 不允許 null 值(無自然順序)。
  • 非線程安全,入隊/出隊時間複雜度 O(log n)。

8. 理解 Big-O 符號?舉例說明。

  • 定義: 描述算法在最壞情況下,隨輸入規模增長的時間/空間複雜度上界。
  • 常見複雜度: O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ)。
  • 集合操作例子:
    • ArrayList 隨機存取 O(1),插入刪除 O(n)。
    • LinkedList 頭尾操作 O(1),隨機存取 O(n)。
    • HashMap 查找/插入 平均 O(1)。
    • TreeMap (紅黑樹) 查找/插入 O(log n)。
  • 選型時綜合考量時間、記憶體、併發場景,Big-O 提供量化決策依據。

面試加油

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