我曾經也面過G家然后還通過了,只是最后還是選擇了FB…… 不過以我之后多年的面試經驗,以及認識很多G家的工程師和HR,對這個問題還是很有心得的。
首先G家的面試流程會涉及到兩種面試形式,每一輪面試官都會給出反饋,然后確定后續的步驟。
一、面試流程
第一階段:電面(Phone Screen)
這一輪的面試官很有可能是你以后的同事或manager。
如果你申請SDE崗位,這一輪將持續 30~60 分鍾。回答編碼相關問題時,你需要一邊在與面試官共享的 Google Doc 上編寫代碼,一邊清晰地闡述你的思路。
Tips:建議使用耳機或揚聲器,以便你能夠自由輸入相關內容。
電面會問到數據結構和算法。使用你最擅長的編程語言寫 20-30 行代碼。根據如下步驟做編碼練習:
- 你會被問到一個開放式的問題,面試官會據此問一些問題,然后制定一些要求
- 用一個算法解釋這個問題
- 將其轉換為可行的代碼(因為有時間限制,不要想着一下子寫出完美的代碼,寫下你所想到的,稍后再進行修改,還要確保考慮了邊界情況和運行問題)
- 優化代碼,測試用例並發現錯誤
第二階段:現場面試(Onsite)
一般會有4輪面試,(其中一些面試官可能成為你以后的同事,還有一些是跨職能部門的員工)每輪的時間大約在45分鍾。
如果面試SDE崗位,面試官會更看重你的編碼技能和技術領域的專業知識。(包括工具或編程語言,以及有關數據結構和算法等主題的一般知識)
面試官通常會反復提及相關的問題,就像討論實際工作中遇到的問題一樣,因為他們通過雙向溝通碰撞思維邏輯,也能考察出你的底層技術是否扎實,溝通能力是否流暢,以及邏輯思維是否嚴謹。
需要注意的是,今年受疫情影響,包括Google在內的大廠的onsite都改成了遠程面試(VO),並且隨着疫情的擴散,大廠也一次次在推遲work from home的日期,目前宣布到明年第一季度開放辦公室的較多,雖然不確定明年會不會繼續延期,但今年的面試肯定都是VO了。
在說回實際面試,很多人往往不知道該怎么跟面試官溝通,可能是:
- 平時刷題達人,一面試就大腦放空
- 明明有解題思路,卻跪在了英語口語不好,表達不出
- 對Behavior Question無能為力,總是掉進面試官的套路里
- 面試時不知道問什么問題,全場尬聊……
那么針對這些面試“攔路虎”,推薦試聽體驗《面試軟技能指導 - BQ / Resume / Project》,由前Google工程師&資深面試官分享,從簡歷指導、全英文模擬面試、行為類問題、薪資談判等幾個大方向解決大廠面試難點。
第一章《除了刷題,還有哪些技能是拿到offer不可或缺的要素》開放免費試聽,還能和老師在線英文模擬面試。
二、如何准備面試?
適用於技術職位
1、編碼實踐
你可以在 LintCode、CodeLab、Quora 和 Stack Overflow 等網站上找到一些編碼問題示例。美國大公司面試真題訓練和 Google Mock Interview 也值得一做。
面試會要求手寫,所以請在紙張或白板上練習編寫代碼。一定要測試你的代碼,並確保它易讀而且沒有錯誤。不要糾結於小的語法錯誤,比如對於給定的方法用哪個子串,直接選擇一個,讓面試官知道就可以了。
2、編碼
至少擅長一種編程語言,最好是C++,Java,Python,Go或C。如果你擅長API、面向對象設計和編程,知道如何測試代碼,以及知道如何處理邊界情況更好。
Tips:面試注重的是概念理解而不是記憶。
3、算法
掌握用自下而上和自頂向下的算法解決問題。知道算法的復雜性,以及如何優化/改變算法。熟悉解決Google問題的算法:排序,分治法,動態規划,貪心,遞歸或有關數據結構的算法。
知道Big-O符號(例如運行時間),並准備好像Dijkstra和A *這樣的復雜算法。在編寫代碼之前,建議你討論或闡述你所想到的算法。
4、排序
熟悉常見的排序類型以及它們有效的輸入數據類型。考慮運行時間和空間。例如,在特殊情況下,插入排序或基數排序比通用的快速排序、歸並排序、堆排序答案要好得多。
5、數據結構
研究盡可能多的數據結構。最常使用的數據結構是數組,鏈表,堆棧,隊列,哈希集合,哈希圖,哈希表,字典樹,樹和二叉樹,堆和圖。
了解內部的數據結構,以及哪些算法傾向於和哪個數據結構一起使用。
6、數學
一些面試官會提一些基本的離散數學問題。尤其在Google,因為Google的工作經常會接觸計數問題、概率問題和其他離散Math 101情況。
在面試之前花上一些時間,記住基本概率理論和組合的基本要素。熟悉n選擇問題和類似的問題。
7、圖
考慮一個問題是否可以應用於距離、搜索、連接、循環檢測等圖形算法中。
有三種圖形表示方法:對象和指針、矩陣、鄰接列表,你需要熟悉每個方法及其利弊。掌握基本圖遍歷算法、廣度優先搜索和深度優先搜索。了解它們的復雜度,了解什么情況該用哪個,以及如何在實際代碼中實現它們。
8、遞歸
許多編碼問題涉及遞歸的思想和用遞歸編碼給出解決方案。對於可以用迭代的方法解決的問題,用遞歸找到更優的解決方案。