過去幾個月里面的幾家大廠泽西,均拿到 offer曹铃,最終去了字節(jié)跳動∨跎迹總體感受:
- 每個大廠問項目問得特別細(xì)陕见,雖然下面的面經(jīng)都只用了一句話去概括,但在實際面試過程當(dāng)中味抖,項目這一塊占了整個面試流程的很大一部分评甜,相反純技術(shù)問題的占比都比較小。
- 面試題幾乎類似仔涩,比較簡單忍坷,也很常見。(文末有參考解析)
美團
通常是兩輪技術(shù)面試嘉抒,一輪 HR 面試零聚,第一面會有一道算法題袍暴,有的時候會有三輪技術(shù)面試。
一面
- 一道算法題隶症,十分鐘左右時間政模,要求能正常運行,通過給出的測試用例蚂会。
- 最近做過的最有挑戰(zhàn)的項目淋样,有哪些難點?
- 結(jié)合項目細(xì)聊系統(tǒng)的設(shè)計胁住,根據(jù)你的設(shè)計提出疑問趁猴。
- 你們項目中是如何保證數(shù)據(jù)一致性的?
- 代碼在執(zhí)行 SQL 語句時彪见,數(shù)據(jù)庫連接出現(xiàn)了超時異常儡司,但是你不知道這條 SQL 語句在數(shù)據(jù)庫中究竟有沒有執(zhí)行成功,這種情況怎么保證數(shù)據(jù)的一致性余指?
- 你們系統(tǒng)中分布式鎖是如何實現(xiàn)的捕犬?(當(dāng)時回答采用 redis 實現(xiàn),set(key,value,nx,ex,expire))
- 上面使用 redis 實現(xiàn)分布式鎖會存在什么問題酵镜?
- 項目中除了使用 redis 實現(xiàn)分布式鎖碉碉,還有哪些使用場景?
- redis 的數(shù)據(jù)持久化機制淮韭?如何保證數(shù)據(jù)不丟失垢粮?當(dāng) redis 內(nèi)存滿了以后,內(nèi)存的淘汰策略靠粪?
- AQS 實現(xiàn)鎖的原理蜡吧?與 synchronize 的區(qū)別
- MySQL 存儲引擎的區(qū)別?數(shù)據(jù)庫有哪些隔離級別庇配?
- MySQL 索引的數(shù)據(jù)結(jié)構(gòu)是什么斩跌?為什么選擇這種數(shù)據(jù)結(jié)構(gòu)?
- B+Tree 和 B-Tree 有什么區(qū)別捞慌?
- Reactor 線程模型有哪些耀鸦?Netty 是如何支持這三種線程模型的?
- 多路復(fù)用器的實現(xiàn)原理?
- epoll 的實現(xiàn)原理袖订?epoll氮帐、poll、select 的區(qū)別
- JVM 如何進(jìn)行垃圾回收洛姑?標(biāo)記算法有哪些上沐?垃圾回收算法有哪些?
- CMS 垃圾回收器的原理楞艾?
二面
- 最近做過的最有挑戰(zhàn)的項目参咙?
- redis 和 MySQL 的雙寫一致性問題?你們是如何做的硫眯?為什么這樣做蕴侧?其他的做法會存在什么問題?
- 分布式鎖的實現(xiàn)原理
- 數(shù)據(jù)庫有哪些隔離級別两入?這幾種隔離級別分別解決了什么問題净宵?
- MySQL 是如何解決不可重復(fù)讀問題的?
- MVCC 的實現(xiàn)原理
- MySQL 的可重復(fù)讀隔離級別下裹纳,存在幻讀嗎择葡?為什么?
- 數(shù)據(jù)庫的索引是不是創(chuàng)建得越多越好剃氧?為什么敏储?通常創(chuàng)建幾個?
- 一張表中對 a她我、b虹曙、c 三個字段分別建立了索引,現(xiàn)在有一條 SQL 語句:select field1,field2 ... from t where a = xx and b=xx and c=xx. 請問這條 SQL 語句會使用到索引嗎番舆?如果會酝碳,那么會使用到哪個索引?(回答:只會使用其中一個索引恨狈,可能是 a,也可能是 b疏哗,還有可能是 c,具體使用哪個索引和表中的數(shù)據(jù)有關(guān))
- 為什么不會同時使用 a,b,c 三個索引禾怠?什么是回表返奉?
- 聚簇索引和非聚簇索引的區(qū)別
- 如何知道一條 SQL 語句使用了哪些索引?(回答:使用 explain 查看)
- explain 的結(jié)果有哪些列吗氏?分別代表什么含義芽偏?
- 如何查看慢 SQL?
- 在 Spring 事務(wù)中執(zhí)行多條 SQL 語句時弦讽,是對應(yīng)多個數(shù)據(jù)庫連接還是一個數(shù)據(jù)庫連接污尉?(回答:一個連接膀哲,多個就無法保證事務(wù)了)
- 既然是一個連接,Spring 在前后執(zhí)行多條 SQL 時被碗,是如何保證當(dāng)前線程獲取到同一個連接的某宪?(回答:當(dāng)時沒想到 ThreadLocal,面試官引導(dǎo)說锐朴,如果是你兴喂,會怎么實現(xiàn)。后來回答說存在一個 map焚志,key 是當(dāng)前線程衣迷,value 就是數(shù)據(jù)庫連接,最后靈光一現(xiàn)娩嚼,想到了 ThreadLocal)
- ThreadLocal 的實現(xiàn)原理蘑险?
- 使用 ThreadLocal 需要注意哪些問題?(實際上是問 ThreadLocal 內(nèi)存泄漏的問題)
- Redis 主從復(fù)制的原理
- MQ 使用過哪些岳悟?如何選型?
- 使用的是什么 RPC 框架泼差?為什么選擇它贵少?
- 線上服務(wù)流量猛漲,該如何操作堆缘,說下詳細(xì)過程滔灶?新加服務(wù)節(jié)點也可能會導(dǎo)致服務(wù)還沒起來,機器就被打爆了吼肥,這個時候怎么辦录平?
- 一個場景題:現(xiàn)在有 1000 萬的商家,知道他們的地理位置缀皱,當(dāng)我們進(jìn)入到 APP 首頁時斗这,如何加載出附近的商家?
- 職業(yè)規(guī)劃啤斗?為什么選擇在年底前跳槽表箭?
字節(jié)
三輪技術(shù)面試极舔,一輪 HR 面試,每輪技術(shù)面試都會至少有一道算法題链瓦。
一面
- 一道算法題
- 聊項目拆魏,你們的廣告檢索引擎是如何設(shè)計的?為什么你們的廣告檢索不使用 ElasticSearch 這樣的搜索組件?
- Java 中的鎖有哪些稽揭?和 Lock 的區(qū)別
- synchronized 的底層實現(xiàn)原理俺附?
- AQS 的實現(xiàn)原理?
- volatile 的作用和實現(xiàn)原理溪掀?
- JVM 的垃圾回收算法
- GC Roots 有哪些事镣?
- 簡述新生代與老年代的區(qū)別?
- 類的加載過程揪胃?什么是雙親委派機制璃哟?
- 線程池的實現(xiàn)原理?線程池滿了喊递,再提交任務(wù)時會怎么處理随闪?
- redis 實現(xiàn)分布式鎖的原理?redis 的分布式鎖有什么問題骚勘?lua 腳本熟悉嗎铐伴?
- redis 中 key 的過期策略是什么?
- redis 的持久化機制俏讹?AOF 和 RDB 的區(qū)別当宴?
- 什么是緩存擊穿、緩存穿透泽疆、緩存雪崩户矢?如何處理?
- MySQL 數(shù)據(jù)庫索引的實現(xiàn)原理殉疼?
- 什么是回表梯浪?什么是聯(lián)合索引?什么是最左前綴匹配原則瓢娜?
- MySQL 如何保證高可用挂洛?主從復(fù)制原理?
- Explain 關(guān)鍵字的使用恋腕。
- RocketMQ 的實現(xiàn)原理抹锄。
- 注冊中心的選型?
- Zookeeper 作為注冊中心的實現(xiàn)原理荠藤?
- Zookeeper 實現(xiàn)分布式鎖的原理伙单?
二面
- 一道算法題
- 詳細(xì)聊項目經(jīng)歷
- redis 緩存和數(shù)據(jù)庫數(shù)據(jù)一致性怎么解決?
- 分布式系統(tǒng)中哈肖,分布式事務(wù)怎么解決吻育?(回答:RocketMQ 的事務(wù)消息)
- RocketMQ 事務(wù)消息的實現(xiàn)原理?你們的項目中是如何通過 RocketMQ 來保證數(shù)據(jù)一致性
- MySQL 為什么使用 B+樹來作索引淤井,對比 B 樹它的優(yōu)點和缺點是什么布疼?
- 什么是覆蓋索引摊趾?
- MySQL 中事務(wù)的隔離級別?
- SQL 的優(yōu)化經(jīng)驗游两?
- redis 持久化的機制砾层?如何保證數(shù)據(jù)不丟失?
- redis 的內(nèi)存淘汰策略贱案?key 的過期策略肛炮?
- RocketMQ 如何保證數(shù)據(jù)的可靠傳輸(數(shù)據(jù)不丟失)?
- RocketMQ 中現(xiàn)在堆積了大量消息宝踪,該怎么處理侨糟?
- Netty 的線程模型?主從多線程模型下瘩燥,線程是如何分工的秕重?
- 線程池的實現(xiàn)原理是什么?如何設(shè)置線程池的參數(shù)厉膀?
- 對于 CPU 密集型的系統(tǒng)溶耘,為什么線程個數(shù)設(shè)置為 CPU 核數(shù)+1?為什么要+1站蝠?
- 對于 IO 密集型的系統(tǒng)汰具,為什么線程個數(shù)為 2 倍 CPU 核數(shù)?為什么是 2 倍菱魔,而不是 3 倍、4 倍等等吟孙?
- RPC 框架的選型澜倦?
- Motan 是如何實現(xiàn)負(fù)載均衡的?
- 下一步的工作計劃杰妓?為什么藻治?
三面
- 一道算法題
- 圖這種數(shù)據(jù)結(jié)構(gòu)了解嗎?如何判斷圖中是否有環(huán)巷挥?
- 如何找出圖中所有的環(huán)境桩卵?
- Http 和 Https 的區(qū)別?
- TCP 三次握手和四次揮手倍宾?
- TCP 如何保證可靠傳輸雏节?
- BIO、NIO高职、AIO 的區(qū)別钩乍?
- 加密算法知道哪些?什么是對稱加密怔锌?什么是非對稱加密寥粹?
- 如何保證接口的安全性变过?應(yīng)該使用什么加密策略?
- 說下哈希一致性算法涝涤?
- MySQL 索引的數(shù)據(jù)結(jié)構(gòu)和原理媚狰?
- MySQL 的調(diào)優(yōu)經(jīng)驗
- 微服務(wù)的技術(shù)選型?為什么選擇 Motan阔拳?
- RPC 調(diào)用的原理
騰訊
通常是三輪技術(shù)面試罪针,一輪 HR 面試彭羹,第一輪面試會有一道算法題,有的時候可能是 4 輪技術(shù)面試泪酱。
一面
一面主要是問 Java 基礎(chǔ)派殷,常規(guī)題,比較見答案墓阀。
- Java 中使用的是值傳遞還是引用傳遞毡惜?
- 方法調(diào)用時入?yún)⑹侨绾蝹鬟f的?
- JVM 中有哪些數(shù)據(jù)區(qū)域斯撮?
- List 集合哪些经伙?ArrayList 和 LinkedList 的區(qū)別和使用場景?為什么勿锅?
- HashMap 的實現(xiàn)原理帕膜?1.7 和 1.8 的區(qū)別?
- HashMap 中的 hash 算法溢十?這樣的 hash 算法有什么好處(高低 16 位均參與運算)垮刹?如何尋址?
- 使用 HashMap 會有哪些問題张弛?(1.7 和 1.8 中有什么不同)如何解決荒典?
- Java 中有哪些線程安全的 Map?
- ConcurrentHashMap 的實現(xiàn)原理?1.7 和 1.8 的區(qū)別吞鸭?
- ConcurrentHashMap 如何統(tǒng)計元素的個數(shù)寺董?會有什么問題?
- 什么是 JMM 內(nèi)存模型瞒大?
- synchronized 的實現(xiàn)原理
- 線程池的實現(xiàn)原理螃征?有哪些參數(shù),分別是什么含義透敌?
- 垃圾回收算法盯滚。
- Java 中反射的基本原理踢械?實際項目中是如何使用反射的?
- 熟悉哪些設(shè)計模式魄藕?在項目中哪些地方實際使用過内列?
- 一道算法題
二面
主要聊的是項目,技術(shù)問題都是在聊項目的時候帶出來的背率。
- 最近做過的最有成就感的項目话瞧?這個項目中遇到過什么問題?
- 你們的分布式系統(tǒng)中如何保證數(shù)據(jù)一致性問題寝姿?(回答:利用了 RocketMQ 的事務(wù)消息來保證最終一致性交排,后面大部分時間都在聊 RocketMQ 的實現(xiàn)原理)
- 客戶端請求過來,后端如何防止重復(fù)請求饵筑,保證冪等埃篓?
- 如何實現(xiàn)分布式鎖?
- redis 實現(xiàn)分布式鎖存在什么問題根资?
- redis 分布式鎖與 lua 腳本架专?
- redission 了解過嗎?說說它的實現(xiàn)原理玄帕?
- 在項目中為什么使用 RocketMQ部脚?對于 MQ,你們是如何選型的裤纹?
- RocketMQ 的實現(xiàn)原理委刘?消息是如何存儲的?
- 線上出現(xiàn) MQ 丟失消息?問題可能出現(xiàn)在哪兒洼滚?如何保證 MQ 的消息不丟失?
- 如何保證 RocketMQ 的高可用性?
- RocketMQ 的事務(wù)消息的實現(xiàn)原理屑迂?
- 如何保證消息的順序性?
- 如何保證消息不被重復(fù)消費射沟?
- 你們項目中涉及到了轉(zhuǎn)賬相關(guān)的業(yè)務(wù)浸间,那怎么保證資金的準(zhǔn)確性和安全性?
- 針對你們的項目設(shè)計一個對賬系統(tǒng)钞支。
- 如何保證分布式系統(tǒng)的強一致性茫蛹?
三面
和二面幾乎一樣,大部分時間聊項目烁挟,問題也類似婴洼,重復(fù)面試題不再贅述
- 聊項目經(jīng)驗
- 使用 redis 過程中遇到過什么問題?如何解決熱 key 問題撼嗓?
- 你們的 redis 使用的那種模式柬采?集群模式和哨兵模式的區(qū)別欢唾?集群模式和哨兵模式如何保證 redis 集群的高可用?redis 集群的故障轉(zhuǎn)移過程粉捻?
- raft 協(xié)議的原理礁遣?
- JVM 調(diào)優(yōu)經(jīng)驗?
- 什么是三色標(biāo)記肩刃?
- 數(shù)據(jù)庫與緩存的雙寫一致性問題祟霍?
- 結(jié)合項目,分庫分表該如何設(shè)計
- MySQL 的主從復(fù)制原理盈包?
- ConcurrentHashMap 的實現(xiàn)原理沸呐?
- CucurrentHashMap 中 Node 節(jié)點是如何設(shè)計的?為什么要用 final 和 volatile 修飾 Node 節(jié)點的屬性呢燥?有什么作用崭添?
- 對個人職業(yè)有什么規(guī)劃?
四面
- 項目經(jīng)歷
- 一個對象是如何存儲在 JVM 中的疮茄?
- 類加載過程,以及方法的執(zhí)行的過程力试?
- JVM 的垃圾回收機制徙邻?為什么要區(qū)分新生代畸裳、老年代缰犁?
- 線上 GC 有問題扰魂,如何排查蒋畜?
- Spring 的 AOP 的使用場景?AOP 機制有什么好處膨处?
- 分布式事務(wù)問題解恰,CAP 理論紊服?2PC腺占、XA烦周、TCC怎顾、MQ 等原理
- 類似于淘寶這樣的系統(tǒng),你覺得他們的他們是如何實現(xiàn)數(shù)據(jù)的強一致性的漱贱?
- redis 集群如何實現(xiàn)擴容槐雾?
- redis 的 rehash 的過程?
- Netty 的線程模型有哪些幅狮?
- 什么是 TCP 的面包與半包募强?Netty 是如何解決的?
- epoll 的原理崇摄?
- TCP 的三次握手和四次揮手擎值?為什么是 3 次和 4 次?
- 你們的廣告檢索引擎是如何設(shè)計的逐抑?目前流量多大鸠儿?如果支撐更大量級的廣告投放
- 為什么從上一家公司離職?
阿里
三輪技術(shù)面試,一輪 HR 面試冯丙,第一輪通常是電話面試肉瓦,第二輪是視頻,可能會有一道算法題胃惜。
一面
一面基本是 Java 基礎(chǔ)問題泞莉,比較簡單。
- Java 如何判斷一個對象能否被回收船殉?垃圾回收算法有哪些鲫趁?
- 什么是內(nèi)存模型?
- 什么是線程安全利虫?
- Java 中鎖有哪些挨厚?synchronize 和 Lock 的區(qū)別?
- synchronize 的底層實現(xiàn)原理
- 對象在內(nèi)存中的布局糠惫?
- volatile 關(guān)鍵字的實現(xiàn)原理疫剃?
- 什么是原子性、可見性硼讽、有序性巢价?什么是 happen-before 原則?解釋一下 final 的語義?
- 什么是 CAS壤躲?CAS 存在什么問題城菊?
- Lock 系列鎖的實現(xiàn)原理?
- 什么是原子類碉克?原子類的實現(xiàn)原理凌唬?
- Java 中對象的引用有哪些類型?
- ThreadLocal 的實現(xiàn)原理漏麦?存在什么問題客税?如何避免?
- HashMap 的實現(xiàn)原理唁奢?1.7 和 1.8 的區(qū)別霎挟?
- 有哪些線程安全的 Map?ConcurrentHashMap 的實現(xiàn)原理?1.7 和 1.8 的區(qū)別麻掸?
- ConcurrentHashMap 是如何統(tǒng)計 size 的酥夭?
- MySQL 的索引為什么是 B+Tree,而不是數(shù)組脊奋、Hash 之類的數(shù)據(jù)結(jié)構(gòu)熬北?為什么不是 B-Tree?
- Redis 有哪些數(shù)據(jù)類型诚隙?List 中數(shù)據(jù)非常多怎么辦讶隐?
- Redis 的持久化機制?AOF 和 RDB 的優(yōu)缺點久又?
- 線上服務(wù)接口非常慢巫延?如何排查?
二面和三面
二面和三面是同一天面的地消,記不清了炉峰,大概是這些問題,面試官比較喜歡追問脉执。
- 一道算法題疼阔。
- 聊項目經(jīng)歷,非常細(xì)半夷。
- 垃圾標(biāo)記算法和垃圾回收算法有哪些婆廊?
- 什么是三色標(biāo)記?什么是安全點與安全區(qū)域巫橄?
- 簡述一下 G1 垃圾回收器的原理淘邻?
- 為什么你們項目中沒有使用 G1 垃圾回收器?
- 什么時候會觸發(fā) Minor GC湘换?什么時候出發(fā) Old GC列荔?什么是 Full GC?
- 對象什么時候進(jìn)入到老年代敬尺?什么是動態(tài)年齡判斷?
- 你們線上服務(wù)的 QPS 有多大贴浙?機器配置是多少?JVM 的參數(shù)是怎么設(shè)置的署恍?GC 的頻率崎溃?為什么要這這樣配置?
- 假設(shè)線上服務(wù)的流量是當(dāng)前流量的 1 萬倍盯质?系統(tǒng)會出現(xiàn)什么現(xiàn)象袁串?如何優(yōu)化?
- Redis 的高可用怎么保證呼巷?線上有多少臺機器囱修?怎么部署的?
- Redis 實現(xiàn)分布式鎖的原理王悍?存在什么問題破镰?
- 如何用 Zookeeper 實現(xiàn)分布式鎖?存在什么問題压储?
- Redis 中遇到熱 key 會造成什么問題鲜漩?如何發(fā)現(xiàn)熱 key?如何解決熱 key 的問題集惋?
- SQL 的優(yōu)化經(jīng)驗有哪些孕似?索引的設(shè)計準(zhǔn)則?
- 如何查看 SQL 的慢查詢?nèi)罩竟涡蹋烤€上服務(wù)出現(xiàn)慢查詢了怎么處理喉祭?
- 線上數(shù)據(jù)庫出現(xiàn)了死鎖怎么辦?
- MySQL 的 InnoDB 在可重復(fù)讀隔離界別下如何解決不可重復(fù)讀問題和幻讀問題的雷绢?什么是快照讀泛烙?什么是當(dāng)前讀?
- MySQL 中有哪些鎖习寸?什么是間隙鎖胶惰?
- MySQL 中有哪些日志?
- 數(shù)據(jù)庫有哪些特性霞溪?MySQL 是如何保證機器宕機重啟后孵滞,數(shù)據(jù)不丟失的?
- binlog 有什么作用鸯匹?將其格式設(shè)置為 statement 會有什么問題坊饶?你們線上是如何配置的?
- 如何保證 MySQL 的高可用殴蓬?主從復(fù)制的原理匿级?
- 現(xiàn)在線上環(huán)境中發(fā)現(xiàn) MySQL 的總節(jié)點大幅落后于 master 節(jié)點蟋滴,可能是什么原因?如何處理痘绎?
- 消息隊列的選型津函?RocketMQ 的實現(xiàn)原理?
- 如何保證消息不丟失孤页?如何保證不重復(fù)消費消息尔苦?
- 線上 MQ 出現(xiàn)消息大量積壓,應(yīng)該如何處理行施?
- 讓你設(shè)計一個 MQ允坚,你會如何設(shè)計?
- 什么是 mmap蛾号?
- netty 用過嗎稠项?為什么 netty 是高性能的網(wǎng)絡(luò)框架?
- 零拷貝機制的實現(xiàn)原理鲜结?
- Zookeeper 集群如何部署展运?Zookeeper 如何實現(xiàn)選舉?什么是 ZAB 協(xié)議轻腺?
- Zookeeper 如何保證數(shù)據(jù)的順序一致性乐疆?
- Zookeeper 的使用場景?如何支撐大量的讀請求贬养?
- 你們微服務(wù)的注冊中心是如何選型的挤土?Zookeeper 和 Eureka 作為注冊中心的區(qū)別?它們有什么瓶頸误算?
- 如何設(shè)計一款能支撐數(shù)十萬機器組成的集群的注冊中心仰美?
- 如何設(shè)計一個秒殺系統(tǒng)?在雙十一當(dāng)天儿礼,從瀏覽器中輸入 www.taobao.com 到加載出頁面咖杂,說一下它的完整過程。
面經(jīng)參考解析
以上所有問題的答案都有相應(yīng)的解析文檔參考蚊夫,**網(wǎng)上也有一些類似的面試題總結(jié)的文章诉字,但小編這份絕對是數(shù)一數(shù)二,剩下你了去網(wǎng)上一個個找的時間知纷!每個知識點都有左側(cè)導(dǎo)航書簽頁壤圃,看的時候十分方便,由于內(nèi)容較多琅轧,這里就截取一部分圖吧伍绳。需要的讀者朋友們可以幫忙轉(zhuǎn)發(fā)支持一下然后添加小助理vx:mxzFAFAFA即可!乍桂!**
Java基礎(chǔ)
Java 集合框架
jvm
多線程
網(wǎng)絡(luò)
算法和數(shù)據(jù)結(jié)構(gòu)
Spring
Netty
微服務(wù)/分布式
消息隊列
分布式 ID冤竹,其他(網(wǎng)關(guān)、限流...)
MySQL
Redis
經(jīng)驗總結(jié)
這是我在工作典挑、面試中學(xué)習(xí)并總結(jié)到的一些知識點酥宴,都是一些比較典型的、面試常被問到的問題您觉。如果你平時沒有注意去總結(jié)的話拙寡,那么當(dāng)你面試被問到的時候可能會是一臉懵圈,就算這個問題你知道怎么回事琳水,但是你平時沒有認(rèn)真總結(jié)肆糕,你也可能會出現(xiàn)邏輯混亂的情況般堆,從而錯失工作機會。
有些知識點不經(jīng)常使用就會忘記诚啃,但是面試還會問淮摔,對此,我也是深受其害始赎,所以**我決定將這些遇見的問題整理下來和橙,分享出去,幫助更多的人造垛,我們共同進(jìn)步魔招。**所謂“溫故而知新”,沒事的時候多翻看一下這些知識五辽,**沒準(zhǔn)就會有新的收獲仆百。你沒時間整理的東西,我都幫你寫好了奔脐。有需要的小伙伴添加小助理vx:mxzFAFAFA即可!吁讨!**