最全Google面試準備寶典 | 面試流程、考察範圍、如何準備...
作者 | JZ
專欄 | 九章演算法
Google的招聘流程涉及兩種面試。在每一輪面試中,Google都會從面試官那裡收集反饋,然後確定後續步驟。
面試流程
1.第一階段:電面(Phone Screen)
電面的面試官很有可能是你以後的同事或經理。
如果你申請的是軟體工程相關職位,電面將持續 30 到 60 分鐘。回答編碼相關問題時,你需要一邊在與面試官共享的 Google Doc 上編寫代碼,一邊清晰地闡述你的思路。建議你使用耳機或揚聲器,以便你能夠自由輸入相關內容。
電面會問到數據結構和演算法。使用你最擅長的編程語言寫 20-30 行代碼。根據如下步驟做編碼練習(注意你的代碼風格,參考文章:《Google 官方代碼風格指南》):
1、你會被問到一個開放式的問題。面試官會據此問一些問題,然後制定一些要求。
2、用一個演算法解釋這個問題。
3、將其轉換為可行的代碼。 (提示:因為有時間限制,不要想著一下子寫出完美的代碼,寫下你所想到的,稍後再進行修改,還要確保考慮了邊界情況和運行問題。)
4、優化代碼,測試用例並發現錯誤。
對於所有其他職位,電面將持續 30 到 45 分鐘。請準備好回答涵蓋職位相關知識的行為問題、假設問題或案例式問題。
2.第二階段:現場面試(Onsite)
一般情況下,會有 4 位 Google 員工(一些可能成為你以後的同事,還有一些是跨職能部門的員工)面試你,每個人的面試時間大約為 30-45 分鐘。
對於軟體工程職位的應聘者,面試官希望了解你的編碼技能和技術領域的專業知識(其中包括工具或編程語言,以及有關數據結構和演算法等主題的一般知識)。面試官通常會在這種討論中反覆提及與此相關的問題,就像討論實際工作中遇到的問題一樣,因為他們喜歡激發彼此的思想碰撞火花,進而了解不同的方法。因此,請準備好深入探討你的解決方案。超越自我界限,找到最佳答案,這很可能就代表了您的工作方式。
工程職位以外的應聘者將有機會從 4 個不同的方面突出展示自己的優勢:
一般認知能力:
面試官會提出一些開放式問題,以便了解你如何著手處理問題和解決問題。這些問題沒有標準答案,因此,他們最看重的是,你是否具備一定的能力,可以清晰地闡明你的思路以及你如何利用數據做出明智決策。
領導能力:
準備好談一談你曾如何利用自己的溝通和決策能力調動他人積極性。這種案例可以是你在工作期間或單位的領導崗位晉陞經歷,也可以是你帶領團隊取得成功(即便在你並未正式成為領導者的情況下)的經歷。
職位相關知識:
面試官希望可以了解你如何將自己的個人優勢與經驗相結合以帶來積極的影響。面試官不僅想知道你目前能做出的貢獻,還要了解你打算如何提升自身能力以便挑戰不同的職位,甚至包括目前尚不存在的職位。
Google 精神:
分享你如何獨立工作以及如何與團隊協作,如何幫助他人,如何在迷茫中找到方向,以及如何激勵自己居安思危、不斷進步。
在整個面試過程中,你可以放心大膽地請面試官明確說明面試問題,以確保你完全理解所問的問題。你也可以暢所欲言,面試面試官們,詢問有關工作、團隊和文化的問題,這樣做可以幫助你確定相應職位是否適合你。
如何準備
1.適用於所有職位的面試
預測可能遇到的面試問題:
你可以預測到面試官會向您提出的 90% 的面試問題。例如「為什麼想要這份工作?」、「你曾解決過什麼棘手的問題?」等等。如果你實在想不出來,可以閱讀《矽谷程序員面試寶典》,將你認為最有可能被問到的前 20 個問題寫下來。
計劃:
針對你列表上的每個問題寫下答案。這有助於你牢記相關問題及答案,以便在需要時能夠不假思索地說出來,這一點至關重要。
制定備用方案:
實際上,對於每個問題,建議你寫下 3 個答案。為什麼要寫 3 個呢?對於每個問題,你都需要另外準備一個同樣可行的不同答案,因為第一個面試官有可能不喜歡你講述的案例,這時,你就得寄希望於下一位面試官聽聽你的另一個案例,或許他/她能因此成為你的支持者。
說出想法:
面試官想了解你的想法,在面試中說出你的思考過程和決策。 請記住,面試過程中,不僅評估你的技術能力,更是要評估你如何處理問題並嘗試解決問題。 和面試官明確地說明和檢查他給出的假設,確保它們是合理。
用數據說話:
在回答每個問題時,你都需要通過具體案例來說明自己具備問題中所要求的能力。例如,如果你被問到「你是如何履行領導職責的?」這樣的問題,你應該回答:「我是一個具有協作能力/決策能力/諸如此類任何能力的領導,我來給你講一下當我在…」
遇到問題詢問:
面試題可能是有問題的,面試官故意不提,來深入了解你在技術難題中所看重的範疇和信息。 他們是想看看你是如何參與解決問題的。 一定要談談你的思考過程,如果遇到疑問,隨時提問。
優化:
想想如何改進你提供的解決方案。在許多情況下,你一開始的解決方案可能需要一些細化和進一步的解釋。 如果有必要,從暴力解決方案開始,改進它 - 要讓面試官知道你在做什麼以及為什麼。
練習:
每個人都可以通過不斷練習獲得進步。大聲複述你的面試答案,直到你可以簡明扼要地講述每個案例。
2.適用於軟體工程和技術職位的面試
編碼實踐:
你可以在 LintCode、CodeLab、Quora 和 Stack Overflow 等網站上找到一些編碼問題示例。美國大公司面試真題訓練和 Google Mock Interview 也值得一做。面試會要求手寫,所以請在紙張或白板上練習編寫代碼。一定要測試你的代碼,並確保它易讀而且沒有錯誤。不要糾結於小的語法錯誤,比如對於給定的方法用哪個子串,直接選擇一個,讓面試官知道就可以了。
編碼:
至少擅長一種編程語言,最好是C ++,Java,Python,Go或C。如果你擅長API、面向對象設計和編程,知道如何測試代碼,以及知道如何處理邊界情況更好。請注意:面試注重的是概念理解而不是記憶。
演算法:
掌握用自下而上和自頂向下的演算法解決問題。知道演算法的複雜性,以及如何優化/改變演算法。熟悉解決Google問題的演算法:排序,分治法,動態規劃,貪心,遞歸或有關數據結構的演算法。知道Big-O符號(例如運行時間),並準備好像Dijkstra和A *這樣的複雜演算法。在編寫代碼之前,建議你討論或闡述你所想到的演算法。
排序:
熟悉常見的排序類型以及它們有效的輸入數據類型。考慮運行時間和空間。例如,在特殊情況下,插入排序或基數排序比通用的快速排序、歸併排序、堆排序答案要好得多。
數據結構:
研究儘可能多的數據結構。最常使用的數據結構是數組,鏈表,堆棧,隊列,哈希集合,哈希圖,哈希表,字典樹,樹和二叉樹,堆和圖。了解內部的數據結構,以及哪些演算法傾向於和哪個數據結構一起使用。
數學:
一些面試官會提一些基本的離散數學問題。尤其在Google,因為Google的工作經常會接觸計數問題、概率問題和其他離散Math 101情況。在面試之前花上一些時間,記住基本概率理論和組合的基本要素。熟悉n選擇問題和類似的問題。
圖:
考慮一個問題是否可以應用於距離、搜索、連接、循環檢測等圖形演算法中。有三種圖形表示方法:對象和指針、矩陣、鄰接列表,你需要熟悉每個方法及其利弊。掌握基本圖遍歷演算法、廣度優先搜索和深度優先搜索。了解它們的複雜度,了解什麼情況該用哪個,以及如何在實際代碼中實現它們。
遞歸:
許多編碼問題涉及遞歸的思想和用遞歸編碼給出解決方案。對於可以用迭代的方法解決的問題,用遞歸找到更優的解決方案。
其他問題
著裝:
大部分面試對著裝都沒有特定的要求,但招聘人員會告知你如何著裝最得體。如果你不確定哪種風格適合自己,那就做你自己,穿你認為舒適的衣服就好。
如何組織面試答案:
回答問題時,請務必說明你是如何得出解決方案的,因此,你可以想到什麼就說什麼。
做準備工作時要考慮的有幫助的問題:
獨立工作以及參與團隊協作時,你如何讓自己的能力得到充分發揮?你在求學時和職場中遇到過哪些挑戰?你是如何戰勝這些挑戰的?你有哪些技能和經驗可作為你申請本職位的優勢,為什麼?
如果你沒有理解面試問題:
可以請面試官明確說明,且回答問題時可視需要從容作答。
歡迎關注我的微信公眾號:九章演算法(ninechapter)。
精英程序員交流社區,定期發布面試題、面試技巧、求職信息等。
推薦閱讀:
※當我們談論面試時,我們在談論什麼
※顏值對面試會有影響嗎?
※OpenDoc - 面試官行為規範
※如何做好面試——單面and群面
※在職跳槽, 半年拿下Facebook & Microsoft Offer