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

軟件開發者的終極夢想:揭祕谷歌編程面試
圖源: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學習與發展的乾貨

編譯組:賀宇、陳楓
相關連接:
https://medium.com/better-programming/cracking-the-google-coding-interview-3b8dd29b0d6a

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

推薦文章閱讀

ACL2018論文集50篇解讀
EMNLP2017論文集28篇論文解讀
2018年AI三大頂會中國學術成果全連接
ACL2017論文集:34篇解讀乾貨全在這裏
10篇AAAI2017經典論文回顧

長按識別二維碼可添加關注

讀芯君愛你

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

相關文章
相關標籤/搜索