原文連結:https://mp.weixin.qq.com/s/YYKc9yl16qWHqYWwA645Rw
11 月底,在經歷了充分的思想鬥爭後,我終於下定決心寄出了三方,歷時三個多月的秋招也終於塵埃落定。過去的三個多月裡,面試時間可能只有一個月左右,剩下的兩個多月的時間都在等待結果和糾結,因此透過本文總結這段時間我的秋招歷程和感悟。
本文大綱如下圖所示:
一、秋招歷程本人本科畢業於 985 高校,碩士就讀於國內 Top2,本碩專業都是軟體工程。在本科期間有過華為和騰訊兩段實習經歷,在研究生期間,我發現自己對科研的興趣確實有限,因此平時較多參與實驗室科研專案的落地應用。
今年由於疫情影響,2020 年上半年大部分時間我都在遠端辦公,導師分配的任務也稍有減輕,因此悄悄在位元組和阿里實習了半年。
就業方向在秋招開始之前,我考慮的方向主要包括:
(1) 讀博:導師在博士生考試前和我長談建議我讀博,待遇上也給出了比較好的條件。如果我確實有科研天賦並且熱愛科研,那麼讀博真的是一個非常好的選擇,可惜以上兩個前提我都不具備;(2) 選調:由於自己在本碩期間都有非常多的學生工作經歷,目前也擔任學院學生工作的重要職務,因此很長一段時間內都考慮直接參加中央或者省委選調工作,但是最終因為一些個人原因還是選擇放棄;(3) 技術:選擇大多數人選擇的方向,秋招最終還是主要聚焦於技術開發類的崗位,本文也主要介紹這方面的基本情況。面試情況和一些大牛相比,我的秋招面試經歷並不算多,一共只投遞了十幾家公司,最終拿到了國網南瑞研究院、交通銀行總行、阿里、騰訊、位元組、華為、猿輔導、完美世界的 offer,具體的情況可以看下錶:
阿里流程:實習(筆試+5 面)+轉正答辯結果:Offer阿里的面試總體來講是比較標準的結構化面試,但是面試流程實在太長了,從投遞簡歷到完成面試,大約歷時 40-50 天。
而實習轉正後的 offer 發放等了大約 20 天,薪資溝通等了 50-60 天,貫穿秋招的頭尾,非常考驗心態。
騰訊流程:筆試+3 面結果:Offer相比於頭部的幾家網際網路公司面試,我個人感覺騰訊的面試反而是比較“水”的。兩次專業面試都是電話面試,且以專案交流為主。
騰訊的內推和自主投遞沒有流程上的區別,只是內推能在一開始鎖定心儀的部門。我一開始不瞭解情況自主投遞簡歷,導致後續無法內推,簡歷只能由部門隨機鎖定。撈我的部門是騰訊某著名遊戲工作室,最終順利拿到 offer。
位元組流程:實習(3 面)+ 綠色通道 1 面結果:Offer位元組的整體面試流程非常緊湊,實習簡歷投遞後第二天就開始溝通面試,一個下午直接完成 3 面,再隔一天就溝通 offer,還允許遠端實習,因此計劃 3~6 月在位元組順帶實習 3 個月。
由於當時不是暑假,實驗室壓力、學生工作壓力、實習工作壓力都聚集在一起,讓我度過了極其痛苦的三個月,幾乎每天都沒有休息。
6 月份我提出離職放棄轉正答辯,在之後的校招過程中只參加一次專業面試就直接獲得校招 offer。
華為流程:筆試+3 面結果:Offer華為的面試流程感受還是非常友好的,會有 HR 單獨聯絡,及時溝通面試進度和狀態。
另外令我驚訝的是多次主動溝通感興趣的工作方向,並針對個人做出非常詳細的職業規劃,有一段時間幾乎是每天打一次電話。
最後的整體評級和薪資待遇也非常有誠意。華為的二面很有可能是壓力面,只要保持心態就能順利過關。
國網南瑞流程:1 面結果:Offer因為來學校進行宣講,所以現場投遞了簡歷,面試 20 多分鐘就直接通過了。南瑞是國家電網子公司,網路風評不太好,不過透過特批給了一個超出預期相對有誠意的待遇,不過相比網際網路還是有較大差距。
交行總行流程:免筆試免面試結果:Offer學校有人才推薦計劃,填了一些表格交上去,隨後安排了一次不到 10 分鐘的面試,通知免筆試免面試直接參與體檢環節,隨後直接發 offer,薪資待遇都是統一的標準。
猿輔導流程:筆試+3 面結果:Offer猿輔導號稱是 WLB 的典範,一直宣稱“年薪至少 40 萬,7 點下班”,面試號稱“具有挑戰性”,但實際面試流程一週一面,且面試題目難度也很一般,無法深挖專案,只會簡單的基礎題問答和做題,每次面試兩道題目左右,基本都是 leetcode 原題。
完美世界流程:3 面結果:Offer完美世界 K-lab 計劃號稱 48 小時極速發 offer,由於是校招早期,因此就參與面試練習練習。
由於還是北京疫情期間無法回校,所以安排遠端面試超出了“48 小時”,但整體流程還是比較速度,面試結束後也很快收到意向書。
網易流程:筆試+1 面結果:掛我投遞的是網易有道的 Java 開發崗位,面試安排在出發回京返校前 1 個小時,1 面全程深挖各大技術棧的底層原理,面試官非常和藹可親,面試體驗極佳,可惜我水平不高,一問三不知,過了兩週流程就變灰了。
快手流程:1 面結果:掛按照大多數人的經歷,快手的面試基本也應該是一次性面完,我面試的是基礎平臺,在做題的時候出現了比較大的失誤,偏離了題目重點,把問題複雜化,所以一面結束後面試官直接就說結束面試,“以後等訊息”。
商湯流程:筆試+3 面結果:放棄商場的面試流程中規中矩,有 HR 專人對接,但是每次面試都要相隔一到兩週之後才有訊息,流程也拖得很長。
有趣的是其中一次面試過程中面試官問我是否認識本科的一位同學,可能是也投遞了同一部門。最終三面時由於已有更好的 offer,所以就直接放棄面試了。
小結相比於身邊的一些同學,我沒有選擇海投,而是在不同領域選擇一些有特點的公司有針對性的投遞簡歷,努力提高簡歷投遞的“命中率”。
秋招是一個長期的過程,在獲得同領域一些比較滿意的 offer 後,我就沒有繼續面試同領域的沒有特殊優勢的其他公司。
這樣做一方面減少了無效的面試次數,有更多時間進行有針對性的準備,也能兼顧實驗室導師的工作;另一方面在最後選擇的過程中也能突出每家公司的優勢特色,選擇時也更有區分度。
二、校招結構化面試綜合我的實習和校招面試經歷,我認為準備面試應當包括五個方面,即自我介紹、基礎知識、專案經歷、原理解析和手寫演算法。
1. 自我介紹自我介紹是幾乎所有面試的第一步驟,自我介紹配合簡歷會給面試官建立第一印象。我們知道在平時生活中,如果你喜歡一個人,那麼這個人做的一切都會是美好的,如果你討厭一個人,那麼不管他做什麼你都會看不順眼。
面試中也是同理,一個好的初始印象可能會淡化之後面試中自己的失誤,而把重點聚焦於自己的長處上。
在我看來,一次自我介紹至少應該包括:
(1) 基本資訊,畢業院校;
(2) 實習、專案、競賽經歷和成果;
(3) 自己擅長的技術棧;
一般在自我介紹時,面試官很可能在檢視簡歷,這時候需要對面試官進行後續面試問題的引導。
例如如果自己對某些課程掌握非常深入,可以在教育經歷中簡要談談自己的課程情況,如果對自己的一個專案準備非常充分,可以加大自我介紹時該專案的比重,但切忌一下子說完讓面試官無問題可問,而是有意識的留一些常見問題的缺口,例如分散式、效率最佳化等關鍵詞,並針對這些關鍵詞著重準備。
此外,注意避免一些常見的簡歷介紹誤區,例如“精通”這類給自己挖坑的詞彙。
2. 基礎知識對於一些企業的技術初面,面試官可能不會和你討論專案的技術細節,而是已經準備好了一系列的面試題,此時面試就變成面試官讀題,自己答題的環節。這類基礎知識問答包括計算機網路、作業系統、計算機組成原理、語言特性、資料庫原理等方面的內容。例如:
(網路)輸入域名後的流程是什麼?七/四層模型是怎樣的?TCP 的擁塞控制方法是什麼?(作業系統)程序和執行緒的區別是什麼?死鎖的如何產生、避免?分段、分頁與虛擬記憶體的系列問題、CPU 排程的系列問題等;(計算機組成原理)指令執行的基本過程是什麼?(資料庫原理)儲存引擎的區別是什麼?索引底層實現的原理是什麼?(語言特性)Java 垃圾回收機制是怎樣的?Java 虛擬機器包括哪些部分?Js 閉包的原理是什麼?go routine 的排程是如何進行的?對於這些問題,最直接的辦法就是直接看已有的面試題整理,在一些部落格或是牛客論壇上有大量的總結材料,對於有一定基礎的同學直接看材料就能基本回憶起之前所學的課程。
近兩年由於大家越來越善於背題,出題的難度也在逐漸增加,偶爾有一些確實不會的題目直接承認即可,也不用不懂裝懂強行回答,反而可能引起面試官的反感。
在我看來,準備描述自己的專案經歷可以包括以下幾點:
(1) 描述清楚專案的背景和需要解決的問題;(2) 用了什麼樣的技術方法;(3) 專案取得了怎樣的成果;(4) 自己在專案中是怎樣的角色,負責哪些工作;在我實習和秋招面試的過程中,儘管簡歷上列出了最具代表性的三個專案,但是每次詳細介紹的專案實際只有一到兩個。
對於如何描述自己的專案經歷,完全可以像自我介紹一樣準備好時間稍長一些的介紹模板,並至少準備好回答如下問題:
在這個專案中,你遇到的難點是什麼?你是如何解決的?
專案介紹本身並不需要回答這個問題,而是面試官基本都會問這個問題。
此外,透過多次面試,我發現每個專案介紹後面試官所問的問題都是有限的幾個,因此可以透過多次面試提前準備好更多的專案問題回答,在交流過程中展現出自己從容、清晰的一面。
4. 原理解析在我看來,這是整個面試過程中非常容易加分的部分。我們可以根據自己已有的專案、自我介紹中頻繁出現的關鍵詞,用心準備兩到三個可以深挖的點。
這裡的原理解析不是僅僅是自己“看過別人寫的解析文件”,而是自己深入理解,並能“有條理地講述給別人聽”。
可以選擇的方向例如:Tomcat、Spring、Redis、Kafka 的架構和原始碼實現、資料庫引擎的實現、作業系統核心的實現、分散式一致性演算法的原始碼實現、以及其他在自己專案中出現的問題等。
選擇深入準備的方向並不是隨機的,而是確實在自己的專案中發揮了重要用途,並解決實際問題的關鍵難點。如果說基礎知識重在廣度和準確性,那麼原理解析就要重在深度和思考性,描述自己的理解和思考,並能經得起面試官“步步緊逼”的詢問。
準備好可以深入探討的點後,就可以在自我介紹、專案介紹過程中有意識的挖坑,頻繁提起關鍵詞,並留下含糊的描述性語句吸引面試官提問。(石頭注:哈哈,都是套路啊)
5. 手寫演算法在秋招開始前,我最擔心的就是手寫程式碼這一環節,對比身邊一些將 leetcode 題庫刷完的同學,我刷過的題目數量可能只有零頭,不過在手寫程式碼上也沒有出過嚴重的問題。
在我看來,平時沒有刷題習慣的同學也無需對這個環節太過擔心,只要有針對性進行準備,基本都能順利完成。
在臨時突擊刷題方案中,“數量”並不是重要因素,“重複”才是重點,我比較推薦的一個刷題方案是:
(1) 專題練習階段:按 leetcode 標籤專題刷題,如字串、DFS、動態規劃、樹、雙指標、排序等,選擇出現頻率較高的簡單和中等難度題目。對於常見的標籤,做到能理解其常見解題思路即可;(2) 精選題庫階段:可以選擇 leetcode 熱門 100 題,或者劍指 offer 練習題刷題,此時需要注意重複刷題,例如完整做完劍指 offer 練習題後再刷一遍,爭取看到題目就能想到思路,獨立快速完成題目;在秋招準備階段,我個人一共刷了 150 題左右,在面試的手寫演算法環節基本都順利完成。
此外,在手寫演算法的過程中一定要注意程式碼規範,注意異常輸入的處理和程式碼整潔性,另外:
如果暫時沒有思路,可以試圖從面試官那裡獲取提示,部分面試官甚至可以接受換題的要求。如果有一些思路,可以嘗試積極和麵試官溝通獲取一些提示。如果確信自己無法解決問題,那麼要求提示或者換其他題目總比留白要好。石頭補充:在本人多次文章中也強調了資料結構和演算法的重要性,社招如此,更何況校招。 可以參考下之前的這篇文章 —— 從一道面試題談談一線大廠碼農應該具備的基本能力
三、 offer 選擇關於如何選擇 offer,可能見仁見智,基本都會從薪資待遇、平臺發展、城市選擇、親友關係、工作壓力等很多方面打分權衡,但落實到實際中,我自己也根本無法確認每個部分的比重,有時候可能真的只有“follow your heart”。
對於我自己來講,最終糾結的主要是阿里、騰訊、華為三家公司。具體而言:
從薪資待遇上來講,三家公司基本都給到了 SSP,總包來看騰訊>華為>阿里;從地域來看,由於自己是 xx 人,選擇的就業地點希望在江浙滬一帶,三家公司的工作地點也都滿足要求;從大家的工作時間來看,基本是騰訊>華為>阿里(僅是特定部門的工作時間,而非公司整體的工作時間);從部門業務來看,三家公司的業務都算比較核心且都能接受;從技術的契合程度來看,阿里>華為>騰訊,騰訊遊戲需要自己完全轉換技術棧,且發展方向稍有受限。此外,我也綜合考慮了工作地所在城市的生活成本、親友的期望等問題,把最終的候選公司確定為阿里、騰訊兩家,儘管每家公司都有其優勢和劣勢,但至少我都能接受其中的任意一種選擇。
在漫長的糾結、溝通之後,我最後選取了最簡單的方式:拋硬幣。不管是開心接受拋硬幣的結果,還是希望趕緊撿起來再拋一次,我都會知道自己內心真實的選擇。(石頭注:好硬核的方式)