當前位置:
首頁 > 最新 > 想去Google做AI?先看完這套面試指南

想去Google做AI?先看完這套面試指南

作者 | 阿司匹林

憑藉強大的技術實力和良好的工作氛圍,Google 對求職者一直有著強大吸引力。

雖然 Google 在幾年前就已經退出了中國大陸市場,但是在北京、上海等國內城市依然保留著辦公地點,而且一直在對外發布招聘需求。特別是去年底,Google 宣布在北京成立 AI 中心,更是為中國的 AI 人才提供了又一個好去處。

為此,我們整理一份 Google 面試指南,並搜集了 20 道 Google AI 的面試問題,希望對感興趣的讀者能有所助益。

當然,如果你想申請國外的 Google 崗位,這份資料也同樣適用。


首先,Google 為求職者提供兩種面試方式,一種是電話面試或者通過 Google Hangout 進行面試,一種是現場面試,面試方式視情況而定。

電話面試

在電話面試或者 Google Hangout 面試中,面試官將會是你潛在的同事或者經理。

如果你面試的是軟體工程崗位,那麼面試時間將持續 30~60 分鐘。在回答編程問題時,你需要一邊在 Google Doc 裡面寫代碼,一邊告訴面試官你的思考過程。我們建議你使用免提耳機或者揚聲器,以便騰出手來打字。

電話面試的內容包含數據結構和演算法,你需要做好準備,用你最擅長的語言編寫 20~30 行代碼。

面試官會提一個開放式的問題,你可以讓面試官將問題解釋清楚。

你需要用演算法來解釋它。

用代碼來實現演算法(提示:不要擔心不夠完美,因為時間有限。先將你想到的寫下來,然後再完善,確保考慮到了 corner case 和 edge case)。

優化代碼,用案例來測試代碼,然後找出所有的 bug。

如果你申請的是其他職位,那麼電話面試時間大約為 30~45 分鐘。

面采

面試官通常有 4 位,包括潛在的同事以及一些跨職能的員工,每位面試官擁有 30~45 分鐘的時間。作為求職者,你有機會表現你在以下四個不同領域的優勢:

一般認知能力:我們會問一些開放式的問題來了解你是如何處理和解決問題的。這些問題沒有固定的正確答案,我們更看重解釋思考過程的能力以及使用數據來指導決策的能力。

領導力:說明你是如何使用自己的溝通和決策技巧來調動他人的。比如,你是如何在某個組織中晉陞到領導職位的?或者在不是正式領導的情況下,你是如何幫助團隊取得成功的?

與職位相關的知識:我們感興趣的是,你如何將你的個人優勢與經驗相結合,從而發揮影響力的。我們關注的不僅僅是你現在能做些什麼,而是你未來在不同崗位上的發展潛力。

「谷歌范兒」(Googleyness):你在單獨工作或者團隊協作時的工作方式?你是如何幫助他人的?你是如何駕馭不確定性情況的?又如何走出舒適區,讓自己成長的?

對於軟體工程師候選人,我們希望了解你的編程技能和技術領域專業知識,包括編程工具、編程語言、以及數據結構和演算法基本知識。在面試過程中免不了會有一些討論,因為我們喜歡互相推動,學習不同的方法。因此,請你做好要深入討論你提出的解決方案的準備。打破自己的邊界,找到最優答案。

Google 的技術面采歷來用的是白板,但為了節省時間,同時提供更加真實的編程環境,我們已經開始在一些站點提供 Chromebook,用於編程面試。這些電腦上安裝了一個面試程序,你可以選擇自己偏好的語言。

在整個面試過程中,你可以隨時讓面試官作出解釋,確保自己完全理解面試官的問題。此外,你也可以「採訪」我們,問一些與工作、團隊、文化等相關的問題,幫助你決定這份工作是否適合自己。

如果你選擇的是軟體工程相關的崗位,在面試前你最好先掌握以下幾個方面的知識:

編程實踐:你可以在 CodeLab、Quora、Stack Overflow 等網站上找到一些編程示例。Cracking the Coding Interview 這本書也是一個不錯的資源。在某些站點,你可以選擇在 Chromebook 或者白板上編程(提前詢問招聘人員,這樣你可以先行練習)。一定要測試代碼,確保代碼易於閱讀,而且沒有 bug。不用過分關注細微的句法錯誤,比如在給定方法(start, end or start, length)時應該使用哪種 substring,選擇一個,告訴你的面試官即可。

編程:你應該熟練掌握至少一門編程語言,最好是 C++、Java、Python、Go 或者 C。你需要知道 API,面向對象的設計和編程,如何測試代碼,以及 corner case 和 edge case。注意,我們關注的是你對概念的理解而不是記憶。

演算法:同時用自下而上的演算法和自上而下的演算法來處理問題。你需要了解演算法的複雜性以及如何改進演算法。Google 里常用的包括排序演算法(加上搜索和二分法檢索)、分治演算法、動態編程/記憶、貪心演算法、遞歸演算法、鏈接到特定數據結構的演算法。了解大 O 符號(Big O notation,比如運行時),並做好討論 Dijkstra 和 A* 等複雜演算法的準備。我們建議你在寫代碼之前討論或概述你所想到的演算法。

排序:熟悉常用的排序函數以及了解它們對哪些輸入數據有效。從運行時(runtime)和內存佔用的角度思考效率問題。例如,在特殊情況下,插入排序(insertion-sort)或基數排序(radix-sort )比一般的快速排序/合併排序/堆排序(QuickSort/MergeSort/HeapSort)答案好得多。

數據結構:你應該研究儘可能多的數據結構。最常用的數據結構有數組、鏈表、堆棧、隊列、哈希集、哈希映射、哈希表、字典、樹和二叉樹、堆和圖( arrays, linked lists, stacks, queues, hash-sets, hash-maps, hash-tables, dictionary, trees and binary trees, heaps and graphs)。你需要徹底了解數據結構,以及不同演算法對不同數據結構的偏好。

數學:有些面試官會問一些基本的離散數學問題,因為我們經常碰到各種計算問題、概率問題、以及其他的 Discrete Math 101 問題。面試前,你可以花時間複習下(或者自學)基本概率論和組合數學的基本知識。你需要熟悉 n-choose-k 等同類型的問題。

圖演算法:考慮一個問題是否可以應用圖演算法,如距離,搜索,連接,循環檢測等(distance, search, connectivity, cycle-detection)。熟悉三種基本方法——對象和指針,矩陣和鄰接表——的利弊。了解基本的圖遍歷演算法、廣度優先搜索和深度優先搜索,以及它們的計算複雜性、優缺點、實現方法。

遞歸:許多編碼問題都涉及遞歸思考,而且可能還要對遞歸解決方案進行編碼。針對那些能夠用迭代解決的問題,你需要找到更簡練、更優雅的遞歸方法。


如果你應聘的是 AI 相關的職位,那麼你最好先對 Google 的 AI 有一個全面的了解。

首先,Google AI 文章數量最多的三個領域為:

機器智能:

https://research.google.com/pubs/MachineIntelligence.html

機器感知:

https://research.google.com/pubs/MachinePerception.html

自然語言處理:

https://research.google.com/pubs/NaturalLanguageProcessing.html

其次,下面的內容需要你重點閱讀:

TensorFlow:一個大規模機器學習系統

https://arxiv.org/pdf/1605.08695v2.pdf

Google 使用的 AI 工具

https://ai.google/tools/

非官方的 Google 數據科學博客

在對 Google AI 有了比較全面的了解後,你就可以看一下這份由眾多求職者分享的 Google AI 相關的面試問題了。

1/x 的導數是什麼?

繪製 log(x+10) 函數的曲線。

如何設計一個針對客戶滿意度的調查?

投擲一枚硬幣 10 次,8 次正面和 2 次反面。如何分析擲硬幣的公平性?什麼是 p-value?

你有 10 枚硬幣,每枚硬幣擲 10 次(共 100 次),並觀察結果,你會修改演算法來測試硬擲硬幣是否公平嗎?

解釋一個非正態分布以及如何應用它?

為什麼要使用特徵選擇?如果兩個預測因子高度相關,那麼對邏輯回歸中的係數有什麼影響? 係數的置信區間是多少?

K-Means 演算法和高斯混合模型:K-Means 演算法和 EM 演算法之間有什麼區別?

高斯混合模型適用於什麼情況?(正態分布)

如果標籤在聚類項目中是已知的,那麼如何評估模型的性能?

對一個 Google 應用程序做了更改之後,如何測試某個指標是提高了還是降低了?

描述數據分析的過程。

為什麼不使用邏輯回歸演算法?為什麼選擇 GBM 演算法?

推導 GMM 方程?

如何衡量用戶對視頻的喜好程度?

模擬一個二元正態分布?

推導一個分布的方差?

每年有多少人申請 Google 賬戶?

如何構建中位數的估計量?

如果回歸模型中的兩個係數估計值都具有統計顯著性,那麼你是否認為兩者的測試依然重要?

最後,歡迎大家在評論區分享自己的答案以及面試經驗。

參考資料:https://careers.google.com

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嵌入式資訊精選 的精彩文章:

如何在ARM下進行高效的C編程?

TAG:嵌入式資訊精選 |