前言
我做Java也十來年了予跌,現(xiàn)在也算是中層管理搏色,每次招聘都需要找一些面試題,干脆自己整理了一份券册,這份面試寶典是從我 去年開始收集的频轿,一方面是給公司招聘用,另一方面也是想用它烁焙,來挖掘自己在 Java 技術(shù)棧中航邢,還有那些知識(shí)點(diǎn)我了解的不夠,然后再去復(fù)習(xí)一遍骄蝇,以此來提高自己的技術(shù)深度膳殷,也增加一下自己的技術(shù)廣度。
然后說回面試的事九火,這份面試寶典本來是只有我們內(nèi)部使用的赚窃,可到后來有很多朋友在微信上聯(lián)系到我,讓我?guī)退麄冋乙恍┟嬖嚪矫娴馁Y料岔激,而且這些關(guān)系也不太好拒絕勒极,到最后我干脆就有了這么一個(gè)想法,要不要把我整理的這面試寶典虑鼎,去幫助更多的人辱匿。于是我就花了兩天時(shí)間把面試寶典重新優(yōu)化整理了一下放在了下面:
面試題模塊介紹
說了這么多,下面進(jìn)入我們本文的主題炫彩,我們這份面試題掀鹅,包含的內(nèi)容了十九了模塊:Java 基礎(chǔ)、容器媒楼、多線程、反射戚丸、對(duì)象拷貝划址、Java Web 模塊、異常限府、網(wǎng)絡(luò)夺颤、設(shè)計(jì)模式、Spring/Spring MVC胁勺、Spring Boot/Spring Cloud世澜、Hibernate、Mybatis署穗、RabbitMQ寥裂、Kafka嵌洼、Zookeeper、MySql封恰、Redis麻养、JVM 。如下圖所示:
適宜閱讀人群
需要面試的初/中/高級(jí) java 程序員
想要查漏補(bǔ)缺的人
想要不斷完善和擴(kuò)充自己 java 技術(shù)棧的人
下面一起來看這份面試寶典诺舔,具體的內(nèi)容鳖昌。
JVM:
- 【高頻】Java內(nèi)存區(qū)域 :
{ 程序計(jì)數(shù)器 , 虛擬機(jī)棧 低飒,本地方法棧 许昨, 堆 ,方法區(qū) 褥赊,元空間 } // 每個(gè)區(qū)域要能介紹一下
- Minor GC 觸發(fā)條件 : eden區(qū)剩余內(nèi)存是否足夠 兩種情況分開分析
FULL GC 觸發(fā)條件 : Minor GC 平均晉升空間大小 > 老年代連續(xù)剩余空間糕档,則觸發(fā)FULL GC
- 【高頻】 判斷對(duì)象死亡的方法 : { 引用計(jì)數(shù)法 ,可達(dá)分析算法 }
深入一些,:GC root對(duì)象有哪些崭倘?為什么選擇他們做GC root對(duì)象
- 垃圾收集算法 : { 標(biāo)記清除算法 翼岁、標(biāo)記整理算法 、 復(fù)制算法司光、 分代收集算法 }
深入一些: 各個(gè)算法的優(yōu)點(diǎn)和適用場(chǎng)景
- 垃圾收集器 : { serial 琅坡、 parallel 、 CMS 残家、 G1 }
CMS 榆俺、G1 重點(diǎn) , 介紹工作流程和優(yōu)缺點(diǎn)
- 內(nèi)存泄漏
例子: { 單例 坞淮, 容器 等等}
原因 : 長(zhǎng)生命周期持有短生命周期引用
引用類型 ; { 強(qiáng)引用茴晋、 軟引用、 弱引用 回窘、 虛引用 }
【高頻】 類加載過程 : { 加載 诺擅, 連接 , 初始化 }
有哪些類加載器 啡直, 能否自定義 Java.Object.String 的類加載器 烁涌?
- 【高頻】 雙親委派機(jī)制 介紹 & 作用
JVM面試題及答案
spring :
- 什么是Spring框架?Spring框架有哪些主要模塊酒觅?
- 使用Spring框架有什么好處撮执?
- 什么是控制反轉(zhuǎn)(IOC)?什么是依賴注入舷丹?
- 請(qǐng)解釋下Spring中的IOC抒钱?
- BeanFactory和ApplicationContext有什么區(qū)別?
- 將Spring配置到你的應(yīng)用中共有幾種方法?
- 什么基于XML的配置谋币?
- 什么基Java的配置仗扬?
- 怎樣用注解的方式配置Spring?
- 描述Spring Bean的生命周期瑞信?
- 描述Spring中各種Bean的范圍厉颤?
- 什么是Spring的嵌入beans?
- Spring框架中的單例bean是否是線程安全的凡简?
- 請(qǐng)舉例說明如何用Spring注入一個(gè)Java的集合類逼友?
- 請(qǐng)舉例說明如何在Spring的Bean中注入一個(gè)java.util.Properties?
- 請(qǐng)解釋Spring的Bean的自動(dòng)生成原理秤涩?
- 請(qǐng)辨析自動(dòng)生成Bean之間模塊的區(qū)別帜乞?
- 如何開啟基于基于注解的自動(dòng)寫入?
- 請(qǐng)舉例說明@Required注解筐眷?
- 請(qǐng)舉例說明@Autowired注解黎烈?
- 請(qǐng)舉例說明@Qualifier注解?
- 請(qǐng)說明構(gòu)造器注入和setter方法注入之間的區(qū)別匀谣?
- Spring框架中不同類型event有什么區(qū)別照棋?
- FileSystemResource和ClassPathResource有何區(qū)別?
- 請(qǐng)列舉Spring框架中用了哪些設(shè)計(jì)模式武翎?
spring面試專題及答案
并發(fā) :
線程的狀態(tài) : { new ,runnalbe , wait , time-wait , block , terminated }
進(jìn)程 烈炭、 線程 、 協(xié)程 的含義和區(qū)別 // 個(gè)人理解 是一組漸進(jìn)提出的概念
進(jìn)程間通信方式 : { 管道 宝恶、FIFO 符隙、 信號(hào)量 、 共享內(nèi)存 垫毙、 消息隊(duì)列 霹疫、 Socket }
如何避免死鎖 ? 死鎖的四個(gè)必要條件
Sleep和wait的區(qū)別
【高頻】Sychronized 和 lock 的區(qū)別 综芥?
Sychronized的底層優(yōu)化 : { 無鎖丽蝎、偏向鎖、輕量級(jí)鎖 膀藐、重量級(jí)鎖 }
volatile的作用 : { 指令重拍 屠阻、 保證變量的可見性(設(shè)計(jì)JMM)}
ThreadLocal 底層原理
【高頻】 線程池
線程池構(gòu)造器涉及哪些參數(shù) : { corePoolSize , maximumPoolSzie , timeout , timeUnit 消请, RejectHandler , 等待隊(duì)列 类腮, 線程工廠 }
介紹線程池工作過程?
線程池拒絕策略那些臊泰?
適用Executor創(chuàng)建線程池的弊端?
- AQS 框架原理和 源碼理解
并發(fā)面試專題及答案
MySQL:
【高頻】MyISAM 和 InnoDB的區(qū)別 : {是否支持行鎖 蚜枢、 是否支持十五 缸逃、 是否支持 MVCC 针饥、 底層索引結(jié)構(gòu)不同 }
事務(wù)特性ACID
深入一些 : 為什么要有一致性 ? AID不是已經(jīng)保證了一致性了嗎 需频?并發(fā)事務(wù)帶來的問題 : { 臟讀 丁眼、 修改丟失 、 不可重復(fù)讀 昭殉、 幻影讀 }
【高頻】事務(wù)的隔離級(jí)別
5 【高頻】 MVCC機(jī)制
6 . 【高頻】索引
為什么索引使用B+樹結(jié)構(gòu)苞七,而不是B樹
為什么索引使用B+樹結(jié)構(gòu),而不是紅黑樹 : { 磁盤預(yù)讀取 挪丢、紅黑樹高度 }
- 聚簇索引和非聚簇索引區(qū)別蹂风? 主鍵索引和二級(jí)索引了解嗎?
8 . 為什么不對(duì)每個(gè)列創(chuàng)建索引呢乾蓬?
9 【高頻】SQL語(yǔ)句優(yōu)化 惠啄,SQL題目(字節(jié)要求擼代碼)
explain中 rows type key extra字段的含義?
count(1) count(*) count(列值)的區(qū)別
mysql面試專題及答案
Redis
1.什么是Redis
2.Redis有哪些優(yōu)缺點(diǎn)
3.為什么要用 Redis /為什么要用緩存
4.為什么要用 Redis 而不用 map/guava 做緩存?
5.Redis為什么這么快
6.Redis有哪些數(shù)據(jù)類型
7.Redis的應(yīng)用場(chǎng)景
8.什么是Redis持久化任内?
9.Redis 的持久化機(jī)制是什么撵渡?各自的優(yōu)缺點(diǎn)?
10.如何選擇合適的持久化方式
11.Redis持久化數(shù)據(jù)和緩存怎么做擴(kuò)容死嗦?
12.過期鍵的刪除策略
13.Redis的過期鍵的刪除策略
14.Redis key的過期時(shí)間和永久有效分別怎么設(shè)置趋距?
15.我們知道通過expire來設(shè)置key 的過期時(shí)間,那么對(duì)過期的數(shù)據(jù)怎么處理呢?