閑話
先說說個(gè)人情況吧,我是17年本科畢業(yè),以校招身份進(jìn)入了鵝廠,在鵝廠工作了小三年,因某些不可描述的原因被裁掉了,目前已經(jīng)入職字節(jié)近1個(gè)月的時(shí)間了,今天逛微博看到一條熱門微博,屬實(shí)有點(diǎn)感嘆,內(nèi)容如下:

被裁掉后的我面試了阿里、京東、字節(jié)、拼多多、美團(tuán)這些一線互聯(lián)網(wǎng)大廠,面試完后我有個(gè)習(xí)慣,就是把面試官的問題記下來,方便以后的復(fù)盤,這次我就和大家分享一下阿里和字節(jié)的面試經(jīng)驗(yàn)吧(個(gè)人感覺面試過程最舒服的),我復(fù)盤后的內(nèi)容以及整理成了一份文檔,可以分享給有需要的朋友,里面有一些面試題的復(fù)盤分析,面試前的準(zhǔn)備(主要是簡(jiǎn)歷的包裝),其他的優(yōu)質(zhì)面經(jīng)分享等等干貨知識(shí),(點(diǎn)擊這里直接獲取吧)
先說阿里,看看到底問了什么?
先說一個(gè)問題,阿里有些部門對(duì)于學(xué)歷的限制沒那么死了,也是有大專生的,前提當(dāng)然是你的技術(shù)足夠出色!
阿里一面
- 先自我介紹,包含日常工作
- 問了父子線程怎么共享數(shù)據(jù) interitableThreadLocals
- lock和sync區(qū)別
- HashMap1.7、1.8區(qū)別
- AQS原理(執(zhí)行過程源碼,入隊(duì)出隊(duì)的細(xì)節(jié),源碼細(xì)節(jié))
- CountDownLatch和CyclicBarrier的區(qū)別是什么源碼級(jí)別
- volatile從指令重排序,內(nèi)存屏障,聊到總線風(fēng)暴
- mysql索引:聚集索引、非聚集索引、索引結(jié)構(gòu),順帶會(huì)問各種樹的特性
- 舉例優(yōu)化sql
- MVCC和事務(wù)隔離級(jí)別的關(guān)系
- 間隙鎖、行鎖、樂觀鎖悲觀鎖等
- 唯一索引和普通索引的區(qū)別
- 聊到了changeBuffer、頁(yè)分裂合頁(yè)合并
- 可達(dá)性分析算法中根節(jié)點(diǎn)有哪些
- cms和G1區(qū)別
- 怎樣GC調(diào)優(yōu)
- 怎樣排查CPU彪高、內(nèi)存彪高
- redis數(shù)據(jù)結(jié)構(gòu)、跳躍表
- redis qps能上多少,怎么知道的
- sentinel和cluster區(qū)別和各自適用場(chǎng)景
- redis cluster集群同步過程
- redis單線程為什么快
- 多大叫大key、熱key產(chǎn)生原因和后果以及怎么解決
- 本地緩存需要高時(shí)效性怎么辦
- spring的作用;
- spring循環(huán)依賴怎么解決(說出三級(jí)緩存源碼細(xì)節(jié));
- spring aop原理(動(dòng)態(tài)代理)、
- spring bean生命周期(源碼細(xì)節(jié),以及各個(gè)位置的設(shè)計(jì)思路,有什么可擴(kuò)展的)
- dubbo服務(wù)暴露和引用過程,負(fù)載均衡策略,容錯(cuò)機(jī)制在哪里實(shí)現(xiàn)的源碼
- 項(xiàng)目中碰到的問題。
第二輪
筆試兩道題,第一題寫代碼,第二題寫技術(shù)方案,以查詢?yōu)橹?,考察鎖粒度、時(shí)間粒度上的細(xì)節(jié)點(diǎn)。
第三輪
- 自我介紹、項(xiàng)目介紹
- 說到緩存穿透,讓我設(shè)計(jì)一個(gè)防止緩存穿透的解決方案,簡(jiǎn)單的就是存null值,但肯定會(huì)深究,可以結(jié)合布隆過濾器,設(shè)計(jì)分布式系統(tǒng),里面又會(huì)問到流量分發(fā)到具體過濾器服務(wù)的方式,比如一致性hash算法,怎么調(diào)用?比如dubbo直連、等等細(xì)節(jié)會(huì)邊說邊問
- 有沒有做限流,設(shè)計(jì)一個(gè)侵入性最小的限流服務(wù)。
- 項(xiàng)目中碰到的問題,最好說框架本身問題,能提現(xiàn)個(gè)人能力,也避免問題太低級(jí)被面試官看low,剛好之前有發(fā)現(xiàn)一個(gè)dubbo的bug,所以這問題應(yīng)該回答的還可以。
- 介紹最熟悉的項(xiàng)目,業(yè)務(wù)上有沒有什么優(yōu)化點(diǎn);和同行業(yè)其他公司的差距和優(yōu)勢(shì)
- dubbo服務(wù)調(diào)用過程
- NIO、BIO區(qū)別,NIO解決了什么問題,Netty線程模型(源碼拷問)。
- MQ相關(guān)
第四輪
- 項(xiàng)目介紹
- 聽到說做了限流,限流標(biāo)準(zhǔn)(并發(fā)數(shù)? qps?并發(fā)數(shù)和qps關(guān)系?說出了5種限流方案和對(duì)應(yīng)算法原理)
- dubbo調(diào)用端怎么在jvm中生成對(duì)應(yīng)服務(wù)?dubbo服務(wù)端和調(diào)用端超時(shí)時(shí)間設(shè)置和區(qū)別、dubbo長(zhǎng)連接。
- mysql行鎖最大并發(fā)數(shù)?(秒殺項(xiàng)目指出)
- 設(shè)計(jì)秒殺系統(tǒng),我說的異步的方式,會(huì)問怎么優(yōu)化?改為了同步的方式,異步和同步區(qū)別?
- 碰到哪些技術(shù)難點(diǎn)?怎么解決?有沒有參考其他大廠?其他大廠方案什么樣的?有沒有關(guān)注阿里這邊最新的技術(shù)?
- 剛剛的秒殺系統(tǒng),會(huì)涉及到多個(gè)庫(kù)表的更新,分布式事務(wù)怎么解決,我說的消息最終一致性,異步?有沒有更好的方案?同步TCC方式,TCC方式原理?(三個(gè)階段的具體實(shí)現(xiàn))
字節(jié)面試過程
一面(閑聊吹逼,放松方式)
- 自我介紹
- 你好像用到了MQ,主流MQ有哪些?
- 為什么選RMQ?
- RMQ的主要有哪些組成部分?
- 講講消費(fèi)模式和刷盤策略吧
基礎(chǔ)知識(shí)問答
- Java泛型機(jī)制了解嗎?
- 在哪用到了?
- 集合類源碼看過嗎?
- 介紹一下String三個(gè)類的區(qū)別吧,源碼看了嗎?
- 哪個(gè)線程安全?怎么實(shí)現(xiàn)的?
- String拼接是咋做到的?
- 反射了解嗎?
- Spring里哪用到了反射(答動(dòng)態(tài)代理)
- 靜態(tài)代理和動(dòng)態(tài)代理的區(qū)別?JDK代理的條件?
- 上面你說看了一些源碼,我們聊聊HashMap吧
- HashMap線程安全嗎?
- 為啥不安全?(我開玩笑回了一個(gè),因?yàn)樗麤]鎖門,面試官一聽也笑了笑,主要是看氣氛太緊張了)
- 怎么實(shí)現(xiàn)線程安全?(集合類方法/concurrentHashMap)
- HashMap內(nèi)部是咋實(shí)現(xiàn)的?(數(shù)組+紅黑樹/鏈表)
- 擴(kuò)容了解嗎?為啥因子是0.75不是別的?JavaDoc有看嗎?(這個(gè)記不太清楚了,印象里是javadoc里有寫,是服從一個(gè)lambda為0.75的泊松分布)
- 擴(kuò)容之后的數(shù)據(jù)落在哪?為啥容量一定是2的倍數(shù)?為啥引入紅黑樹?紅黑樹要啥參數(shù)?并發(fā)的時(shí)候咋處理的?
算法:
(1) 給定一些數(shù)組,例如下面的格式,他們都表示一個(gè)區(qū)間,然后你需要將區(qū)間進(jìn)行合并
[1,2],[2,4],[3,7],[8,11]
如上所示, [1,2] 和 [2,4] = [1,4]
然后 [1,4] 和 [3,7] = [1,7]
最后 [1,7] 和 [8,11] 無法合并,所以最后結(jié)果應(yīng)該返回 [1,7],[8,11]
(2)# 給定一個(gè)數(shù)組,例如 [1,1,2,2,2,3,3,3,3]這樣的,里面的數(shù)組不一定連續(xù)并且有序,假設(shè)我輸入 2,這個(gè)2表示出現(xiàn)次數(shù)最高的兩個(gè)
那么你需要給我返回 2,3
第二輪
- 自我介紹
- 博客已經(jīng)開源了么,用的什么開源協(xié)議,博客的用戶多么?
- 對(duì)于Solr或者ES里面用到的一些中文分詞器有了解過么?
- 談?wù)勀切┘夹g(shù)棧,你比較熟悉的是那些,mysql 和redis?
- 聊聊MySQL的底層索引結(jié)構(gòu),InnoDB里面的B+Tree?
- B Tree 和 B+ Tree的區(qū)別
- 聊聊MySQL索引的發(fā)展過程?是一來就是B+Tree的么?從 沒有索引、hash、二叉排序樹、AVL樹、B樹、B+樹 聊。
- 談?wù)凪ySQL里面的事務(wù),說說什么是事務(wù)?
- MySQL里面有哪些事務(wù)級(jí)別,并且不同的事務(wù)級(jí)別會(huì)出現(xiàn)什么問題?
- 談?wù)効芍貜?fù)讀和幻讀的區(qū)別?
- MySQL中如果使用like進(jìn)行模糊匹配的時(shí)候,是否會(huì)使用索引?一定不會(huì)用么?
- 談?wù)凴edis吧,在你項(xiàng)目中的具體使用?
- 談?wù)凴edis如何實(shí)現(xiàn)分布式鎖?
- 談?wù)凴edis中緩存穿透的問題,以及解決的方法?
- 還有其它解決緩存穿透的方法么?布隆過濾器有了解過么?
- Redis中大面積的緩存失效,然后請(qǐng)求全部打到數(shù)據(jù)庫(kù),有什么解決方法?
- 如果出現(xiàn)一些熱點(diǎn)數(shù)據(jù),比如明星之間的新聞,造成大量的吃瓜用戶涌入后臺(tái),但是服務(wù)器還沒有緩存對(duì)應(yīng)的數(shù)據(jù),這樣可能造成數(shù)據(jù)庫(kù)宕機(jī),如何避免這樣的情況?
- 聊聊 JVM的組成結(jié)構(gòu)?
- 談?wù)劺占??以及垃圾收集算?/li>
- 復(fù)制算法 和 標(biāo)記整理算法?
- 為什么不在新生代使用標(biāo)記整理算法?或者在老年代使用復(fù)制算法?
- 有了解過Volatile么?談?wù)勀銓?duì)Volatile的理解
- Volatile如何保證可見性的?以及如何實(shí)現(xiàn)可見性的機(jī)制。
- 如果大量的使用Volatile存在什么問題?
- 談?wù)劜僮飨到y(tǒng)的線程,以及它的狀態(tài)
- 線程和進(jìn)程的區(qū)別?
- 為什么提出多線程應(yīng)用,而不是多進(jìn)程應(yīng)用呢?
- Linux你平時(shí)都有用到什么命令呢?
- 如果我需要查看端口號(hào)或者進(jìn)程號(hào),你會(huì)使用什么命令?
- 談?wù)勀阕龅牧硗庖粋€(gè)項(xiàng)目吧?稍微介紹一下
- 來吧,寫個(gè)題目試試
鏈表的兩兩翻轉(zhuǎn) # 給定鏈表: 1->2->3->4->5->6->7 # 返回結(jié)果: 2->1->4->3->6->5->7
第三輪
- 說一下Java垃圾回收機(jī)制
- 64匹馬,8個(gè)賽道,找最快的4匹馬。
- 64匹馬,8個(gè)賽道,找最快的8匹馬。
- 給出兩個(gè)升序數(shù)組A、B和長(zhǎng)度m、n,求第k個(gè)大的數(shù)
- 給出數(shù)組A,長(zhǎng)度為n,數(shù)組中元素的值位于[0, n - 1]之間,求是否有重復(fù)元素
- 講一下多線程與多進(jìn)程區(qū)別
- JVM中什么時(shí)候會(huì)進(jìn)行垃圾回收?什么樣的對(duì)象是可以回收的?
- Spring主要思想是什么?
- 你未來的發(fā)展方向是什么?確定了么?打算一直做Java?有考慮過轉(zhuǎn)嗎?
- 那你平時(shí)是怎么學(xué)習(xí)Java的呢?
- 場(chǎng)景題目:設(shè)計(jì)一個(gè)短域名服務(wù):短信存不了太長(zhǎng)網(wǎng)站,需要弄成短域名,你該如何設(shè)計(jì)一個(gè)服務(wù),可以為全國(guó)的網(wǎng)址服務(wù)。
- TCP為什么是三次握手四次揮手?
- 數(shù)據(jù)庫(kù)的隔離級(jí)別
- sql題,寫了個(gè)連表查詢外加模糊查詢
- 算法:鏡像二叉樹
后話
其實(shí)字節(jié)和阿里都面上了,我個(gè)人比較偏愛字節(jié)一點(diǎn),因此選擇了字節(jié)跳動(dòng),字節(jié)真的是很愛問算法了,據(jù)我了解,現(xiàn)在大廠面試對(duì)于算法這塊在逐漸加強(qiáng),因此我把我復(fù)盤后的這些文檔筆記留給大家食用吧,希望大家在接下來的金九銀十或者明年的金三銀四都能拿到自己滿意的offer,一起努力!直接點(diǎn)擊這里獲取免費(fèi)下載方式!
近2000道面試真題總結(jié):

666頁(yè)算法筆記:
