軟體開發者的終極夢想:揭秘谷歌編程面試

2020-12-28 讀芯術

全文共5789字,預計學習時長18分鐘

圖源:unsplash

作為四大科技巨頭之一,谷歌公司面試無疑是對所有軟體開發者技術能力的終極檢驗,沒法靠運氣或走捷徑,只能通過努力的工作和準備。

好消息是,谷歌完全公開他們對於員工的期望。面試者對谷歌的面試流程和公司文化了解越多,就越有機會成功。本文將深入探討谷歌的編程面試和行為面試,助你成功拿到offer。

1. 谷歌面試概述和常見問題

谷歌面試概述

整個面試過程需要兩個月到兩個半月。谷歌對軟體開發者總共進行5到7次面試。其中包括最初與谷歌招募者的電話面試,接著是與不同谷歌員工進行的4到6次現場面試。所有編程面試題均要在白板、谷歌文檔(Google Docs)或者Chromebook上完成。

谷歌一般僱傭T3級別的面試者(T11是最高級別)。T3是具有本科或碩士學位的入門級全職軟體工程師,其年薪大約是11.7萬美元。谷歌首選以下幾種程式語言:Java、C++、CGo和Python。

谷歌面試中可能遇到以下三種編程問題:

· 系統設計問題:旨在評估面試者在考慮伸縮性的情況下進行高級系統設計的能力。

· 編程面試挑戰:旨在評估面試者的數據結構和算法知識,這些知識用以優化常規問題的解決方法。

· 一般分析問題:旨在通過數學或基於觀點的問題,來評估面試者的思維過程。

谷歌面試有何獨特之處?

谷歌的編程面試流程雖與其它大型科技公司相似,但有一些獨特之處,是什麼呢?

明確的期望。谷歌的面試流程完全透明,因此在準備時無需臆測。以下是谷歌提供的資源:

· 對軟體工程和技術角色的期望

· 如何進行谷歌環聊面試

· 谷歌如何招募人才

圖源:unsplash

在谷歌文檔中編程。在最初的電話面試中,面試者需要在谷歌文檔中編程。通過練習才能在該平臺上進行熟練編程,而學會這一技能很重要。點擊這裡閱讀如何為技術面試設置谷歌文檔。

評分等級。依據四個招聘標準,對每個面試者按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秒之內吸引谷歌招聘者的注意。簡歷過於粗製濫造,是有才能的申請者錯失面試機會最常見的原因之一。請務必花一些時間更新簡歷。

如果簡歷通過篩選,招聘方會安排電話面試,以了解面試者的更多技能與經驗。從簡歷通過到電話面試大約需要一周的時間。

圖源:unsplash

第2步. 谷歌員工對應聘者進行預篩選

電話面試將持續45~60分鐘,可能在谷歌環聊(Google Hangout)上進行。谷歌員工將使用與數據結構和算法相關的編程問題進行面試。面試者需要在谷歌文檔上使用20~30行代碼來解決這些問題。

能在工作中交流思維過程至關重要,這是谷歌評估面試者總體認知能力的方式。

面試者可能會遇到開放式編程面試題。進一步提出疑問,闡明問題是展示解決問題能力的好方法。如果面試者提前完成挑戰,可以在剩餘時間裡尋找優化方法並檢查錯誤,一定要考慮到細節問題。

現場面試

面試者通過預篩選後,將進行現場面試。面試者需要與4~6名谷歌員工會面,每人45分鐘。

現場面試的主要關注點是編碼,尤其是數據結構和算法。面試者需要在谷歌員工提供的白板或谷歌筆記本上編寫代碼。最好提前詢問招聘方,以便進行適當練習。

現場面試還包括行為面試問題,用以評估面試者作為潛在員工的資質。谷歌希望面試者符合公司的價值觀,所以也一定要做好行為面試的準備。稍後將繼續討論。

被錄用/未被錄用

面試官的評分等級為1~4分,3分是錄用的最低標準。面試結束後,招聘委員會將根據反饋做出最終決定。該過程需要幾周時間,如果很長時間過去還沒有回音,可以發送一封提醒郵件。

面試者被錄用後就可以準備討論薪資和就職日期了。因此很有必要溫習一下談判技巧。如果沒有被錄用,可以在六個月後再次申請,這將為面試者留出充分時間來做準備,並改進弱點。

圖源:unsplash

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.合併重疊的時間間隔

問題陳述:給定一個區間數組(列表)作為輸入,每個區間都有開始和結束時間戳。輸入數組按開始時間戳排序。要求合併重疊的時間間隔,並返回輸出數組(列表)。

圖源:unsplash

12周準備路線圖

準備谷歌編程面試是有技巧的。它需要數月的準備和練習,以掌握正確的概念,培養自信心。下面這份權威的12周準備計劃,已成功幫助許多人在大公司找到工作。

第0周。基於谷歌的期望和自己的偏好,選擇一門程式語言。

第1周。複習所選程式語言的基礎知識,這樣會大大減少在面試中犯錯的機率。回顧一些概念,如怎樣從控制臺讀取輸入、聲明以及使用二維數組。

第2&3周。熟悉數據結構和算法。這對於谷歌的編程面試至關重要。

面試者應該知道的數據結構:數組、鍊表、堆棧、隊列、樹、圖表、堆排序、散列集、哈希映射/哈希表。

面試者應該知道的算法:廣度優先搜索、深度優先搜索、二分查找、快速排序、歸併排序、A*算法、動態規劃、分治法。

第4&5周。在Educative或Leetcode網站上練習數據結構和算法挑戰。先從簡單的編程問題入手,由淺入深,逐漸增加難度。

第6~8周。練習複雜的編程問題並計時。考慮每種解決方法的運行時間和空間複雜度。

第9&10周。學習系統設計面試問題。這是面試過程中不可或缺的一部分,會影響面試者的招聘水平。

第11周。學習作業系統(OS)和並發概念。這些問題用於評估面試者的招聘水平。複習多線程原理,以在谷歌的面試梯隊中名列前茅。

第12周。學習面向對象編程和設計方面的問題。這些問題能評估面試者的批判性思維和基於項目的問題解決能力。

圖源:unsplash

練習編程面試題的小技巧

練習編程沒有捷徑。以下是指導面試者做好準備階段的一些基本技巧。

注意時間。編程面試會限時,因此請務必注意時間。如果面試者習慣了在有限時間內進行準備,那麼實際面試中的壓力會小得多。

了解常見陷阱。谷歌面試常見的三大陷阱:不知道算法的大O符號的複雜性,不了解谷歌的期望,不能清楚表達問題的解決過程。一定要記住這三大陷阱。

清楚地表達過程。谷歌想了解面試者的思維過程。在練習時要習慣於解釋自己為什麼這樣做以及正在做什麼。那些對自己工作方式有著清晰認識的人總會脫穎而出。

知道自身弱點。每個人都有弱點,在準備時要注意自己的弱點。谷歌已經聲明,其關注面試者的思維過程,因此,如果遇到弱點,就說出來,以表明自己渴望提高的決心。

4. 行為面試問題指南

軟體開發候選人常常會忽視行為面試。但事實上,這可能是決定面試者能否成功的關鍵一役。谷歌非常注重其價值觀,所以如果面試者對於這些問題毫無準備,面試官很容易發覺。文化和行為面試可以淘汰那些技能過關但價值觀不契合的面試者。

谷歌行為面試一般問什麼?

谷歌的行為面試旨在測試面試者在與就業相關的積極/消極情形或衝突中的表現。行為面試幫助面試官判斷面試者是否是他們願意與之共事的人。這些面試會要求面試者對過去的行為或表現做出反思,以測試其在壓力下的表現和對專業精神的理解。問題可能有:

· 過去的經歷

· 假設的情況

· 價值觀

圖源:unsplash

如何準備行為面試?

谷歌已經列出了準備行為面試問題的八個步驟。了解這些步驟,用它們來做準備,形成自己的答案。

· 預測未來。面試者可以準備一些可能被問到的問題。

· 練習。谷歌鼓勵面試者大聲練習,以構建更清晰的答案。

· 計劃。寫下答案,進行有策略的練習。不要忽略行為問題。

· 闡明。面試者可以使用開放性問題來表現自己作為候選人的價值。

· 數據驅動。谷歌期望看到與有形的增長、變化或技能示範直接相關的答案。

· 制定備選計劃。谷歌建議每個問題準備三個答案。這能幫助面試者準備各種有趣的答案。

· 解釋。谷歌要求面試者解釋其思維過程和決策制定。明確闡述假設和過程能幫助面試者脫穎而出。

· 提高。谷歌鼓勵面試者始終專注於自我提高。面試者可以先從粗糙的答案開始,然後努力改進。

圖源:unsplash

10個常見的行為面試問題

谷歌編制了其面試官常用的行為面試問題清單,來看一下:

· 描述你的工作歷程。雖然該問題沒有錯誤答案,但它可以評估面試者的經歷會對其作為開發者的生活產生的影響。一個好的答案應該深入到自己的工作流程、工具和團隊合作能力之中。

· 關於自己,你還有什麼想介紹的嗎?一個好的答案應該顯示面試者所具備的可能對谷歌有益的額外技能。面試官還會尋找軟技能,看看面試者是否具備有益於團隊的非技術經驗。

· 講述你遇到危機和失敗的經歷。該問題旨在了解面試者是如何學習和面對困難的。一個好的答案應表明面對失敗時的誠實和學習的積極性。

· 你最自豪的成就是什麼?該問題旨在建立多元化的團隊。就長遠來看,谷歌藉此尋找面試者的專長、成就感和價值觀。一個好的答案應該超過現有成績,並能觸及自己作為人的意義。

· 你的加入能對團隊產生什麼影響?該問題用於考察面試者在集體中與他人合作的能力。一個好的答案應該表明面試者對谷歌價值觀進行了仔細研究。最佳答案應與谷歌的目標相吻合。

· 談談你工作過的非結構化環境。該問題通過面試者對非結構化的定義來評估其工作風格。一個好的答案應該將工作風格與工作崗位聯繫起來。面試者能否適應一個預定義的結構呢?

· 你最喜歡的谷歌工具是什麼?你會怎樣改進它?該問題用於評估面試者對谷歌的了解、面試者的創造性和創新意願。一個好的答案應該基於數據但不過於技術化;確保專注於想要改變的原因。請記住:這種改變應使人們的生活更便利。

· 你所了解的最複雜的事是什麼?該問題用於評估面試者的技能、溝通技巧以及向他人解釋複雜性的能力。一個好的答案應該更專注於傳達方式的有效性,而非信息本身。

· 谷歌範兒(being Googley)對你而言意味著什麼?該問題是展示面試者文化適應性與價值觀的好機會。一個好的答案應避免使用太多術語,但能說明谷歌文化的潛在價值。

· 你害怕什麼?該問題能看出面試者的弱點和壓力源。一個好的答案應該是自我反思的,其目的並不是簡單地克服恐懼,而是要了解它們如何影響面試者的。

現在你應該已經了解了谷歌面試的過程、谷歌與其它公司面試的差異,以及如何準備谷歌面試。祝你面試順利!

留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • 薦書丨揭秘Kotlin編程原理
    點擊上方「程序人生」,選擇「置頂公眾號」第一時間關注程序猿(媛)身邊的故事谷歌欽定的程式語言Kotlin大揭秘語法+高級特性+實現原理;移動開發者升職加薪寶典!谷歌作為世界級的科技公司巨頭,強悍的技術研發與創新能力使其一直是業界的楷模,其在各個領域的每一次創新,都能夠引領一個新的時代!
  • 面試資源、公共API、多樣化學習路徑,這10個GitHub庫開發者必看
    該庫有多語言版本,包含免費在線課程、交互式編程資源、問題集和有競爭力的編程,以及 podcast 和編程練習。不過其中大部分內容是編程書籍,書籍數量十分可觀。3.)軟體工程師的短期學習計劃(只需幾個月即可完成)。
  • 如何成為谷歌軟體工程師
    如何成為谷歌軟體工程師 簡書網 發表於 2019-09-03 10:30:46 大家好,有很多人問我如何獲得谷歌的軟體工程師工作,在本文中我將分享我是怎麼做的。
  • 每天發一道編程面試題,付費就給答案
    每天發送一道編程面試題,月入 2 萬元這個網站的開發者是Lawrence,靠提供這項簡單的服務,Lawrence在 2018 年大約有 2 萬訂閱用戶, 2019 年月均收入約為 2 萬元。那麼這個網站的面試問題是如何獲得的呢?
  • 開發者調查顯示:谷歌Go是2020年最受歡迎的程式語言
    開發者調查顯示:谷歌Go是2020年最受歡迎的程式語言 站長之家(ChinaZ.com) 5月9日 消息:哪種程式語言最受開發者青睞呢?
  • 一位軟體工程師的谷歌面試艱辛歷程
    為了準備 Google 軟體工程師的面試,我花了數以千計個小時讀書、寫代碼、觀看計算機科學相關的講座。 這個計劃是怎麼產生的呢? 在 2016 年初,我覺得是時候做出改變了,從 Web 開發者到軟體工程師。為了在幾個月內掌握計算機學位學習的知識,我需要刻苦學習和練習,雖然長路漫漫,但我相信,一旦成功,我就會進入一段新的職業生涯。 有人可能覺得 Web 開發者和軟體工程師沒什麼區別。
  • 揭秘谷歌招聘機制:冗長而挑剔的5輪面試
    卡萊爾說:「我還測試過一件事,如果贏過編程大賽,到谷歌工作的表現會怎麼樣?我已經檢驗了好幾種賽事。」谷歌為最著名的一項編程賽事提供了贊助,即「谷歌編程挑戰賽」(Google Code Jam)。渴望到谷歌工作的程式設計師大有人在。「但事實上,我發現,參加過編程大賽的程式設計師真正到了谷歌之後,幹得還不如從未參加過此類比賽的人出色。」
  • 谷歌八年高級工程師親授面試經驗
    這份「谷歌面經」不獨適用於谷歌的軟體工程師位置,對提請其他商社的軟體工程師及另一個位置(如研究科學家)也有搭手。作者 | Pablo Samuel Castro編譯 | 機具之心選自 | github.io插手 | 李詩萌、張倩、蛋醬春招駛來,「哪樣拿到大廠 offer」成了每個求助者最關懷的問題。
  • 編程要從娃娃抓起:谷歌與麻省理工合作開發「樂高編程」
    ,但約有120名最年輕的開發者已經可以體驗該公司的最新開發工具。谷歌將與麻省理工學院媒體實驗室共同開發Scratch Blocks,這是一種升級版兒童程式語言,目前已經推出了開發者預覽版,而參與谷歌I/O Youth活動的學生已經能夠提前看到這款新工具。
  • 調查顯示開發者討厭PHP,喜愛Python
    調查顯示開發者討厭PHP,喜愛Python Hired近日發布了「2019 年軟體工程師現狀」報告,該報告數據覆蓋了 13 個城市的 98 000 名求職軟體工程師,反映了過去一年中 170 000 多個面試申請和工作機會,此外還收集了該平臺上 700 多名軟體工程師的調查回復,從而了解開發人員的工作偏好
  • 16655名開發者調查:2020年最搶手的程式語言是谷歌的Go
    很多開發者都非常想學Go(谷歌創建針對大型系統的程式語言),此外最新調查還發現大多數開發者都厭倦了會議,而且在跨國公司工作的開發者通常都不快樂。根據HackerEarth公司對來自76個國家超過16,655名開發者進行的調查結果顯示,在最想了解的程式語言中Go名列前茅。調查發現,32%的有經驗的開發者選擇Go作為他們想學習的程式語言,遠遠超過了Python,24%的人說他們想學習Python。
  • 如何在谷歌擁有一張辦公桌?谷歌八年高級工程師親授面試經驗
    在本文中,谷歌大腦高級軟體工程研究員、強化學習框架「多巴胺」(Dopamine)作者 Pablo Samuel Castro 分享了他拿到谷歌 offer 的經驗。這份「谷歌面經」不僅適用於谷歌的軟體工程師職位,對申請其他公司的軟體工程師及其他職位(如研究科學家)也有幫助。大家經常問我,怎麼才能拿到谷歌的 Offer?
  • 軟體開發者如何提高編程能力?
    一、何為編程能力編程能力是一個比較大的概念,是利用計算機程式語言實現軟體開發的能力的統稱。這個能力主要包括邏輯思維,學習能力。編程能力是軟體開發者的軟實力,可以靈活應用到其他任何地方。要會遊泳就要到水裡學習遊泳,要提高編程能力也是從學習編程開始。二、萬事開頭難,編程入門需要注意什麼?先有必勝的信心,不管多難保證學會,後再找方法學習。
  • 谷歌安卓11開發者預覽版UI揭秘 支持多色快捷設置圖標
    谷歌安卓11開發者預覽版UI揭秘 支持多色快捷設置圖標  昨日,谷歌發布了Android 11的首個開發者預覽版,帶來了全新隔空手勢、飛行模式藍牙不斷連與反向無線充電等新特性。  今日,XDA開發者發現,在Android 11的SystemUI中發現了一個名為「QSColorController」新分類,負責「快捷設置」面板中的圖標顏色。開發者通過在代碼引用的一些調試命令,分別更改了每個「快捷設置」圖標的顏色。  通過設置,Wi-Fi、藍牙、勿擾模式、自動旋轉和省電模式圖標的顏色均與此前常規主題的顏色不同。
  • 現代程式語言終極測評:一星篇
    原標題:現代程式語言終極測評:一星篇   C++,JAVA  神譯局是36氪旗下編譯團隊,關注科技、商業、職場、生活等領域,重點介紹國外的新技術、
  • 谷歌升級自家程式語言Go 支持手機APP開發
    在移動網際網路時代,谷歌、蘋果和微軟成為僅有的三家生態系統公司。除了作業系統和開發接口之外,三家公司都面向開發者推出了自家的程式語言。谷歌的程式語言Go之前似乎一直比較低調,而在8月19日,谷歌對這一語言進行了重大升級,其中可以支持在全球手機普遍使用的ARM處理器上運行。
  • 現代程式語言終極測評:概述篇
    原標題:現代程式語言終極測評:概述篇   那些會令你痛苦的現代程式語言  神譯局是36氪旗下編譯團隊,關注科技、商業、職場、生活等領域,重點介紹國外的新技術
  • 谷歌依託Code Jam年度編程大賽招聘人才
    本周五,谷歌首次將其倍受歡迎的年度Code Jam編程大賽的決賽放在美國紐約舉行。該賽事已經成為谷歌招聘人才的重要工具。而另一方面,參賽者也希望藉此獲得在谷歌實習的機會。以下是文章內容全文:
  • 谷歌依託 Code Jam 年度編程大賽招聘人才
    這聽起來好像是無釐頭的狂歡節遊戲,但卻在本周五的谷歌Code Jam編程挑戰賽中發揮著重要作用。消滅殭屍最多的玩家可能會最終贏得1萬美元的獎金,甚至還可能贏得在谷歌工作的機會。 本周五,谷歌首次將其倍受歡迎的年度Code Jam編程大賽的決賽放在美國紐約舉行。谷歌正在紐約開展人員招聘活動,希望能夠藉此在紐約贏得尚處於發展初期的初創公司人才的關注。
  • 軟體工程師面試的十個問題
    許多軟體工程師的面試都著重於技術技能,例如對程式語言的了解。但是,一些企業面試官還會注意你的其它一些細節,接下看我們一起看一下十個非技術相關但也十分重要的問題。提及你對編碼和編程的興趣,並展示對小型個人項目一些看法。表達你喜歡解決複雜的問題,和技術相關的任何事物。面試官可能會通過這些來判斷你對該行業的興趣。通過你了解的最新的技術,軟體設計和開發趨勢,讓面試官看到你對該領域的熱愛。