GitHub 上万 star 项目大佬的自谦:一个学渣的阿里之路
前言
最近有些朋友在面試阿里,加上 Java-Interview 項(xiàng)目的原因也有小伙伴和我討論,近期也在負(fù)責(zé)部門(mén)的招聘,這讓我想起年初那段長(zhǎng)達(dá)三個(gè)月的奇葩面試經(jīng)歷?。
本來(lái)沒(méi)想拿出來(lái)說(shuō)的,畢竟最后也沒(méi)成。
但由于那幾個(gè)月的經(jīng)歷讓我了解到了大廠的工作方式、對(duì)候選同學(xué)的考察重點(diǎn)以及面試官的套路等都有了全新的認(rèn)識(shí)。
當(dāng)然最重要的是這段時(shí)間的查漏補(bǔ)缺也讓自己精進(jìn)不少。
先交代下背景吧:
從去年 12 月到今年三月底,我前前后后面了阿里三個(gè)部門(mén)。
其中兩個(gè)部門(mén)通過(guò)了技術(shù)面試,還有一個(gè)跪在了三面。
光看結(jié)果還不錯(cuò),但整個(gè)流程堪稱曲折。
下面我會(huì)盡量描述流程以及大致的面試題目大綱,希望對(duì)想要跳槽、正在面試的同學(xué)帶來(lái)點(diǎn)靈感,幫助可能談不上,但啟發(fā)還是能有。
以下內(nèi)容較長(zhǎng),請(qǐng)?jiān)俅蝹浜霉献影宓省?/p>
?
A 部門(mén)
首先是第一次機(jī)會(huì),去年 12 月份有位大佬加我,后來(lái)才知道是一個(gè)部門(mén)的技術(shù) Leader 在網(wǎng)上看到我的博客,問(wèn)我想不想來(lái)阿里試試。
這時(shí)距離上次面阿里也過(guò)去一年多了,也想看看現(xiàn)在幾斤幾兩,于是便同意了。
在推薦一周之后收到了杭州打來(lái)的電話,說(shuō)來(lái)也巧,那時(shí)候我正在機(jī)場(chǎng)候機(jī),距離登記還有大概一個(gè)小時(shí),心想時(shí)間肯定夠了。
那是我時(shí)隔一年多第一次面試,還是在機(jī)場(chǎng)這樣嘈雜的環(huán)境里。多多少少還是有些緊張。
一面
以下是我印象比較深刻的內(nèi)容:
面試官:
談?wù)勀阕鲞^(guò)項(xiàng)目中印象較深或自認(rèn)為做的比較好的地方?
博主:
我覺(jué)得我在 XX 做的不錯(cuò),用了 XX 需求實(shí)現(xiàn) XX 功能,性能提高了 N 倍。
面試官:
你說(shuō)使用到了 AOP ,能談?wù)勊膶?shí)現(xiàn)原理嘛?
博主:
它是依靠動(dòng)態(tài)代理實(shí)現(xiàn)的,動(dòng)態(tài)代理又分為 JDK 自身的以及 CGLIB 。。。。
面試官:
嗯,能說(shuō)說(shuō)他們的不同及優(yōu)缺點(diǎn)嘛?
博主:
JDK 是基于接口實(shí)現(xiàn),而 CGLIB 繼承代理類。。。
就是這樣會(huì)一直問(wèn)下去,如果聊的差不多了就開(kāi)始問(wèn)一些零散的問(wèn)題:
-
JMM 內(nèi)存模型,如何劃分的?分別存儲(chǔ)什么內(nèi)容?線程安全與否?
-
類加載機(jī)制,談到雙親委派模型后會(huì)問(wèn)到哪些違反了雙親委派模型?為什么?為什么要雙親委派?好處是什么?
-
平時(shí)怎么使用多線程?有哪些好處?線程池的幾個(gè)核心參數(shù)的意義?
-
線程間通信的方式?
-
HashMap 的原理?當(dāng)談到線程不安全時(shí)自然引申出 ConcurrentHashMap ,它的實(shí)現(xiàn)原理?
-
分庫(kù)分表如何設(shè)計(jì)?垂直拆分、水平拆分?
-
業(yè)務(wù) ID 的生成規(guī)則,有哪些方式?
-
SQL 調(diào)優(yōu)?平時(shí)使用數(shù)據(jù)庫(kù)有哪些注意點(diǎn)?
-
當(dāng)一個(gè)應(yīng)用啟動(dòng)緩慢如何優(yōu)化?
大概是以上這些,當(dāng)聊到倒數(shù)第二個(gè)時(shí)我已經(jīng)登機(jī)了。最后不得不提前掛斷,結(jié)束之前告訴我之后會(huì)換一個(gè)同事和我溝通,聽(tīng)到這樣的回復(fù)一面應(yīng)該是過(guò)了, 后面也確實(shí)證實(shí)了這點(diǎn)。
二面
大概過(guò)了一周,二面如期而至。
我聽(tīng)聲音很熟,就嘗試問(wèn)下是不是之前一面的面試官,結(jié)果真是。
由于二面的面試官臨時(shí)有事所以他來(lái)替一下。于是我趕緊問(wèn)他能否把之前答的不好的再說(shuō)說(shuō)?得到了肯定的答復(fù)后開(kāi)始了我的表演。
有了第一次的經(jīng)驗(yàn)這一次自然也輕車熟路,原本感覺(jué)一切盡在掌握卻被告知需要筆試突然被激醒。
筆試是一個(gè)在線平臺(tái),需要在網(wǎng)頁(yè)中寫(xiě)代碼,會(huì)有一個(gè)明確的題目:
從一個(gè)日志文件中根據(jù)關(guān)鍵字讀取日志,記錄出現(xiàn)的次數(shù),最后按照次數(shù)排序打印。
在這過(guò)程中切記要和面試官多多交流,因?yàn)楣P試有時(shí)間限制,別到最后發(fā)現(xiàn)題目理解錯(cuò)了,這就和高考作文寫(xiě)完發(fā)現(xiàn)方向錯(cuò)了一樣要命。
而且在溝通過(guò)程中體現(xiàn)出你解題的思路,即使最終結(jié)果不對(duì),但說(shuō)不定思考的過(guò)程很符合面試官的胃口哦。這也和今年的高考改卷一樣;過(guò)程正確得高分,只有結(jié)果得低分。
三面
又過(guò)了差不多一周的時(shí)間接到了三面的電話,一般到了三面會(huì)是技術(shù) Leader 之類的角色。
這個(gè)過(guò)程中不會(huì)過(guò)多強(qiáng)調(diào)技術(shù)細(xì)節(jié),更多的考察軟件能,比如團(tuán)隊(duì)協(xié)作、學(xué)習(xí)能力等。
但我記得也問(wèn)了以下一些技術(shù)問(wèn)題:
-
談?wù)勀闼斫獾?HTTP 協(xié)議?
-
對(duì) TCP 的理解?三次握手?滑動(dòng)窗口?
-
基本算法,Base64 等。
-
Java 內(nèi)存模型,Happen Before 的理解。
一周之后我接到了 HR 助理的電話約了和 HRBP 以及產(chǎn)品技術(shù)負(fù)責(zé)人的視頻面試。
但是我卻沒(méi)有面下去,具體原因得往下看。
?
B 部門(mén)
在 A 部門(mén)三面完成后,我等了差不多一星期,這期間我卻收到了一封郵件。
大概內(nèi)容是他在 GitHub 上看到的我,他們的技術(shù)總監(jiān)對(duì)我很感興趣(我都不敢相信我的眼鏡),問(wèn)我想不想來(lái)阿里試試。
我對(duì)比了 A B 部門(mén)的區(qū)別發(fā)現(xiàn) B 部門(mén)在做的事情上確實(shí)更加有誘惑力,之后我表達(dá)了有一個(gè)面試正在流程中的顧慮;對(duì)方表示可以私下和我快速的進(jìn)行三面,如果一切沒(méi)問(wèn)題再交由我自行選擇。至少對(duì)雙方都是一個(gè)雙贏嘛。
我想也不虧,并且對(duì)方很有誠(chéng)意,就答應(yīng)試試;于是便有了下面的面試:
一面
面試官:
對(duì) Java 鎖的理解?
博主:
我談到了 synchronize,Lock 接口的應(yīng)用。
面試官:
他們兩者的區(qū)別以及優(yōu)缺點(diǎn)呢?
博主:
synchronize 在 JDK1.6 之前稱為重量鎖,是通過(guò)進(jìn)出對(duì)象監(jiān)視器來(lái)實(shí)現(xiàn)同步的;1.6 之后做了 XX 優(yōu)化。。。
而 ReentrantLock 是利用了一個(gè)巧妙數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的,并且加鎖解鎖是顯式的。。。
之后又引申到分布式鎖,光這塊就聊了差不多半個(gè)小時(shí)。
之后又聊到了我的開(kāi)源項(xiàng)目:
-
是如何想做這個(gè)項(xiàng)目的?
-
已經(jīng)有一些關(guān)注了后續(xù)是如何規(guī)劃的?
-
你今后的學(xué)習(xí)計(jì)劃是什么?
-
平時(shí)看哪些書(shū)?
之后技術(shù)聊的不是很多,但對(duì)于個(gè)人發(fā)展卻聊了不少。
關(guān)于鎖相關(guān)的內(nèi)容可以參考這里:ReentrantLock 實(shí)現(xiàn)原理 synchronize 關(guān)鍵字原理
二面
隔了差不多一天的時(shí)間,二面很快就來(lái)了。
內(nèi)容不是很多:
-
線程間通信的多種方式?
-
限流算法?單機(jī)限流?分布式限流?
-
提到了 Guava Cache ,了解它的實(shí)現(xiàn)原理嘛?
-
如何定位一個(gè)線上問(wèn)題?
-
CPU 高負(fù)載?OOM 排查等?
聊完之后表示第二天應(yīng)該會(huì)有三面。
三面
三面的面試官應(yīng)該是之前郵件中提到的那位總監(jiān)大佬,以前應(yīng)該也是一線的技術(shù)大牛;聊的問(wèn)題不是很多:
-
談?wù)剬?duì) Netty 的理解?
-
Netty 的線程模型?
-
寫(xiě)一個(gè) LRU 緩存。
筆試
本以為技術(shù)面試完了,結(jié)果后面告知所有的面試流程都得有筆試了,于是又參與了一次筆試:
交替打印奇偶數(shù)
這個(gè)相對(duì)比較簡(jiǎn)單,基于鎖、等待喚醒機(jī)制都是可以的。最后也告知筆試通過(guò)。
之后在推薦我的那位大佬的幫助下戲劇般的通過(guò)了整個(gè)技術(shù)輪(真的很感謝他的認(rèn)可),并且得知這個(gè)消息是在我剛好和 A 部門(mén)約好視頻面試時(shí)間之后。
也就意味著我必須拒掉一個(gè)部門(mén)!
沒(méi)看錯(cuò),是我要拒掉一個(gè)。這對(duì)我來(lái)說(shuō)確實(shí)太難了,我壓根沒(méi)想過(guò)還有兩個(gè)機(jī)會(huì)擺在我面前。
最后憑著個(gè)人的愛(ài)好以及 B 部門(mén)的熱情我很不好意思的拒掉了 A 部門(mén)。。。
HR 面
在面這之前我從來(lái)沒(méi)有面過(guò)這樣大廠的 HR 流程,于是瘋狂搜索,希望能彌補(bǔ)點(diǎn)經(jīng)驗(yàn)。
也許這就是樂(lè)極生悲吧,我確實(shí)猜中了 HR 問(wèn)的大部分問(wèn)題,但遺憾的是最終依然沒(méi)能通過(guò)。
后來(lái)我在想如果我沒(méi)有拒掉 A ,會(huì)不會(huì)結(jié)局不一樣了?
但現(xiàn)實(shí)就是如此,沒(méi)有那么多假設(shè),并且每個(gè)人也得為自己的選擇負(fù)責(zé)!
大概的問(wèn)題是:
-
為什么想來(lái)阿里?
-
個(gè)人做的最成功最有挑戰(zhàn)的事情是什么?
-
工作中最難忘的經(jīng)歷?
-
對(duì)加入我們團(tuán)隊(duì)有何期待?
?
C 部門(mén)
HR 這關(guān)被 Pass 之后沒(méi)多久我居然又收到了第三個(gè)部門(mén)的邀約。
說(shuō)實(shí)話當(dāng)時(shí)我是拒絕的,之前經(jīng)歷了將近兩個(gè)月的時(shí)間卻沒(méi)能如愿我內(nèi)心是崩潰的。
我向聯(lián)系我的大佬表達(dá)了我的想法,他倒覺(jué)得我最后被 pass 的原因是個(gè)小問(wèn)題,再嘗試的話會(huì)有很大的幾率通過(guò)。
我把這事給朋友說(shuō)了之后也支持我再試試,反正也沒(méi)啥損失嘛,而且面試的狀態(tài)還在。
所以我又被打了雞血,才有了下面的面試經(jīng)過(guò):
一面
面試官:
服務(wù)化框架的選型和差異?
博主:
一起探討了 SpringCloud、Dubbo、Thrift 的差異,優(yōu)缺點(diǎn)等。
面試官:
一致性 Hash 算法的原理?
博主:
將數(shù)據(jù) Hash 之后落到一個(gè) 0~2^32-1 構(gòu)成的一個(gè)環(huán)上。。。。
面試官:
談?wù)勀憷斫獾?Zookeeper?
博主:
作為一個(gè)分布式協(xié)調(diào)器。。。
面試官:
如何處理 MQ 重復(fù)消費(fèi)?
博主:
業(yè)務(wù)冪等處理。。。。
面試官:
客戶端負(fù)載算法?
博主:
輪詢、隨機(jī)、一致性 Hash、故障轉(zhuǎn)移、LRU 等。。
面試官:
long 類型的賦值是否是原子的?
博主:
不是。。。
面試官:
volatile 關(guān)鍵字的原理及作用?happen Before?
博主:
可見(jiàn)性、一致性。。
二面
一面之后大概一周的時(shí)間接到了二面的電話:
原以為會(huì)像之前一樣直接進(jìn)入筆試,這次上來(lái)先簡(jiǎn)單聊了下:
-
談?wù)剬?duì)微服務(wù)的理解,好處以及弊端?
-
分布式緩存的設(shè)計(jì)?熱點(diǎn)緩存?
之后才正式進(jìn)入筆試流程:
這次主要考察設(shè)計(jì)能力,其實(shí)就是對(duì)設(shè)計(jì)模式的理解?能否應(yīng)對(duì)后續(xù)的擴(kuò)展性。
筆試完了之后也和面試官交流,原以為會(huì)是算法之類的測(cè)試,后來(lái)得知他能看到前幾輪的筆試情況,特地挑的沒(méi)有做過(guò)的方向。
所以大家也不用刻意去押題,總有你想不到的,平時(shí)多積累才是硬道理。
三面
又過(guò)了兩周左右,得到 HR 通知;希望能過(guò)去杭州參加現(xiàn)場(chǎng)面試。并且阿里包了來(lái)回的機(jī)票酒店等。
可見(jiàn)阿里對(duì)人才渴望還是舍得下成本的。
既然都這樣了,就當(dāng)成一次旅游所以去了一趟杭州。
現(xiàn)場(chǎng)面的時(shí)候有別于其他面試,是由兩個(gè)面試官同時(shí)參與:
給一個(gè)場(chǎng)景,談?wù)勀愕募軜?gòu)方式。
這就對(duì)平時(shí)的積累要求較高了。
還有一個(gè)印象較深的是:
在網(wǎng)頁(yè)上點(diǎn)擊一個(gè)按鈕到服務(wù)器的整個(gè)流程,盡量完整。
其實(shí)之前看過(guò),好像是 Google 的一個(gè)面試題。
完了之后讓我回去等通知,沒(méi)有見(jiàn)到 HR 我就知道涼了,果不其然。
?
總結(jié)
看到這里的朋友應(yīng)該都是老鐵了,我也把上文提到的大多數(shù)面試題整理在了 GitHub:
廠庫(kù)地址:
https://github.com/crossoverJie/Java-Interview
最后總結(jié)下這將近四個(gè)月的面試心得:
-
一定要積極的推銷自己,像在 A 部門(mén)的三面時(shí),由于基礎(chǔ)答得不是很好;所以最后我表達(dá)了自己的態(tài)度,對(duì)工作、技術(shù)的積極性。讓面試官看到你的潛力值得一個(gè) HC 名額。
-
面試過(guò)程中遇到自己的不會(huì)的可以主動(dòng)提出,切不可不懂裝懂,這一問(wèn)就露餡。可以將面試官引導(dǎo)到自己擅長(zhǎng)的領(lǐng)域。比如當(dāng)時(shí)我正好研究了鎖,所以和面試官一聊就是半小時(shí)這就是加分項(xiàng)。
-
平時(shí)要主動(dòng)積累知識(shí)。寫(xiě)博客和參與開(kāi)源項(xiàng)目就是很好的方式。
-
博客可以記錄自己踩過(guò)的坑,加深印象,而且在寫(xiě)的過(guò)程中可以查漏補(bǔ)缺,最后把整個(gè)知識(shí)體系鞏固的比較牢固,良好的內(nèi)容還可以得到意想不到的收獲,比如我第一次面試的機(jī)會(huì)。
-
GitHub 是開(kāi)發(fā)者的一張名片,積極參與開(kāi)源項(xiàng)目可以和全球大佬頭腦風(fēng)暴,并且在面試過(guò)程中絕對(duì)是一個(gè)加分利器。
-
面試官一般最后都會(huì)問(wèn)你有什么要問(wèn)我的?千萬(wàn)不要問(wèn)一些公司福利待遇之類的問(wèn)題。可以問(wèn)下本次面試的表現(xiàn)?還有哪些需要完善的?從而知道自己答得如何也能補(bǔ)全自己。
還有一點(diǎn):不要在某次面試失利后否定自己,有時(shí)真的不是自己能力不行。這個(gè)也講緣分。
塞翁失馬焉知非福
我就是個(gè)例子,雖然最后沒(méi)能去成阿里,現(xiàn)在在公司也是一個(gè)部門(mén)的技術(shù)負(fù)責(zé)人,在我們城市還有個(gè)窩,溫馨的家,和女朋友一起為想要的生活努力奮斗。
總結(jié)
以上是生活随笔為你收集整理的GitHub 上万 star 项目大佬的自谦:一个学渣的阿里之路的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 动手实现一个 LRU cache
- 下一篇: 大部分公司并不需要微服务