歡迎光臨
每天分享高質量文章

一個學渣的阿裡之路

來自:crossoverJie(微訊號:crossoverJie)

前言

最近有些朋友在面試阿裡,加上 Java-Interview 專案的原因也有小夥伴和我討論,近期也在負責部門的招聘,這讓我想起年初那段長達三個月的奇葩面試經歷?。

本來沒想拿出來說的,畢竟最後也沒成。

但由於那幾個月的經歷讓我瞭解到了大廠的工作方式、對候選同學的考察重點以及面試官的套路等都有了全新的認識。

當然最重要的是這段時間的查漏補缺也讓自己精進不少。

先交代下背景吧:

從去年 12 月到今年三月底,我前前後後面了阿裡三個部門。

其中兩個部門透過了技術面試,還有一個跪在了三面。

光看結果還不錯,但整個流程堪稱曲折。

下麵我會儘量描述流程以及大致的面試題目大綱,希望對想要跳槽、正在面試的同學帶來點靈感,幫助可能談不上,但啟發還是能有。

以下內容較長,請再次備好瓜子板凳。

A 部門

首先是第一次機會,去年 12 月份有位大佬加我,後來才知道是一個部門的技術 Leader 在網上看到我的部落格,問我想不想來阿裡試試。

這時距離上次面阿裡也過去一年多了,也想看看現在幾斤幾兩,於是便同意了。

在推薦一週之後收到了杭州打來的電話,說來也巧,那時候我正在機場候機,距離登記還有大概一個小時,心想時間肯定夠了。

那是我時隔一年多第一次面試,還是在機場這樣嘈雜的環境裡。多多少少還是有些緊張。

一面

以下是我印象比較深刻的內容:

面試官:

談談你做過專案中印象較深或自認為做的比較好的地方?

博主:

我覺得我在 XX 做的不錯,用了 XX 需求實現 XX 功能,效能提高了 N 倍。

面試官:

你說使用到了 AOP ,能談談它的實現原理嘛?

博主:

它是依靠動態代理實現的,動態代理又分為 JDK 自身的以及 CGLIB 。。。。

面試官:

嗯,能說說他們的不同及優缺點嘛?

博主:

JDK 是基於介面實現,而 CGLIB 繼承代理類。。。

就是這樣會一直問下去,如果聊的差不多了就開始問一些零散的問題:

  • JMM 記憶體模型,如何劃分的?分別儲存什麼內容?執行緒安全與否?

  • 類載入機制,談到雙親委派模型後會問到哪些違反了雙親委派模型?為什麼?為什麼要雙親委派?好處是什麼?

  • 平時怎麼使用多執行緒?有哪些好處?執行緒池的幾個核心引數的意義?

  • 執行緒間通訊的方式?

  • HashMap 的原理?當談到執行緒不安全時自然引申出 ConcurrentHashMap ,它的實現原理?

  • 分庫分表如何設計?垂直拆分、水平拆分?

  • 業務 ID 的生成規則,有哪些方式?

  • SQL 調優?平時使用資料庫有哪些註意點?

  • 當一個應用啟動緩慢如何最佳化?

大概是以上這些,當聊到倒數第二個時我已經登機了。最後不得不提前結束通話,結束之前告訴我之後會換一個同事和我溝通,聽到這樣的回覆一面應該是過了,後面也確實證實了這點。

二面

大概過了一週,二面如期而至。

我聽聲音很熟,就嘗試問下是不是之前一面的面試官,結果真是。

由於二面的面試官臨時有事所以他來替一下。於是我趕緊問他能否把之前答的不好的再說說?的到了肯定的答覆後開始了我的表演。

有了第一次的經驗這一次自然也輕車熟路,原本感覺一切盡在掌握卻被告知需要筆試突然被激醒。

筆試是一個線上平臺,需要在網頁中寫程式碼,會有一個明確的題目:

從一個日誌檔案中根據關鍵字讀取日誌,記錄出現的次數,最後按照次數排序列印。

在這過程中切記要和麵試官多多交流,因為筆試有時間限制,別到最後發現題目理解錯了,這就和高考作文寫完發現方向錯了一樣要命。

而且在溝透過程中體現出你解題的思路,即使最終結果不對,但說不定思考的過程很符合面試官的胃口哦。這也和今年的高考改捲一樣;過程正確得高分,只有結果得低分。

三面

又過了差不多一週的時間接到了三面的電話,一般到了三面會是技術 Leader 之類的角色。

這個過程中不會過多強調技術細節,更多的考察軟體能,比如團隊協作、學習能力等。

但我記得也問了以下一些技術問題:

  • 談談你所理解的 HTTP 協議?

  • 對 TCP 的理解?三次握手?滑動視窗?

  • 基本演演算法,Base64 等。

  • Java 記憶體模型,Happen Before 的理解。

一週之後我接到了 HR 助理的電話約了和 HRBP 以及產品技術負責人的影片面試。

但是我卻沒有面下去,具體原因得往下看。

B 部門

在 A 部門三面完成後,我等了差不多一星期,這期間我卻收到了一封郵件。

大概內容是他在 GitHub 上看到的我,他們的技術總監對我很感興趣(我都不敢相信我的眼鏡),問我想不想來阿裡試試。

我對比了 A B 部門的區別發現 B 部門在做的事情上確實更加有誘惑力,之後我表達了有一個面試正在流程中的顧慮;對方表示可以私下和我快速的進行三面,如果一切沒問題再交由我自行選擇。至少對雙方都是一個雙贏嘛。

我想也不虧,並且對方很有誠意,就答應試試;於是便有了下麵的面試:

一面

面試官:

對 Java 鎖的理解?

博主:

我談到了 synchronize,Lock 介面的應用。

面試官:

他們兩者的區別以及優缺點呢?

博主:

synchronize 在 JDK1.6 之前稱為重量鎖,是透過進出物件監視器來實現同步的;1.6 之後做了 XX 最佳化。。。

ReentrantLock 是利用了一個巧妙資料結構實現的,並且加鎖解鎖是顯式的。。。

之後又引申到分散式鎖,光這塊就聊了差不多半個小時。

之後又聊到了我的開源專案:

  • 是如何想做這個專案的?

  • 已經有一些關註了後續是如何規劃的?

  • 你今後的學習計劃是什麼?

  • 平時看哪些書?

之後技術聊的不是很多,但對於個人發展卻聊了不少。

關於鎖相關的內容可以參考這裡:ReentrantLock 實現原理 synchronize 關鍵字原理

二面

隔了差不多一天的時間,二面很快就來了。

內容不是很多:

聊完之後表示第二天應該會有三面。

三面

三面的面試官應該是之前郵件中提到的那位總監大佬,以前應該也是一線的技術大牛;聊的問題不是很多:

筆試

本以為技術面試完了,結果後面告知所有的面試流程都得有筆試了,於是又參與了一次筆試:

交替列印奇偶數

這個相對比較簡單,基於鎖、等待喚醒機制都是可以的。最後也告知筆試透過。

之後在推薦我的那位大佬的幫助下戲劇般的透過了整個技術輪(真的很感謝他的認可),並且得知這個訊息是在我剛好和 A 部門約好影片面試時間之後。

也就意味著我必須拒掉一個部門!

沒看錯,是我要拒掉一個。這對我來說確實太難了,我壓根沒想過還有兩個機會擺在我面前。

最後憑著個人的愛好以及 B 部門的熱情我很不好意思的拒掉了 A 部門。。。

HR 面

在面這之前我從來沒有面過這樣大廠的 HR 流程,於是瘋狂搜索,希望能彌補點經驗。

也許這就是樂極生悲吧,我確實猜中了 HR 問的大部分問題,但遺憾的是最終依然沒能透過。

後來我在想如果我沒有拒掉 A ,會不會結局不一樣了?

但現實就是如此,沒有那麼多假設,並且每個人也得為自己的選擇負責!

大概的問題是:

  • 為什麼想來阿裡?

  • 個人做的最成功最有挑戰的事情是什麼?

  • 工作中最難忘的經歷?

  • 對加入我們團隊有何期待?

C 部門

HR 這關被 Pass 之後沒多久我居然又收到了第三個部門的邀約。

說實話當時我是拒絕的,之前經歷了將近兩個月的時間卻沒能如願我內心是崩潰的。

我向聯絡我的大佬表達了我的想法,他倒覺得我最後被 pass 的原因是個小問題,再嘗試的話會有很大的機率透過。

我把這事給朋友說了之後也支援我再試試,反正也沒啥損失嘛,而且面試的狀態還在。

所以我又被打了雞血,才有了下麵的面試經過:

一面

面試官:

服務化框架的選型和差異?

博主:

一起探討了 SpringCloud、Dubbo、Thrift 的差異,優缺點等。

面試官:

一致性 Hash 演演算法的原理?

博主:

將資料 Hash 之後落到一個 0~2^32-1 構成的一個環上。。。。

面試官:

談談你理解的 Zookeeper?

博主:

作為一個分散式協調器。。。

面試官:

如何處理 MQ 重覆消費?

博主:

業務冪等處理。。。。

面試官:

客戶端負載演演算法?

博主:

輪詢、隨機、一致性 Hash、故障轉移、LRU 等。。

面試官:

long 型別的賦值是否是原子的?

博主:

不是。。。

面試官:

volatile 關鍵字的原理及作用?happen Before?

博主:

可見性、一致性。。

二面

一面之後大概一週的時間接到了二面的電話:

原以為會像之前一樣直接進入筆試,這次上來先簡單聊了下:

  • 談談對微服務的理解,好處以及弊端?

  • 分散式快取的設計?熱點快取?

之後才正式進入筆試流程:

這次主要考察設計能力,其實就是對設計樣式的理解?能否應對後續的擴充套件性。

筆試完了之後也和麵試官交流,原以為會是演演算法之類的測試,後來得知他能看到前幾輪的筆試情況,特地挑的沒有做過的方向。

所以大家也不用刻意去押題,總有你想不到的,平時多積累才是硬道理。

三面

又過了兩周左右,得到 HR 通知;希望能過去杭州參加現場面試。並且阿裡包了來回的機票酒店等。

可見阿裡對人才渴望還是捨得下成本的。

既然都這樣了,就當成一次旅遊所以去了一趟杭州。

現場面的時候有別於其他面試,是由兩個面試官同時參與:

給一個場景,談談你的架構方式。

這就對平時的積累要求較高了。

還有一個印象較深的是:

在網頁上點選一個按鈕到伺服器的整個流程,儘量完整。

其實之前看過,好像是 Google 的一個面試題。

完了之後讓我回去等通知,沒有見到 HR 我就知道涼了,果不其然。

總結

看到這裡的朋友應該都是老鐵了,我也把上文提到的大多數面試題整理在了 GitHub:

廠庫地址:

https://github.com/crossoverJie/Java-Interview

最後總結下這將近四個月的面試心得:

  • 一定要積極的推銷自己,像在 A 部門的三面時,由於基礎答得不是很好;所以最後我表達了自己的態度,對工作、技術的積極性。讓面試官看到你的潛力值得一個 HC 名額。

  • 面試過程中遇到自己的不會的可以主動提出,切不可不懂裝懂,這一問就露餡。可以將面試官引導到自己擅長的領域。比如當時我正好研究了鎖,所以和麵試官一聊就是半小時這就是加分項。

  • 平時要主動積累知識。寫部落格和參與開源專案就是很好的方式。

  • 部落格可以記錄自己踩過的坑,加深印象,而且在寫的過程中可以查漏補缺,最後把整個知識體系鞏固的比較牢固,良好的內容還可以得到意想不到的收穫,比如我第一次面試的機會。

  • GitHub 是開發者的一張名片,積極參與開源專案可以和全球大佬頭腦風暴,並且在面試過程中絕對是一個加分利器。

  • 面試官一般最後都會問你有什麼要問我的?千萬不要問一些公司福利待遇之類的問題。可以問下本次面試的表現?還有哪些需要完善的?從而知道自己答得如何也能補全自己。

還有一點:不要在某次面試失利後否定自己,有時真的不是自己能力不行。這個也講緣分。

塞翁失馬焉知非福

我就是個例子,雖然最後沒能去成阿裡,現在在公司也是一個部門的技術負責人,在我們城市還有個窩,溫馨的家,和女朋友一起為想要的生活努力奮鬥。


●編號738,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

演演算法與資料結構

更多推薦18個技術類公眾微信

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂