我是如何一步步拿下 Google Offer 的?

我是如何一步步拿下 Google Offer 的?

歷時兩個月,我終於踏進了夢想的公司……

在內心深處我深知必須努力嘗試,因為進入 Google 並非不可能。只有嘗試過我才會知道結果,有點像薛定諤的貓,這種想法讓我感到不安。

我是如何一步步拿下 Google Offer 的?

作者 | Prajakta Tathavadkar

譯者 | 彎月

出品 | CSDN(ID:CSDNNews)

與其他眾多的技術人員一樣,從一開始 Google 就是我夢寐以求的公司。 此次在我通過 Google 的面試後,很多朋友都來找我,希望我能給他們接下來的面試提供一些技巧和指導。在與他們交流的過程中,我總結出了一些心得,而且覺得既然我明白麵試的困難,就更應當把這些心得記錄下來。整個過程非常艱難,尤其是如果你正在從事一份全職工作的話會更加費勁。在我準備的過程中,網上的很多文章給予了我很大的幫助,現在輪到我回饋開發者社區了。希望對大家有所幫助!

有趣的是,我在 2014 年參加過一次 Google 的面試,但失敗了。那次面試非常糟糕,所以我完全記不清當天的情況了,那麼只好談一談我這次的面試經歷了。另外,在本文的最後,我會提到在準備面試期間我犯的一個讓我十分後悔的錯誤。

動機

在我從事軟件工程師三年半的時間裡,我曾在一家創業公司與一些金融科技公司共事。每段經歷都教會了我很多東西,每一步獲得的知識都讓我距離進入 Google 的目標更近了一步。這一次,當我決定尋找下一個機會的時候,我做了一個明確的決定:我想花點時間來為進入科技大公司而認真做準備,這一次我不會再屈就妥協。儘管我也面試了幾家大型的科技公司,但老實說,我能夠進入 Google 的機會連 1% 都沒有,因為 Google 軟件工程師面試的難度是業界數一數二的。但在內心深處我知道我必須努力嘗試,因為進入 Google 並非不可能。只有嘗試過我才會知道結果,有點像薛定諤的貓,這種想法讓我感到不安。

確定面試的要素

根據我的經驗,一般面試準備都涉及掌握五大重要內容:寫代碼、設計、語言特定的概念、以前的項目經歷、簡歷,以及最後一項(但並非最不重要)是具體瞭解該公司。

寫代碼

在我的職業生涯中,我參加過面試的所有公司都至少有兩輪純算法的問題,他們會給你一個問題,而你需要提出一個解決方案並寫出代碼。

例如,編寫代碼在控制檯上輸出數字 1 到 10(當然這只是一個例子)。

我會在本文的其餘部分詳細闡述本節的具體細節。

設計

根據我參加的面試的級別,有些公司會給出一輪設計問題,他們會給你一個相當抽象的系統,你需要為該系統做一份設計。

例如,如果你需要從零開始構建一個社交網絡,那麼你將如何設計這個系統?

對於接下來的 3 個方面,有些公司會專門再給出一輪,而有些公司則可能將它們融合到寫代碼或設計的環節。

熟悉首選語言

在大多數面試中,你都需要提供一門你最熟悉的語言。除了編程能力之外,在大多數情況下,你應該瞭解這門語言的基礎知識。有些公司可能會問你一些基礎知識,而有些公司則可能會深入問你某個領域。

例如,Java 中的繼承是什麼?

以前的項目/簡歷

這是有時我會完全忘記準備的環節之一,因為我會全神貫注到寫代碼和設計等方面,但面試不只是寫代碼!面試是為了證明你是一個潛在的隊友。這就需要向他們解釋在過去的項目中你如何與其他人合作。這個環節的問題因人而異,比如他們會根據簡歷上的技術或項目提問等。

例如,談談最讓你感到自豪的項目吧。

瞭解公司/好奇心

認真瞭解公司並專門做準備通常是最容易被大多數候選人所忽視的環節,而我只能說,這才是真正能夠讓你脫穎而出的環節。他們可能不會直接問及有關公司的問題,但是做一些瞭解可以幫助你更好地為上述環節做準備。你閱讀我的這篇文章正是因為你想在即將到來的某次面試中取得好結果,那麼說明你已經在朝著正確的方向努力了。

例如,為什麼你選擇我們公司作為你的下一個目標呢?

面試準備

我利用了各方面不同的資源來為面試做準備,下面我列出了在某個具體領域內曾對我有所幫助的資源:

課程學習

我在做準備的時候,購買了以下 3 門 Udemy 的課程。這些課程幫助我明確了基本知識。注意:我未能完全學完這些課程,但完成了大部分內容。此外,我選擇參加這些課程是因為與閱讀文本相比,我個人通過視頻的學習可以更快更好地掌握內容。再加上讓別人講給你聽,比你自學學得好。我已經很久沒有參加過面試了,所以這些課程還幫助我進行了編程練習。

1. 數據結構與算法分析:瞭解如何從頭開始實現數據結構。

2. 面向軟件開發人員的 Java 編程精講:Java 編程的基礎知識。

3. 全面解析軟件工程面試:通過一些實時的練習,瞭解 Google 面試的整個流程。

Leetcode 高級會員

對於我這個級別的人員來說,大多數科技巨頭的面試都會圍繞編程與算法,因為我沒有太多行業方面的經驗。所以,Leetcode premium 的高級會員非常適合我。我需要繳納 35 美元的月費,但是我花的 70 塊錢的每一分都物有所值。Leetcode 是我練習編程的唯一資源,我強烈向那些想要進入科技大公司的人推薦。編程的準備工作範圍很廣且內容很深,所以我在後面的小節“一個月集中精力做技術準備”中詳細介紹了這個環節,解釋了我充分利用該資源的方法,以及在此過程中我犯的一些錯誤。

YouTube 視頻

在準備期間 YouTube 幫了我很多忙。不僅僅是為了學習,也是為了放鬆。再怎麼瘋狂我也從未想過短短兩個月後我會參與 YouTube 的工作!奇蹟真的出現了!

在你發現有些概念理解起來有困難或者只能理解一部分的時候,你可以看視頻。下面我列出了一些給了我很大幫助和改變了我的命運的一些視頻。然而,在瀏覽獲取信息的時候,我曾觀看過許許多多其他的視頻。你永遠無法預知哪條小消息可能會幫到你。

https://youtu.be/ko-KkSmp-Lk

https://youtu.be/XKu_SEDAykw

https://youtu.be/oWbUtlUhwa8

https://youtu.be/78t_yHuGg-0

https://youtu.be/nYFd7VHKyWQ

https://youtu.be/CZ3wIuvmHeM

其他資源

Gayle Laakmann McDowell 的圖書可以幫助你做好編程面試的準備:

  • 《Cracking the Coding Interview》(攻克編程面試)
  • 一步一步攻克面試(超級有用的圖):
我是如何一步步拿下 Google Offer 的?

準備設計面試:

  • Hired in tech 的課程:

https://www.hiredintech.com/classrooms/system-design/lesson/52

  • 來自 Ramon Lopez 的有關係統設計面試方面的播放列表:

https://youtu.be/KmAyPUv9gOY

一個月集中精力做技術準備

玩轉 Leetcode

Leetcode 是一個網站(https://leetcode.com/),你可以在上面編寫和運行與面試問題類似的程序。注意:在 Google 的面試中,他們問我的問題網上並沒有,但基本概念仍然相同。因此,歸根結底你還是要掌握解決問題的藝術、識別規律並進行練習。

Leetcode premium 有4個級別:

  • 簡單
  • 中等
  • 困難
  • 公司特有的問題

每個級別又有多個子類別:

  • 數組
  • 字符串
  • 鏈接列表
  • 回溯
  • 搜索/排序
  • 圖表
  • 數學(概率等)

計劃

現場面試前的一個月我開始了編程集中訓練,最後總共解決了大約 60-70 個問題,這是攻克面試所必須付出的努力,關鍵在於計算機科學的基礎知識。

每天我都會解決兩個以上的問題。簡單的問題花費的時間可能有所不同,大概需要 30 分鐘到 1 小時。中等難度的問題實際上對我來說很難(有時反倒是連簡單的問題對我來說很難)。中等難度的問題限時為 1 個小時,開始 15 分鐘後,如果你不知道解決方案,那麼就需要查找並嘗試實現。1 個小時後,如果你的解決方案行不通,或無法通過某些測試用例,那麼就只能停止並查看解決方案。下面是一個粗略的計劃,但是你可以隨意改編,以免準備過程過於枯燥。

  • 完成數組和字符串的簡單問題(前 5天),贏取一些自信;
  • 每天做一箇中等難度的數組或字符串問題,以及一個簡單的鏈表或回溯;
  • 樹和圖表的簡單問題;
  • 排序和搜索;
  • 其他剩餘的問題。

我的準備工作主要集中在掌握大多數簡單問題和中等難度問題上,困難的問題我解決了不到 10 個。如果我無法理解某個特定的解決方案,那麼我會搜索 YouTube,找個人來給我解釋這個解決方案。回溯是我最難理解的一個方面。

一個讓我很後悔的錯誤

Leetcode 高級會員中有一個環節是某個公司特有的問題,也就是 Google、Facebook 等公司特有的問題。我犯的最大的錯誤就是一開始就準備了 Google 的問題。那些問題超級難,結果讓我喪失了動力,最後只好不了了之。所以,一定要從簡單的問題開始,然後逐步嘗試中等難度和困難的問題。

我最喜歡的 Leetcode 高級會員功能

下面是我最喜歡的三個功能:

  • 針對你的解決方案運行各種測試用例;
  • 生成一個圖表,讓你可以與其他高級用戶比較運行時;
  • 查看其他 Leetcode 用戶提交的最佳運行時的示例解決方案。

小貼士

不要給自己壓力。在準備面試的過程中,我一如既往地生活,並 100% 地完成當下公司的工作。

每天花費的時間不需要太多,但是要堅持一兩個月,有效利用每天的準備時間。

週末的時間十分寶貴,要充分利用!我把週末稱作“週末加油站”,因為如果我能在週末完成所有 Leetcode 上的簡單問題和一些中等難度的問題,那麼就會感覺元氣滿滿。

招聘人員也是你的朋友!在參加面試之前,可以隨時向招聘人員詢問招聘的形式、期望、準備材料以及提示等等。這可以幫助你將注意力集中在重要的事情上,因為計算機科學這個領域太大了。

首先從常規的準備開始,比如參加 Udemy 課程、觀看 YouTube 視頻、閱讀文章等等。把 Leetcode 放到最後,因為如果最近你編寫了類似的問題(在 1 個月以內),對你的面試幫助才最大。

我建議你不要一整週都專門用於編程,應該結合其他方面的學習。時不時地做一些設計,在中途觀看一些視頻,學會享受學習的過程!

特別對於 Google 來說,有一件事情對我的幫助很大,那就是我要求招聘人員給我提供了一臺 Chromebook 來寫代碼,因為通常白板會給我製造麻煩。我的做法是:利用白板整理出解決方案,方便麵試官查看,然後最後用 Chromebook 寫出代碼。現如今很多公司都鼓勵這種做法,但是你必須提出這樣的要求!

有時只是在網上隨便閒逛也會有所收穫,我曾閱讀過其他人攻克面試的文章,在很多方面給予了我幫助。

做最壞的打算,曾經我問自己:“如果進不了Google,該怎麼辦?”我的答案是:“沒關係,我有一個備用計劃。我會嘗試其他頂尖的公司,並繼續努力,直到我拿到我想要的結果。”為此我保持冷靜,並取得了更好的表現。

原文:https://blog.usejournal.com/how-i-got-into-google-161c97913b8b

本文為 CSDN 翻譯,如需轉載,請註明來源出處。



分享到:


相關文章: