最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java后端面試高頻題整理(面試版答案)

 更新時間:2026年05月29日 08:24:01   作者:huaixinsi  
后端Java開發(fā)是現(xiàn)代軟件工程的重要組成部分,對于應(yīng)聘后端Java開發(fā)崗位的求職者來說,筆試是一項常見的考核方式,這篇文章主要介紹了Java后端面試高頻題整理的相關(guān)資料,需要的朋友可以參考下

Java 后端面試高頻題整理(面試版答案)

最近在準(zhǔn)備 Java 后端面試,把一些高頻八股題重新整理了一遍。

這篇文章主要偏“面試回答風(fēng)格”,盡量用淺顯易懂的方式講清楚原理,適合:

  • Java 初中級后端
  • 校招 / 社招面試
  • 八股突擊復(fù)習(xí)
  • 博客收藏

Integer 和 int 有什么區(qū)別?為什么泛型只能用包裝類型?

面試版答案

int 是 Java 的基本數(shù)據(jù)類型,Integerint 的包裝類,本質(zhì)上是一個對象。

相比 int,Integer 的主要優(yōu)點有幾個:

1. Integer 可以為 null

Integer a = null;

int 不行。

這一點在數(shù)據(jù)庫字段映射、參數(shù)傳遞中非常常見。

2. Integer 可以用于泛型和集合

List<Integer> list = new ArrayList<>();

不能寫:

List<int> list = new ArrayList<>();

因為 Java 泛型底層采用的是“類型擦除”。

泛型編譯后會被擦除成 Object 或其上界類型,而 int 不是對象,不能當(dāng)成 Object 使用。

3. Integer 提供了很多工具方法

比如:

Integer.parseInt()
Integer.valueOf()
Integer.compare()

4. 自動裝箱和拆箱

Integer a = 10; // 自動裝箱
int b = a;      // 自動拆箱

底層本質(zhì):

Integer.valueOf(10)
a.intValue()

5. Integer 的缺點

  • 占用內(nèi)存更多
  • 存在裝箱拆箱開銷
  • null 自動拆箱可能 NPE

例如:

Integer a = null;
int b = a; // NullPointerException

自動裝箱和拆箱底層怎么實現(xiàn)?

面試版答案

自動裝箱和拆箱本質(zhì)上是 Java 編譯器提供的“語法糖”。

自動裝箱

Integer a = 10;

編譯后:

Integer a = Integer.valueOf(10);

自動拆箱

int b = a;

編譯后:

int b = a.intValue();

Integer 緩存池

Integer a = 100;
Integer b = 100;

System.out.println(a == b); // true

因為 Integer.valueOf() 默認(rèn)緩存:

-128 ~ 127

范圍內(nèi)的整數(shù)對象。

抽象類和接口有什么區(qū)別?

面試版答案

接口更偏向于“行為規(guī)范”,抽象類更偏向于“模板復(fù)用”。

1. 繼承方式不同

Java:

  • 類只能單繼承抽象類
  • 可以實現(xiàn)多個接口
class A extends AbstractA
class B implements X,Y

2. 成員不同

接口:

  • 只能定義常量
  • Java8 后支持 default 方法

抽象類:

  • 可以有成員變量
  • 可以有普通方法
  • 可以有構(gòu)造方法

3. 設(shè)計目標(biāo)不同

接口:

  • 強(qiáng)調(diào)“能做什么”

抽象類:

  • 強(qiáng)調(diào)“是什么”

4. 什么情況下接口不能替代抽象類?

需要共享狀態(tài)

abstract class Animal{
    protected String name;
}

需要模板方法模式

abstract class Game{
    public final void play(){
        init();
        start();
        end();
    }

    abstract void init();
}

Java 泛型是什么?解決什么問題?

面試版答案

Java 泛型本質(zhì)是“參數(shù)化類型”。

例如:

List<String> list = new ArrayList<>();

這里的 String 就是類型參數(shù)。

泛型解決的問題

1. 類型安全

沒有泛型:

List list = new ArrayList();
list.add("abc");
list.add(123);

容易:

ClassCastException

有泛型后:

List<String> list = new ArrayList<>();

編譯階段就會檢查類型。

2. 消除強(qiáng)轉(zhuǎn)

String s = list.get(0);

不需要再:

(String)

泛型底層:類型擦除

Java 泛型屬于“偽泛型”。

編譯后:

List<String>
List<Integer>

都會擦除成:

List

所以:

a.getClass() == b.getClass()

結(jié)果為:

true

ArrayList 底層數(shù)據(jù)結(jié)構(gòu)

面試版答案

ArrayList 底層是:

Object[]

動態(tài)數(shù)組。

JDK8 的初始化

new ArrayList()

不會立刻創(chuàng)建長度為 10 的數(shù)組。

第一次 add 時才初始化容量為 10。

擴(kuò)容機(jī)制

ArrayList 擴(kuò)容一般為原來的 1.5 倍:

newCapacity = oldCapacity + \frac{oldCapacity}{2}

底層通過:

Arrays.copyOf()

復(fù)制舊數(shù)組。

特點

優(yōu)點:

  • 查詢快
  • 支持隨機(jī)訪問

缺點:

  • 中間插入刪除慢
  • 擴(kuò)容有復(fù)制開銷

@Autowired 和 @Resource 的區(qū)別

面試版答案

1. 來源不同

@Autowired

來自 Spring:

org.springframework.beans.factory.annotation.Autowired

@Resource

來自 JSR-250:

javax.annotation.Resource

2. 默認(rèn)注入方式不同

@Autowired

默認(rèn):

byType

按類型注入。

@Resource

默認(rèn):

byName -> byType

優(yōu)先按名稱。

3. 推薦使用方式

Spring 現(xiàn)在更推薦:

構(gòu)造器注入

例如:

@RequiredArgsConstructor

接口慢怎么排查?

面試版答案

一般會從:

監(jiān)控 -> 鏈路 -> SQL -> JVM -> 代碼

逐層排查。

1. 看監(jiān)控

關(guān)注:

  • RT
  • QPS
  • CPU
  • 內(nèi)存
  • GC
  • 線程池

2. 鏈路追蹤

例如:

  • SkyWalking
  • Arthas
  • Zipkin

定位耗時點。

3. 排查 SQL

重點看:

EXPLAIN

觀察:

  • 是否走索引
  • 是否全表掃描
  • 是否回表
  • 是否深分頁

4. JVM 排查

查看:

  • Full GC
  • 線程阻塞
  • 內(nèi)存泄漏

MySQL 事務(wù)和隔離級別

面試版答案

事務(wù)具有 ACID 四大特性。

1. 原子性(Atomicity)

要么全部成功,要么全部失敗。

通過:

Undo Log

實現(xiàn)。

2. 一致性(Consistency)

事務(wù)執(zhí)行前后,數(shù)據(jù)必須滿足業(yè)務(wù)規(guī)則。

3. 隔離性(Isolation)

事務(wù)之間互不影響。

通過:

  • MVCC
  • 鎖機(jī)制

共同實現(xiàn)。

4. 持久性(Durability)

事務(wù)提交后永久保存。

通過:

Redo Log

實現(xiàn)。

MySQL 四種隔離級別

1. 讀未提交

可能出現(xiàn):

臟讀

2. 讀已提交

解決臟讀。

但可能:

不可重復(fù)讀

3. 可重復(fù)讀(MySQL 默認(rèn))

解決不可重復(fù)讀。

4. 串行化

事務(wù)串行執(zhí)行。

并發(fā)性能最低。

MySQL 索引怎么優(yōu)化?

面試版答案

1. 避免索引失效

例如:

where date(create_time)=?

可能導(dǎo)致索引失效。

2. 遵守最左匹配原則

聯(lián)合索引:

(a,b,c)

盡量從左開始匹配。

3. 使用覆蓋索引

避免回表。

4. 使用高區(qū)分度字段

例如:

  • 用戶ID
  • 手機(jī)號

而不是:

  • 性別
  • 狀態(tài)

5. 主鍵盡量遞增

減少頁分裂。

MySQL 除了 B+Tree 還有哪些索引?

面試版答案

1. Hash 索引

特點:

  • 等值查詢快
  • 不支持范圍查詢

2. FullText 全文索引

用于:

文章搜索

3. R-Tree 空間索引

用于:

GIS 地理數(shù)據(jù)

4. Bitmap 位圖索引

適合:

低基數(shù)字段

為什么 MySQL 選擇 B+Tree?

因為 B+Tree:

  • 支持范圍查詢
  • 支持排序
  • IO 次數(shù)少
  • 樹高度低

綜合性能最好。

總結(jié)

Java 后端面試?yán)?,很多題并不難。

真正拉開差距的,不是“會不會背”,而是:

  • 能不能講清楚原理
  • 能不能講出底層邏輯
  • 能不能形成體系

建議準(zhǔn)備面試時:

  • 不要只背定義
  • 要理解為什么這樣設(shè)計
  • 學(xué)會從“原理 -> 優(yōu)缺點 -> 場景”去回答

這樣會比單純背八股更容易通過面試。

到此這篇關(guān)于Java后端面試高頻題整理的文章就介紹到這了,更多相關(guān)Java后端面試題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Javaweb使用thymeleaf局部刷新結(jié)合Layui插件實現(xiàn)Html分頁

    Javaweb使用thymeleaf局部刷新結(jié)合Layui插件實現(xiàn)Html分頁

    本文主要介紹了Javaweb使用thymeleaf局部刷新結(jié)合Layui插件實現(xiàn)Html分頁,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 一文帶你熟練掌握J(rèn)ava中的日期時間相關(guān)類

    一文帶你熟練掌握J(rèn)ava中的日期時間相關(guān)類

    我們在開發(fā)時,除了數(shù)字、數(shù)學(xué)這樣的常用API之外,還有日期時間類,更是會被經(jīng)常使用,比如我們項目中必備的日志功能,需要記錄異常等信息產(chǎn)生的時間,本文就帶各位來學(xué)習(xí)一下相關(guān)的日期時間類有哪些
    2023-05-05
  • 詳解MyBatis 常用寫法

    詳解MyBatis 常用寫法

    MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。這篇文章給大家介紹了MyBatis 常用寫法,感興趣的朋友跟隨小編一起看看吧
    2018-11-11
  • 如何使用Spring Security手動驗證用戶的方法示例

    如何使用Spring Security手動驗證用戶的方法示例

    這篇文章主要介紹了如何使用Spring Security手動驗證用戶的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • java中判斷json key是否存在的幾種方法

    java中判斷json key是否存在的幾種方法

    在使用Java處理JSON數(shù)據(jù)時,如何判斷某一個key是否存在?本文就來介紹三種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • SpringBoot集成Memcached的項目實踐

    SpringBoot集成Memcached的項目實踐

    Memcached是一個高性能的分布式內(nèi)存對象緩存系統(tǒng),用于動態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫負(fù)載,本文主要介紹了SpringBoot集成Memcached的項目實踐,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • java如何通過Kerberos認(rèn)證方式連接hive

    java如何通過Kerberos認(rèn)證方式連接hive

    該文主要介紹了如何在數(shù)據(jù)源管理功能中適配不同數(shù)據(jù)源(如MySQL、PostgreSQL和Hive),特別是如何在SpringBoot3框架下通過Kerberos認(rèn)證與Hive進(jìn)行安全交互,文章詳細(xì)描述了Kerberos認(rèn)證過程,包括配置krb5.conf和keytab文件、處理Hadoop和Hive版本兼容性問題
    2025-02-02
  • Mybatis-plus多租戶項目實戰(zhàn)進(jìn)階指南

    Mybatis-plus多租戶項目實戰(zhàn)進(jìn)階指南

    多租戶是一種軟件架構(gòu)技術(shù),在多用戶的環(huán)境下共有同一套系統(tǒng),并且要注意數(shù)據(jù)之間的隔離性,下面這篇文章主要給大家介紹了關(guān)于Mybatis-plus多租戶項目實戰(zhàn)進(jìn)階的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • java高效打印一個二維數(shù)組的實例(不用遞歸,不用兩個for循環(huán))

    java高效打印一個二維數(shù)組的實例(不用遞歸,不用兩個for循環(huán))

    下面小編就為大家?guī)硪黄猨ava高效打印一個二維數(shù)組的實例(不用遞歸,不用兩個for循環(huán))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java中的轉(zhuǎn)換流InputStreamReader解讀

    Java中的轉(zhuǎn)換流InputStreamReader解讀

    InputStreamReader是Java.io包中的一個類,用于將字節(jié)輸入流轉(zhuǎn)換為字符輸入流,它繼承自java.io.Reader類,提供了兩種構(gòu)造方法,可以使用默認(rèn)或指定字符集創(chuàng)建實例,常用方法包括讀取字符、判斷是否準(zhǔn)備好讀取數(shù)據(jù)和關(guān)閉流
    2024-09-09

最新評論

南京市| 桃源县| 中卫市| 鄂尔多斯市| 化隆| 蓝山县| 大渡口区| 大厂| 绥滨县| 崇明县| 庆元县| 景东| 深圳市| 阜城县| 嘉定区| 大庆市| 凤凰县| 康保县| 霍城县| 皮山县| 龙岩市| 江北区| 连南| 武强县| 昌都县| 布拖县| 新巴尔虎左旗| 合作市| 沙田区| 南宫市| 井研县| 吉安市| 高邮市| 双流县| 九龙坡区| 澜沧| 光泽县| 盐山县| 田阳县| 福安市| 莱西市|