(2023最新)Java后端面試常見(jiàn)問(wèn)題總結(jié),附參考答案!
如需完整pdf版本+答案的我已經(jīng)整理好了

Java
基礎(chǔ)
Java 中的幾種基本數(shù)據(jù)類型是什么?對(duì)應(yīng)的包裝類型是什么?各自占用多少字節(jié)呢?
String
、 StringBuffer
和StringBuilder
的區(qū)別是什么?String
為什么是不可變的?String s1 = new String("abc");
這段代碼創(chuàng)建了幾個(gè)字符串對(duì)象?== 與 equals?hashCode 與 equals ?
包裝類型的緩存機(jī)制了解么?
自動(dòng)裝箱與拆箱了解嗎?原理是什么?
深拷貝和淺拷貝區(qū)別了解嗎?什么是引用拷貝?
談?wù)剬?duì) Java 注解的理解,解決了什么問(wèn)題?
Exception 和 Error 有什么區(qū)別?
Java 反射?反射有什么缺點(diǎn)?你是怎么理解反射的(為什么框架需要反射)?
Java 泛型了解么?什么是類型擦除?介紹一下常用的通配符?
內(nèi)部類了解嗎?匿名內(nèi)部類了解嗎?
BIO,NIO,AIO 有什么區(qū)別?
Java 集合框架
說(shuō)說(shuō) List,Set,Map 三者的區(qū)別?三者底層的數(shù)據(jù)結(jié)構(gòu)?
有哪些集合是線程不安全的?怎么解決呢?
比較 HashSet、LinkedHashSet 和 TreeSet 三者的異同
HashMap 和 Hashtable 的區(qū)別?HashMap 和 HashSet 區(qū)別?HashMap 和 TreeMap 區(qū)別?
HashMap 的底層實(shí)現(xiàn)
HashMap 的長(zhǎng)度為什么是 2 的冪次方
ConcurrentHashMap 和 Hashtable 的區(qū)別?
如需完整pdf版本+答案的我已經(jīng)整理好了

jvm
jvm 內(nèi)存結(jié)構(gòu)
jvm 調(diào)優(yōu)參數(shù)
什么是類加載?何時(shí)類加載?類加載流程?
知道哪些類加載器。類加載器之間的關(guān)系?
類加載器的雙親委派了解么? 結(jié)合 Tomcat 說(shuō)一下雙親委派(Tomcat 如何打破雙親委托機(jī)制?...)。
為什么需要雙親委派
Java 內(nèi)存模型
棧中存放什么數(shù)據(jù),堆中呢?
大對(duì)象放在哪個(gè)內(nèi)存區(qū)域
堆區(qū)如何分類
垃圾回收有哪些算法
GC 的全流程
GC 中老年代用什么回收方法?
多線程
線程和進(jìn)程的區(qū)別。
什么是上下文切換?
什么是線程死鎖?如何避免死鎖?
樂(lè)觀鎖和悲觀鎖了解么?
說(shuō)說(shuō)
sleep()
方法和wait()
方法區(qū)別和共同點(diǎn)?Java 線程池有哪些參數(shù)?阻塞隊(duì)列有幾種?拒絕策略有幾種?新線程添加的流程?
實(shí)現(xiàn)
Runnable
接口和Callable
接口的區(qū)別。講一下 JMM(Java 內(nèi)存模型)。
volatile
關(guān)鍵字解決了什么問(wèn)題?說(shuō)說(shuō)synchronized
關(guān)鍵字和volatile
關(guān)鍵字的區(qū)別。AQS 原理了解么?AQS 組件有哪些?
用過(guò) CountDownLatch 么?什么場(chǎng)景下用的?
數(shù)據(jù)庫(kù)
MySQL
基礎(chǔ)
非關(guān)系型數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù)的區(qū)別?
事務(wù)的四大特性了解么?
MySQL 事務(wù)隔離級(jí)別?默認(rèn)是什么級(jí)別?
樂(lè)觀鎖與悲觀鎖的區(qū)別?
MySQL 數(shù)據(jù)庫(kù)兩種存儲(chǔ)引擎的區(qū)別?
索引
為什么索引能提高查詢速度?
聚集索引和非聚集索引的區(qū)別?非聚集索引一定回表查詢嗎?
索引這么多優(yōu)點(diǎn),為什么不對(duì)表中的每一個(gè)列創(chuàng)建一個(gè)索引呢?(使用索引一定能提高查詢性能嗎?)
索引底層的數(shù)據(jù)結(jié)構(gòu)了解么?Hash 索引和 B+樹(shù)索引優(yōu)劣分析
B+樹(shù)做索引比紅黑樹(shù)好在哪里?
最左前綴匹配原則了解么?
什么是覆蓋索引
進(jìn)階
一條 SQL 語(yǔ)句在 MySQL 中如何執(zhí)行的?
explain 命令了解么?
簡(jiǎn)單說(shuō)一下 SQL 調(diào)優(yōu)思路。
簡(jiǎn)單說(shuō)一下大表優(yōu)化的思路。
分庫(kù)分表了解么?為什么要分庫(kù)分表?有哪些常見(jiàn)的分庫(kù)分表工具(
sharding-jdbc
、TSharding
、MyCAT
...)?
Redis
分布式緩存常見(jiàn)的技術(shù)選型方案有哪些?說(shuō)一下 Redis 和 Memcached 的區(qū)別和共同點(diǎn)
說(shuō)一下有緩存情況下查詢數(shù)據(jù)和修改數(shù)據(jù)的流程。
Redis 有哪些數(shù)據(jù)結(jié)構(gòu)?SDS 了解么?
Redis 內(nèi)存滿了怎么辦?
Redis 內(nèi)存淘汰算法除了 LRU 還有哪些?
Redis 給緩存數(shù)據(jù)設(shè)置過(guò)期時(shí)間有啥用? Redis 是如何判斷數(shù)據(jù)是否過(guò)期的呢?
Redis 事務(wù)了解么?(Redis 可以通過(guò) MULTI,EXEC,DISCARD 和 WATCH 等命令來(lái)實(shí)現(xiàn)事務(wù)功能)
緩存穿透和緩存雪崩問(wèn)題了解么?有哪些解決辦法?
如何基于 Redis 實(shí)現(xiàn)分布式鎖?
網(wǎng)絡(luò)
OSI 與 TCP/IP 各層的結(jié)構(gòu)與功能,都有哪些協(xié)議?為什么網(wǎng)絡(luò)要分層?
計(jì)算機(jī)網(wǎng)絡(luò)的一些常見(jiàn)狀態(tài)碼
ping 所使用的協(xié)議
TCP 的三次握手與四次揮手的內(nèi)容? TCP 為什么連接是三次握手而斷開(kāi)是四次握手?
TCP 與 UDP 的區(qū)別及使用場(chǎng)景
TCP 是如何保證傳輸?shù)目煽啃裕?/p>
一次完整的 HTTP 請(qǐng)求所經(jīng)的步驟
HTTP 協(xié)議了解么?HTTP 是基于 TCP 還是 UDP 的?
HTTP 報(bào)文的內(nèi)容簡(jiǎn)單說(shuō)一下! HTTP 請(qǐng)求報(bào)文和響應(yīng)報(bào)文中有哪些數(shù)據(jù)?
HTTP 和 HTTPS 的區(qū)別了解么?
HTTP 請(qǐng)求有哪些常見(jiàn)的狀態(tài)碼?
HTTP 長(zhǎng)連接和短連接了解么?
Cookie 和 Session 的關(guān)系
URI 和 URL 的區(qū)別是什么?
操作系統(tǒng)
進(jìn)程和線程的區(qū)別
進(jìn)程有哪幾種狀態(tài)?
進(jìn)程間的通信方式
線程間的同步的方式
進(jìn)程的調(diào)度算法
什么是死鎖?死鎖的四個(gè)必要條件,解決死鎖的方法
常見(jiàn)的內(nèi)存管理機(jī)制,快表和多級(jí)頁(yè)表
分頁(yè)機(jī)制和分段機(jī)制的共同點(diǎn)和區(qū)別
CPU 尋址了解嗎?為什么需要虛擬地址空間?
虛擬內(nèi)存(Virtual Memory)
頁(yè)面置換算法
算法和數(shù)據(jù)結(jié)構(gòu)
算法
LRU 算法了解嗎?你能實(shí)現(xiàn)一個(gè)嗎?
寫(xiě)排序算法(快排、堆排)
使用數(shù)組實(shí)現(xiàn)一個(gè)棧
使用數(shù)組實(shí)現(xiàn)一個(gè)隊(duì)列
實(shí)現(xiàn)一個(gè)鏈表、反轉(zhuǎn)鏈表、
......
數(shù)據(jù)結(jié)構(gòu)
數(shù)組 vs 鏈表
棧的應(yīng)用場(chǎng)景
隊(duì)列的分類、應(yīng)用場(chǎng)景
紅黑樹(shù)的特點(diǎn)、紅黑樹(shù) vs 二叉查找樹(shù)
哈希表、哈希表應(yīng)用場(chǎng)景
布隆過(guò)濾器了解嗎?
......
系統(tǒng)設(shè)計(jì)
設(shè)計(jì)模式
何為設(shè)計(jì)模式?有哪些常見(jiàn)的設(shè)計(jì)模式?
單例模式了解么?說(shuō)一下單例模式的使用場(chǎng)景。手寫(xiě)一個(gè)單例模式的實(shí)現(xiàn)。
觀察者模式了解么?說(shuō)一下觀察者模式的使用場(chǎng)景。
工廠模式了解么?說(shuō)一下工廠模式的使用場(chǎng)景。
責(zé)任鏈模式了解么?哪些開(kāi)源項(xiàng)目(Netty、MyBatis ...)中用到了責(zé)任鏈模式?怎么用的?
SOLID 原則了解么?簡(jiǎn)單談?wù)勛约簩?duì)于單一職責(zé)原則和開(kāi)閉原則的理解。
閱讀 Spring 源碼的時(shí)候什么設(shè)計(jì)模式最讓你影響深刻?能簡(jiǎn)單講講嗎?
常見(jiàn)框架
Spring
什么是 Spring 框架?
列舉一些重要的 Spring 模塊?
談?wù)勛约簩?duì)于 Spring IoC 和 AOP 的理解
Spring Bean 的生命周期說(shuō)一下
Spring 中的 bean 的作用域有哪些?
攔截器和過(guò)濾器了解么?
Spring 動(dòng)態(tài)代理默認(rèn)用哪一種
hibernate 和 mybatis 區(qū)別
Spring Boot 和 Spring 的區(qū)別
說(shuō)出使用 Spring Boot 的主要優(yōu)點(diǎn)
什么是 Spring Boot Starter?
介紹一下
@SpringBootApplication
注解Spring Boot 的自動(dòng)配置是如何實(shí)現(xiàn)的?
Spring Boot 支持哪些嵌入式 web 容器?
Netty
BIO,NIO 和 AIO 有啥區(qū)別?
Netty 是什么?為啥不直接用 NIO 呢?
為什么要用 Netty?Netty 應(yīng)用場(chǎng)景了解么?
介紹一下 Netty 的核心組件?
Bootstrap 和 ServerBootstrap 了解么?
NioEventLoopGroup 默認(rèn)的構(gòu)造函數(shù)會(huì)起多少線程?
Netty 線程模型了解么?
什么是 TCP 粘包/拆包?有什么解決辦法呢?
Netty 長(zhǎng)連接、心跳機(jī)制了解么?
參考答案:Netty 常見(jiàn)面試題總結(jié)
權(quán)限認(rèn)證
認(rèn)證 (Authentication) 和授權(quán) (Authorization)的區(qū)別是什么?
什么是 Cookie ? Cookie 的作用是什么?如何在服務(wù)端使用 Cookie ?
Cookie 和 Session 有什么區(qū)別?如何使用 Session 進(jìn)行身份驗(yàn)證?
如果沒(méi)有 Cookie 的話 Session 還能用嗎?
為什么 Cookie 無(wú)法防止 CSRF 攻擊,而 token 可以?
什么是 Token?什么是 JWT?如何基于 Token 進(jìn)行身份驗(yàn)證?
什么是 OAuth 2.0?
什么是 SSO(單點(diǎn)登錄)?
分布式
分布式理論
CAP & BASE 理論詳解
Paxos 算法詳解
Raft 算法詳解
RPC
RPC 基礎(chǔ):
了解 RPC 嗎?有哪些常見(jiàn)的 RPC 框架?
如果讓你自己設(shè)計(jì) RPC 框架你會(huì)如何設(shè)計(jì)?
服務(wù)之間的調(diào)用為啥不直接用 HTTP 而用 RPC?
Dubbo:
Dubbo 了解嗎?
Dubbo 的工作原理了解么?注冊(cè)中心扮演了什么角色?注冊(cè)中心掛了可以繼續(xù)通信嗎?
Dubbo 的負(fù)載均衡策略了解么?
Dubbo 的 spi 機(jī)制了解么?帶來(lái)了啥好處?
分布式 ID
何為 ID?
何為分布式 ID?
一個(gè)合格的分布式 ID 需要滿足什么要求?
分布式 ID 常見(jiàn)的生成方法有哪些?(數(shù)據(jù)庫(kù)主鍵自增、數(shù)據(jù)庫(kù)的號(hào)段模式、UUID、SNOWFLAKE 等等)
API 網(wǎng)關(guān)
什么是網(wǎng)關(guān)?
網(wǎng)關(guān)能提供哪些功能?
有哪些常見(jiàn)的網(wǎng)關(guān)系統(tǒng)?
分布式鎖
基于 Redis 實(shí)現(xiàn)分布式鎖:
如何基于 Redis 實(shí)現(xiàn)一個(gè)最簡(jiǎn)易的分布式鎖?
為什么要給鎖設(shè)置一個(gè)過(guò)期時(shí)間?
如何實(shí)現(xiàn)鎖的優(yōu)雅續(xù)期?
如何實(shí)現(xiàn)可重入鎖?
Redis 如何解決集群情況下分布式鎖的可靠性?
基于 ZooKeeper 實(shí)現(xiàn)分布式鎖:
如何基于 ZooKeeper 實(shí)現(xiàn)分布式鎖?
為什么要用臨時(shí)順序節(jié)點(diǎn)?
為什么要設(shè)置對(duì)前一個(gè)節(jié)點(diǎn)的監(jiān)聽(tīng)?
如何實(shí)現(xiàn)可重入鎖?
高并發(fā)
消息隊(duì)列
為什么要用消息隊(duì)列?
對(duì)比一下常見(jiàn)的消息隊(duì)列?
如何保證消息不被重復(fù)消費(fèi)?
如何保證消息消費(fèi)的順序性?
CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))
什么是 CDN ?
CDN 的工作原理是什么?
讀寫(xiě)分離和分庫(kù)分表
什么是讀寫(xiě)分離?
主庫(kù)和從庫(kù)的數(shù)據(jù)存在延遲的問(wèn)題如何解決?
如何實(shí)現(xiàn)讀寫(xiě)分離?主從復(fù)制原理是什么?
什么是分庫(kù)?什么是分表?什么情況下需要分庫(kù)分表?
常見(jiàn)的分片算法有哪些?
分庫(kù)分表會(huì)帶來(lái)什么問(wèn)題呢?
分庫(kù)分表后,數(shù)據(jù)怎么遷移呢?
系統(tǒng)設(shè)計(jì)/場(chǎng)景題
假如有 10 億個(gè)數(shù),只有一個(gè)重復(fù),內(nèi)存只能放下 5 億個(gè)數(shù),怎么找到這個(gè)重復(fù)的數(shù)字?
如何設(shè)計(jì)一個(gè)秒殺系統(tǒng)(服務(wù)端、數(shù)據(jù)庫(kù)、分布式)?分布式系統(tǒng)的設(shè)計(jì)?
有一個(gè)服務(wù)器專門接收大量請(qǐng)求,怎么設(shè)計(jì)?
如果讓你自己設(shè)計(jì) RPC 框架你會(huì)如何設(shè)計(jì)?
怎么快速出現(xiàn)一個(gè) stackoverflow 錯(cuò)誤?
如何設(shè)計(jì)一個(gè)秒殺系統(tǒng)?
如何設(shè)計(jì)一個(gè)微博 Feed 流/信息流系統(tǒng)?
如何設(shè)計(jì)一個(gè)短鏈系統(tǒng)?
項(xiàng)目經(jīng)歷
說(shuō)說(shuō)你的項(xiàng)目中的亮點(diǎn)有哪些?
項(xiàng)目用戶人數(shù)有多少?最大在線人數(shù)多少?
畫(huà)一下你的項(xiàng)目的架構(gòu)圖。
項(xiàng)目中遇到的困難有哪些?怎么解決的?
xx某塊的數(shù)據(jù)庫(kù)表是如何設(shè)計(jì)的?
HR面
個(gè)人介紹
平時(shí)的興趣愛(ài)好
對(duì)我們公司的了解
三個(gè)詞形容自己
職業(yè)規(guī)劃
平時(shí)的學(xué)習(xí)方式
大學(xué)里做過(guò)比較有意義的事情
手里還有哪些 offer
選擇工作的理由排序(薪資、加班情況之類的)。
經(jīng)驗(yàn)總結(jié)
學(xué)完了某個(gè)知識(shí)點(diǎn)之后,你可以去看看對(duì)應(yīng)的八股文和知識(shí)點(diǎn)總結(jié)(javaguide.cn/)。
多面試,不要害怕失敗,多總結(jié)經(jīng)驗(yàn)。
盡早準(zhǔn)備,不論是找工作前、面試前還是面試后。
如果是求職目標(biāo)是中小廠、國(guó)企的話,算法相對(duì)來(lái)說(shuō)不是那么重要。
如果你的學(xué)歷比較一般的話,格外注意要把重心放在自己的項(xiàng)目經(jīng)歷上。
熟悉自己的簡(jiǎn)歷。
電話和視頻面試很平常,面試前提前準(zhǔn)備一下。
復(fù)盤(pán)?。?!不管是面試失敗還是成功,都要養(yǎng)成復(fù)盤(pán)的好習(xí)慣。
如需完整pdf版本+答案的我已經(jīng)整理好了
