有了這份程序員面試指南,你離大廠Offer還遠嗎?| 附推薦書籍

有了這份程序員面試指南,你離大廠Offer還遠嗎?| 附推薦書籍

碼農唐磊 程序猿石頭

有了這份程序員面試指南,你離大廠Offer還遠嗎?| 附推薦書籍
有了這份程序員面試指南,你離大廠Offer還遠嗎?| 附推薦書籍
圖by: 石頭 @ 長白山

關於作者:程序猿石頭(ID: tangleithu),現任阿里巴巴技術專家,清華學渣,前大疆後端 Leader。用不同的視角分享高質量技術文章,以每篇文章都讓人有收穫爲目的,歡迎關注,交流和指導!

在這篇文章 面試 Google, 我失敗了 | Google 面經分享 中,石頭分享了 Google 中國的面試流程和體驗,並分享了 HR 小姐姐給提供的英文版的 Google 面試指南。
但不少讀者反饋本來想仔細讀讀的,但一看到是英文版就頭大了。其實,石頭想說,作爲碼農從業者,我們閱讀基本的英文文獻的能力還是應該具備的,不然怎麼面向 StackOverflow 編程呢?
啥?說啥叫面向 Stack Overflow 編程,看看如下視頻(注意有聲音)就知道了。
有了這份程序員面試指南,你離大廠Offer還遠嗎?| 附推薦書籍
哈哈,爲了方便大家,本篇文章,我將結合原來英文版的 Google 面試指南的主線,根據自己的理解對文章進行修改,然後結合自己面試國內大廠的經驗給大家闡述。其實石頭覺得,各大公司針對程序員崗位的面試流程來講是相對比較通用的,只是有的公司在算法(Code)環節要求會更高一些,比如 Google,Airbnb (之前也面過 Airbnb,被完虐),包括國內的頭條等。
因爲這份面試指南相對比較通用,因此石頭直接把題目從 Google 面試指南改爲大廠面試指南了。下面就直接來說重點吧。




瞭解你投遞的崗位


首先最重要的就是了解你要投遞、面試的崗位具體的工作內容和職責,一般還需要了解對應 hc 的職級。一般而言,公司招聘都是一個蘿蔔一個坑,蘿蔔太大或太小都不一定合適。比如有的公司,預期是招聘 P7 級別的,但你剛畢業兩三年,可能希望就不大。本來只想招聘 P6,結果來了一個 P8 的候選人肯定不合適,所以有時候面試沒通過並不是候選人不夠優秀,也有可能是候選人過於優秀。
這裏分享一個國內部分互聯網公司職級薪酬對比圖,大家可以參考一下。
有了這份程序員面試指南,你離大廠Offer還遠嗎?| 附推薦書籍
互聯網大廠薪資對應關係,圖來源:曾加@知乎


下面闡述下原文中的 Google 的 SWE 崗位。

SWE 其實就是 Software Engineer 的縮寫,就是一般的碼農崗位啦。Google 的 SWE 崗位根據不同的項目,可能需要參與到項目的各個流程中,比如:調研(研究),設計架構,做計劃,開發測試以及發佈等各個週期。
涉及到具體的產品可能需要處理大規模的數據,需要提供詳細的解決方案,將具體的方案落地時可能會涉及到技術的方方面面。有點“全棧工程師”的味道。
Google 是一家技術驅動型公司,招聘各種技術人才來處理各種技術難題,影響的用戶都是數千萬上億級別的。設計到的具體產品包括:AdWords,Chrome 瀏覽器,Android,Youtube Google 雲和 Google 地圖等等,Google 的工程師正在通過各種各樣的技術來改變世界。

面試 Tips


在面試過程中,期望瞭解到候選人的思考過程,不僅僅是考察技術能力,同時也會考察候選人到底是怎麼來解決具體問題的。候選人需要和麪試官來回溝通確認來明確和佐證自己的觀點。
在面試過程中可能會遇到一些開放式的問題。這個時候也不用緊張,可以和麪試官來溝通明確具體問題的邊界,一步一步來解決。
當回答一個問題的時候,候選人需要多嘗試思考一些優化的方案。很多情況下,可能最開始的解法不一定是最優的。如果可能的話,在最開始回答問題的時候,可以直接先給面試官一個暴力的解法,這樣方便在很短的時間之內明確你是否真的瞭解清楚了題意。
有了這份程序員面試指南,你離大廠Offer還遠嗎?| 附推薦書籍
圖源:Google Interview Prep Guide Software Engineer.pdf
面試過程中,並不一定真的會在 IDE 上編譯和跑通代碼。但最好刻意提前在白板或者紙上聯繫寫代碼。注意要想清楚一些邊界的條件,不要遺留一些明顯的 bug。但不用糾結一些具體的很小語法錯誤,只要讓面試官明確意思即可,比如不用糾結substring的參數到底是(startIndex, length) 還是 (startIndex, endIndex)。




電話面試


電話面試一般會涉及到數據結構和算法,大概也就是 20~30 行代碼,你可以用你自己最熟悉的編程語言。注意代碼有良好的可讀性,並且足夠魯棒。

  1. 你可能會被問一個很開放的問題,需要你跟面試官溝通明確問題的邊界,具體的需求;
  2. 問題明確後,你需要向面試官解釋你的算法思路;
  3. 然後需要有能力將上面的算法思路轉成代碼。因爲時間有限,不會要求你給一個完美的解法的。可以先寫出一個解法來,然後再逐步優化。注意一些邊界的 case。確實在真實的面試場景中這一步就會卡掉很多人。在石頭的這篇“從一道面試題談談一線大廠碼農應該具備的基本能力 ”文章中 也闡述了自己作爲面試官面試的時候遇到的各種場景。
  4. 逐步優化你的代碼,自己主動寫測試用例來測試解決其中的 bug。一定要自己主動多思考、自測,而不要等到面試官來提示你或者指出你的bug。在面試當中,你主動思考寫測試用例會有加分的。

    編碼(算法)面試


  • Coding: 至少用一門你熟悉的編程語言(不限,推薦 C++,Java,Python,Go 或者 C)實現給定的題目。從代碼中會考察一些基本的API、面向對象的設計,編碼和測試,包括各種邊界條件的處理。注意會重點關注解題目過程中的理解和溝通能力,而非背誦。
  • 算法: 可能會涉及到 排序/搜索/分治/動態規劃/貪心/遞歸,具體數據結構,以及也有可能會涉及到 Dijkstra 和 A* 等算法,需要你會算法複雜度的分析。推薦你在下筆(下手)之前,最好先和麪試官溝通大致思路。
  • 排序: 常見的排序算法,時間/空間複雜度,各自適用的使用場景分析。例如 快排/歸併/堆排序/插入/基數排序等等;知道比如在有一些特殊的場景下,可能插入排序或者基數排序會優於常見的快排、歸併或者堆排序。
  • 數據結構: 數組/鏈表/堆/棧/hash/數/二叉樹等;知道具體什麼算法搭配什麼數據結構。
  • 數學: 可能會涉及到離散數學、組合數學等。這在 Google 還相對比較常見。例如選取問題 -- N 箇中選 K 個的方法等;
    圖: 有一些問題可能常常會涉及到圖相關算法,例如距離,搜索,連通性,環的檢測。你需要知道常見的圖的表達方式(例如矩陣/鄰接表),並理解各種表達方式的優缺點。圖的遍歷方式 bfs/dfs 等,算法複雜度和代碼實現。
  • 遞歸: 遞歸和迭代的轉換;

    系統設計


系統設計問題會考察候選人如何將理論知識和經驗到現實的具體問題場景中來。
比如常見的話題可能會包括:接口,類繼承關係,分佈式系統等。在特定的場景中,一定的約束條件下,如何設計出可擴展性強的系統,如何平衡比如簡單性、性能、魯棒性。
在系統設計過程中,需要你熟悉各種互聯網技術,比如路由,域名解析,負載均衡,防火牆等等。
可能還會涉及到如一些圖的遍歷,分佈式系統,以及如何抽象顯示生活中的一些問題,變成產品設計。設計的知識點可能會包括:具體的 API,二叉樹,緩存,MapReduce,索引,倒排索引,編譯器,內存緩存,網絡等等。
系統設計題目一般在面試中都會有,我在面試 Google、之前面試 Amazon 等都有一輪面試主要考察這個點。這裏可以結合一些比如面向對象的設計原則等來解答,考慮系統可擴展性等。可能面試官會讓你不斷優化,直到你回答不上來爲止。我理解面試官其實不是真正想要從你這裏得到一個最優解,只是希望在這個過程中考察你的思維方式等。
操作系統也是其中的一個考察點,需要了解進程、線程,併發(並行),鎖,信號量等等概念以及他們的實現機制。知道一些基本的比如死鎖是怎麼發生的以及如何避免,進程、線程的區別,他們的調度資源是什麼。




參考資源


書籍
就不貼書的購買鏈接了,英文原版可能比較難啃,這些都是很經典的書籍。感興趣的同學可以私聊我獲取。

  • Cracking the Coding Interview[1] By: Gayle Laakmann McDowell
  • Programming Interviews Exposed: Secrets to Landing Your Next Job[2] By: John Mongan, Eric Giguere, Noah Suojanen, Noah Kindler
  • Programming Pearls[3] By:Jon Bentley
  • Introduction to Algorithms[4] By: Thomas Cormen, Charles Leiserson, Ronald Rivest, Clifford Stein
    然後,我再推薦一下部分書籍,大部分確實值得仔細研讀的。下圖是我的部分書籍,不過說來慚愧,有好多我也沒仔細讀過,甚至有的都還沒打開(快告訴我,我不是一個人)。不過還是想計劃慢慢啃一啃的。
    有了這份程序員面試指南,你離大廠Offer還遠嗎?| 附推薦書籍
    如果針對面試臨時抱佛腳的話,根據面試崗位推薦看看 More 開頭的幾本(例如C++/Java的),《編程之美-微軟技術面試心得》、《程序員的自我修養-裝載、鏈接與庫》、《程序員面試寶(金)典》等。
    然後值得收藏細品的還有《深入理解計算機系統(Computer Systems: A Programmer's Perspective,CSAPP)》、《TCP/IP 詳解》系列、《計算機程序設計藝術》系列(Donald E.Knuth 的神書)等。
    以下部分內容就直接引用 Google 面試指南的參考資源了,對 Google 感興趣的可以跟蹤鏈接去深入瞭解,在此推薦都瞭解下 Google 大數據的 “三駕馬車” —— MapReduce、GFS、BigTable。
    關於 Google





  • Company - Google[5]
  • The Google story[6]
  • Life @ Google[7]
  • Google Developers[8]
  • Open Source Projects[9]
  • Github: Google Style Guide[10]
    面試準備
  • How we hire[11]
  • Interviewing @ Google[12]
  • Candidate Coaching Session: Tech Interviewing[13]
  • CodeJam: Practice & Learn[14]
  • Technical Development Guide[15]
    Google Publications
  • The Google File System[16]
  • Bigtable[17]
  • MapReduce[18]
  • Google Spanner[19]
  • Google Chubby[20]
    爲了方便,我將此文做成了 PDF,你只需要在公衆號後臺回覆 “Google面試指南” 即可獲得本文(包含英文原版)。
    另送福利,公衆號後臺回覆“模擬題”獲取算法筆試模擬題精解合集,該書籍爲阿里雲開發電子書系列之一(阿里雲開發者社區有不少高質量技術文章,大家可以去觀摩學習,有很多書籍都是可以直接免費下載的),涵蓋 70+算法題目,近 30 種大廠筆試常考知識點。希望在你“面試戰場”上能夠助你一臂之力。
    有了這份程序員面試指南,你離大廠Offer還遠嗎?| 附推薦書籍


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章