02.27 2020 年的谷歌面經:“遠程編程面試”流程

我剛剛參加過谷歌的面試,迫不及待地想和大家分享一下面試過程中的苦與樂,希望大家能從文中瞭解到谷歌的面試流程,知道會發生些什麼。我也會分享一些心得,讓大家知道如何準備面試和避免犯錯。

如果你想看的是成功經驗,那這篇貼子很可能會讓你失望了。我沒能通過面試。整個面試過程對我來說還是非常有趣的,併為我開啟了職業生涯的另一扇大門。關於這一點我會在文末細說。為了保護相關谷歌員工的隱私,文中涉及的人名和身份信息都是改動過的。

準備階段:面試前奏

我的故事開始於去年十月,那是一個下雨的清晨。谷歌招聘專員 Olivia 給我發了封郵件,標題是“有興趣來谷歌解決些高難度的工程問題嗎?”當時我剛剛做完了幾個項目,也正在尋找新機會。有機會去谷歌工作的話,誰都不會拒絕,所以我馬上就回復了:“當然願意!”同時和她約定在谷歌 Hangouts 上進行更進一步的溝通。

兩天後,我們在 Hangouts 上開始了對話。Olivia 向我描述了在谷歌工作是多麼令人興奮的事,以及招聘流程是怎樣的。我想向她瞭解更多關於招聘崗位的細節,她說現在是為位於波蘭首都華沙的新公司進行招聘,主要工作是對企業客戶的谷歌雲功能進行開發和支持。我想進一步問崗位的具體職責,屬於哪個部門,結果她說在現在這個階段還不必關心這些細節,等我通過招聘流程中規定的所有階段之後,就可以自己選擇心儀的部門和崗位了。這一點讓我覺得有些不舒服,但我想還是可以堅持一下的。

不爽的感覺#1:萬一我對谷歌的所有團隊都沒興趣怎麼辦?

Olivia 告訴我,谷歌的面試流程分三個階段:首先會有兩場關於算法和數據結構的編程面試。如果成績很優異,可能一場就可以過關,但對大多數的面試者都會安排兩場。然後是在某個谷歌辦公室舉行的現場面試,包括好幾輪編程面試(還來……),一次系統設計面試,還有必不可少的壓軸大戲“谷歌範兒(Googleyness)和領導力”。最後一項面試會檢驗你能否很好地融入公司。

小貼士#1:要通過谷歌的面試是很難的,可能會耗時若干個星期。你應該全力以赴,認真準備。

Olivia 還說,就算你能排除萬難通過所有的面試到達最後一關,也不代表肯定會被錄用。因為谷歌的面試流程還有另外一步,而且是不需要你本人在場的。在最後一步,幾個資深谷歌人(他們並不認識你,也沒有面試過你)會查看你的簡歷,閱讀面試記錄,一起討論你是否是谷歌想要找的人。只有得到了他們的同意,你才能得到這份工作。這又是讓我不舒服的一個地方。

不爽的感覺#2:就算你以全 A 的成績通過所有面試,也還是有可能沒辦法進谷歌工作,因為那些老谷歌人有可能會覺得不該錄用你。

與 Olivia 談過之後,我感覺自己被錄用的機會非常渺茫,但我決定就從豐富自己經歷的角度來說,我也要努力在面試的道路上走得更遠一些。

第一步:遠程編程面試

Olivia 幫我安排了第一次遠程編程面試。在等待面試的時候,我在 geeksforgeeks 網站上做了許多題,並完成了上面的“面試準備必學課程”。我並不太推薦這個,因為課程上的問題都特別抽象,而且平臺也有很多問題。但對於第一次編程面試來說,還是綽綽有餘的。

面試還是在谷歌 Hangouts 上舉行的。面試官簡要地自我介紹了一下,就出了一道題給我做。我不能說太多這道題的具體細節,畢竟這樣不合適,而且也不會對你有什麼幫助。我只能說這是一個象棋設計中的貪婪算法問題。我花了 50 多分鐘完成了這道題,幾乎沒用面試官給我任何提示。我用 Python 給出了答案和相應的測試。這類面試一般都是在某種共享筆記本上進行的,這一次我用的是 Google Docs。老實說,我還是挺喜歡這個面試官和這道考題的。

我在忐忑不安中等待著結果,也不知我到底表現如何。過了一個星期,我忍不住去問了問面試官,才總算為這個階段畫上了一個句號。後來才知道原來每輪面試都是這樣的:總要等上一個星期,總要問問面試官,然後才會有面試結果。

小貼士#2:別不好意思,直接找面試官問結果就好了。

Olivia 說我的面試結果是“位於平均水平之上”。另外有點不足之處在於我解決問題花的時間太長了:本來題目設計是不能超過 45 分鐘的。因此 Olivia 為我安排了第二輪遠程編程面試。這時候我總算知道了,谷歌認為我的水平在軟件開發者中只能算一般,而不是傑出。不過我還是會繼續努力。

一個星期之後舉行了第二輪遠程編程面試,過程和第一輪非常相似。考題也非常簡單。這是一個組合問題,要用上數學公式,並且要仔細考慮邊界條件。我花了 40 分鐘就完成了,可以這麼快速而又優雅地解決這個問題,這讓我非常高興。於是我又花了一個星期等結果,如果通過,下一輪就要到波蘭去一趟,進行現場面試了。

等待持續了一個星期,在這段時間內面試官沒有回覆我的任何問題。Olivia 回覆說她出差了,等回到公司之後就會告訴我進一步的消息。面試結束後過了兩個星期,我才接到了 Olivia 打來的一個電話,說我的面試結果仍是“位於平均水平之上”,不足之處在於我用了太多的偽代碼。她也提到我的測試做得很好。可能原因在於四年前我讀過《谷歌軟件測試之道》這本書吧,誰知道呢。

小貼士#3:你的每一行代碼都要被測試到。當面試官讓你對代碼做測試時,你就直接把這句話說給他聽,然後再開始寫測試用例。

談話的開頭是如此令人愉快,接下來 Olivia 卻告訴我她不知道下一步的安排是怎樣的,我還要再等等看。又過了一個星期,Olivia 給我發了封郵件,告訴我下一個面試官叫 George,這是個倫敦公司的同事,我還要再通過兩輪遠程編碼面試才行。接下來的事情 George 會為我安排。

當天晚些時候我和 George 打了個電話,他說我的編程面試會在一個月內完成,仍然是遠程的方式,具體日期可以由我來選擇。他沒有透露做遠程面試的原因,但說了接下來的編程難度會遠大於之前。如果我能通過,接下來就會受邀去他們辦公室現場面試。我考慮了一下,覺得既然已經有了開頭,我就該一直繼續下去,總要得到個結果。

第二步:更多的遠程編程面試

於是我開始準備另外兩場面試。這次我用的是 HackerRank 和它的“面試準備工具集”。我推薦這一套工具,上面的體驗和實際發生的面試非常相似。

小貼士#4:要準備谷歌的編程面試,最好用 HackerRank 和它的“面試準備工具集”做練習。

新年剛過,面試的安排來了:第一場安排在一月 20 日的上午 11:00(時長 45 分鐘),第二場直接安排在第一場結束的 15 分鐘之後。這實在太讓人意外了。我問 George 能不能把面試安排在兩天,一天一場?結果回覆很讓我意外:“很不好意思,Ilya,我們需要把面試安排在同一天,這樣才能讓你參與的面試環節少一些,也讓面試更高效一些”。這一點也讓我挺不舒服的。我等他們等了好幾個星期,結果反過來他們現在想“更高效些”。

不爽的感覺#3:谷歌不會遷就你的時間安排。

這一次的面試題對我來說就比較難了。第一道是棘手的圖搜索問題,我開始時只想到了窮舉的方法,後來想明白其實可以用圖的方案來解決,但為時已晚。

第二道題是關於“2048 遊戲”的。這是頭一次我沒能想明白題面到底是在考什麼,可能跟我從來沒玩過 2048 遊戲也有關。這道題要求我能在 2048 遊戲中取勝,並且用比較優雅的方式安排好下個面板的狀態。過了兩天我才想明白,這 2048 遊戲實際上是“15 拼圖”遊戲的變種,用 A* 搜索算法就可以找出解決方案。

很明顯,這是我的錯,準備面試的時候我忽略了圖算法。不要再犯我的錯,我在開篇時就提過,最好全力準備面試。

一個星期之後,George 給我打了個電話,告訴我沒能通過面試,建議我努力補補算法複雜度和圖理論相關的知識。他還提到一年後我可以再次申請谷歌的工作。

這次谷歌面試經歷帶給我的收穫

從一開始我就知道成功的概率很小,但我還是收穫頗豐的,主要就是經驗,各方面的經驗,而且對谷歌的內部工作機制有了一些瞭解。谷歌總是宣傳她的工作條件有多麼好,這也許是事實,但對我來說並非如此。這幾個月的面試經歷告訴我,其實谷歌也就是另一家大型公司而已,內部也有著她自己的官僚問題、模糊的流程、奇怪的規則,等。大家想了解一下谷歌的另一面的話,可以讀讀 Michael Lynch 的貼子:“為什麼我告別谷歌,成了自由職業者”。

接下來的安排

經歷了這次谷歌的艱苦卓絕的面試,又在若干家小公司面試之後,我覺得我不適合在別的公司打工。我想成為一名企業家,創辦自己的公司。很明顯第一步就是成為自由職業者。我有著豐富的全棧網頁應用開發經驗(我最擅長的技能包括 Node.js/Javascript/React/Docker,你可以在我主頁上“我的項目”頁面瞭解一下我的項目經驗)。

現在我正在積極尋找客戶和提高知名度。如果我可以幫你做什麼項目,或者你知道哪裡在尋找遠程的全棧開發者,請立即與我聯繫。我很願意瞭解你的業務,也可以免費為你提供一些建議。如果我們雙方都覺得可以合作,那就可以更進一步。合作不成也沒關係。請直接通過郵件 [email protected] 聯繫我。


分享到:


相關文章: