最近可能有點(diǎn)閑的慌域帐,沒事就去找面試面經(jīng),整理了一波面試題是整。我大概是分成了Java基礎(chǔ)肖揣、中級、高級浮入,分布式龙优,Spring架構(gòu),多線程事秀,網(wǎng)絡(luò)彤断,MySQL,Redis緩存易迹,JVM相關(guān)宰衙,調(diào)優(yōu),設(shè)計(jì)模式睹欲,算法與數(shù)據(jù)結(jié)構(gòu)供炼,并發(fā),Linux等15個小模塊窘疮。
每個小模塊文章里估計(jì)就只能只給出部分的面試題目劲蜻,不然要是全部寫出來,篇幅不夠呀考余。而且還有相應(yīng)的答案,太難了轧苫,所以直接給大家提供最完整的答案解析文檔楚堤,私信我 “面試” 立馬回復(fù)免費(fèi)下載的方式
一、Java基礎(chǔ)
什么是 Java 程序的主類含懊?應(yīng)用程序和小程序的主類有何不同身冬?
構(gòu)造器 Constructor 是否可被 override?
String StringBuffer 和 StringBuilder 的區(qū)別是什么岔乔?String 為什么是不可變的酥筝?
對象的相等與指向他們的引用相等,兩者有什么不同雏门?
重載和重寫的區(qū)別嘿歌?
在一個靜態(tài)方法內(nèi)調(diào)用一個非靜態(tài)成員為什么是非法的掸掏?
簡述線程,程序宙帝、進(jìn)程的基本概念丧凤。以及他們之間關(guān)系是什么
什么是方法的返回值?返回值在類的方法里的作用是什么?
一個類的構(gòu)造方法的作用是什么 若一個類沒有聲明構(gòu)造方法,該程序能正確執(zhí)行嗎 ?為什么?
Java 面向?qū)ο缶幊倘筇匦? 封裝 繼承 多態(tài)
Java 序列化中如果有些字段不想進(jìn)行序列化 怎么辦?
在調(diào)用子類構(gòu)造方法之前會先調(diào)用父類沒有參數(shù)的構(gòu)造方法步脓,其目的是?
線程有哪些基本狀態(tài)?
創(chuàng)建一個對象用什么運(yùn)算符?對象實(shí)體與對象引用有何不同?
成員變量與局部變量的區(qū)別有哪些愿待?
二、Java中級
Spring的AOP和IOC是什么靴患?使用場景有哪些仍侥?Spring事務(wù),事務(wù)的屬性鸳君,數(shù)據(jù)庫隔離級別
Spring和SpringMVC农渊,MyBatis以及SpringBoot的注解分別有哪些?
SpringCould組件有哪些相嵌,它們的作用是什么腿时?微服務(wù)的CAP是什么?BASE是什么饭宾?
HashMap底層實(shí)現(xiàn)原理批糟,紅黑樹,B+樹看铆,B樹的結(jié)構(gòu)原理徽鼎,CAS(比較與交換)實(shí)現(xiàn)原理
Redis支持的數(shù)據(jù)類型以及使用場景,持久化弹惦,哨兵機(jī)制否淤,緩存擊穿,緩存穿透
線程是什么棠隐,有幾種實(shí)現(xiàn)方式石抡,它們之間的區(qū)別是什么,線程池實(shí)現(xiàn)原理助泽,JUC并發(fā)包
安全性問題(數(shù)據(jù)篡改(拿到別人的URL,篡改數(shù)據(jù)(金額)發(fā)送給系統(tǒng)))
索引使用的限制條件,sql優(yōu)化有哪些啰扛,數(shù)據(jù)同步問題(緩存,數(shù)據(jù)庫數(shù)據(jù)同步)
分布式事務(wù)
堆溢出嗡贺,棧溢出的出現(xiàn)場景以及解決方案
悲觀鎖隐解,樂觀鎖,讀寫鎖诫睬,行鎖煞茫,表鎖,自旋鎖,死鎖续徽,分布式鎖蚓曼,線程同步鎖,公平鎖炸宵,非公平鎖分別是什么辟躏?
初始化Bean對象有幾個步驟,它的生命周期
JVM內(nèi)存模型土全,算法捎琐,垃圾回收器,調(diào)優(yōu)裹匙,類加載機(jī)制(雙親委派),創(chuàng)建一個對象瑞凑,這個對象在內(nèi)存中是怎么分配的?
Dubbo的運(yùn)行原理概页,與SpringCould相比它為什么效率要高一些籽御,Zookeeper底層原理
說出幾種MQ之間的區(qū)別,以及為什么使用這種MQ惰匙,消息重復(fù)發(fā)送(冪等性)技掏,消息發(fā)送失敗,消息掉包项鬼,長時間收不到消息哑梳,發(fā)送的消息太大造成接收不成功
三、Java高級
為什么使用消息隊(duì)列绘盟?消息隊(duì)列有什么優(yōu)點(diǎn)和缺點(diǎn)鸠真?Kafka、ActiveMQ龄毡、RabbitMQ吠卷、RocketMQ 都有什么優(yōu)點(diǎn)和缺點(diǎn)?
如何保證消息不被重復(fù)消費(fèi)沦零?或者說祭隔,如何保證消息消費(fèi)的冪等性?
如何解決消息隊(duì)列的延時以及過期失效問題路操?消息隊(duì)列滿了以后該怎么處理序攘?有幾百萬消息持續(xù)積壓幾小時,說說怎么解決寻拂?
redis 集群模式的工作原理能說一下么?在集群模式下丈牢,redis 的 key 是如何尋址的祭钉?分布式尋址都有哪些算法?了解一致性 hash 算法嗎己沛?
了解什么是 redis 的雪崩慌核、穿透和擊穿距境?redis 崩潰之后會怎么樣?系統(tǒng)該如何應(yīng)對這種情況垮卓?如何處理 redis 的穿透垫桂?
為什么要分庫分表(設(shè)計(jì)高并發(fā)系統(tǒng)的時候,數(shù)據(jù)庫層面該如何設(shè)計(jì))粟按?用過哪些分庫分表中間件诬滩?不同的分庫分表中間件都有什么優(yōu)點(diǎn)和缺點(diǎn)?你們具體是如何對數(shù)據(jù)庫如何進(jìn)行垂直拆分或水平拆分的灭将?
有沒有做 MySQL 讀寫分離疼鸟?如何實(shí)現(xiàn) MySQL 的讀寫分離?MySQL 主從復(fù)制原理的是啥庙曙?如何解決MySQL 主從同步的延時問題空镜?
說一下的 dubbo 的工作原理?注冊中心掛了可以繼續(xù)通信嗎捌朴?說說一次 rpc 請求的流程吴攒?
如何基于 dubbo 進(jìn)行服務(wù)治理、服務(wù)降級砂蔽、失敗重試以及超時重試洼怔?
集群部署時的分布式 session 如何實(shí)現(xiàn)?
服務(wù)注冊和發(fā)現(xiàn)是什么意思察皇?Spring Cloud 如何實(shí)現(xiàn)茴厉?
一般實(shí)現(xiàn)分布式鎖都有哪些方式?使用 redis 如何設(shè)計(jì)分
布式鎖什荣?使用 zk 來設(shè)計(jì)分布式鎖可以嗎矾缓?這兩種分布式鎖的實(shí)現(xiàn)方式哪種效率比較高?
dubbo 的 spi 思想是什么稻爬?
如何設(shè)計(jì)可以動態(tài)擴(kuò)容縮容的分庫分表方案嗜闻?
四、分布式
ActiveMQ 中的消息重發(fā)時間間隔和重發(fā)次數(shù)嗎桅锄?
Kafka 創(chuàng)建 Topic 時如何將分區(qū)放置到不同的 Broker 中
Kafka 判斷一個節(jié)點(diǎn)是否還活著有哪兩個條件琉雳?
Kafka 消息是采用 Pull 模式耻讽,還是 Push 模式税手?
memcached 和服務(wù)器的 local cache(比如 PHP 的 APC、mmap 文件等)相比伤溉,有什么優(yōu)缺點(diǎn)辫秧?
我需要把 memcached 中的 item 批量導(dǎo)出導(dǎo)入束倍,怎么辦?
memcached 的多線程是什么?如何使用它們绪妹?
MongoDB 在 A:{B,C}上建立索引甥桂,查詢 A:{B,C}和 A:{C,B}都會使用索引嗎?
MongoDB 支持存儲過程嗎邮旷?如果支持的話黄选,怎么用?
如何理解 MongoDB 中的 GridFS 機(jī)制婶肩,MongoDB 為何使用 GridFS 來存儲文件办陷?
在 Nginx 中,如何使用未定義的服務(wù)器名稱來阻止處理請求?
RabbitMQ 上的一個 queue 中存放的 message 是否有數(shù)量限制狡孔?
若 cluster 中擁有某個 queue 的 owner node 失效了懂诗,且該 queue 被聲明具有durable 屬性,是否能夠成功從其他 node 上重新聲明該 queue 苗膝?
為什么說保證 message 被可靠持久化的條件是 queue 和 exchange 具有durable 屬性殃恒,同時 message 具有 persistent 屬性才行?
為什么用緩存辱揭,用過哪些緩存离唐,redis和memcache的區(qū)別?
五问窃、Spring架構(gòu)
Spring Boot亥鬓、Spring MVC 和 Spring 有什么區(qū)別?
BeanFactory 和 ApplicationContext 有什么區(qū)別?
什么是基于Java的Spring注解配置? 給一些注解的例子.
請解釋 Spring Bean 的生命周期域庇?
Spring 框架中的單例 Beans 是線程安全的么嵌戈?
SpringMvc 的控制器是不是單例模式,如果是,有什么問題,怎么解決?
SpringMVC 怎么樣設(shè)定重定向和轉(zhuǎn)發(fā)的听皿?
當(dāng)一個方法向 AJAX 返回特殊對象,比如 Object,List 等,需要做什么處理熟呛?
SpringMvc 用什么對象從后臺向前臺傳遞數(shù)據(jù)的?
服務(wù)注冊和發(fā)現(xiàn)是什么意思尉姨?Spring Cloud 如何實(shí)現(xiàn)庵朝?
使用 Spring Cloud 有什么優(yōu)勢?
什么是 Hystrix 斷路器又厉?我們需要它嗎九府?
什么是 Spring Cloud Bus?我們需要它嗎覆致?
如何實(shí)現(xiàn) Spring Boot 應(yīng)用程序的安全性侄旬?
Spring Boot 配置的默認(rèn) H2 數(shù)據(jù)庫的名字是上面?為什么默認(rèn)的數(shù)據(jù)庫名字是 testdb煌妈?
六儡羔、線程問題
stop() 和 suspend() 方法為何不推薦使用婆排?
同步和異步有何異同,在什么情況下分別使用它們笔链?
線程間通信,wait和notify
什么是線程餓死腮猖,什么是活鎖鉴扫?
atomicinteger和volatile等線程安全操作的關(guān)鍵字的理解和使用
volatile 變量是什么?volatile 變量和 atomic 變量有什么不同澈缺?
當(dāng)一個線程進(jìn)入一個對象的一個 synchronized 方法后坪创,其它線程是否可進(jìn)入此對象的其它方法?
簡述 synchronized 和 java.util.concurrent.locks.Lock 的異同?
多線程之間通信的同步問題姐赡,synchronized鎖的是對象莱预,衍伸出和synchronized相關(guān)很多的具體問題,例如同一個類不同方法都有synchronized鎖项滑,一個對象是否可以同時訪問依沮。或者一個類的static構(gòu)造方法加上synchronized之后的鎖的影響枪狂。
volatile 類型變量提供什么保證危喉?能使得一個非原子操作變成原子操作嗎?
了解可重入鎖的含義州疾,以及ReentrantLock 和synchronized的區(qū)別
Java創(chuàng)建線程之后辜限,直接調(diào)用start()方法和run()的區(qū)別
同步的數(shù)據(jù)結(jié)構(gòu),例如concurrentHashMap的源碼理解以及內(nèi)部實(shí)現(xiàn)原理严蓖,為什么它是同步的且效率高
常用的線程池模式以及不同線程池的使用場景
newFixedThreadPool此種線程池如果線程數(shù)達(dá)到最大值后會怎么辦薄嫡,底層原理。
七颗胡、網(wǎng)絡(luò)方面
為什么要三次握手
二次握手有什么問題
三次握手有哪些缺陷
TCP是如何控制流量的
發(fā)送方發(fā)送頻率過高造成丟包毫深,TCP是如何解決的
HTTPs為什么要用對稱加密+非對稱加密,相對于只使用非對稱加密有什么好處
講一下OSI網(wǎng)絡(luò)架構(gòu)
HTTP在哪一層
HTTP報(bào)文結(jié)構(gòu)
HTTP首部字段
HTTPs加密在哪一層實(shí)現(xiàn)
http是無狀態(tài)通信杭措,http的請求方式有哪些费什,可以自己定義新的請求方式么。
socket通信手素,以及長連接鸳址,分包,連接異常斷開的處理泉懦。
socket通信模型的使用稿黍,AIO和NIO。
socket框架netty的使用崩哩,以及NIO的實(shí)現(xiàn)原理巡球,為什么是異步非阻塞
八言沐、MySQL數(shù)據(jù)庫
務(wù)四大特性(ACID)原子性、一致性酣栈、隔離性险胰、持久性?
查詢語句不同元素(where矿筝、jion起便、limit、group by窖维、having等等)執(zhí)行先后順序榆综?
MySQL常見的三種存儲引擎(InnoDB、MyISAM铸史、MEMORY)的區(qū)別鼻疮?
MySQL的MyISAM與InnoDB兩種存儲引擎在,事務(wù)琳轿、鎖級別判沟,各自的適用場景?
mysql 高并發(fā)環(huán)境解決方案利赋?
事務(wù)的并發(fā)水评?事務(wù)隔離級別,每個級別會引發(fā)什么問題媚送,MySQL默認(rèn)是哪個級別中燥?
MySQL B+Tree索引和Hash索引的區(qū)別?
有哪些鎖(樂觀鎖悲觀鎖)塘偎,select 時怎么加排它鎖疗涉?
sql查詢語句確定創(chuàng)建哪種類型的索引?如何優(yōu)化查詢吟秩?
聚集索引和非聚集索引區(qū)別咱扣?
mysql都有什么鎖,死鎖判定原理和具體場景涵防,死鎖怎么解決闹伪?
非關(guān)系型數(shù)據(jù)庫和關(guān)系型數(shù)據(jù)庫區(qū)別,優(yōu)勢比較壮池?
MySQL慢查詢怎么解決偏瓤?
數(shù)據(jù)庫的讀寫分離、主從復(fù)制椰憋,主從復(fù)制分析的 7 個問題厅克?
數(shù)據(jù)庫崩潰時事務(wù)的恢復(fù)機(jī)制(REDO日志和UNDO日志)?
九橙依、Redis緩存
redis事務(wù)相關(guān)命令有哪些证舟?
為什么要用 redis /為什么要用緩存(高性能硕旗、高并發(fā))
為什么要用 redis 而不用 map/guava 做緩存?
redis 和 memcached 的區(qū)別
請介紹一下Redis的數(shù)據(jù)類型SortedSet(zset)以及底層實(shí)現(xiàn)機(jī)制?
redis 常見數(shù)據(jù)結(jié)構(gòu)以及使用場景分析(String女责、Hash漆枚、List、Set抵知、Sorted Set)
redis 設(shè)置過期時間
redis 內(nèi)存淘汰機(jī)制(MySQL里有2000w數(shù)據(jù)浪读,Redis中只存20w的數(shù)據(jù),如何保證Redis中的數(shù)據(jù)都是熱點(diǎn)數(shù)據(jù)辛藻?)
redis 持久化機(jī)制(怎么保證 redis 掛掉之后再重啟數(shù)據(jù)可以進(jìn)行恢復(fù))
redis 事務(wù)
Redis 常見異常及解決方案(緩存穿透、緩存雪崩互订、緩存預(yù)熱吱肌、緩存降級)
分布式環(huán)境下常見的應(yīng)用場景(分布式鎖、分布式自增 ID)
Redis 集群模式(主從模式仰禽、哨兵模式氮墨、Cluster 集群模式)
如何解決 Redis 的并發(fā)競爭 Key 問題
如何保證緩存與數(shù)據(jù)庫雙寫時的數(shù)據(jù)一致性?
十吐葵、JVM相關(guān)
如何判斷一個對象是否存活?(或者 GC 對象的判定方法)
java 中垃圾收集的方法有哪些?
簡述 java 垃圾回收機(jī)制?
GC 的兩種判定方法规揪?
Minor GC 與 Full GC 分別在什么時候發(fā)生?
JVM 內(nèi)存分哪幾個區(qū)温峭,每個區(qū)的作用是什么?
GC 收集器有哪些猛铅?CMS 收集器與 G1 收集器的特點(diǎn)
GC 的三種收集方法:標(biāo)記清除、標(biāo)記整理凤藏、復(fù)制算法的原理與特點(diǎn)奸忽,分別用在什么地方,如果讓你優(yōu)化收集方法揖庄,有什么思路栗菜?
類加載器雙親委派模型機(jī)制?
java 類加載過程?
簡述 java 類加載機(jī)制?
什么是類加載器蹄梢,類加載器有哪些?
簡述 java 內(nèi)存分配與回收策略以及 Minor GC 和Major GC
HotSpot 虛擬機(jī)對象探秘
HotSpot 垃圾收集器
十一疙筹、調(diào)優(yōu)方面
垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎禁炒?有什么辦法主動通知虛擬機(jī)進(jìn)行垃圾回收而咆?
Java 中會存在內(nèi)存泄漏嗎,請簡單描述齐苛。
如果對象的引用被置為 null翘盖,垃圾收集器是否會立即釋放對象占用的內(nèi)存?
finalize() 方法什么時候被調(diào)用凹蜂?析構(gòu)函數(shù) (finalization) 的目的是什么馍驯?
串行(serial)收集器和吞吐量(throughput)收集器的區(qū)別是什么阁危?
什么是分布式垃圾回收(DGC)?它是如何工作的汰瘫?
你怎樣給 tomcat 去調(diào)優(yōu)?
Tomcat 的優(yōu)化經(jīng)驗(yàn)
在 Java 中狂打,對象什么時候可以被垃圾回收?
System.gc() 和 Runtime.gc() 會做什么事情混弥?
Java 中會存在內(nèi)存泄漏嗎趴乡,請簡單描述
GC 是什么? 為什么要有 GC蝗拿?
JVM 的永久代中會發(fā)生垃圾回收么?
tomcat 有哪幾種 Connector 運(yùn)行模式(優(yōu)化)哀托?
內(nèi)存調(diào)優(yōu)
十二仓手、設(shè)計(jì)模式
21種設(shè)計(jì)模式知識要點(diǎn)
請列舉出在 JDK 中幾個常用的設(shè)計(jì)模式?
什么是設(shè)計(jì)模式嗽冒?你是否在你的代碼里面使用過任何設(shè)計(jì)模式?
在 Java 中剿另,什么叫觀察者設(shè)計(jì)模式(observer design pattern)贬蛙?
使用工廠模式最主要的好處是什么?在哪里使用戚篙?
在 Java 中溺职,什么時候用重載,什么時候用重寫浪耘?
在 Java 中,為什么不允許從靜態(tài)方法中訪問非靜態(tài)變量七冲?
設(shè)計(jì)一個 ATM 機(jī)澜躺,請說出你的設(shè)計(jì)思路蝉稳?
舉一個用 Java 實(shí)現(xiàn)的裝飾模式(decorator design pattern)?它是作用于對象層次還是類層次
舉例說明什么情況下會更傾向于使用抽象類而不是接口嗡髓?
十三收津、算法&數(shù)據(jù)結(jié)構(gòu)
如何僅用遞歸函數(shù)和棧操作逆序一個棧?
將單向鏈表按某值劃分成左邊小长捧、中間相等吻贿、右邊大的形式
分別用遞歸和非遞歸方式實(shí)現(xiàn)二叉樹先序、中序和后序遍歷
斐波拉契系列問題的遞歸和動態(tài)規(guī)劃
判斷字符數(shù)組中是否有的字符都只出現(xiàn)過一次
在有序但含有空的數(shù)組中查找字符串
只用2GB內(nèi)存在20億個整數(shù)中找到出現(xiàn)次數(shù)最多的數(shù)
未排序數(shù)組中累加和小于或等于給定值的最長子數(shù)組長度
從5隨機(jī)到7隨機(jī)及其擴(kuò)展
最大值減去最小值小于或等于num的子數(shù)組數(shù)量
環(huán)形單鏈表的約瑟夫問題
將單鏈表的每K個節(jié)點(diǎn)之間逆序
在二叉樹中找到累加和為指定值的最長路徑長度
判斷一棵二叉樹是否為搜索二叉樹和完全二叉樹
最長公共子序列問題
十四、并發(fā)
什么是可重入性 剧蹂, 為什么說Synchronized是可重入鎖烦却?
為什么說Synchronized是一個悲觀鎖?樂觀鎖的實(shí)現(xiàn)原理又是什么其爵?什么是CAS摩渺,它有 什么特性?
樂觀鎖一定就是好的嗎摇幻?
JVM對Java的原生鎖做了哪些優(yōu)化?
ReentrantLock 是如何實(shí)現(xiàn)可重入性的枉侧?
跟 Synchronized 相 比 狂芋,可重入鎖ReentrantLock其實(shí)現(xiàn)原理有什么不同?
如何讓Java的線程彼此同步翼虫?你了解過哪些同步器?請分別介紹下 锯蛀。
CyclicBarrier 和 CountDownLatch 看起來很相似次慢,請對比下呢?
線程池中的線程是怎么創(chuàng)建的劈愚?是一開始就隨著線程池的啟動創(chuàng)建好的嗎闻妓?
既然提到可以通過配置不同參數(shù)創(chuàng)建出不同的線程池,那么Java中默認(rèn)實(shí)現(xiàn)好的線程池又 有哪些呢由缆?請比較它們的異同
請談?wù)剉olatile有什么特點(diǎn),為什么它能保證變量對所有線程的可見性是晨?
什么是Java的內(nèi)存模型舔箭,Java中各個線程是怎么彼此看到對方的變量的?
既然volatile能夠保證線程間的變量可見性箫章,是不是就意味著基于volatile變量的運(yùn)算就是并 發(fā)安全的 镜会?
很多人都說要慎用ThreadLocal,談?wù)勀愕睦斫庋姹。褂肨hreadLocal需要注意些什么扒袖?
請談?wù)凙QS框架是怎么回事兒?
十五野瘦、操作系統(tǒng)/Linux
死鎖產(chǎn)生的原因
進(jìn)程、線程區(qū)別鞭光,什么時候用線程
如何實(shí)現(xiàn)一個線程池惰许,Java中線程池如何進(jìn)行配置
linux中有哪些常見的指令,進(jìn)行介紹
select汹买、poll晦毙、epoll有沒有了解過,講解一下
線程切換见妒,引申到Java阻塞??運(yùn)行
如何分層復(fù)制/home目錄到另一個目錄须揣?
什么是安裝Linux所需的最小分區(qū)數(shù)量,以及如何查看系統(tǒng)啟動信息耻卡?
如何暫停一個正在運(yùn)行的進(jìn)程疯汁,把其放在后臺(不運(yùn)行)?
什么是頁面錯誤秸谢,它是怎么發(fā)生的估蹄?
全部答案解析如下:(不一一截圖了,全在下面這一塊最铁,已經(jīng)全部整理成這些PDF了垮兑,私信我“面試”免費(fèi)分享)
答案解析
更多Java相關(guān)的筆記
更多Java相關(guān)的筆記
答案已經(jīng)整理系枪,還有更多的Java學(xué)習(xí)筆記都在這兒了,下載全部的這些PDF很簡單雾棺,
轉(zhuǎn)發(fā)+私信我 “面試”即可回復(fù)免費(fèi)下載的方式捌浩!