java-基礎(chǔ)
Java 基礎(chǔ)是面試中最常考察的部分,無(wú)論是初級(jí)還是中級(jí)開(kāi)發(fā)崗位,都會(huì)圍繞核心概念、語(yǔ)法特性、底層原理等展開(kāi)。以下是高頻面試點(diǎn)整理,按模塊分類(lèi)說(shuō)明核心考點(diǎn):
一、Java 語(yǔ)言特性與 JVM 基礎(chǔ)
-
Java 跨平臺(tái)性
- 核心:
一次編寫(xiě),到處運(yùn)行的實(shí)現(xiàn)依賴(lài)JVM(Java 虛擬機(jī)),Java 源碼編譯為字節(jié)碼(.class),由不同平臺(tái)的 JVM 解釋執(zhí)行。 - 考點(diǎn):JVM 與操作系統(tǒng)的關(guān)系、字節(jié)碼的作用、JDK/JRE/JVM 的區(qū)別(JDK 包含 JRE + 開(kāi)發(fā)工具,JRE 包含 JVM + 運(yùn)行類(lèi)庫(kù))。
- 核心:
-
面向?qū)ο笕筇匦?/div>
- 封裝:隱藏對(duì)象內(nèi)部實(shí)現(xiàn),通過(guò)訪問(wèn)修飾符(public/private/protected/default)控制屬性和方法的訪問(wèn)權(quán)限(如 private 屬性需通過(guò) get/set 方法操作)。
- 繼承:子類(lèi)繼承父類(lèi)非 private 的屬性和方法,使用
extends關(guān)鍵字(Java 單繼承,支持多層繼承);super關(guān)鍵字用于訪問(wèn)父類(lèi)構(gòu)造器 / 方法 / 屬性(必須在子類(lèi)構(gòu)造器第一行)。 - 多態(tài):同一行為的不同表現(xiàn)形式,實(shí)現(xiàn)條件:繼承 / 接口實(shí)現(xiàn)、方法重寫(xiě)、父類(lèi)引用指向子類(lèi)對(duì)象;分為編譯時(shí)多態(tài)(重載)和運(yùn)行時(shí)多態(tài)(重寫(xiě),通過(guò)動(dòng)態(tài)綁定實(shí)現(xiàn))。
其他核心特性- 抽象:通過(guò)抽象類(lèi)(
abstract修飾,可含普通方法)和接口(JDK8 前全為抽象方法,JDK8 后支持默認(rèn)方法default和靜態(tài)方法static)實(shí)現(xiàn)。 - 垃圾回收(GC):JVM 自動(dòng)回收無(wú)用對(duì)象內(nèi)存,無(wú)需手動(dòng)釋放;常見(jiàn) GC 算法(標(biāo)記 - 清除、復(fù)制、標(biāo)記 - 整理、分代收集)。
二、數(shù)據(jù)類(lèi)型與運(yùn)算符
-
數(shù)據(jù)類(lèi)型分類(lèi)
- 基本數(shù)據(jù)類(lèi)型(8 種):
byte(1)、short(2)、int(4)、long(8)、float(4)、double(8)、char(2)、boolean(1);默認(rèn)值(如 int 默認(rèn) 0,boolean 默認(rèn) false)。 - 引用數(shù)據(jù)類(lèi)型:類(lèi)、接口、數(shù)組;默認(rèn)值為
null,存儲(chǔ)對(duì)象的內(nèi)存地址。
- 基本數(shù)據(jù)類(lèi)型(8 種):
-
裝箱與拆箱
- 裝箱:基本類(lèi)型→包裝類(lèi)(如
int→Integer,通過(guò)valueOf());拆箱:包裝類(lèi)→基本類(lèi)型(如Integer→int,通過(guò)intValue())。 - 考點(diǎn):
Integer緩存機(jī)制(-128~127 范圍的對(duì)象復(fù)用,超出范圍則新建對(duì)象),例如:Integer a=127; Integer b=127; a==b→true;a=128; b=128; a==b→false。
- 裝箱:基本類(lèi)型→包裝類(lèi)(如
-
== 與 equals ()
==:基本類(lèi)型比較值;引用類(lèi)型比較內(nèi)存地址(是否為同一對(duì)象)。equals():默認(rèn)等價(jià)于==(Object 類(lèi)實(shí)現(xiàn)),但 String、Integer 等重寫(xiě)后比較內(nèi)容(如"abc".equals("abc")→true)。
三、字符串(String)
-
String、StringBuffer、StringBuilder 區(qū)別
- String:不可變(底層 char 數(shù)組被
final修飾),每次修改都會(huì)創(chuàng)建新對(duì)象,適合少量操作。 - StringBuffer:可變,線程安全(方法加
synchronized),效率低,適合多線程場(chǎng)景。 - StringBuilder:可變,線程不安全,效率高,適合單線程場(chǎng)景。
- String:不可變(底層 char 數(shù)組被
-
String 常量池
- 存儲(chǔ)在方法區(qū),緩存字符串字面量(如
String s="abc"直接從常量池取,new String("abc")會(huì)創(chuàng)建兩個(gè)對(duì)象:堆中對(duì)象 + 常量池對(duì)象)。 - 考點(diǎn):
intern()方法(將字符串添加到常量池,返回常量池引用),例如:String s=new String("a"); s.intern()=="a"→true。
- 存儲(chǔ)在方法區(qū),緩存字符串字面量(如
四、集合框架(Collections)
核心接口:Collection(List/Set)和Map,重點(diǎn)考察實(shí)現(xiàn)類(lèi)特性與底層原理。-
List 接口
- ArrayList:底層
Object[]數(shù)組,查詢(xún)快(下標(biāo)訪問(wèn)),增刪慢(需擴(kuò)容 / 移位);初始容量 10,擴(kuò)容為 1.5 倍。 - LinkedList:底層雙向鏈表,增刪快(改指針),查詢(xún)慢(需遍歷);實(shí)現(xiàn)
Deque接口,可作為隊(duì)列 / 棧使用。 - 考點(diǎn):兩者適用場(chǎng)景、擴(kuò)容機(jī)制、是否線程安全(均不安全,需用
Collections.synchronizedList()包裝)。
- ArrayList:底層
-
Set 接口
- HashSet:底層依賴(lài)
HashMap(存儲(chǔ)元素作為 key,value 為固定對(duì)象),無(wú)序、不重復(fù);判斷重復(fù)依賴(lài)hashCode()和equals()(先比 hashCode,不等則不重復(fù);相等再比 equals)。 - TreeSet:底層
TreeMap,有序(默認(rèn)自然排序,或通過(guò)Comparator定制),不重復(fù);元素需實(shí)現(xiàn)Comparable接口或傳入比較器。
- HashSet:底層依賴(lài)
-
Map 接口
- HashMap(JDK1.8):底層
數(shù)組+鏈表+紅黑樹(shù);數(shù)組默認(rèn)容量 16(2 的冪次),負(fù)載因子 0.75,當(dāng)鏈表長(zhǎng)度 > 8 且數(shù)組容量 > 64 時(shí)轉(zhuǎn)紅黑樹(shù);線程不安全。 - HashTable:線程安全(方法加
synchronized),效率低,key/value 不能為 null;已被ConcurrentHashMap替代。 - ConcurrentHashMap(JDK1.8):線程安全,通過(guò)
CAS+synchronized(鎖定鏈表頭 / 紅黑樹(shù)根節(jié)點(diǎn))實(shí)現(xiàn),效率高于 HashTable;支持并發(fā)操作。 - TreeMap:底層紅黑樹(shù),key 有序(自然排序或定制排序),可按 key 范圍查詢(xún)。
- HashMap(JDK1.8):底層
五、異常處理
-
異常分類(lèi)
- Checked 異常:編譯時(shí)必須處理(如
IOException、ClassNotFoundException),需try-catch或throws聲明。 - Unchecked 異常:運(yùn)行時(shí)異常(如
NullPointerException、IndexOutOfBoundsException),無(wú)需強(qiáng)制處理。
- Checked 異常:編譯時(shí)必須處理(如
-
異常處理結(jié)構(gòu)
try:執(zhí)行可能出錯(cuò)的代碼;catch:捕獲并處理異常(可多個(gè),按子類(lèi)→父類(lèi)順序);finally:無(wú)論是否異常都會(huì)執(zhí)行(常用于釋放資源,如關(guān)閉流)。- 考點(diǎn):
finally與return的執(zhí)行順序(finally中 return 會(huì)覆蓋try/catch的 return)。
-
throw 與 throws
throw:在方法內(nèi)手動(dòng)拋出異常對(duì)象(如throw new RuntimeException())。throws:在方法聲明處聲明可能拋出的異常(如public void test() throws IOException)。
六、多線程
-
線程創(chuàng)建方式
- 繼承
Thread類(lèi)(重寫(xiě)run());實(shí)現(xiàn)Runnable接口(重寫(xiě)run(),可多線程共享資源);實(shí)現(xiàn)Callable接口(重寫(xiě)call(),有返回值,可拋異常,配合Future使用)。
- 繼承
-
線程狀態(tài)
- 新建(New)→就緒(Runnable)→運(yùn)行(Running)→阻塞(Blocked/Waiting/Timed Waiting)→死亡(Terminated)。
- 狀態(tài)切換:
start()進(jìn)入就緒;sleep()/wait()進(jìn)入阻塞;notify()/notifyAll()喚醒;執(zhí)行完run()進(jìn)入死亡。
-
線程同步
- synchronized:修飾方法(鎖當(dāng)前對(duì)象 / 類(lèi))、代碼塊(鎖指定對(duì)象),保證原子性、可見(jiàn)性、有序性;屬于悲觀鎖。
- volatile:保證可見(jiàn)性(修改后立即刷新到主存,其他線程可見(jiàn))和禁止指令重排,但不保證原子性(如
i++仍可能線程不安全)。 - Lock 接口:
ReentrantLock(可重入鎖),支持公平鎖 / 非公平鎖、可中斷、超時(shí)獲取鎖,需手動(dòng)lock()和unlock()(通常在finally中釋放)。
-
線程池
- 核心參數(shù):核心線程數(shù)、最大線程數(shù)、任務(wù)隊(duì)列、拒絕策略(默認(rèn)
AbortPolicy:拋異常)。 - 常見(jiàn)線程池:
FixedThreadPool(固定核心線程數(shù))、CachedThreadPool(動(dòng)態(tài)擴(kuò)容,適合短期任務(wù))、ScheduledThreadPool(定時(shí)任務(wù))。
- 核心參數(shù):核心線程數(shù)、最大線程數(shù)、任務(wù)隊(duì)列、拒絕策略(默認(rèn)
七、Java 8 + 新特性
- Lambda 表達(dá)式:簡(jiǎn)化匿名內(nèi)部類(lèi)(函數(shù)式接口專(zhuān)屬),格式:
(參數(shù)) -> 表達(dá)式(如(a,b) -> a+b)。 - 函數(shù)式接口:僅含一個(gè)抽象方法的接口(如
Runnable、Consumer),用@FunctionalInterface注解標(biāo)識(shí)。 - Stream API:對(duì)集合進(jìn)行流式操作(過(guò)濾、映射、聚合等),如
list.stream().filter(s -> s.length()>3).collect(Collectors.toList())。 - Optional:解決
NullPointerException,如Optional.ofNullable(obj).orElse(defaultObj)。 - 日期時(shí)間 API:
LocalDateTime、Instant等(替代線程不安全的SimpleDateFormat)。
八、其他高頻點(diǎn)
- static 關(guān)鍵字:修飾變量(類(lèi)變量,共享)、方法(類(lèi)方法,不能直接訪問(wèn)非 static 成員)、代碼塊(類(lèi)加載時(shí)執(zhí)行,優(yōu)于構(gòu)造器)。
- final 關(guān)鍵字:修飾類(lèi)(不可繼承)、方法(不可重寫(xiě))、變量(不可修改,引用類(lèi)型則地址不可變)。
- 抽象類(lèi) vs 接口:抽象類(lèi)可含普通方法和構(gòu)造器,單繼承;接口(JDK8 后)可含默認(rèn)方法,多實(shí)現(xiàn);均不能實(shí)例化。
- 泛型:約束集合元素類(lèi)型(如
List<String>),避免強(qiáng)制類(lèi)型轉(zhuǎn)換;通配符? extends T(上限,只能取)、? super T(下限,只能存)。

浙公網(wǎng)安備 33010602011771號(hào)