面經(jīng):我是如何拿到螞蟻 offer 的?
一直堅守,從未放棄。

萌芽
我大學(xué)學(xué)的并非計算機,學(xué)的是機械工程,課程僅接觸過匯編語言以及一點 C 語言,當(dāng)時也算有一點點計算機編程基礎(chǔ)吧,我一點都不喜歡這個專業(yè),除了上單片機匯編課程時比較感興趣。
機械這個專業(yè)我不但不喜歡,還完全看不到未來,像一灘死水,自己就像一個溫水里的青蛙,逐漸地死去。
還好在死去前的一刻我終于想清楚了,轉(zhuǎn)行!
無論如何,我也要丟掉「專業(yè)」這個沉重的包袱,跟這個天坑的專業(yè)說再也不見。
我不去趨于平庸,并委屈求全地度過年輕的歲月,人生本就應(yīng)該去追尋源于內(nèi)心真實的自己。
記得剛轉(zhuǎn)行那會,由于自己的基礎(chǔ)還很薄弱,到處碰壁,畢業(yè)之后就遇到人生低谷。
那時我找了一家愿意收留我的小公司開始做起,那家小公司比較年輕,用的技術(shù)都算比較前沿,沒有歷史的包袱,我從職業(yè)生涯一開始就接觸到微服務(wù)架構(gòu)的相關(guān)項目,以至于在以后的工作中對我產(chǎn)生啟蒙的思想,在此感恩。
深知自己的起點低,如何走出這個低谷?
在業(yè)余期間,我一刻都沒有停止過學(xué)習(xí),一直秉承著“今天最好的表現(xiàn),是明天最低的要求”來嚴(yán)格要求自己,我一直都相信自己,相信只要努力,以前失去的一定會回來的。
在業(yè)余學(xué)習(xí)期間,我也從 GitHub 上面了解過很多優(yōu)秀的開源項目,其中阿里的開源項目居多,當(dāng)時感覺阿里的技術(shù)真的很牛逼。
因此我也開始慢慢地去了解這家公司,阿里夢從那時候開始萌芽,我當(dāng)時給自己定下目標(biāo),將來一定要進(jìn)阿里。
過程
有了目標(biāo)之后,只剩下過程了,在實現(xiàn)目標(biāo)的過程中,我一直堅持著做以下的事情。
1、學(xué)會總結(jié)
寫技術(shù)博客對于一個程序員來說,在成長道路上面是非常有幫助的,特別是對于剛?cè)胄械某绦騿T來說,因此,我在 17 年初的時候就通過 GitHub Pages 搭建了自己的博客,把自己的學(xué)習(xí)和工作實踐用一篇篇文章記錄下。
事實證明,寫博客的習(xí)慣讓我養(yǎng)成了總結(jié)的習(xí)慣,同時還加深了每個知識點的理解深度,強化了我對每個知識點的記憶,以至于到現(xiàn)在我每接觸一個新的知識點,都會用一篇完整的文章將其記錄下來,否則感覺自己沒學(xué)過一樣。
正所謂好記性不如爛筆頭,寫博客也算是一種記筆記的方式,程序員每天都需要接觸很多新的知識,當(dāng)你再回頭看時,基本不可能把所有知識點都很完整地回憶一遍,這時候你翻看一下自己的博客,就能夠迅速幫助自己找回感覺。
2、窺探源碼
在這個過程中,我保持著閱讀框架源碼的習(xí)慣。
很多時候我會帶著目的去一探究竟,有時候為了解決一個 Bug,有時候抱著學(xué)習(xí)目的嘗試去了解它們內(nèi)部構(gòu)造與設(shè)計原理,并借鑒到工作中。
我在平時工作中用到的很多優(yōu)秀設(shè)計,很多時候會借鑒相關(guān)優(yōu)秀框架的設(shè)計。
閱讀源碼也是能夠 “知其然知其所以然”的最好途徑。
我這個人就是有個特點,只要我使用過的某些技術(shù),一定會想盡辦法搞懂它的底層原理是怎么實現(xiàn)的,通過帶著目的不斷尋根問底,我對一些底層技術(shù)有了更加深刻的理解。
3、迎接挑戰(zhàn)
當(dāng)你覺得難的時候,就是成長的時候。
我在這個過程中,我不斷地接受過很多挑戰(zhàn),在迎接這些挑戰(zhàn)的過程中,我得到了巨大的成長。
記得第一次設(shè)計統(tǒng)一支付平臺,我運用所學(xué)的設(shè)計模式,成功對眾多第三方支付平臺接口進(jìn)行統(tǒng)一,且具有優(yōu)秀的擴(kuò)展性,這對我的編碼水平有了一次巨大的提升。
在推行自動化部署運維過程中,嘗試設(shè)計一套基于 Jenkins Pipeline 和 Docker 的自動化部署系統(tǒng),讓我對容器編排與自動化運維有了一個系統(tǒng)性的認(rèn)知。
從 0 到 1 學(xué)會 Kafka 并且負(fù)責(zé)過千億級 Kafka 消息集群的維護(hù)與技術(shù)支持,在這個過程中提升了我解決問題的能力。
基于 Netty 和 K8s Operator 定制化開發(fā)了一套緩存服務(wù)平臺。
當(dāng)時接到需要使用 K8s Operator 作為緩存平臺底層技術(shù)支持時,我是一臉懵逼的,我當(dāng)時根本不知道這玩意是什么,而且網(wǎng)上資料不多且魚龍混雜。
只能憑借著一腔熱血,在 GitHub 上面尋找一些相關(guān)的開源項目,了解它們的實現(xiàn)。
通過不斷的實踐,終于實現(xiàn)了這個需求,在這個過程中提升了我對架構(gòu)設(shè)計的能力,以及對項目整體把控的能力。
因此,我們遇到困難千萬不要退縮,要學(xué)會如何解決它,當(dāng)你解決它之后,你會得到巨大的成長。
面試
接下來我就憑借記憶大概捋一下關(guān)于這次面試的過程,每個候選者的面試都有所不同,僅做參考,大家就當(dāng)故事來看即可。
1、一面
在臨近春節(jié)放假前,我接到一位大佬的面試邀請,當(dāng)時我的情況是不準(zhǔn)備面試的,原因是之前經(jīng)歷很曲折,我需要有一個沉淀階段。
但是當(dāng)時了解過這個團(tuán)隊所做的事情之后,我還是決定要試一下,于是就約了面試。
自我介紹完后,面試官首先就跟我講述他們團(tuán)隊做的事情,以及團(tuán)隊負(fù)責(zé)的項目公司架構(gòu)中所處的位置情況一一跟我介紹了一遍。
我覺得阿里的面試官這點做得非常棒,點個贊。
接著面試官問了我所做的項目情況,我把在中通做過的項目詳細(xì)地跟面試官介紹了一遍,內(nèi)容包括項目背景、項目架構(gòu)設(shè)計、技術(shù)實現(xiàn)細(xì)節(jié)、遇到的挑戰(zhàn)如何解決的。
接著面試官就項目的某一個技術(shù)點進(jìn)行深挖,目的是為了從項目中尋找你的技術(shù)深度和廣度。
如果你對技術(shù)的理解不夠深度,或者是提前背的,面試官會很容易發(fā)現(xiàn)。
因此,在日常工作中,你需要對項目所用到的技術(shù)進(jìn)行融會貫通。
在項目中穿插著問完問題之后,會給你出一些場景設(shè)計題,這些場景設(shè)計題一般是所在團(tuán)隊所遇到的實際問題出發(fā)的,這一點非常考驗一個人在平時工作的累積。
在這部分內(nèi)容中,還會夾雜著一些通用的解決方案讓你去思考,比如分布式鎖、分布式事務(wù)、冪等處理、緩存失效策略、流量削峰等等。
從這部分內(nèi)容面試官就可以看出你的技術(shù)壁壘有多深了,而且這部分對于一面的評價占比非常高,因為阿里的面試是非常注重從實際場景中去解決問題的能力。
最后就會考察你的知識點。
Java 的 JUC 并發(fā)包的知識點尤為重要,因此這部分內(nèi)容需要重點去梳理,比如 CAS 和 AQS 原理、基于 AQS 實現(xiàn)的各種鎖機制(公平、非公平)、線程、線程池運行原理等等。
JVM 方面會問比較實際的調(diào)優(yōu)場景,以及會問常用的垃圾回收器的機制以及優(yōu)缺點等等。
還有一些數(shù)據(jù)庫、Spring 等等后端通用框架的原理需要熟悉。
這部分內(nèi)容主要考察你的基礎(chǔ)知識掌握得是否牢固。
從以上面試內(nèi)容來看,阿里的面試官非常注重從實際出發(fā)考察一個人的能力,而且考察范圍非常廣,每個候選人的側(cè)重點或許都有所不同。
從我的面試經(jīng)歷給大家一個參考。
2、二面
面完一面后不久,就接到一面通過的消息,流程非常快,然后和面試官的二面約在了第二天。
二面前一個晚上失眠了,因為太緊張了,夢想的征程中每走一步都會觸動我的神經(jīng)。
中午早早準(zhǔn)備好,在面試前深深吸了幾口氣,讓自己沉著冷靜不慌張,不久之后接到了面試官的視頻面試。
自我介紹完之后,面試官讓我從職業(yè)生涯開始介紹自己在每一家公司的學(xué)習(xí)和工作情況。
因為我生涯前期的經(jīng)歷非常坎坷與曲折,經(jīng)歷過幾家小公司。
我跟面試官詳細(xì)地描述了我當(dāng)前整個職業(yè)生涯的歷程,其中我重點突出了我在每家公司得到的成長情況,其中包括工作內(nèi)容,遇到過的挑戰(zhàn)并且是如何解決的,在技術(shù)上的沉淀如何。
由于我的職業(yè)生涯都在不斷地學(xué)習(xí),因此這部分內(nèi)容很好回答,把自己的經(jīng)歷說一遍即可。
這部分內(nèi)容面試官主要是考察經(jīng)歷的每家公司有沒有得到成長,面試官雖然很在意頻繁跳槽,但他們更在意的是你在這個過程中有沒有得到技術(shù)上的累積。
接著面試官重點問了我一個比較拿手的項目,他會從整個項目的背景、項目架構(gòu)設(shè)計方面進(jìn)行深挖,這部分內(nèi)容相比一面會更加廣,會抓住項目每個細(xì)節(jié)進(jìn)行盤問。
當(dāng)時由于項目是由我從 0 到 1 進(jìn)行設(shè)計的,因此這部分的內(nèi)容我還是能夠給到面試官想要的答案。
這部分內(nèi)容需要對自己拿手的項目同時擁有宏觀架構(gòu)與微觀技術(shù)細(xì)節(jié)方面足夠的熟悉。
接著面試官給我出了一些高并發(fā)的場景解決題,這部分跟一面稍微有些不同,這些場景一般來說會比較廣,通常業(yè)界已經(jīng)有相關(guān)的解決方案了,這部分會重點考察你對技術(shù)方面的廣度、深度以及臨場解決問題的能力,同時也能看出你平時對技術(shù)的研究情況。
3、三面
二面完過了不久,就收到了二面過了的通知(我這個流程相對來說比較快)。
三面前即將面試時,我已經(jīng)在家里,我在房間里面不斷進(jìn)行深呼吸,我知道一旦這一面過了,我離阿里就非常非常近了,離夢想越近,就越緊張。
自我介紹完之后,面試官就簡單問了我個人的一些基本情況,包括學(xué)校、專業(yè)情況,因為我學(xué)校是一間民辦獨立學(xué)院,面試官可能沒聽過,而且我是非科班出身的,因此面試官需要對這方面稍作一番了解。
接著還是問了我在每家公司的經(jīng)歷以及成長情況,這也就更加印證了一個觀點,阿里面試官非常在意你的過往經(jīng)歷,但同樣很注重你在過往經(jīng)歷中的成長情況。
這方面我的回答大體和二面時差不多。由于我的過往經(jīng)歷稍微多些,因此面試官還補充了如果我進(jìn)入阿里,我想要得到的收獲,以及以后會遇到什么原因離開阿里,這個每個人的情況不同都會有不同的答案。
接著問了我之前幾次面試阿里沒過的原因是什么,以及后面你是如何克服這些問題的。
在這個問題上,如果你之前有面試過阿里,過往的面試評價也體現(xiàn)在內(nèi)部招聘系統(tǒng)中,由于我很早之前面試過了,因此面試官主要是想知道我沒過之后的這段日子里,我做了哪些方面的提升。
接著還是會問到我的項目,大體上也會跟二面差不多,但會站在更高更廣的角度去考察你。
- 比如你的項目類型,開源項目也有很多類似的解決方案,為什么還要自己重新寫一個?
- 又比如通過什么指標(biāo)去衡量你這個項目是否成功?
- 項目在推廣過程中會遇到什么問題,你是如何解決的?
- 在跨部門合作過程中,你怎么去協(xié)調(diào)溝通?
在這方面內(nèi)容上,面試官更多地想要看到你在項目推進(jìn)過程中的軟實力。
最后面試官會問下自己的不足以及優(yōu)缺點,從這問題出發(fā)點去了解你是一個怎樣的人。
三面時我已經(jīng)在家里了,當(dāng)天晚上收到了三面過了的消息,當(dāng)時剛好要吃晚飯。
得知三面通過后,我把自己關(guān)在房間里,忍不住激動地哭了。
4、HR 面
HR 面是春節(jié)過后了,同樣地,HR 面之前我也不斷進(jìn)行深呼吸,我知道只要通過這一面,我就幾乎雙腳踏進(jìn)阿里了,我努力讓自己保持鎮(zhèn)定,但當(dāng)時還是有些緊張。
在自我介紹完之后,HR 會同樣問了我過往經(jīng)歷的一些情況,這方面的內(nèi)容大體跟前幾面差不多。
由于我之前參與過 Seata 開源社區(qū)相關(guān)建設(shè)工作,HR 問了我參加開源項目的情況,具體是如何參與到開源項目中,以及在參與過程中得到了哪方面的成長等等。
這方面內(nèi)容 HR 主要是想要了解下你簡歷比較出彩的一些經(jīng)歷情況。
接著 HR 還會跟你聊聊項目方面的問題,對,你沒看錯,HR 小姐姐會跟我聊項目。
他主要問了我在這個項目中所處的位置,有沒有帶人,在過程中有沒有覺得非常難的地方。
我就從項目立項開始講起,把自己一路上遇到的一些困難以及解決方案都詳細(xì)地說了一遍,同時還講到自己是如何跨部門協(xié)作讓項目更順利進(jìn)行。
雖然都是問項目詳情,但是和技術(shù)面問到的問題所站在的角度是不同的,HR 主要是通過你對項目的描述來考察你對問題的思考能力、溝通與協(xié)作能力,以及遇到問題的解決方式等等。
5、關(guān)于阿里筆試題
我的面試流程稍微有些特殊,通常來說筆試題會安排在一面或者二面,這次面試我沒有做筆試題,因此我在 HR 面完之后補了一輪筆試題。
題目是從阿里內(nèi)部題庫出的,大體上會出兩道題目,一道是實現(xiàn)一個功能,一道是算法題。
具體是什么題目就不方便透露了,通過這次筆試的體驗,我覺得阿里的筆試會比較注重實際場景,而不是從 leetcode 原題搬一道給你做。
以上就是我本次面試的大體內(nèi)容了,也許會有些遺忘的點,但大體上就是以上的內(nèi)容了。
阿里的面試內(nèi)容非常注重實際,因此想要在面試阿里過程中機會更大,就需要在平時的工作和學(xué)習(xí)中不斷地沉淀,靠臨時抱佛腳很容易被面試官看穿。
感想
關(guān)于這次面試的體驗,我得出了以下的一些個人感想。
1、注重基礎(chǔ)、深挖項目
阿里的面試非常注重實際以及基礎(chǔ),從一面就能夠看出來,所以在平時中需要注意知識點的總結(jié)與沉淀,要學(xué)會記錄,同時在做項目的過程中,多一些思考,同時要站在宏觀架構(gòu)與微觀技術(shù)實現(xiàn)去看待每一個功能背后的邏輯。
- 2、每天保持學(xué)習(xí)
昨天最好的表現(xiàn)是今天最低的要求,這也是我從職業(yè)生涯開始就對自己的要求,時刻提醒自己要每天都有所進(jìn)步。
- 3、表達(dá)能力很重要
表達(dá)能力在面試過程中實在是太重要了,假如你的能力不錯,但你如何在短短的 1 個小時內(nèi),把自己最好的一面展示出來?我見過很多人能力很不錯,但是表達(dá)能力欠缺,這會在面試中很吃虧。
- 4、向優(yōu)秀的人看齊
在我的職業(yè)生涯中,我遇到過很多優(yōu)秀的人,他們都是我的學(xué)習(xí)榜樣,我會不斷學(xué)習(xí)他們的優(yōu)點。
- 5、保持熱愛
從我大學(xué)開始到現(xiàn)在,你們是能夠看出來,我對編程是熱愛的,也是因為這份熱愛,我才能一直堅持到現(xiàn)在。
- 6、當(dāng)你覺得難的時候,就是成長的時候
到目前為止,我在職業(yè)生涯過程中遇到過非常多的挑戰(zhàn),不要退縮,要學(xué)會如何解決它,當(dāng)你解決它之后,你會得到巨大的成長。
- 7、過程永遠(yuǎn)是最美好的,特別是實現(xiàn)目標(biāo)的那一瞬間彌足珍貴
奮斗的過程往往是最美好的,其中最難忘的就是離夢想越來越近的過程,要珍惜實現(xiàn)目標(biāo)那一瞬間的興奮,因為這一瞬間總是短暫的。
人的一生有很多階段性的目標(biāo),比如中考、高考,每當(dāng)實現(xiàn)一個目標(biāo)的那一瞬間,相信大家都會很興奮,興奮之余更多的是要思考下一個階段所面臨的挑戰(zhàn)。
因為人生的道路總是充滿崎嶇與挑戰(zhàn),當(dāng)你實現(xiàn)了某個目標(biāo)之后,你不能原地踏步自我滿足,你需要比以前付出更多的努力去迎接未來新的挑戰(zhàn)。
寫在最后
在中通我和一位前端同事,每天晚上跟他都肝到很晚,經(jīng)常跟他一路聊著回宿舍。
我們的宿舍都在 11 層,有時候聊得盡興,直接爬樓梯。
我們聊得最多的就是關(guān)于將來要一起進(jìn)大廠的目標(biāo)以及人生規(guī)劃,我們經(jīng)常相互鼓勵對方,后來他比我先去了某大廠,而我隨后進(jìn)了螞蟻。
也算是實現(xiàn)了當(dāng)初我們在爬樓梯時吹過的牛逼。
在我即將入職螞蟻之前,搬家的時候特意叫他回來幫我一起搬,順便一同再爬一次樓梯,如今我們都實現(xiàn)了各自的目標(biāo),不禁感慨萬千。
希望借此文給一些正在努力中的小伙伴一些正能量與指導(dǎo)。
why哥說
這篇文章的作者是公眾號[后端進(jìn)階]的號主,文末[閱讀原文]可直達(dá)該號。
在他的號里面,這篇文章的關(guān)鍵詞是:

去年九月份的時候我們就加上了好友。
而他加我的原因竟然是......

后來,發(fā)現(xiàn)他也是一個號主,寫了很多的技術(shù)文章,都很硬核,妥妥的技術(shù)大佬。
昨天看到他發(fā)這篇文章的時候其實我一點也不意外,這樣的大佬去阿里不是很正常的事情嗎?
但是細(xì)細(xì)讀下來,我發(fā)現(xiàn)他居然不是科班出身、居然是自學(xué)的、居然前幾年的履歷都是一些小公司、居然已經(jīng)面試過好幾次阿里都沒有過。
居然他也是 2016 年畢業(yè)的本科生:

從這篇文章中我讀到了他對于技術(shù)的執(zhí)著、對阿里的渴望、對過去的感恩、對未來的憧憬。
不知道為什么,竟然有一絲絲小感動。
夢想,一個多么俗氣的詞匯啊。
但是夢想成真,在這個故事里面就是一個非常美好的詞匯了。
這是一個關(guān)于“有志者,事竟成,破釜沉舟,百二秦關(guān)終屬楚”的故事。
這是一個關(guān)于“苦心人,天不負(fù),臥薪嘗膽,三千越甲可吞吳”的故事。
逆襲,這樣的故事還有很多很多。
也許,下一個,就是你了。
加油干,打工人!
另外昨天我寫的一篇原創(chuàng)文章,閱讀量創(chuàng)歷史新低,咋回事呢?
是我不夠標(biāo)題黨了嗎?
要不去瞅一眼,給我拉拉閱讀量?
