一個學渣的阿里之路

前言

最近有些朋友在面試阿里,加上 Java-Interview 項目的緣由也有小夥伴和我討論,近期也在負責部門的招聘,這讓我想起年初那段長達三個月的奇葩面試經歷🤣。java

原本沒想拿出來講的,畢竟最後也沒成。git

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

固然最重要的是這段時間的查漏補缺也讓本身精進很多。面試

先交代下背景吧:redis

從去年 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 是開發者的一張名片,積極參與開源項目能夠和全球大佬頭腦風暴,而且在面試過程當中絕對是一個加分利器。
  • 面試官通常最後都會問你有什麼要問個人?千萬不要問一些公司福利待遇之類的問題。能夠問下本次面試的表現?還有哪些須要完善的?從而知道本身答得如何也能補全本身。

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

因禍得福焉知非福

我就是個例子,雖然最後沒能去成阿里,如今在公司也是一個部門的技術負責人,在咱們城市還有個窩,舒適的家,和女友一塊兒爲想要的生活努力奮鬥。

歡迎關注做者公衆號於我交流🤗。

相關文章
相關標籤/搜索