這是一個勵志讀者在收獲阿里 Offer 后的復盤,他積極准備了 1 年時間,夢想總算照進現實,希望這份面經總結能給你帶來幫助和啟發。
大家好!本人網名:茶杯,三非背景(非985 / 非211 / 非理工科) ,工作 5 年時間,待了三家公司,去阿里一直是我的夢想。
為了能進阿里,我給自己制定了非常詳細的學習計划:Java Core、JVM、網絡、Spring 源碼、MySQL、Redis、MQ、Netty,整整准備了 1 年時間。
在面了幾家還算知名的大廠后,我總結了一波面試套路,就開始了阿里的面試之旅。 最終 , 歷經 6 輪面試,順利拿到了 阿里的 offe r , 也算是圓夢了。
一 路走來, 要 感謝的人太多。 下面, 我 對整個 面試過程做一次復盤 ,希望給大家一些 啟發。
01 第一輪技術面:阿里P6面試官
1、看你簡歷中提到處理過多次 JVM 故障,可以講講你遇到過哪些 OOM 的案例么?
a、我分別把之前工作中遇到的堆空間、元空間、堆外內存 OOM 場景都講了一遍
b、按照如何分析、如何排查、如何解決、事后如何防范這個思路進行
2、看你簡歷寫做了線程池調優,能講下線程池的原理以及做了哪些優化嗎?
a、業務線程池相互隔離
b、根據CPU核數、線程池任務的 IO 耗時/計算耗時,設置合理的核心線程數,提升性能
c、動態修改線程池參數,方便維護
d、重寫拒絕策略,保證任務不丟
e、聊了一下線程池源碼里的一些細節
3、能講下你對 MySQL MVCC 的理解嗎?
我分別講了一下 RR 和 RC 隔離級別的實現原理有哪些不同
4、MySQL 索引是怎么實現的?
a、分別從性能和實現上講了數組、鏈表、Hash、二叉樹、BTree 為什么不合適
b、詳細講了 B+ Tree 的實現,以及普通索引是如何查找數據的
c、中間提到了節點大小、IO、回表、覆蓋索引等概念
5、講講 Redis 是怎么用的?
a、講了分布式鎖原理
b、講了 Redis String 的底層實現
c、講了 Redis ZSet 的實現,詳細講了跳表結合 Hash 是如何提升效率的
6、RecketMQ 的消息堆積如何解決?
a、Producer 端:上游發消息速度過快,可以減少消息的發送頻率
b、Consumer端:下游消費不過來,可以擴容來提高消費速度
c、Broker 端:內存是否夠大?如果 Page Cache 夠大的話,可以提高 Consumer 拉消息的性能
一面小結:
當我答完第一個 JVM 問題時,面試官就說這輪我過了,說我這塊研究很深入。
所以,我覺得面試技巧很重要。面試前我就考慮到了如何展現自己的優勢,在自我介紹時就會把自己擅長的部分說出來。
另外,一般一面考察的點有:JVM、JDK 並發包/集合類、Redis、MySQL、MQ、RPC。
02 第二輪技術面:阿里P7面試官
阿里二面問的技術問題並不是很多,更多的是問業務場景和解決方案。
后來私底下問一面面試官,他說因為一面已經全方面考察技術了,所以認為我技術方面是 OK 的,就不會作為主要的考察方向。
1、講下項目里的限流策略怎么做的?
a、用 Redis 做的分布式限流
b、滑動窗口/漏斗/令牌桶,三種限流算法對比
c、解釋了下為什么沒有用其他限流組件
2、講下簡歷中的秒殺項目怎么做的?
a、CDN:靜態數據緩存
b、緩存:上層抗住流量
c、限流:防止應用掛掉
d、答題驗證碼:削峰
e、MQ:異步/削峰/解耦
f、風控、接口冪等:防刷
g、分庫分表:減輕 DB 壓力
3、如果 Redis 掛了一台怎么辦?
4、如果 RocketMQ 掛了怎么辦?
5、RocketMQ 重復消費了怎么辦?
6、RocketMQ 為什么會重復消費?講下 RocketMQ 造成重復消費的底層實現原理?
7、MQ 會丟消息嗎?如何保證不丟?
8、問了很多業務方面的細節
9、在阿里伯樂系統,手寫算法題
10、問了下面試官具體的工作內容和團隊氛圍
二面小結:
項目以及業務都會深入考察,這塊一定要好好准備,一面過的人很多,二面掛的人很多。
二面一般都是入職后帶你的師兄,如果你業務不精通技術好也不一定能過,因為終究還是要干活的。
03 第三輪技術面:阿里P8面試官
主管面考察的范圍就更廣了:
1、講下在團隊里的角色
2、講下之前的經歷
3、講下近期做的比較核心的工作(二面項目有關的東西又講了一遍)
4、講下有哪些做得好和做得不好的地方?
5、如果流量放大 10倍,100倍怎么辦?
6、分庫分表怎么做的,講下數據遷移方案
7、講一下你做的 JVM 調優
8、聊一下 Redis 性能問題
9、面試官講了一下團隊的業務情況,以及進去后可能要做的具體工作
三面小結:
還是以項目為主,但問題會更深入。上面大部分問題,我都花了很多心思總結,匯總到了自己的筆記里,而且面試前反復看過很多次,從而保證我在面試過程中能夠講清楚細節。
04 第四輪交叉面:阿里P8面試官
主管級別的交叉面,也是一個 P8 面試官。
我也不知道為什么會有這一輪,問的問題跟 2 面、3 面差不多,這里就不展開了。
05 第五輪技術面:阿里P9面試官
1、介紹工作經歷
2、介紹項目以及項目里的角色
3、講下項目中遇到的困難是如何解決的
4、一道實際需求的設計題:高並發場景,當用戶下單(20元)時,會提示用戶花 10 元買一個會員,同時送 4 張 6 元的優惠券,本次就可以使用。該接口如何實現?需要考慮各方失敗的情況
最后一道設計題,我和面試官討論了將近 30 分鍾,主要考查高並發場景下的設計能力。
面試官會關注:設計方案的合理性以及完整性,如果某個環節出問題了怎么保證高可用?會不會有丟數據的風險?數據一致性怎么保障?如果流量很大性能如何保證?
五面小結:
主要考察設計能力以及對項目的整體把握,不但宏觀層面要做好架構設計,細節上的實現也會死摳到底。
不論是技術的深度和廣度,甚至臨場分析問題、解決問題的能力都有考察,這些都需要平時的技術積累。
06 第六輪HR面
1、介紹履歷背景
2、介紹工作內容以及承擔的角色
3、談談項目里的高並發場景怎么解決的
4、推進項目的過程中遇到了問題怎么辦
5、同事怎么評價你
六面小結:
主要考察的是思考能力和思維方式、溝通、協作、配合團隊、做事結果導向等能力。另外,阿里 HR 也是會問技術問題的。
個人感悟
1、基礎一定要扎實
基礎不牢地動山搖,這一年的准備,基礎知識通過查漏補缺提升了很多。但也發現了諸多不足,未來還需繼續積累。
2、養成良好的習慣,堅持學習
開發這行內卷太嚴重了,年輕的時候一定要養成學習的習慣。如果在小公司做的是沒挑戰的事情,還忙得沒時間學習,建議趁早換一份能帶來成長的工作。
3、給自己定一個目標
做事情一定要定一個目標,只要你信念夠強,它就會一直指引着你前進。
不然經歷過一天疲憊的工作后,下班再繼續學習這件事是堅持不下來的。
4、給自己制定詳細的學習計划
兩個月啃下一個主流技術棧,1 年下來差不多也能啃完 6 塊硬骨頭,這將是你未來面試的兵器庫,十八般武藝不說樣樣精通,隨便挑幾個跟面試官撈一個小時應該不在話下!
5、夢想並非遙不可及
我一直把進阿里當做自己的夢想,這五年來一步一個腳印,中間不曾有過任何一次放棄。
剛畢業那會,被無數家公司拒絕過,但這並沒有勸退我,感謝當時鼓勵我的同學。
工作幾年后,也被資深同事嘲諷我不知天高地厚,但這並沒有勸退我,感謝當時勸我用最高標准要求自己、並相信自己的網友。
在不斷提升自己技術深度的過程中,各種深不可測的源碼、框架讓我抓狂,但這也沒有勸退我,感謝每個指點過我的老師。
最后,感謝一路走來所有幫助過我的朋友們!祝大家都有一個美好的未來!
作者簡介:985碩士,前亞馬遜工程師,現58轉轉技術總監
歡迎掃描下方的二維碼,關注我的個人公眾號:武哥漫談IT,精彩原創不斷!