一、Java概述
1. Java語言的特點?
- 面向對象:封裝、繼承、多態。
- 跨平臺:通過JVM實現“一次編寫,到處運行”。
- 內存管理:自動垃圾回收(GC),避免手動內存管理。
- 多線程:內置多線程支持,通過
Thread
類和Runnable
接口實現。
2. JVM、JDK、JRE的區別?
組件 | 描述 | 包含內容 |
---|
JVM | Java虛擬機,負責執行字節碼 | 解釋器、即時編譯器(JIT) |
JRE | Java運行時環境 | JVM + 核心類庫(如java.lang ) |
JDK | Java開發工具包 | JRE + 編譯器(javac )、調試工具等 |
二、基礎語法
3. Java基本數據類型有哪些?
- 數值型:
byte
、short
、int
、long
(整數);float
、double
(浮點數)。 - 字符型:
char
。 - 布爾型:
boolean
。
4. 自動拆箱與裝箱?
- 裝箱:基本類型 → 包裝類(如
int
→ Integer
)。 - 拆箱:包裝類 → 基本類型(如
Integer
→ int
)。 - 緩存機制:
Integer
緩存范圍為-128~127
,超出范圍會創建新對象。
三、面向對象
5. 面向對象的三大特性?
- 封裝:數據和方法綁定,通過訪問修飾符(
public
、private
等)控制訪問。 - 繼承:子類復用父類屬性和方法,使用
extends
關鍵字。 - 多態:父類引用指向子類對象,運行時動態決定調用的方法。
6. 抽象類與接口的區別?
特性 | 抽象類 | 接口 |
---|
實例化 | 不能直接實例化 | 不能直接實例化 |
方法 | 可包含抽象和非抽象方法 | 所有方法均為抽象方法 |
繼承 | 單繼承 | 多實現 |
四、字符串處理
7. String、StringBuilder、StringBuffer的區別?
特性 | String | StringBuilder | StringBuffer |
---|
不可變性 | 不可變(線程安全) | 可變(非線程安全) | 可變(線程安全) |
性能 | 拼接效率低(生成新對象) | 高(直接操作數組) | 高(線程安全但稍慢) |
場景 | 常量字符串 | 單線程下頻繁拼接 | 多線程下頻繁拼接 |
8. String的intern()方法作用?
- 將字符串對象放入字符串常量池。若池中已存在相同內容的字符串,則返回池中的引用;否則,將當前對象加入池中并返回。
9. String的不可變性有什么好處?
五、異常處理
10. 異常的分類?
- Error:JVM錯誤(如
OutOfMemoryError
),程序無法處理。 - Exception:
- 編譯時異常(Checked):需顯式處理(如
IOException
)。 - 運行時異常(Unchecked):無需顯式處理(如
NullPointerException
)。
11. finally塊的執行順序?
try
中的return
語句會先暫存返回值,再執行finally
,最后返回暫存值。- 若
finally
中也有return
,會覆蓋try
中的返回值。
六、IO與網絡
12. BIO、NIO、AIO的區別?
模型 | 阻塞性 | 核心機制 | 適用場景 |
---|
BIO | 同步阻塞 | 線程 per 連接 | 連接數少且長連接 |
NIO | 同步非阻塞 | 通道 + 選擇器 | 連接數多且短連接 |
AIO | 異步非阻塞 | 事件 + 回調 | 高并發、長連接 |
13. 序列化的作用?
- 將對象轉換為字節流,用于存儲或網絡傳輸。需實現
Serializable
接口,transient
關鍵字可忽略某些字段。
14. 字節流和字符流的區別?
- 字節流(如FileInputStream)處理二進制數據,字符流(如FileReader)處理文本數據。
- 字符流內部通過字節流實現,自動處理編碼轉換。
七、多線程與并發
15. 線程的生命周期?
- 新建(New) → 就緒(Runnable) → 運行(Running) → 阻塞(Blocked/Waiting/Timed Waiting) → 終止(Terminated)。
16. wait()和sleep()的區別?
- wait():釋放鎖,需在synchronized塊中調用。
- sleep():不釋放鎖,可在任意位置調用。
八、 反射與注解
17. 什么是反射?反射的應用場景有哪些?
- 反射允許在運行時動態獲取類信息、調用方法、訪問字段。
- 應用場景:框架開發(如Spring)、單元測試、動態代理。
18. 常見的Java注解有哪些?
- 內置注解:@Override(重寫方法)、@Deprecated(過時)、@SuppressWarnings(抑制警告)。
- 元注解:@Retention(生命周期)、@Target(作用目標)。
- 框架注解:@Component(Spring)、@Autowired(依賴注入)。
九、其他高頻問題
19. ==和equals的區別?
- ==:比較引用地址(基本類型比較值)。
- equals():默認比較引用地址,常被重寫為比較內容(如
String
)。
20. 為什么重寫equals必須重寫hashCode?
- 哈希表(如
HashMap
)通過hashCode
定位存儲位置,若equals
相等但hashCode
不等,會導致數據不一致。
21. 泛型的作用?
- 類型安全:編譯期檢查類型錯誤。
- 代碼復用:減少強制類型轉換,提高可讀性。
十、代碼實戰
22. 以下代碼輸出什么?
Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
System.out.println(a == b);
System.out.println(c == d);
23. finally塊中的return會覆蓋try中的return嗎?
public static int test() {try {return 1;} finally {return 2; }
}
總結:以上題目覆蓋Java基礎核心知識點,建議結合實際項目經驗,重點掌握String特性、異常處理、多態、IO模型等模塊。面試時需結合代碼示例說明原理,展示對底層機制的理解。