Google軟件技術職位面試指南

一直以來,Google都憑藉其強大的實力,吸引著一批優秀的人才,特別是去年底,Google宣佈在北京成立AI中心,更是吸引了一大批人。

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軟件技術職位面試指南

Google軟件技術職位面試指南

需要資料的可聯繫哦~


分享到:


相關文章: