學歷一般,但終獲阿里 Offer!
大家好,我是二哥呀!
去年的這個時候,有個朋友邀請我去阿里,然后,,,,,,我不假思索地就拒絕了。

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

記住一句很“粗暴”的話,偉大的牛逼之前總是傻逼式的堅持,是雞湯也好,是鼓勵也好,我們任何人都應該像讀者茶杯說的那樣:
夯實基礎 堅持學習 確定目標 制定計劃
夢想終究會照進現(xiàn)實,加油~
推薦閱讀:
