1. 程式人生 > >Google面試經歷(一)

Google面試經歷(一)

為什麼是面試經歷(一)呢?
因為還有即將到來的:
  Google面試經歷(二)-實習生面試
以及可能會有的:
  Google面試經歷(三)-實習生轉正面試或者校招面試
  Google面試經歷(四)-失敗總結
OK,下面正式寫這次google mock interview的經歷:

背景

  可能有人會奇怪,這麼早就招人了嗎?正常來說,是不會這麼早的。但是因我為參加了2017的Google Code Jam,並且取得了比較不錯的成績,所以在一月上旬就收到了HR發來的郵件,大意是要面向參與GCJ的選手辦一個叫”A Day with Google”的活動,可以選擇面試或者模擬面試。
  時間這麼早?這把既沒有做好找工作的準備,也沒有什麼面試經驗的我嚇到了。直接面應該不會當場給出反饋,模擬的話可以知道自己的一些問題,所以出於漲漲見識,劃劃水的想法,我最終選擇了場次最早的

mock interview。

曲折的經歷

  1. 約定1月29日上午面試,晚上沒睡好,還起了個大早,結果被面試官鴿了,沒有接到電話,而且通知的Google Doc也被鎖上了……跟HR溝通之後得知是面試官忘記了,改到1月31日上午面試。
  2. 30日發現Google Doc又被鎖了……和HR小姐姐來回一共發了11封郵件,終於解決了,不得不說,小姐姐態度非常好,不像某些官僚機構。
  3. 終於等來了31日的面試,面試官的態度也非常溫和,宣告正式面試一共只有45分鐘,先過一遍流程,他再點評一下。沒有自我介紹…上來直接對著簡歷問了專案,“我看你做的專案挺多,用幾分鐘講講你的專案”,我巴拉巴拉全講了,然後12分鐘

過去了。“我們的時間不多了,開始做題吧!”,面試題如下:
  有一個n*n的棋盤,上面有m個糖果,最開始有一個人在棋盤左上角,他可以向左向右或者向下移動,但不能向上移動,問他最少需要多少步吃完所有糖果。
  我幾乎沒怎麼想,就說了一個暴力的DFS解法。說著說著就發現DP可以搞,“好像動態規劃可以,再容我想一會兒!”,畫個圖就可以發現,一個糖果或者沒有糖果的行很簡單,多於一個糖果的行其實一定是從最左或最右的糖果處下去,所以只需要維護吃到每一行最左或最右糖果的最小值就行了,轉移的時候討論上一行的端點在這一行最左到最右區間的裡面還是外面。
  很簡單,然而轉移方程的邊界條件,我搞了好長時間,面試官一直說有問題。15分鐘就這麼過去了…
  面試官提醒:”注意時間”,我一狠心,還是寫了暴力的,先計算每兩個糖果之間的距離,然後dfs,一共寫了8分鐘,然後又自己檢查了3分鐘確認bug-free。最後,和麵試官說了一下程式碼思路,他:“不錯,寫的很快而且正確!可惜前面DP的思路在小細節上卡殼了!”
  之後,我簡單問了幾個問題,回答都比較官方吧。

總結

  面試官給了一些建議:
  1. 專案簡述時間太長。建議挑一個最有含金量的講幾分鐘就行了。別的公司可能和麵試官聊high了就可以不做或者少做題。谷歌的面試必須做題,前面時間長了,後面做題的時間就短了。
  2. 過於追求最優解。思考問題卡住的時候,要注意把握時間,只要能讓面試官覺得你coding能力強,即使不是最優解也行。
  3. 寫程式碼最好先在紙上打好草稿,一氣呵成的感覺比較好,因為他看我寫程式碼的時候明顯覺得我在思考…
  4. 寫完先自己肉眼debug一下,雖然我寫的沒什麼問題,但是還是確認一下比較保險。
  過年好好準備,照進度繼續刷Leetcode(有興趣的同學可以看我的專題小題大做Leetcode),過完年面個實習生,美滋滋。