斬獲BAT等7家Offer!GitHub 4萬Star項目作者的面試經歷
授權轉載自牛客網
作者|CyC2018
編輯|Debra
首發 | AI前線
開發者 CyC2018 在 GitHub 上有一個高達 40 k+ star 的項目 CS-Notes,該項目記錄了關於計算機科學方方面面的學習筆記,同時,作者在項目中分享了他 2018 年的校招面試經驗,該面經目前在原始發布網站上已經獲得了 120+ 點贊。以下為全文,希望能給有需要的讀者一些啟發。
前 言
2018,有過迷茫,有過努力,也有很多收穫。為了記錄這一年以來的感受,於是有了這篇文章。
Offer 情況
經過了長達一年左右的複習,秋招也收到了幾個比較滿意的 Offer,參加面試的都通過了。
百度,企業智能平台;
阿里,高德地圖,部門已聯繫,目前還在申報 Offer 中;
騰訊,IEG 遊戲平台,後台研發,SP;
位元組跳動,頭條後台研發,SSP;
華為,Cloud Bu;
網易遊戲,夢幻事業部;
順豐科技。
前期準備
也是在去年十一月份左右,看著身邊兩年制的同學經歷了長時間而又艱難的秋招,我開始意識到自己應該提前準備了,否則自己的秋招會很慘。
本科的時候,雖然學過計算機網路、操作系統和數據結構等課程,而且 Leetcode 也刷了一兩百題,但是離招聘要求還差的很遠,學的都很淺只夠應付考試,也沒有實際的項目經驗。
我的研究生方向是計算機圖形學,研究生期間主要做一些科研項目。在選擇招聘方向的時候,我也糾結了是不是找圖形學相關方向的,但是考慮到圖形學的選擇不是很多,所以還是決定投後台研發相關的崗位。
於是開始收集各種學習資料,也買了很多紙質書。最開始的學習效率並不是很高,很迷茫,覺得要學的內容很多無從下手。那時候看別人的面經,感覺自己太弱了,很多內容都沒接觸過,於是更加迷茫。迷茫的時候總想著逃避,要是不複習多好,玩玩遊戲每天多簡單。但是遊戲玩的越多,那種焦慮感越是強烈。解決焦慮的唯一辦法就是想辦法解決當前問題。當慢慢地從消極的學習態度中調整過來,掌握的知識越多,那種焦慮感也隨之消失。當然這個過程並不容易,不僅需要很好的毅力,也要根據自身情況找到問題的有效解決方法。
春招開始
三月份各個公司就開始春招了,那時候剛把一些基礎知識簡單地複習了一下,Leetcode 刷到了三四百題。但是沒有後台研發相關的項目,於是花了一個星期左右用 PHP 做了一個微博系統。當時做簡歷特別痛苦,沒內容可以寫,看著其他人簡歷各種新技術,自己都沒掌握,所以很虛。
阿里一輪游
最開始投的阿里,實驗室大幾屆有個師兄在天貓精靈團隊,所以給我內推了。於是我人生中第一場面試就是阿里,很自然地被虐了一遍。記得當時約好下午兩點電話面試,午飯都沒吃,怕吃完之後犯困影響狀態,然後找了一個很安靜又沒人的地方呆到了兩點,調整自己的狀態。可是面試官突然打電話來說有個會議要開,所以推遲了大概一個小時。苦苦等到三點左右,面試正式開始,不出所料面得非常糟糕。首先自己表述的很有問題,很多內容沒回答到關鍵點上,自己會的內容也不怎麼繼續擴展回答。其次知識掌握得確實不夠,連線程安全、ThreadLocal、函數式編程都不會。雖然被虐的很慘,但是也有好處,知道了面試到底是怎樣的,自己還有哪方面的不足,該怎麼準備。
騰訊被鞭屍
第二場面試是騰訊,在經歷了阿里的面試之後,並且又繼續複習了一段時間,我對面試就比較有信心了。一面其實回答的挺理想的,雖然很多問題沒有立馬回答出來,但是經過面試官的耐心提示之後都能回答一些內容。當時面了一個半小時,面試體驗特別好。印象比較深刻的題目有,閱讀一個 Redis 源碼,分析存在哪些問題。其實就是一個計數器實現的限流演算法,會有臨界值的問題,但是當時沒回答出來,只能聽面試官給我解釋。還有一個微信掃二維碼,這個過程發生了什麼,也沒回答得很好,不過面試官也很耐心地糾正我回答上的錯誤。一面順利通過了,但是總監面掛了。總監面沒有問什麼技術問題,就是問了問項目和職業規劃。自己的項目確實比較 Low,我自己在介紹的時候也說得很不堪。職業規劃我說自己希望在一些方面深入學習,因為自己現在在這些方面還很薄弱... 面完之後我就知道掛了,因為整個面試過程我都特別虛,還主動說自己技術能力不行。不出所料,面完的當天晚上,狀態變成了不合適。
但是過了幾天,突然收到騰訊的電話,問我是否願意去深圳參加面試(筆者學校在廣州)。當然我毫不猶豫地答應了,很開心騰訊還能給我機會。經過了上一場面試的啟示,這次面試我表現地非常自信,自己知道的知識都很有信心地表達出來,被問到不會的內容也不會那麼慌張,和面試官探討一些細節,然後說說自己的想法,還有自己看過相關的內容。由於這是騰訊雲部門,對 Linux 內核和 C++ 有很高的要求,問了幾個相關的問題我都沒回答出來,比如如何實現守護進程,Linux 信號機制,Linux 線程的不可中斷阻塞狀態如何進入等等。除了這些問題,其它地回答的都還行。遺憾的是,當天晚上面試官打電話告知我面試沒通過。但是他說我其它方面都很不錯,所以問我願不願意參加騰訊雲 Java 部門的招聘,於是第二天我又去了一個新的部門面試。
這次面試是在部門的會議室進行的,進到公司之後說實話沒有自己想像中那麼好,工位很擠環境一般。一開始就先隨便聊聊,學校的研究工作,學習之類的。然後看了看項目,看完之後我就知道涼了一半,這個項目確實太水了,面試官看了之後沒有接著問,也能感受到面試官有點嫌棄。然後他就問了一些基礎知識,問到進程調度演算法,面試官讓我實現一個任務調度系統。因為是第一次手寫代碼,而且之前確實沒考慮過這個問題,然後就胡亂寫了一堆代碼,特別亂,而且到處塗改。顯然面試官是不滿意的,寫了也有十幾分鐘之後,我自己都知道已經涼了,然後面試官沒讓我接著寫,也沒給我任何提示,說就到這裡,面試結束了,還有沒有什麼問題想問的。當然看過任務調度系統相關的文章會覺得挺容易的,比如使用時間輪實現等等。我依然記得面試官送我出門時候的熱情,送我坐電梯的時候還很熱情地和我說,非常感謝參加本次面試,辛苦了。
虎牙過於自信
經過了阿里和騰訊的面試之後,我覺得自己大概已經知道該怎麼面試了,面試時候該注意什麼,該怎麼表達等等。而且騰訊面試表現也不差,雖然最後沒通過。所以在虎牙面試的時候特別放鬆,覺得應該能通過。前面面的也都還行,雖然有幾個問題沒回答好,比如分析一下微博的時間線。通過了第一輪面試直接等第二輪,等到了晚上七點多才等到我。虎牙面試還是很注重技術的,雖然問的都不是很深入,只要簡單回答到點上就不會接著問下去。二面也有一些問題沒回答好,比如 ConcurrentHashMap 的並發機制,問 Spring 直接說不會。也有一些問題回答得比較亂,沒有條理。但是我覺得大部分問題都回答的不錯,應該能通過。可是面試完之後,面試官問有沒有什麼問題要問他,由於太過放鬆,我就問你們都加班到這麼晚不吃飯嗎,好餓啊,周六周日還加班嗎... 問完之後面試官就很嚴肅了,說平常不加班的,我突然意識到了問題的嚴重性... 最後還是涼了。
百度第一個 Offer
被三家連續拒了之後,都開始懷疑自己了,不過還是提醒自己要保持信心。
幸運的是,百度的面試非常適合我,三輪都是技術面,而且手寫演算法題目居多,而我準備最多的是演算法,所以很順利通過了面試。但是面試表現並沒有特別好,過了比較長的時間才被撈,而且是工程效率部門,做內部工具的,對個人成長並不好,所以不是特別滿意。
網易遊戲最好的面試體驗
其實最開始沒有打算投網易遊戲的,因為被脈脈洗腦,已經放棄了做遊戲。但是因為前面面試基本被拒了,擔心沒有實習 Offer,因此就試試看。
因為沒有特別想去網易遊戲,所以面試過程也比較放鬆,就當去聊聊天。面試官非常 nice,那天下午擠了很久地鐵,比較口渴,然後面試官看我說得沙啞了,到門口幫我買了一瓶可樂,非常感激。面試之前我就提出我對 C++ 不熟悉,最近主要看 Java 的內容。面試官還是說沒關係,盡量回答就好。當然最後我都把問題往 Java 那裡回答了,比如 Map 的實現,內存管理等等。最後聊了一些玩過的遊戲,就讓我回去等消息。網易遊戲就一輪面試,確實就一輪。周五參加的面試,下周一就給 Offer 了,效率特別高。
微眾玄學面試
通過微眾面試我自己都非常吃驚,一面的時候就簡單自我介紹了一下,然後面試官開始介紹他自己的工作經歷,以及現在部門在做的內容。之後問了我一個場景分析問題,我想了一會兒沒想出來,於是面試官拿起草稿紙把各種需求詳細說了一遍,然後把系統架構圖也畫了出來... 最後他問還有什麼我優勢的地方他沒問到的,我問他怎麼不問問演算法題,他說筆試都通過了沒必要再問。面完之後我覺得聊得很開心,但是技術問題沒回答好,出乎意料收到了二面通知。二面沒問技術,就讓介紹了項目,再問問家住哪之類的問題,也順利通過了。HR 面就不用介紹。收到了微眾的 Offer,得知了部門是貸款科技部,非常核心,很吃香,近幾年也在擴展一些業務,還是有點小心動的。雖然最後沒選擇去微眾實習,但是一面面試官加了我微信,我很感謝他一面非常耐心給我講解,並讓我通過。他說我是他面試的第一順位,也就是第一個面試者,所以會放寬很多,也希望我秋招能加入他們。
實習選擇
其實最理想的是去百度實習,秋招也會容易很多。但是考慮到百度是在北京,部門很邊緣,而且需要實習很長時間也不一定能轉正,所以還是放棄了。最後只能在網易遊戲和微眾選,雖然自己不想做遊戲,但是考慮到網易遊戲的平台認可程度比微眾好,秋招肯定會更容易一些。而且秋招如果還想進微眾的話也會比較容易,因為面試官和 HR 都說秋招的時候會優先考慮我,所以最後還是去了網易遊戲實習。
實習之前的快速學習期
經歷了春招之後,認識到了自己身上的不足,比如交流表達能力的欠缺,知識積累得不夠,項目深度不夠。因此在實習之前的兩三個月,開始針對這些問題逐個解決。
交流表達能力欠缺,就提前準備好各種非技術問題,然後對著鏡子回答,把自己當成聽眾,並且也用錄音機錄下來。
知識積累不夠,採取的策略是保證廣度優先,並且在重要的內容上保證深度。其實之前基礎知識已經掌握的比較好了,再學其它技術的時候都有很多相同的地方,所以學起來很快。
項目深度不夠,就把那個微博系統做了一點改進,學了 Spring 之後改用 Java 實現。
不那麼安心的實習
去實習的時候還是挺驚喜的,因為我被安排的工作是遊戲引擎相關的,和自己的研究生方向緊密相關,我覺得做完實習項目之後自己的畢業論文也會比較有靈感。
但不幸的是,在去的第一天部門接待聚餐上,服務端主程就說,我們部門工作制是九九六,現在互聯網都是九九六。在實習之前我了解的是實習生六點就可以走,而且只用上五天班,聽到他這麼一說心都涼透了,因為已經想好了晚上和周末時間用來複習。如果知道是九九六,我會選擇去百度。
其實網易遊戲部門氛圍還是不錯的,對員工很好,而且我的實習導師人也很好,在我生病的那幾天很關心我。但是九九六的工作制對秋招複習還是有很大影響的,而且每天上下班花在路上的時間超過了兩個小時,下班回寢室之後總想著看會兒視頻休息一下,然後又要早早睡覺趕著第二天上班。沒辦法只能在上下班地鐵上複習,還有就是午休時間接著複習。
秋招開始
實習之後已經是九月份了,那時候已經錯過了所有提前批。而且實習的時候沒怎麼複習,九月初還是感覺沒怎麼準備充分,所以就又等了半個月才開始投簡歷。
但是這個時候和春招相比,已經把大部分後台研發相關的知識點過了一遍,很多重要的內容前前後後也看了十幾遍,沒有春招時候那麼迷茫和焦慮。即使被問到沒有掌握的知識,我也有把握通過討論的方式,給出大概的思路,因為很多技術確實是相通的。
阿里看不懂的內部流程
秋招第一個投遞的依然是阿里,最開始系統自動發起了一個新的流程,然後過了幾天自動回絕了... 八月末的時候也找人內推了,但是又被阿里直接回絕了... 那時候已經覺得可能是春招面試表現太差,此生無緣阿里了。可是過了一段時間,正式校招的時候,阿里又發起了一個新的流程戲弄我,收到筆試通知的時候,我還猶豫了到底參不參加,因為那時候已經九月中旬,聽說阿里已經沒有 HC 了。而且按前面回絕我的態度,感覺即使筆試通過面試也通過不了。筆試那天晚上,本來準備看個電影放鬆一下,後來想了想還是參加了筆試,筆試各種機器學習和數學題,感覺拿錯了試卷,筆試完我已經把阿里從我的公司進度列表中刪除了,不再糾結阿里。可是過了一段時間收到阿里的面試通知,我以為是走走形式,可能參加筆試的人很少了,所以才選中我參加面試。那時候阿里招聘官網狀態一排的已回絕,讓我對阿里有一種恐懼感,覺得面試肯定掛。但是真正面試的時候卻意外的順利,收到二面通知的時候特別激動,然後面完二面又讓直接等 HR 面,HR 面雖然不是很理想,但是沒有很大的問題。又過了很長一段時間,在我去深圳參加騰訊招聘的高鐵上,收到了高德地圖 HR 的電話,問是否願意去。雖然得知部門在北京有點小失落,但是還是很開心終於被阿里認可了,擺脫了對阿里的恐懼。
實驗室上屆畢業在阿里雲的大佬某天突然和我說,他們部門有新的 HC,讓我把簡歷發給他,他要幫我內推,會幫我安排一場線下面試,如果通過的話,到時候和高德的 HR 溝通一下,直接把我從高德撈過來。很感謝大佬向他老大極力推薦我,給我了這次面試機會。線下面試也很順利,聊聊實習項目,問問我的開源博客,然後問些 Paxos 等分散式的問題,還有就是手寫代碼,信號量實現生產者消費者,以及一個位運算的問題。其實位運算的問題面試的時候寫的不完善,面試官讓我之後完善了再發給他,因為面試一個多小時有點長了。過後我寫了詳細文檔講解了思路,以及使用 JUnit 進行了詳細的單元測試,把文檔和代碼都發給了他。現在面試已經通過了,但是最近阿里集團 HC 比較緊張,也不知道能不能批到 HC。
百度又是不那麼滿意的部門
雖然阿里是最先開始流程,但是第一個參加面試的是百度。因為實習的時候通過了百度的面試,所以這次面試還是比較有信心的。百度面試連續三天,都在同一個地方,最後簽約也在同一個地方。還記得每次都坐一個小時左右的地鐵去那裡,路線已經非常熟悉了,和每天去實習的感覺類似。百度面試比較注重技術,三輪面試基本都是問技術問題,而且問的也比較深入,內容也非常廣。但是面的不是那麼理想,有兩點原因,首先是因為確實有些知識點還沒掌握好,比如 AC 自動機,系統故障分析等等;其次是對實習項目的描述上還不夠好,沒有把實習內容的閃光點描述出來,也沒有講清楚為什麼做這個項目,自己通過什麼方法去做,以及最後的結果。
最後百度給了白菜價,部門是企業智能平台,主要是內部系統,雖然會接觸到機器學習和大數據。
騰訊虐我千百遍
秋招騰訊第一場面試和實習參加騰訊面試的感覺非常像,第一輪技術面感覺很好,手寫堆排序演算法,二部圖分析等等。面完之後通知待會兒二面,聽到之後還是很激動的,覺得這次應該沒問題了。我在等二面的時候,碰到了室友(他經常不住宿舍,所以不清楚他也去面試),聊著聊著居然發現我兩是同一個面試官,而且他是來二面的,也就是等一下我兩就要一前一後進去面試。二面的感覺和實習二面非常像,非技術問題回答的支支吾吾,然後面試官開始質疑我說的內容,給我壓力,我沒有當場反駁,就說了哦,好像是這樣的。因為面試官全程都綳著臉,所以我也比較緊張,很多問題沒回答好。過了幾天,室友和我說收到 HR 面試通知了,我去官網看了一下狀態,已經變成了熟悉的不合適。這次面試失敗的主要原因是自己在應對這種壓力時處理地不是很好,主要體現在失去信心以及緊張。解決方法也簡單,做好充分準備來保持信心,受到質疑的時候積極反駁,緊張的時候計時調整心態,可以試試深呼吸或者喝水。
因為實習有被撈起來的經歷,所以被拒之後我特別希望能繼續被撈起來,然後把簡歷上的面試城市改成了深圳。苦苦等到深圳場面試的前幾天,在不經意的一個下午手機突然響了,我記得是簡訊郵件同時收到面試通知。於是又開始了新一輪被騰訊虐的面試之旅。
一面和之前一樣也是意外地順利,雖然問了一些 C++ 的問題,但是我都說到 Java 相關的實現上。在一些問題上確實回答的深度不夠,比如網路編程裡面的水平觸發和邊緣觸發等問題。然後問了幾個演算法,本來要求手寫,我說我實現過,所以就講了講思路。面試和騰訊第一場面試一樣持續了一個半小時,面試官也很好,很多問題都會給提示,即使最開始回答的有問題。二面面試官也很好,問了問實習項目,然後再聊一聊一些技術,經過了之前的面試,到這次面試真的就像在聊天一樣而不是面試,我們都會說一些對技術上的理解。HR 面其實面得很差,對於非技術問題的吹水能力我還是不太行。最終和我預期的一樣,給了我 SP 的 Offer,因為覺得自己面得還可以,但是也不夠好到給 SSP,有些 C++ 問題還是沒回答的特別好。
頭條意外的驚喜
之前看到學弟收到頭條的 Offer,薪資非常誘人,所以也想去試試。也聽說頭條面試難度非常大,主要考察手寫演算法,因為自己演算法方面準備得比較充分,所以覺得會比較順利,但是也沒有特別高的預期。前兩面中規中矩,演算法題和其它問題我都回答的比較好,到三面的時候,問了一個錯排問題,其實最開始我給了正確的遞推公式,但不是面試官想要的答案,所以讓我再想想。我想了十幾分鐘還是覺得沒問題,那時候覺得自己已經涼了,因為面試官一直不滿意。後面的幾個問題也沒回答的很好,分析一個 SQL 語句的具體執行過程,比如會怎麼利用索引,怎麼優化之類的,雖然在他的提示下還是回答了,但是感覺並不好。面完之後我立馬查了一下那個錯排問題,證實了我的答案是正確的,於是寫了一個詳細的文檔,聯繫 HR 讓她發給面試官。出乎意料的是,HR 讓我不用擔心,他說面試官對我的評價很好... 不過最後還是讓她把文檔發給了面試官。之後收到了加面通知,頭條加面有兩種情況,一是三輪評級都是 4 可以評 SSP,二是面試官評價差別很大,再面一輪決定是否錄用。收到加面的時候完全不知道自己屬於哪一種,感覺兩種情況都有可能。加面回答的也不好,主要是問項目,面了 25 分鐘就草草結束,最後面試官說有些內容需要找一些文獻參考參考。面完之後我覺得,即使我屬於第一種要評 SSP 的情況,加面面的那麼差應該也沒希望了。苦苦等了好多天之後,最後確定是 SSP 之後,還是很驚喜的,感覺是對自己這麼長時間複習的一個認可。
順豐最後的保底
投順豐是因為九月中旬很多公司都結束了招聘,所以那時候比較慌,就投了順豐當做保底,順便也練練手。最開始還擔心順豐筆試沒通過,因為編程題最後一題沒做出來,那題的題目都出錯了,而且題目是網上直接 copy 過來的,網上的源碼都不能通過,更別說我自己的實現了。順豐面試主要問了資料庫的內容,而且問的特別深,幾乎把每種日誌的實現和作用都問了一遍。面順豐的時候也比較早,那時候有些問題的回答上沒有組織好,回答得比較凌亂,雖然最後也算給了一個小 SP。
華為特別糾結的部門
去華為面試確實是沒有壓力的,因為都知道華為面試不怎麼問技術,雖然還是問了我一些技術問題,不過不是問的很深。面試主要介紹項目,我對自己的實習項目還是比較有信心的,因為覺得做的確實不錯,而且面了很多場了,知道該怎麼介紹項目。面試官問我個人意願,我說自己對分散式中間件等比較感興趣,於是面試官把我推薦到了 Cloud Bu。本來沒打算簽華為的,現場簽約也就去看看到底給我開多少。最開始其實給我開了十四級最高的薪資,我本來不是很想去,雖然對這個部門感興趣,但是薪資確實比不上頭條。然後隨口問了一句可不可以給十五級,本來 HR 說是可以試著申請一下,不過最後沒申請成功。
技術博客
最後安利一下自己的技術博客:CS-Notes(https://github.com/CyC2018/CS-Notes),雖然現在還有很多不完善的地方,但以後會不斷改進。
小 結
很多人都說,面試和考試一樣,要背很多沒用的東西。最開始我也認同這種看法,可是參加了幾場面試之後,我就不這麼認為了。因為面試出的問題,有很多是實際開發中碰到的,所以準備面試相當於提前做入職準備。而且面試中考察的思維能力、交流表達能力、應對壓力能力,都是真正工作中所需要的。
我覺得自己比別人做的好的地方是,有很強烈的想找到好工作的意願,才驅使我不斷學習,所以態度很重要。
信心源自於充分準備,有了信心,面試的時候才能遊刃有餘。而毫無依據的自我感覺良好,在每次失敗之後都看不到自身的不足,而是怪罪於外界因素。
做好自己的簡歷,我在簡歷上花了很長時間,只要允許,我都會用這個簡歷給面試官演示:個人簡歷(https://cyc2018.github.io/)。
推薦閱讀
升職加薪攻略:中科院大牛帶你玩轉Python數據分析與挖掘
教程 | Python集合與集合運算
收藏 | 白話Hadoop架構原理
下載 | 512頁教程《神經網路與深度學習》,2018最新著作
必備 | AI & DS七大 Python 庫
下載 | 954頁《數據可視化》手冊
知識點 | 全面理解支持向量機