全文共5789字,預計學習時長18分鐘
作為四大科技巨頭之一,谷歌公司面試無疑是對所有軟體開發者技術能力的終極檢驗,沒法靠運氣或走捷徑,只能通過努力的工作和準備。
好消息是,谷歌完全公開他們對於員工的期望。面試者對谷歌的面試流程和公司文化了解越多,就越有機會成功。本文將深入探討谷歌的編程面試和行為面試,助你成功拿到offer。
1. 谷歌面試概述和常見問題
谷歌面試概述
整個面試過程需要兩個月到兩個半月。谷歌對軟體開發者總共進行5到7次面試。其中包括最初與谷歌招募者的電話面試,接著是與不同谷歌員工進行的4到6次現場面試。所有編程面試題均要在白板、谷歌文檔(Google Docs)或者Chromebook上完成。
谷歌一般僱傭T3級別的面試者(T11是最高級別)。T3是具有本科或碩士學位的入門級全職軟體工程師,其年薪大約是11.7萬美元。谷歌首選以下幾種程式語言:Java、C++、CGo和Python。
谷歌面試中可能遇到以下三種編程問題:
· 系統設計問題:旨在評估面試者在考慮伸縮性的情況下進行高級系統設計的能力。
· 編程面試挑戰:旨在評估面試者的數據結構和算法知識,這些知識用以優化常規問題的解決方法。
· 一般分析問題:旨在通過數學或基於觀點的問題,來評估面試者的思維過程。
谷歌面試有何獨特之處?
谷歌的編程面試流程雖與其它大型科技公司相似,但有一些獨特之處,是什麼呢?
明確的期望。谷歌的面試流程完全透明,因此在準備時無需臆測。以下是谷歌提供的資源:
· 對軟體工程和技術角色的期望
· 如何進行谷歌環聊面試
· 谷歌如何招募人才
在谷歌文檔中編程。在最初的電話面試中,面試者需要在谷歌文檔中編程。通過練習才能在該平臺上進行熟練編程,而學會這一技能很重要。點擊這裡閱讀如何為技術面試設置谷歌文檔。
評分等級。依據四個招聘標準,對每個面試者按1-4分打分,3分是錄用的最低門檻。
招聘委員會。谷歌旨在實現無偏見的招聘,因此設立了招聘委員會來對所有候選人進行招聘篩選。
四個招聘標準。在候選人審核過程中,谷歌更重視認知能力、谷歌範兒(Googleyness)、領導能力以及技術技能。
谷歌希望在候選人身上看到什麼?
認知能力。總體認知能力是指解決問題的能力、抽象思維、好奇心和學習意願。谷歌尋求的是那些能對自己、團隊和項目進行複雜思考的聰明人。
領導能力。谷歌聘用具有領導力的候選人。對於谷歌來說,領導力是在需要時解決困難問題的能力,同時能加強道德和安全。谷歌也尋求那些善於放手,讓他人自我組織,促進開放交流的人。
谷歌範兒。與所有其它組織一樣,谷歌具有特定的公司文化,並尋求與其價值觀相契合的候選人。谷歌的主要關注點是人;他們在保持道德的同時,關心包容性和人們生活的改善,以小團體和鼓勵創新創造、開放交流的休閒環境聞名。
技術技能。谷歌聘用具有極強編程能力的人,並主要基於對概念的理解而非死記硬背來評估技術技能。主要通過以下方面來評估編程技能:
· 算法
· 排序
· 數據結構
· 圖表
· 循環
· 面向對象編程
· 大O符號
· API(應用程式接口)
· 如何測試代碼
· 數學運算(如n選k程序)
2. 谷歌面試過程
第1步. 面試前
準備。準備編程面試是一場持久戰。筆者建議提前3個月準備。面試者需要做一個準備計劃以免偏離軌道。看看由招聘經理制定的為期12周的最權威編程面試準備路線圖(https://www.codinginterview.com/interview-roadmap)。請確保使用谷歌首選的語言來準備,如C++、Java、Python、Go或C。
簡歷撰寫技巧:使用指標描述。嘗試使用公式:通過Z,實現由Y度量的X。例如,如果簡歷上寫道:「減少了伺服器查詢響應時間」,應將其改為:「通過重構API,伺服器查詢響應時間減少了15%。
更新簡歷。面試者的簡歷需要在6秒之內吸引谷歌招聘者的注意。簡歷過於粗製濫造,是有才能的申請者錯失面試機會最常見的原因之一。請務必花一些時間更新簡歷。
如果簡歷通過篩選,招聘方會安排電話面試,以了解面試者的更多技能與經驗。從簡歷通過到電話面試大約需要一周的時間。
第2步. 谷歌員工對應聘者進行預篩選
電話面試將持續45~60分鐘,可能在谷歌環聊(Google Hangout)上進行。谷歌員工將使用與數據結構和算法相關的編程問題進行面試。面試者需要在谷歌文檔上使用20~30行代碼來解決這些問題。
能在工作中交流思維過程至關重要,這是谷歌評估面試者總體認知能力的方式。
面試者可能會遇到開放式編程面試題。進一步提出疑問,闡明問題是展示解決問題能力的好方法。如果面試者提前完成挑戰,可以在剩餘時間裡尋找優化方法並檢查錯誤,一定要考慮到細節問題。
現場面試
面試者通過預篩選後,將進行現場面試。面試者需要與4~6名谷歌員工會面,每人45分鐘。
現場面試的主要關注點是編碼,尤其是數據結構和算法。面試者需要在谷歌員工提供的白板或谷歌筆記本上編寫代碼。最好提前詢問招聘方,以便進行適當練習。
現場面試還包括行為面試問題,用以評估面試者作為潛在員工的資質。谷歌希望面試者符合公司的價值觀,所以也一定要做好行為面試的準備。稍後將繼續討論。
被錄用/未被錄用
面試官的評分等級為1~4分,3分是錄用的最低標準。面試結束後,招聘委員會將根據反饋做出最終決定。該過程需要幾周時間,如果很長時間過去還沒有回音,可以發送一封提醒郵件。
面試者被錄用後就可以準備討論薪資和就職日期了。因此很有必要溫習一下談判技巧。如果沒有被錄用,可以在六個月後再次申請,這將為面試者留出充分時間來做準備,並改進弱點。
3. 編程面試問題指南
練習編程問題需要付出很多的時間和努力。下面將對最常見的谷歌編程問題進行分析,並提出面試準備的可行建議。
最常見的15個谷歌編程面試問題
1.找到K個最接近的數。
問題陳述:給定一個排好序的數字數組和2個整數——K、X,在數組中找到K個最接近X的數。返回排序後的數字。X不一定出現在數組中。
2.求數據流中第K大的元素。
問題陳述:設計一個類,在數據流中高效地找到第k大的元素。該類需滿足以下兩個條件:
· 該類的構造函數能接收一個整數數組,包含數據流的初始元素和整數K。
· 該類應該公開一個函數add(int num),該函數將存儲給定數字並返回第k大的數字。
3.刪除給定鍵的節點。
問題陳述:給定一個鍊表表頭和一個鍵。需要刪除包含該鍵的節點。
4.鏡像二叉樹。
問題陳述:給定一個二叉樹的根節點,交換所有節點的左右子節點。
5.找到和的所有路徑。
問題陳述:給定一個二叉樹和數字S,找到所有從根到葉節點的路徑,每一路徑的所有節點值等於S。
6.找出最多有K個不同字符的最長子字符串的長度。
問題陳述:給定一個字符串,找出最長子字符串的長度,其中最多有K個不同字符。
7.查找無重複字符的最長子字符串。
問題陳述:給定一個字符串,看其字母能否重排,使任意兩個相同的字母不相鄰。
8.劃分等和子集。
問題陳述:給定一組正數,判斷能否將其劃分為兩個子集,使得兩個子集的元素和相等。
9.判斷數字是否有效。
問題陳述:給定一個輸入字符串,判斷它是否為有效數字。簡單起見,假設輸入中不存在空白字符。
10.複製具有任意指針的鍊表
問題陳述:給定一個鍊表,該節點有2個指針。第一個是常規的next指針。第二個為arbitrary_pointer(任意指針),可以指向鍊表的任一節點。
面試者需要編寫代碼,實現對給定鍊表的深度拷貝。這裡的「深度拷貝」指對原始鍊表的任何操作(插入、修改和移除)都不會影響拷貝的鍊表。
11.輸出平衡大括號組合。
問題陳述:給定值N,輸出N組大括號的所有組合,以使其平衡。
12.給定多個任務,判斷能否安排所有任務。
問題陳述:有N個任務,從0標記到(N-1)。每個任務都有一些需要在安排之前完成的先決任務。給定任務數量和先決任務的列表對,判斷能否安排所有任務。
13.實現LRU緩存
問題陳述:最近最少使用(Least Recently Used,LRU)是一種常見的緩存策略。它定義了從緩存中驅逐元素的策略,以便在緩存滿時為新元素騰出空間,這就意味著需要首先刪除最近最少使用的數據。
14.找到最大值和最小值的相應下標
問題陳述:給定一個排序的整型數組,返回給定鍵的最大和最小數組下標。如果找不到,返回-1。數組長度可達數百萬,且存在許多重複項。
15.合併重疊的時間間隔
問題陳述:給定一個區間數組(列表)作為輸入,每個區間都有開始和結束時間戳。輸入數組按開始時間戳排序。要求合併重疊的時間間隔,並返回輸出數組(列表)。
12周準備路線圖
準備谷歌編程面試是有技巧的。它需要數月的準備和練習,以掌握正確的概念,培養自信心。下面這份權威的12周準備計劃,已成功幫助許多人在大公司找到工作。
第0周。基於谷歌的期望和自己的偏好,選擇一門程式語言。
第1周。複習所選程式語言的基礎知識,這樣會大大減少在面試中犯錯的機率。回顧一些概念,如怎樣從控制臺讀取輸入、聲明以及使用二維數組。
第2&3周。熟悉數據結構和算法。這對於谷歌的編程面試至關重要。
面試者應該知道的數據結構:數組、鍊表、堆棧、隊列、樹、圖表、堆排序、散列集、哈希映射/哈希表。
面試者應該知道的算法:廣度優先搜索、深度優先搜索、二分查找、快速排序、歸併排序、A*算法、動態規劃、分治法。
第4&5周。在Educative或Leetcode網站上練習數據結構和算法挑戰。先從簡單的編程問題入手,由淺入深,逐漸增加難度。
第6~8周。練習複雜的編程問題並計時。考慮每種解決方法的運行時間和空間複雜度。
第9&10周。學習系統設計面試問題。這是面試過程中不可或缺的一部分,會影響面試者的招聘水平。
第11周。學習作業系統(OS)和並發概念。這些問題用於評估面試者的招聘水平。複習多線程原理,以在谷歌的面試梯隊中名列前茅。
第12周。學習面向對象編程和設計方面的問題。這些問題能評估面試者的批判性思維和基於項目的問題解決能力。
練習編程面試題的小技巧
練習編程沒有捷徑。以下是指導面試者做好準備階段的一些基本技巧。
注意時間。編程面試會限時,因此請務必注意時間。如果面試者習慣了在有限時間內進行準備,那麼實際面試中的壓力會小得多。
了解常見陷阱。谷歌面試常見的三大陷阱:不知道算法的大O符號的複雜性,不了解谷歌的期望,不能清楚表達問題的解決過程。一定要記住這三大陷阱。
清楚地表達過程。谷歌想了解面試者的思維過程。在練習時要習慣於解釋自己為什麼這樣做以及正在做什麼。那些對自己工作方式有著清晰認識的人總會脫穎而出。
知道自身弱點。每個人都有弱點,在準備時要注意自己的弱點。谷歌已經聲明,其關注面試者的思維過程,因此,如果遇到弱點,就說出來,以表明自己渴望提高的決心。
4. 行為面試問題指南
軟體開發候選人常常會忽視行為面試。但事實上,這可能是決定面試者能否成功的關鍵一役。谷歌非常注重其價值觀,所以如果面試者對於這些問題毫無準備,面試官很容易發覺。文化和行為面試可以淘汰那些技能過關但價值觀不契合的面試者。
谷歌行為面試一般問什麼?
谷歌的行為面試旨在測試面試者在與就業相關的積極/消極情形或衝突中的表現。行為面試幫助面試官判斷面試者是否是他們願意與之共事的人。這些面試會要求面試者對過去的行為或表現做出反思,以測試其在壓力下的表現和對專業精神的理解。問題可能有:
· 過去的經歷
· 假設的情況
· 價值觀
如何準備行為面試?
谷歌已經列出了準備行為面試問題的八個步驟。了解這些步驟,用它們來做準備,形成自己的答案。
· 預測未來。面試者可以準備一些可能被問到的問題。
· 練習。谷歌鼓勵面試者大聲練習,以構建更清晰的答案。
· 計劃。寫下答案,進行有策略的練習。不要忽略行為問題。
· 闡明。面試者可以使用開放性問題來表現自己作為候選人的價值。
· 數據驅動。谷歌期望看到與有形的增長、變化或技能示範直接相關的答案。
· 制定備選計劃。谷歌建議每個問題準備三個答案。這能幫助面試者準備各種有趣的答案。
· 解釋。谷歌要求面試者解釋其思維過程和決策制定。明確闡述假設和過程能幫助面試者脫穎而出。
· 提高。谷歌鼓勵面試者始終專注於自我提高。面試者可以先從粗糙的答案開始,然後努力改進。
10個常見的行為面試問題
谷歌編制了其面試官常用的行為面試問題清單,來看一下:
· 描述你的工作歷程。雖然該問題沒有錯誤答案,但它可以評估面試者的經歷會對其作為開發者的生活產生的影響。一個好的答案應該深入到自己的工作流程、工具和團隊合作能力之中。
· 關於自己,你還有什麼想介紹的嗎?一個好的答案應該顯示面試者所具備的可能對谷歌有益的額外技能。面試官還會尋找軟技能,看看面試者是否具備有益於團隊的非技術經驗。
· 講述你遇到危機和失敗的經歷。該問題旨在了解面試者是如何學習和面對困難的。一個好的答案應表明面對失敗時的誠實和學習的積極性。
· 你最自豪的成就是什麼?該問題旨在建立多元化的團隊。就長遠來看,谷歌藉此尋找面試者的專長、成就感和價值觀。一個好的答案應該超過現有成績,並能觸及自己作為人的意義。
· 你的加入能對團隊產生什麼影響?該問題用於考察面試者在集體中與他人合作的能力。一個好的答案應該表明面試者對谷歌價值觀進行了仔細研究。最佳答案應與谷歌的目標相吻合。
· 談談你工作過的非結構化環境。該問題通過面試者對非結構化的定義來評估其工作風格。一個好的答案應該將工作風格與工作崗位聯繫起來。面試者能否適應一個預定義的結構呢?
· 你最喜歡的谷歌工具是什麼?你會怎樣改進它?該問題用於評估面試者對谷歌的了解、面試者的創造性和創新意願。一個好的答案應該基於數據但不過於技術化;確保專注於想要改變的原因。請記住:這種改變應使人們的生活更便利。
· 你所了解的最複雜的事是什麼?該問題用於評估面試者的技能、溝通技巧以及向他人解釋複雜性的能力。一個好的答案應該更專注於傳達方式的有效性,而非信息本身。
· 谷歌範兒(being Googley)對你而言意味著什麼?該問題是展示面試者文化適應性與價值觀的好機會。一個好的答案應避免使用太多術語,但能說明谷歌文化的潛在價值。
· 你害怕什麼?該問題能看出面試者的弱點和壓力源。一個好的答案應該是自我反思的,其目的並不是簡單地克服恐懼,而是要了解它們如何影響面試者的。
現在你應該已經了解了谷歌面試的過程、谷歌與其它公司面試的差異,以及如何準備谷歌面試。祝你面試順利!
留言點讚關注
我們一起分享AI學習與發展的乾貨
如轉載,請後臺留言,遵守轉載規範