首先宣告,這只是我的播客隨感,其中無法避免有一些個人色彩的見解,請不要在意,我尊敬任何的網際網路公司,尊敬研究生期間的老師同學,我只希望給在求學路上的CS同學一些啟發。
先介紹一下背景,我是ACM銅牌退役狗,在某985讀研,今年找暑期實習。過去兩年一直準備去谷歌或者其他好的IT外企實習,堅持刷了兩年CF,kickstart, codejam,今年CF升到紫名了(這個月沒練,實力又下降了hhh)和leetcode全球排名前300。但是今年遇到了谷歌翻車以及面試碰壁等各種情況。
從2月初到4月中旬,已經兩個月,終於實習面試即將來到尾聲。今天微信HR面結束,而我暑期實習的面試除了一個外企金融公司已經全部面完,有些offer已經發了下來,有些還在路上。雖然從結果上看暫時只有谷歌翻車了,但是整個3月和4月初的煎熬,伴隨今年疫情的蝴蝶效用,2020必將是一個無比魔幻的一年,讓我一生難忘。
2.1 - 3.5 準備谷歌面試到谷歌翻車
2月份大多數時間在幹兩件事,一個是組裡的大專案,另一個就是準備谷歌的一面。由於之前參加過a day with google的活動,並且1月份我還去google上海參加了谷歌機器學習冬令營,憑著這些經歷還有hs學長去年成功轉正的經驗,我也希望能夠順利進入谷歌實習,刷了大約一個月的CF+leetcode,在3.5迎來了我人生第一次谷歌面試。面試官上來給了這麼一道題。
給你一個陣列errors, 和一個時間點 time(0 <=time < errors.siz()), 和interval,以及threshold。
問errors陣列中是否存在一個連續的區間,這個區間的長度為interval,且包含time位置,且這個區間的最小值大於等於threshold
對此我提出了滑動視窗的做法,用multiset動態維護視窗的最小值,複雜度o(nlogn)。誰知面試官表示不知道set,multiset,更不懂滑動視窗。之後我想到了可以直接維護視窗大於threhold的數的解法,複雜度O(n)。讓人崩潰是我解釋20分鐘自己的想法,面試官才勉強弄懂。之後的follow up題,面試官一開始講漏了一個重要條件,讓我的解法偏向了複雜的線段樹資料結構,之後發現的時候我的心態已經崩了,這也導致自己的解法不是最優解(我提出的是nlognlogn,正解估計是n)。
在覆盤的時候,我發現這題有一個更簡單的做法,直接從time位置往左往右統計大於threshold的個數,複雜度也是O(n)。如果我當時一開始想的就是這個解法,或者面試官提示我他的想法,估計結果也不是現在這個樣子。但是這不是面試官低能的理由吧,我有理由相信,大多數競賽出身的人都知道set,multiset,滑動視窗,刷過100道以上leetcode的人,應該也知道這些。至少說明面試官不怎麼刷題,也不會STL(甚至C++也不會?),這種人怎麼進谷歌的?面試官出題的時候是否只准備了一種解法?面試結束之後面試官對於一開始不理解我的演算法表達了歉意,但也表示這會影響我的面試評級。
大約兩週後HR跟我反饋一面結果不夠理想(估計learning hire),考慮今年的嚴峻形勢可能沒有二面。這件事對我打擊的太大了,雖然我ACM退役之後堅持刷題不完全是為了進谷歌,但是這兩年堅持CF,kickstart, codejam,我認為我是有這份實力的。當然之後非常戲劇的一件事是谷歌因為疫情直接取消了中國區的實習招聘,無人生還 = =。這世界是真的魔幻,我怎能想到我是這樣掛掉了谷歌,而且不僅我掛了,所有人都去不了。
3.6-3.31 海投簡歷,遭遇打擊
之前說谷歌一面翻車,我本來準備谷歌如果能過,其他公司就不投或者只投幾家了。但是自己還是太菜,沒有做到未雨綢繆,這個未雨綢繆在於兩點,一是沒算到我的谷歌會翻車,二是沒算到今年外企基本翻車了。我之前的策略是抓刷題,只要會做題,就算谷歌掛了,還能去微軟,hulu,intel這些。誰知道最後只有微軟,hotstar還招實習生。paypal,google,hulu,intel,airbnb因為各種原因通通陣亡,有些是本身今年就乾脆不招實習生了,比如谷歌hulu,還有就是hc大幅減少,還沒輪到我面就已經招滿了,比如paypal。外企本來hc就少的可憐,這麼一搞,有些公司可能只有個位數。我終於認識到,外企面試真的很看運氣,甚至能安排到面試都是一種幸運。所以我只能把重心放回國內企業,還有少數幾個外企,開啟海投模式。我投的還是挺雜的,國內的BAT,位元組,ponyai, 國外的微軟,hotstar,morgan,optiver。而且崗位上來看我C++開發,演算法,大資料都有嘗試,這不得不說到研究生坑爹的選了資料視覺化方向,結果進來發現大家都在寫前端。我在組裡做的和大資料有些相關,主要是資料視覺化所需要用的一些演算法的編寫和研究,比如互動式資料查詢,圖佈局,降維等等。但是這些經歷去投演算法,你沒有什麼ML,DL的經驗,去投後臺開發,你沒有分散式,網路程式設計的經驗,面大資料相關,勉強還算match,但你也沒接觸過那些大資料框架。所以就非常僵硬,基本去哪面都是靠著自己四作paper,冬令營經歷,ACM經歷來硬麵,這也得看面試官的面子了。在阿里提前批面了後臺開發,阿里雲API開發,搜尋推薦中臺開發等部門,我才意識到自己不適合面純業務的開發,更適合和大資料相關的崗位或者演算法的崗位。
這段時間有兩件事對我打擊還是蠻大的,首先是阿里的搜尋推薦三面掛掉,還是莫名其妙掛掉的,面試官讓我寫不拷貝記憶體的連結串列快排(巨難寫,讀者可以自己嘗試,不能用swap),之後又問了些跟我的方向八杆子打不著的問題,更讓人氣憤的是面完之後不告訴結果,在阿里的系統開放之前把我當備胎,還是系統開放之後第二天我連發兩次郵件才告訴我面試掛了。第二個事是微信一面就掛了,微信這邊簡直是奇葩中的奇葩,3月初我剛填完簡歷,我準備讓xj學長內推,結果簡歷直接被微信後臺的一個面試官拿走了,我跟他說我想去xj學長那個部門,結果他也沒有直接放我走,堅持面我還面的巨難無比。掛掉我之後我猶豫了下,準備想先去微信的ML崗位試試水(因為位元組當時面演算法面的還行),結果被資料分析的撈走了,我拒了資料分析的人之後,又被PCG的演算法崗位撈走,而且PCG那邊鎖了我三週沒有給我面試,氣的排到我之後,我直接拒了面試。這件事說明騰訊那邊一定要好好利用HR的資源,讓她幫你解鎖簡歷,提醒面試官面試。
總體來說這段時間的壓力是越來越大,我本來覺得就算谷歌掛了,好好努力看基礎知識,3月結束前拿個offer應該是問題不大的。誰知道阿里搜尋三面掛掉,騰訊那邊因為各種奇葩的原因基本就沒面,微軟面完之後遲遲沒有結果,就算是面的比較好的位元組,也在面完之後收到了結果清明節之後才會出的通知。看到同學都至少拿了一個offer,我心裡非常沒底。
4.1-現在 經歷考驗,offer收割
我之前認為3月份至少會有一個offer,從結果來看當時已經面完了位元組,hotstar,微軟,但是結果完全不知道,清明節後的那個星期,我壓力巨大,這幾家公司很有可能是把我當備胎,翻看了下牛客網,也有各種全部面完流程最後被拒的帖子。我想如果這周還沒有一個offer,我真得去投一個小公司保底了。幸運的是這周,位元組在週四發了offer,hotstar和微軟那邊也問到了我面試通過的訊息。
這裡一直沒有提阿里,阿里那邊搜尋推薦掛了之後,螞蟻資料技術部的lead又找到了我,這位lead之前就通過github認識了我,我因為想去搜尋推薦部的原因婉拒了,之後他看我係統開放之後沒有投遞就又來找了我。真的非常感謝這位lead,我在螞蟻那邊的面試非常順利,再加上筆試也是滿分,聽說是我是他們大部門第一個拿到offer的人。所以清明後那個星期突然就獲得了四個offer,我的壓力也終於緩解了下來。
騰訊那邊的情況依然一波三折,PCG把我放了之後,我終於被內推到xj學長那裡,誰知道一面就面了30分鐘,就把我掛了,理由似乎是我不太懂資料庫相關知識。我尋思我面哪個部門不是硬麵的,不都不懂那些框架嗎 = =。而且更諷刺的是3月初bgg學弟還邀請我去企業微信,說幫我跟lead說下肯定能過,我因為想面xj學長那裡就拒絕了,結果折騰一個月終於去面了結果被秒掛,真的是夠諷刺的hhhh。之後我找HR yy幫忙又推回了微信,很幸運的找到了一個比較match的部門,現在終於面完HR面了,非常感謝yy。
拿到幾個offer之後,我找hs,yc,gucci等同學以及一些職場的老人都談了下,位元組那邊是演算法崗,螞蟻和微軟都是大資料相關。考慮到過去一年自學ML無果,冬令營被虐,跟Z博搞科研直接被拋棄的慘痛經歷,我知道我過演算法崗純粹靠刷題,所以決定先拒了位元組的演算法崗,這個決定其實挺起來挺蠢的哈哈。大部分人應該會接位元組的吧,最核心的廣告部門的演算法崗,應該是搞演算法的人最想去的地方之一(身邊很多人都去了)。考慮到今年外企的形勢,杭州比較方便,螞蟻lead對我還挺好,最後決定accept螞蟻的offer。
從結果上來看,我除了谷歌之後投了9家公司,截止今天有3個已發offer(阿里,位元組,微軟),有2個比較穩的口頭offer(微信,hotstar),還有2個不知道結果的(morgan, optiver),還有2個因為時間關係組裡專案繁忙不準備再面了(百度,ponyai)。
國內公司:
位元組/廣告組/推薦:已發offer,已拒 螞蟻CTO線/大資料:已發offer,accept 微信讀書/OLAP:等offer
百度/C++:筆試過了,不準備再面
ponyai/SWE: 面到四面,最後一輪是team match, 就拒了
國外公司:
微軟/azure storage:已發offer,已拒 hotstar/推薦引擎:口頭offer
optiver/SWE:HR面已經面完 摩根/SWE:面完等待最終結果 谷歌/SWE:一面結束,已掛
對研究生期間的反思
回望這兩個月,感覺自己不容易,也太菜。首先在家辦公,自己的效率估計連學校的一半也沒有,自從去年投稿結束之後的一系列破事,我的身心狀態也沒有剛上研究生那麼好了,對於組裡的科研和工作一直是非常低的效率。其次,這兩個月不僅要準備實習面試,還有3月組裡的專案以及4月的投稿,有時候確實無法同時兼顧,這也是我初期掛了幾次面試的原因,因為我專案比較忙,所以就沒有報一些小公司練練手,本科時候考研也沒有實習面試過,所以一開始還是個小白。
如果你是一個準備讀研的CS本科生,我認為在選導師的時候應當更注重這個方向在工業界的match程度和這個方向是否適合你的發展,導師的名氣有時候是次要的。回想我當時選導師的時候,也投了3,4個老闆,當時覺得現在的老闆要我已經足夠幸運。說白了當時還是太嫩,或者說是運氣不夠好(當然運氣也不算差了hhh,能考研錄取不算運氣嘛)。
我的結論是如果你不想讀博,最好找一個不管你的老闆或者是軟工那種可以直接出去實習的,課上完後直接去大廠實習,遠比天天在實驗室待有前途,你讀研最大的收穫就是一張文憑,其他經歷並不值錢,很多和工業界做的相差太大,還不如大廠實習經歷來的香。
如果你想嘗試學術,像我這種在有名氣的學術老闆那裡讀研的,也能得到一些鍛鍊,但是其實不如一些年輕老師的機會大。反觀我們實驗室一作頂會論文的研究生,基本都是年輕老師那裡的,老師需要論文,也有空天天輔導學生,這樣學生才能最大程度的發展。
頂級大廠看中什麼
有幾項是如果馬上要面試無法改變的,你的性別,學歷,過往的競賽和論文經歷,這些每個公司看重點不一樣。還有些是可以在短時間提高,比如計算機基礎知識,刷題,面試技巧。不過最硬通貨的還是學歷,985CS出身,基本不會被刷簡歷,就算你大廠因為自身能力不足過進不去,小廠也是橫著走。對於頂級大廠,競賽和論文如果要非常有說服力的話,競賽一般是ACM金銀牌,kaggle金牌這種,論文一般是CCFA類一作or二作,有說服力,再次一點就不太行了。計算機基礎和麵試技巧,大家反正到時候多面面就上來了,刷題如果你不是競賽黨建議還是提早準備,今年阿里都要求必須筆試了,刷題必須得過一定的bar才行。其次的話建議大家儘早投遞,早掛早積累經驗,早過早拿offer。你面晚了就有可能進備胎池,進備胎池就是養蠱。
下面我會比較具體的談一下對於幾個公司招實習生的不同風格的看法:
阿里
阿里的部門非常多,而且每個部門是自己招聘,堪稱百團大戰。面試流程一般是3-5面,看評級和具體部門而定,整體流程較慢,基本只能面1-2個部門(一個部門掛了才能轉去另一個部門面嘛)。坊間一直流傳阿里的面試喜歡談人生,問些HR喜歡問的問題。我確實遇到過一些這樣的面試官,但是阿里的面試官風格還是各不同的,水平也參差不齊。阿里不太喜歡面試的時候手撕程式碼,對於基礎知識比較看重,對學歷和經歷也比較看重,總體是比較熬人的面試經歷。
位元組
位元組算是最近幾年炙手可熱的獨角獸,位元組的面試風格偏外企,一般是先問一些基礎問題,然後寫一道題,大約leetcode medium-hard難度。面試風格大多類似,面試官水平也較高,面試安排也很快,而且是疫情下唯一招這麼多崗位的大廠了。如果想做推薦演算法,位元組的廣告組是非常好並且不是很難進的選擇。不過位元組一般掛了就無法再面了。
騰訊
騰訊這邊理論上是可以面很多部門的,只要沒有坑爹部門撈了你然後忘了面試,提前批面個3,4個部門都問題不大。我主要面的是微信事業部,其他事業部不是很瞭解,而且前文也說了,我被騰訊的坑爹招聘系統坑慘了。微信這邊面試普遍不是非常尊重人,喜歡丟幾道leetcode medium-hard題,然後掛電話讓我們自己寫,問題是有時候那題意也不清楚,我能問誰去= =。有些部門不僅題目難,問計算機基礎也難的要死。這種部門說白就看運氣,碰到好的面試官就能過,我也遇到過比較nice的人。當然你就是大佬除外,遇到誰都能過。
谷歌,微軟,hotstar
這幾家放一起說吧,谷歌相比其他外企更重視交流能力和程式碼細節,對於一個問題也希望能探索更完美的解法,這也是它bar最高的原因。但是谷歌今年直接取消實習,看這個趨勢,以後大廠一哥的位置遲早不保了,國內本身hc就少,未來幾年也不要報太大希望。微軟在中國的hc一直挺多,也有很多重要的業務,面試也就是演算法題,懂的都懂,算是一個比較中肯的選擇。hotstar是北京一家面的印象挺不錯的外企,做的跟hulu差不多,也是視訊推薦網站,據說給的很高。這些公司面試基本就是做題,但是跟競賽題還是稍微有些區別,建議競賽爺還是應該熟悉下leetcode hard題的套路。只要多加練習是競賽黨理想的去處。
morgan, optiver
大摩和optiver都是金融公司,外企金融公司都是英文面試,面的我頭皮發麻,而且這兩家的最終結果還沒出。大摩的面試過程上看,還是體驗很好的,面試官一般會問一些你的專案,延伸問一些計算機基礎相關的知識。主要是你得用英文作答,就比較僵硬。大摩有一輪筆試,很簡單的那種,leetcode easy。後面有四輪面試,其中一輪也會讓你寫道題,也不是很難。其他輪就需要你用英語和麵試官吹牛逼(太難了)。說白了外企金融公司比較看重英語交流能力和計算機方面的綜合素質吧。這種公司大家就面面碰運氣吧。
總結就是國內企業儘量能找內推找內推,還有能認識HR,部門lead能幫你省去不少事,說白了國內企業嘛,都有些人情世故。當然能不能過還是得靠實力與運氣。IT外企一般就是拼刷題,水平到了基本沒問題,說是沒問題,但是現在好多外企都不招了hhhhh,所以能不能進也只能看命吧。外企金融我就不太瞭解了,如果你不是特別想去這個領域,那就面著玩唄。
如果是刷題很強,又覺得今年外企機會不多的,可以嘗試去位元組,ponyai進行投遞。今年的大環境太差了,希望大家在這種情況下還能保住飯碗,保證狗頭吧。