<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          程序員面試指南,你離大廠Offer不遠(yuǎn)了

          共 6140字,需瀏覽 13分鐘

           ·

          2020-08-04 19:49


          圖by: 石頭 @ 長白山

          關(guān)于作者:程序猿石頭(ID: tangleithu),現(xiàn)任阿里巴巴技術(shù)專家,清華學(xué)渣,前大疆后端 Leader。用不同的視角分享高質(zhì)量技術(shù)文章,以每篇文章都讓人有收獲為目的,歡迎關(guān)注,交流和指導(dǎo)!

          在這篇文章 面試 Google, 我失敗了 | Google 面經(jīng)分享?中,分享了 Google 中國的面試流程和體驗(yàn),并分享了 HR 小姐姐給提供的英文版的 Google 面試指南。

          但不少讀者反饋本來想仔細(xì)讀讀的,但一看到是英文版就頭大了。其實(shí),石頭想說,作為碼農(nóng)從業(yè)者,我們閱讀基本的英文文獻(xiàn)的能力還是應(yīng)該具備的,不然怎么面向 StackOverflow 編程呢?

          啥?說啥叫面向 Stack Overflow 編程,看看如下視頻(注意有聲音)就知道了。

          哈哈,為了方便大家,本篇文章,我將結(jié)合原來英文版的 Google 面試指南的主線,據(jù)自己理解對(duì)文章進(jìn)行修改,然后結(jié)合自己面試國內(nèi)大廠的經(jīng)驗(yàn)給大家闡述。其實(shí)石頭覺得,各大公司針對(duì)程序員崗位的面試流程來講是相對(duì)比較通用的,只是有的公司在算法(Code)環(huán)節(jié)要求會(huì)更高一些,比如 Google,Airbnb (之前也面過 Airbnb,被完虐),包括國內(nèi)的頭條等。?

          因?yàn)檫@份面試指南相對(duì)比較通用,因此石頭直接把題目從?Google 面試指南改為大廠面試指南了。下面就直接來說重點(diǎn)吧。

          了解你投遞的崗位

          首先最重要的就是了解你要投遞、面試的崗位具體的工作內(nèi)容和職責(zé),一般還需要了解對(duì)應(yīng) hc 的職級(jí)。一般而言,公司招聘都是一個(gè)蘿卜一個(gè)坑,蘿卜太大或太小都不一定合適。比如有的公司,預(yù)期是招聘 P7 級(jí)別的,但你剛畢業(yè)兩三年,可能希望就不大。本來只想招聘 P6,結(jié)果來了一個(gè) P8 的候選人肯定不合適,所以有時(shí)候面試沒通過并不是候選人不夠優(yōu)秀,也有可能是候選人過于優(yōu)秀。

          這里分享一個(gè)國內(nèi)部分互聯(lián)網(wǎng)公司職級(jí)薪酬對(duì)比圖,大家可以參考一下。

          互聯(lián)網(wǎng)大廠薪資對(duì)應(yīng)關(guān)系,圖來源:曾加@知乎


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


          SWE 其實(shí)就是 Software Engineer 的縮寫,就是一般的碼農(nóng)崗位啦。Google 的 SWE 崗位根據(jù)不同的項(xiàng)目,可能需要參與到項(xiàng)目的各個(gè)流程中,比如:調(diào)研(研究),設(shè)計(jì)架構(gòu),做計(jì)劃,開發(fā)測試以及發(fā)布等各個(gè)周期。

          涉及到具體的產(chǎn)品可能需要處理大規(guī)模的數(shù)據(jù),需要提供詳細(xì)的解決方案,將具體的方案落地時(shí)可能會(huì)涉及到技術(shù)的方方面面。有點(diǎn)“全棧工程師”的味道。

          Google 是一家技術(shù)驅(qū)動(dòng)型公司,招聘各種技術(shù)人才來處理各種技術(shù)難題,影響的用戶都是數(shù)千萬上億級(jí)別的。設(shè)計(jì)到的具體產(chǎn)品包括:AdWords,Chrome 瀏覽器,Android,Youtube Google 云和 Google 地圖等等,Google 的工程師正在通過各種各樣的技術(shù)來改變世界。

          面試 Tips

          在面試過程中,期望了解到候選人的思考過程,不僅僅是考察技術(shù)能力,同時(shí)也會(huì)考察候選人到底是怎么來解決具體問題的。候選人需要和面試官來回溝通確認(rèn)來明確和佐證自己的觀點(diǎn)。

          在面試過程中可能會(huì)遇到一些開放式的問題。這個(gè)時(shí)候也不用緊張,可以和面試官來溝通明確具體問題的邊界,一步一步來解決。

          當(dāng)回答一個(gè)問題的時(shí)候,候選人需要多嘗試思考一些優(yōu)化的方案。很多情況下,可能最開始的解法不一定是最優(yōu)的。如果可能的話,在最開始回答問題的時(shí)候,可以直接先給面試官一個(gè)暴力的解法,這樣方便在很短的時(shí)間之內(nèi)明確你是否真的了解清楚了題意。

          圖源:Google Interview Prep Guide Software Engineer.pdf

          面試過程中,并不一定真的會(huì)在 IDE 上編譯和跑通代碼。但最好刻意提前在白板或者紙上聯(lián)系寫代碼。注意要想清楚一些邊界的條件,不要遺留一些明顯的 bug。但不用糾結(jié)一些具體的很小語法錯(cuò)誤,只要讓面試官明確意思即可,比如不用糾結(jié)substring的參數(shù)到底是(startIndex, length) 還是 (startIndex, endIndex)

          電話面試

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

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

          編碼(算法)面試

          • Coding: 至少用一門你熟悉的編程語言(不限,推薦 C++,Java,Python,Go 或者 C)實(shí)現(xiàn)給定的題目。從代碼中會(huì)考察一些基本的API、面向?qū)ο蟮脑O(shè)計(jì),編碼和測試,包括各種邊界條件的處理。注意會(huì)重點(diǎn)關(guān)注解題目過程中的理解和溝通能力,而非背誦。

          • 算法: 可能會(huì)涉及到 排序/搜索/分治/動(dòng)態(tài)規(guī)劃/貪心/遞歸,具體數(shù)據(jù)結(jié)構(gòu),以及也有可能會(huì)涉及到 Dijkstra 和 A* 等算法,需要你會(huì)算法復(fù)雜度的分析。推薦你在下筆(下手)之前,最好先和面試官溝通大致思路

          • 排序: 常見的排序算法,時(shí)間/空間復(fù)雜度,各自適用的使用場景分析。例如 快排/歸并/堆排序/插入/基數(shù)排序等等;知道比如在有一些特殊的場景下,可能插入排序或者基數(shù)排序會(huì)優(yōu)于常見的快排、歸并或者堆排序。

          • 數(shù)據(jù)結(jié)構(gòu): 數(shù)組/鏈表/堆/棧/hash/數(shù)/二叉樹等;知道具體什么算法搭配什么數(shù)據(jù)結(jié)構(gòu)。

          • 數(shù)學(xué): 可能會(huì)涉及到離散數(shù)學(xué)、組合數(shù)學(xué)等。這在 Google 還相對(duì)比較常見。例如選取問題 -- N 個(gè)中選 K 個(gè)的方法等;

          • 圖: 有一些問題可能常常會(huì)涉及到圖相關(guān)算法,例如距離,搜索,連通性,環(huán)的檢測。你需要知道常見的圖的表達(dá)方式(例如矩陣/鄰接表),并理解各種表達(dá)方式的優(yōu)缺點(diǎn)。圖的遍歷方式 bfs/dfs 等,算法復(fù)雜度和代碼實(shí)現(xiàn)。

          • 遞歸: 遞歸和迭代的轉(zhuǎn)換;

          系統(tǒng)設(shè)計(jì)

          系統(tǒng)設(shè)計(jì)問題會(huì)考察候選人如何將理論知識(shí)和經(jīng)驗(yàn)到現(xiàn)實(shí)的具體問題場景中來。

          比如常見的話題可能會(huì)包括:接口,類繼承關(guān)系,分布式系統(tǒng)等。在特定的場景中,一定的約束條件下,如何設(shè)計(jì)出可擴(kuò)展性強(qiáng)的系統(tǒng),如何平衡比如簡單性、性能、魯棒性。

          在系統(tǒng)設(shè)計(jì)過程中,需要你熟悉各種互聯(lián)網(wǎng)技術(shù),比如路由,域名解析,負(fù)載均衡,防火墻等等。

          可能還會(huì)涉及到如一些圖的遍歷,分布式系統(tǒng),以及如何抽象顯示生活中的一些問題,變成產(chǎn)品設(shè)計(jì)。設(shè)計(jì)的知識(shí)點(diǎn)可能會(huì)包括:具體的 API,二叉樹,緩存,MapReduce,索引,倒排索引,編譯器,內(nèi)存緩存,網(wǎng)絡(luò)等等。

          系統(tǒng)設(shè)計(jì)題目一般在面試中都會(huì)有,我在面試 Google、之前面試 Amazon 等都有一輪面試主要考察這個(gè)點(diǎn)。這里可以結(jié)合一些比如面向?qū)ο蟮脑O(shè)計(jì)原則等來解答,考慮系統(tǒng)可擴(kuò)展性等。可能面試官會(huì)讓你不斷優(yōu)化,直到你回答不上來為止。我理解面試官其實(shí)不是真正想要從你這里得到一個(gè)最優(yōu)解,只是希望在這個(gè)過程中考察你的思維方式等。

          操作系統(tǒng)也是其中的一個(gè)考察點(diǎn),需要了解進(jìn)程、線程,并發(fā)(并行),鎖,信號(hào)量等等概念以及他們的實(shí)現(xiàn)機(jī)制。知道一些基本的比如死鎖是怎么發(fā)生的以及如何避免,進(jìn)程、線程的區(qū)別,他們的調(diào)度資源是什么。

          參考資源

          書籍

          就不貼書的購買鏈接了,英文原版可能比較難啃,這些都是很經(jīng)典的書籍。

          • 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
          然后,我再推薦一下部分書籍,大部分確實(shí)值得仔細(xì)研讀的。下圖是我的部分書籍,不過說來慚愧,有好多我也沒仔細(xì)讀過,甚至有的都還沒打開(快告訴我,我不是一個(gè)人)。不過還是想計(jì)劃慢慢啃一啃的。

          如果針對(duì)面試臨時(shí)抱佛腳的話,根據(jù)面試崗位推薦看看 More 開頭的幾本(例如C++/Java的),《編程之美-微軟技術(shù)面試心得》、《程序員的自我修養(yǎng)-裝載、鏈接與庫》、《程序員面試寶(金)典》等。

          然后值得收藏細(xì)品的還有《深入理解計(jì)算機(jī)系統(tǒng)(Computer Systems: A Programmer's Perspective,CSAPP)》、TCP/IP 詳解系列、計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》系列(Donald E.Knuth 的神書)等。

          以下部分內(nèi)容就直接引用 Google 面試指南的參考資源了,對(duì) Google 感興趣的可以跟蹤鏈接去深入了解,在此推薦都了解下 Google 大數(shù)據(jù)的 “三駕馬車 —— MapReduce、GFS、BigTable

          關(guān)于 Google

          • Company - Google[5]
          • The Google story[6]
          • Life @ Google[7]
          • Google Developers[8]
          • Open Source Projects[9]
          • Github: Google Style Guide[10]

          面試準(zhǔn)備

          • 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,你只需要在公眾號(hào)后臺(tái)回復(fù) “Google面試指南” 即可獲得本文(包含英文原版)。

          參考資料

          [1]

          Cracking the Coding Interview:?https://books.google.ie/books?id=nlgWywAACAAJ&dq=Cracking+the+Coding+Interview&hl=en&sa=X&ei=hUTtUfXVCoSg4gS5v4C4BQ

          [2]

          Programming Interviews Exposed: Secrets to Landing Your Next Job:?https://books.google.com/books/about/Programming_Interviews_Exposed.html?id=9_by-rpCSSUC&hl=en

          [3]

          Programming Pearls:?https://books.google.com/books/about/Programming_Pearls_2_E.html?id=vyhrriC6qcEC&hl=en

          [4]

          Introduction to Algorithms:?https://books.google.com/books/about/Introduction_to_Algorithms.html?id=VK9hPgAACAAJ&hl=en

          [5]

          Company - Google:?https://www.google.com/about/our-company/

          [6]

          The Google story:?https://www.google.com/about/our-story/

          [7]

          Life @ Google:?https://www.youtube.com/user/lifeatgoogle

          [8]

          Google Developers:?https://developers.google.com/

          [9]

          Open Source Projects:?https://opensource.google.com/projects

          [10]

          Github: Google Style Guide:?https://github.com/google/styleguide

          [11]

          How we hire:?https://careers.google.com/how-we-hire/

          [12]

          Interviewing @ Google:?https://careers.google.com/how-we-hire/interview/

          [13]

          Candidate Coaching Session: Tech Interviewing:?https://www.youtube.com/watch?v=oWbUtlUhwa8

          [14]

          CodeJam: Practice & Learn:?https://code.google.com/codejam/past-contests

          [15]

          Technical Development Guide:?https://techdevguide.withgoogle.com/

          [16]

          The Google File System:?https://research.google.com/archive/gfs.html

          [17]

          Bigtable:?https://research.google.com/archive/bigtable.html

          [18]

          MapReduce:?https://research.google.com/archive/mapreduce.html

          [19]

          Google Spanner:?https://research.google.com/archive/spanner.html

          [20]

          Google Chubby:?https://research.google.com/archive/chubby.html


          -?掃下面二維碼,獲取一份編程視頻資料?-



          給個(gè)在看,鼓勵(lì)一下!
          瀏覽 64
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  狼友视频免费在线观看 | 日韩无码黄色 | 欧美激情亚洲无码 | 大香蕉久操| 日韩久久高清视频在线播放 |