1. 程式人生 > >想去Google做AI?面試題在手,全程無憂!

想去Google做AI?面試題在手,全程無憂!

這裡寫圖片描述

作者 | 阿司匹林
出品 | 人工智慧頭條(公眾號ID:AI_Thinker)

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

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

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

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

▌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,用於程式設計面試。這些電腦上安裝了一個面試程式,你可以選擇自己偏好的語言。

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

▌Google 軟體工程和技術職位面試

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

  • 程式設計實踐:你可以在 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)。熟悉三種基本方法——物件和指標,矩陣和鄰接表——的利弊。瞭解基本的圖遍歷演算法、廣度優先搜尋和深度優先搜尋,以及它們的計算複雜性、優缺點、實現方法。

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

▌Google AI 職位面試

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

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

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

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

  1. 1/x 的導數是什麼?
  2. 繪製 log(x+10) 函式的曲線。
  3. 如何設計一個 針對客戶滿意度的調查?
  4. 投擲一枚硬幣 10 次,8次正面和 2 次反面。如何分析擲硬幣的公平性?什麼是 p-value?
  5. 你有 10 枚硬幣,每枚硬幣擲 10 次(共 100次),並觀察結果,你會修改演算法來測試硬擲硬幣是否公平嗎?
  6. 解釋一個非正態分佈以及如何應用它?
  7. 為什麼要使用特徵選擇?如果兩個預測因子高度相關,那麼對邏輯迴歸中的係數有什麼影響? 係數的置信區間是多少?
  8. K-Means演算法和高斯混合模型:K-Means 演算法和 EM 演算法之間有什麼區別?
  9. 高斯混合模型適用於什麼情況?(正態分佈)
  10. 如果標籤在聚類專案中是已知的,那麼如何評估模型的效能?
  11. 對一個 Google 應用程式做了更改之後,如何測試某個指標是提高了還是降低了?
  12. 描述資料分析的過程。
  13. 為什麼不使用邏輯迴歸演算法?為什麼選擇 GBM 演算法?
  14. 推導 GMM 方程?
  15. 如何衡量使用者對視訊的喜好程度?
  16. 模擬一個二元正態分佈?
  17. 推導一個分佈的方差?
  18. 每年有多少人申請 Google 賬戶?
  19. 如何構建中位數的估計量?
  20. 如果迴歸模型中的兩個係數估計值都具有統計顯著性,那麼你是否認為兩者的測試依然重要?

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


掃描二維碼,和大家一起參加 #TinyMind 性別年齡預測 #競賽

這裡寫圖片描述
這裡寫圖片描述