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

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

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

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

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

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

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

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

面試版答案

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

相比 intInteger 的主要優(yōu)點(diǎn)有幾個(gè):

1. Integer 可以為 null

Integer a = null;

int 不行。

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

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

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

不能寫:

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

因?yàn)?Java 泛型底層采用的是“類型擦除”。

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

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

比如:

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

4. 自動(dòng)裝箱和拆箱

Integer a = 10; // 自動(dòng)裝箱
int b = a;      // 自動(dòng)拆箱

底層本質(zhì):

Integer.valueOf(10)
a.intValue()

5. Integer 的缺點(diǎn)

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

例如:

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

自動(dòng)裝箱和拆箱底層怎么實(shí)現(xiàn)?

面試版答案

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

自動(dòng)裝箱

Integer a = 10;

編譯后:

Integer a = Integer.valueOf(10);

自動(dòng)拆箱

int b = a;

編譯后:

int b = a.intValue();

Integer 緩存池

Integer a = 100;
Integer b = 100;

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

因?yàn)?Integer.valueOf() 默認(rèn)緩存:

-128 ~ 127

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

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

面試版答案

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

1. 繼承方式不同

Java:

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

2. 成員不同

接口:

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

抽象類:

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

3. 設(shè)計(jì)目標(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 泛型是什么?解決什么問(wèn)題?

面試版答案

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

例如:

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

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

泛型解決的問(wèn)題

1. 類型安全

沒(méi)有泛型:

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

容易:

ClassCastException

有泛型后:

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

編譯階段就會(huì)檢查類型。

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

String s = list.get(0);

不需要再:

(String)

泛型底層:類型擦除

Java 泛型屬于“偽泛型”。

編譯后:

List<String>
List<Integer>

都會(huì)擦除成:

List

所以:

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

結(jié)果為:

true

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

面試版答案

ArrayList 底層是:

Object[]

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

JDK8 的初始化

new ArrayList()

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

第一次 add 時(shí)才初始化容量為 10。

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

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

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

底層通過(guò):

Arrays.copyOf()

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

特點(diǎn)

優(yōu)點(diǎn):

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

缺點(diǎn):

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

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

面試版答案

1. 來(lái)源不同

@Autowired

來(lái)自 Spring:

org.springframework.beans.factory.annotation.Autowired

@Resource

來(lái)自 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

接口慢怎么排查?

面試版答案

一般會(huì)從:

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

逐層排查。

1. 看監(jiān)控

關(guān)注:

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

2. 鏈路追蹤

例如:

  • SkyWalking
  • Arthas
  • Zipkin

定位耗時(shí)點(diǎn)。

3. 排查 SQL

重點(diǎn)看:

EXPLAIN

觀察:

  • 是否走索引
  • 是否全表掃描
  • 是否回表
  • 是否深分頁(yè)

4. JVM 排查

查看:

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

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

面試版答案

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

1. 原子性(Atomicity)

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

通過(guò):

Undo Log

實(shí)現(xiàn)。

2. 一致性(Consistency)

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

3. 隔離性(Isolation)

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

通過(guò):

  • MVCC
  • 鎖機(jī)制

共同實(shí)現(xiàn)。

4. 持久性(Durability)

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

通過(guò):

Redo Log

實(shí)現(xiàn)。

MySQL 四種隔離級(jí)別

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)

盡量從左開(kāi)始匹配。

3. 使用覆蓋索引

避免回表。

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

例如:

  • 用戶ID
  • 手機(jī)號(hào)

而不是:

  • 性別
  • 狀態(tài)

5. 主鍵盡量遞增

減少頁(yè)分裂。

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

面試版答案

1. Hash 索引

特點(diǎn):

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

2. FullText 全文索引

用于:

文章搜索

3. R-Tree 空間索引

用于:

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

4. Bitmap 位圖索引

適合:

低基數(shù)字段

為什么 MySQL 選擇 B+Tree?

因?yàn)?B+Tree:

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

綜合性能最好。

總結(jié)

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

真正拉開(kāi)差距的,不是“會(huì)不會(huì)背”,而是:

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

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

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

這樣會(huì)比單純背八股更容易通過(guò)面試。

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

相關(guān)文章

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

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

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

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

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

    詳解MyBatis 常用寫法

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

    如何使用Spring Security手動(dòng)驗(yàn)證用戶的方法示例

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

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

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

    SpringBoot集成Memcached的項(xiàng)目實(shí)踐

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

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

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

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

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

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

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

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

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

最新評(píng)論

安阳县| 乐至县| 沧州市| 资中县| 凤台县| 利辛县| 平远县| 达孜县| 桂阳县| 库尔勒市| 镇沅| 乐安县| 融水| 乐平市| 宁波市| 云安县| 鹤壁市| 鄄城县| 金门县| 雷波县| 西贡区| 城口县| 怀集县| 福海县| 根河市| 陇南市| 日土县| 通渭县| 金门县| 策勒县| 安顺市| 芮城县| 县级市| 香格里拉县| 滁州市| 拜泉县| 咸丰县| 邢台市| 集贤县| 竹溪县| 郸城县|