刷完 LeetCode 是什麼水平?能拿到什麼水平的 offer?

2021-03-02 極市平臺

加入極市專業CV交流群,與 10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度 等名校名企視覺開發者互動交流!

同時提供每月大咖直播分享、真實項目需求對接、乾貨資訊匯總,行業技術交流。關注 極市平臺 公眾號 ,回復 加群,立刻申請入群~

本文整理自知乎問答,僅用於學術分享,如有侵權,請聯繫後臺作刪文處理。

作者|矽谷IT胖子

https://www.zhihu.com/question/32019460/answer/1214537663

刷完LeetCode != 會面試會面試 + 運氣 == 能拿到Offer

運氣(大勢)


運氣是最重要也最玄學的一個因素了,但絕不可忽略。所以不要輕易說「刷LeetCode沒用」,很可能,你只是欠缺一點點運氣而已。運氣包括太多方面了:經濟:經濟不好,全Hiring Freeze,LeetCode刷得再好也不行;經濟太好,OPT不夠月數了,某些公司也不要連面試都不給,因為抽籤時太難。政策:我現在在亞利桑那集中營裡寫的這些,你還願意接著看麼?突發事件:疫情來了,所有作線下服務的都慘了。拿到Offer也能收回,甚至intern也有不少推遲或是收回的,今年(2020年)屢見不鮮。氣(面試)


面試官是比較隨機的,每個人的狀態、出題、風格都不一樣。面試官心情:很多人把公司面試看得很神聖,殊不知這只是工程師日常的苦難和重擔之一,每周都要重複多次。面試官趕deadline可能會不耐煩,也可能就隨手放過;面試官早上被老婆罵了;面試官被老闆罵了;面試官來的路上堵車了。我絕不是說,大公司的面試很隨機。正相反,大公司的面試非常標準,判斷非常客觀。只不過我想表達的是:面試本身是人來主導的,只要是人,就會有隨機性和個人情緒。舉個例子:你看到一個面試官黑著臉、不耐煩,不要認為他不是個好人、是針對你個人的、會註定掛你,很可能他只是來的路上車被哪個混蛋給蹭了而已。:面試官出哪道題,隨機性很強。很可能換個人面,另外一道題,就輕鬆過了,而這題你正好不會。題的隨機性,實在是太強了。


「刷完LeetCode「的定義


LeetCode有些人是「純刷」的,有些人是「硬記」的,有些人是「理解」的,有些人是「掌握」的。這是我個人認為的4個層次。很簡單的層次,面試時的感受是:「這題我見過」。結果一般是:卒。因為純刷題,很多細節記不住,也不理解這道題, 而且題太多了還容易混淆。除了一些印象以外,幫助並不大,當然,肯定是比連題都理解了10分鐘才明白要幹嘛的有優勢倒是。這裡我想說的一個全篇隱含前提是:絕大多數刷LeetCode的人,基礎和技術都平平,天資也不見得如何適合計算機,過去寫的代碼也不多。如果你是玩ACM的,或是初中就開始寫code的,這個回答並不適合你。純靠自身功力能作出LeetCode Medium題的人,其實面試中並不少見,但大多是經驗豐富的碼農,或是CS PhD等,對普通人的借鑑意義不大。對於普通人來說,如果停留在「純刷」的層面上,面試時碰到還是有很大概率會掛掉的。

親手寫過這道題(Copy Paste不算)

在做完題後,短期(2天-1個月,因人天資、狀態而異)內不會忘記,但長期一定會忘記

別小看硬記層次。我相信很多進了一線大廠的人,刷LeetCode不過是硬記層次。有些人天資不適合理工和數學(比如我自己),但記憶力極佳,短期內能記住大量的東西。這對那種原題面試基本上是有非常大的優勢的,因為記得所有的關鍵邏輯甚至所有的edge case,不可能出bug,也就很難掛。但這種硬記層次最大的問題是:一旦面對題目的變體,比如Google面試,很容易抓瞎。因為是真的不會啊!後面還有Followup和擴展也很容易露餡。

適合文科天資、強記憶力弱分析弱基礎的人

只要努力,回報特別明顯和直接

有些人是先記住,後面才理解的,硬記是一種學習方式,並非效率低

一旦考題靈活,很容易掛,成功率並不那麼高

時效性太強,施法前搖太高了

每次跳槽面試都這麼搞一把太累,而且傷腦子

任何時候,拿到這道題,都可以做出來,如果忘記了,也會自己推斷和分析出來。換句話說,面試基本上不會掛了(除非是被故意陰了)

真正理解了這道題背後所隱藏的邏輯、思想和算法,並且能夠擴展到類似其它問題,以及處理所有的followup

我很久以前面試時,一些題還處於「硬記」層次。這次疫情在家無聊,隨手做了幾道,發現幾年沒做題,有些題竟然自己進化到了「理解」層次。可見,我自己是典型的「先記再理解」的學習類型,也可能是工作強度高導致的個人能力上升。理解層次最重要的標誌就是不需要重新看題也能面試。這其實意義極大:「說走就走」,隨時可以面試,意味著根本不怕裁員、被開、經濟危機、組裡政治鬥爭,意味著一旦有更好的機會,基本上可以立刻去嘗試。而且,如果大多數題都到了理解層次,那麼面試的成功率也極其高,很可能是面5家拿到4個Offer這種。掌握就是不僅完全理解一道題,並且能給人講清楚,能把「純刷」、「硬記」層次的人,無論智商多少,都提升到「理解」層次。個人認為是沒必要修煉到的一個層次,用處不大。要知道題太多,有第三層次基本上面試都不會掛了,有這個時間還不如提升自己的系統設計能力,甚至工作和人際能力。綜合來說,「刷完」LeetCode,很多人只是停留在第一層次和第二層次,但如果大多數熱門題已經有第二層次了,也可勉強一戰,萬一混進大廠就舒服了對吧?這時候運氣和經濟是主導因素;到了第三層次,基本上無視經濟和運氣這些因素了,但個人覺得大部分天資普通的人都是在工作幾年後才(有時間、有耐性、有悟性)修煉到第三層次的,也不必強求。刷完LeetCode != 會面試最後來解釋這個。面試是一門學問、需要研究,這句話沒有實際意義,但我想說的是下一句:作出題不見得拿到Offer,這已經是業界共識。舉個簡單例子:很多人能作出題,但交流太爛,基礎太薄弱,稍微一問就露餡,就很容易掛。面試不是高考,沒有標準答案,沒有100%客觀的評判。所以,如果面試時100%的精力都在做題或是思考或是硬挖出最初的做法,很容易忽視交流和分析,從而交流上失分甚至掛掉。這也是為什麼我說「硬記」層次面試成功率並不高、而一旦到了「理解」層次幾乎很難掛的原因:在「理解」層次上,一個人的思維過程就是分析過程,只要同時說給面試官聽即可,同時順便自然地寫出代碼。換句話說,在這個層次,這人基本上只有50%的精力在考慮具體程序,50%的精力在分析和解說上,自然容易溝通;而「硬記」層次可能80%的精力都在回憶自己當時怎麼做的、應該怎麼解釋,所以面試官聽不懂,答案duang的一下就出來了,很突兀。那麼,如果不想花時間、只能達到「硬記」的層次,就要加強交流、演說方面的訓練。個人認為,交流不是口語、英文,這也是一大誤區。交流,是一種能力,怎麼用最簡單最實用的辦法,讓對方明白你的思路、推導和過程。很多美國人的交流也不行,雖然是母語,囉哩囉嗦地說一大堆,最後反而給人一種「這麼簡單的事情,話好多」的反感。交流的一個重要因素是,要跟別人在同一個平面:不僅僅要知道題的做法,還要知道別人一般是怎麼想的、怎麼能給他(她)解釋清楚。這樣看,面試又不簡單了:因為實戰中,最多只有50%-70%的精力在應付題本身,而平時做題是100%。所以,刷完LeetCode的人,很可能面試還不夠熟練,甚至還沒入門、還會犯低級錯誤。這也是我認為「刷完LeetCode != 會面試」的根本原因。當然,最後抬個槓,LeetCode不會刷「完」的,子子孫孫無窮匱也。1000多道題,最後只能讓第二層次「硬記」越來越困難,客觀上是逼迫所有人往第三層次「理解」發展的,即:LeetCode做完多少題,已經不是一個指標了;更關鍵的是,一個人「理解」了多少題。如果說對策,本文就太長了。我只能說刷題+實戰:刷題是基礎,實戰中提高技巧和交流,兩者循環往復,實力提高會很快。當然,累。

作者|胡津銘

https://www.zhihu.com/question/32019460/answer/887877092

算法弱雞過來強答一下。

在LeetCode上前後一年多陸陸續續刷了760道題左右,基本上把大部分的免費題刷完了。

刷LeetCode之前的基礎:

本科非CS,與CS相關的課只有一門C++,跟過Coursera上的Algorithm課程,學過基本的數據結構。胡亂看過Algorithms的前幾章和CLRS書,前者跟著課看的話大部分能看懂,後者很多看不懂。掃過CLRS的一些習題但太菜了做不動。碩士轉了CS,也沒上過算法課和數據結構課,做的是機器學習方向。這時候做LeetCode上難一些的easy題就會很吃力,medium中比較簡單的題可能能做出來,hard一道都做不出。

刷LeetCode的方式:

先從Top100 liked 的tag開始刷(這個tag的題我刷了好幾遍)。刷完之後按topic的tag刷過一段時間,後來改成了選擇難度之後按順序刷。一開始就按照ac率從高到低亂刷,後面就只刷點讚比點踩多不少的題。有一段時間每周的周賽基本都參加,不過最後也就是2000分的水準,比較弱。我一道題如果較長時間想不出來(比如半小時到一小時),就會去看discussion,主要是太懶了不想動腦子。自己A了的題也會去看discussion,去學別人比較好的解法(後來是學寫法),然後自己照著敲一遍。不會或者不是最優解法的題,過一段時間如果記得的話就再做一遍,不過一般都是不記得了:(

刷LeetCode之後:

大概刷了400多道題之後開始找實習,這個時候的水準是hard多數做不出,medium基本都能做出。找實習的時候比較閒,大概面了10來家公司,吃到了hulu的拒信,其他的公司例如Google/MS/阿里/騰訊/頭條這些都算是比較輕鬆地拿到了offer。hulu的題當時確實就是做不出,實力不濟。然後後面比較閒又刷了些題,秋招開始的前一個月因為忙和懶就沒怎麼刷題練習了,這個時候的水準是hard能做出一部分吧。秋招面的公司不多,有Google/阿里/騰訊/頭條之類的,算法/研發崗都有投,都拿到了offer,國內企業的話給的都是ssp。就做題而言,個人感覺是外企hulu/airbnb的題不一定能做出來,國內的企業的話頭條的題可能會碰到些挑戰(據說很多創業公司/獨角獸公司的題很難,不過我全都沒投,就不知道怎麼樣了)。當然了,面試涉及的因素/能力很多,還有溝通交流、項目、其他cs/機器學習基礎等等,那就是另外一回事情了。我在Github上有寫一些這方面的總結,也寫了一些自己轉專業自學CS的心得,也歡迎參考~

tips for interview:

https://github.com/conanhujinming/tips_for_interview/blob/master/README-zh_CN.md

總結:

刷LeetCode儘量還是精刷。但即便你像我一樣基礎一般又懶得精刷,單純地堆砌題量也能搞定大部分公司出的題了。建議多做那種自己要費一些力氣才能做出來,但又不是完全做不出來的題,然後少做自己可以秒殺的題。可以找小夥伴組隊一起刷,相互督促鼓勵交流討論,共同進步~

作者|北南

https://www.zhihu.com/question/32019460/answer/1211129124

如果你是把目標定在了網際網路大廠,包括一些臨近上市的當紅炸子雞,那我覺得你不僅僅要題目「做的出來」, 更重要的是要能「說的明白」。

正所謂光說不練假把式,光練不說傻把式,又說又練才是真把式。

做的出來這一步我不多說了,幾個高贊回答都說的很好。做的出來是一切的基礎,是後續溝通的前提。

但「做的出來」不是最終目的,你面對的是一個有靈有肉的面試官,而不是自動測試的機器,否則一個leetcode這樣的系統不就可以取代面試官了?你的目的是讓對方喜歡你,是用「說」來讓對方知曉你的能力,也是用「說」來戰勝其他競爭者脫穎而出。那我就重點來說一下「說的明白」

1. 說清楚算法的時間複雜度和空間複雜度,這個很多算法會有平均情況和最差情況, 你也要討論清楚什麼時候會出現最差情況。

2. 說清楚各種邊界條件,要知道如何測試你的代碼。比如說對於輸入為空返回什麼等等。leetcode設計的那些test cases是這個網站價值的重中之重。

3. 說清楚算法的適用條件,也就是什麼時候這個算法才是正確的。比如說如果圖中有邊的長度是負值,那麼dijkstra算法還能用嗎?又比如說選取top k這種題會有好多種算法,它們之間的優劣又是怎麼樣的?在什麼情況下某種算法才是最優的?

4. 討論多線程或者分布式的情況。很多公司會在你題目做完後,給你幾個follow up。比如說就會問你,如果把你的算法放到100臺機器上,這個算法還成立嗎?要如何修改?

5. 討論極大數據量的情況。和第4點類似,比如說你做個排序,如果內存中放不下所有的元素,你如何處理?時間複雜度和空間複雜度又會有怎樣的變化?

以上是比較「硬」的「說的明白」,下面還有比較「軟」的「說的明白」。也就是現在HR們常說的軟技能。

1. 你是否能問對問題?

這裡既包括一些clarifying的問題, 也包括你是不是能合理的要到面試官的提示。

2. 你是否能說清楚你的思維過程?有邏輯,有條理,而不是給面試官感覺你事先看過答案。

有些朋友看完題上來第一句話就是「這題用DP」,你以為你在打ACM個人戰嗎?你不和你隊友說下思路嗎?難道不是先找一些子結構,裝模作樣的試試看,然後再說「這題可以用DP,元芳,你怎麼看」嗎?當然,你也不用太戲精,自然就好。

3. 你是否能接著面試官給的提示進行思考和討論,而不是固執己見。

關於這一點,我想很多朋友會看過一些面經,有時候候選人已經是給出最優解了,但是面試官會給出不同的意見,引導候選人去做一個其他的解法。這是為什麼?是面試官不知道最優解嗎?有這個可能,但也有可能是面試官通過這一點來和你溝通,看你如和應對。往往無視面試官意見的朋友,是不容易得到很好的反饋的。當然,我也不是說面試官說啥你都照做,因為可能因為你被面試官故意誤導或者他也真不會造成題目沒有及時做出來。如何說服對方,這就又是一門學問了。

4. 你是否能控制好時間,控制節奏,甚至引導面試官來到你更熟悉的領域。

其實軟的東西有很多,我以後還可以繼續補充。我說這些也不是嚇唬大家,讓大家焦慮,其實也沒必要焦慮,因為這些軟技能咱們大多數程式設計師都很一般,很少有特別好的。不管你是不是科班出身,學校也不教這個。但也正因為咱們都起點比較低,所以提升的空間才大,你稍微努力練習一下,就能有機會脫穎而出。

我建議:

找幾個朋友互相練習, 你要習慣在團隊裡工作

一邊刷題,一邊自言自語講自己的思路,自問自答

把自己做題和自言自語的視頻錄下來,像我這樣

我覺得如果你能把以上把握好,那麼你算法coding輪應該可以得到不錯的分數。可面試還有系統設計輪和behavior問題輪啊,這些怎麼辦?其實「說的明白」是相通的,面試不僅僅是知識水平的較量,同樣也是你和你未來同事的第一次合作,面試官和你心裡都會裝著同一個問題,你以後願意和這樣的一個人天天說話嗎?所以說呢,把「話」說好,會為你的面試加分不少。

https://www.youtube.com/watch%3Fv%3D7oJ-5CShtUQ

對於覺得學數據結構與算法有困難的朋友們,可以看看我這篇。少則得,多則惑。其實面試中絕大多數題目並不要你會太多高深的數據結構和算法,你把二叉樹和哈希表弄明白了,就可以搞定小一半題目了。

https://www.zhihu.com/question/303208441/answer/538071425

推薦閱讀

添加極市小助手微信(ID : cv-mart),備註:研究方向-姓名-學校/公司-城市(如:目標檢測-小極-北大-深圳),即可申請加入極市技術交流群,更有每月大咖直播分享、真實項目需求對接、求職內推、算法競賽、乾貨資訊匯總、行業技術交流,一起來讓思想之光照的更遠吧~

△長按添加極市小助手

△長按關注極市平臺,獲取最新CV乾貨

覺得有用麻煩給個在看啦~  

相關焦點

  • 通關LeetCode刷題完整攻略,省時又高效
    最近拿到了Google的實習offer,來給大家增強信心。加油!先照著這個分類來一波吧,保證有奇效!當我們拿到這個全局最小值之後,再從該元素所在的數組裡取出其後面緊挨著的元素,加入堆。如此往復直到處理完所有的元素。
  • C#刷遍Leetcode面試題系列連載(1) - 入門與工具簡介
    什麼要刷LeetCode大家都知道,很多對算法要求高一點的軟體公司,比如美國的FLAGM (Facebook、LinkedIn、Amazon/Apple、Google、Microsoft),或國內大廠BAT、TMD、華為,以及國內新興的 AI 公司等等,都對算法水平有所要求。據悉知名遊戲公司的算法崗收入很高,相應的對算法要求也比較高。
  • 求職分享|「我花三個月時間刷題拿到Google offer! 」 如果大家都能一遍兩遍做懂題,何樂而不為?
    有很多同學會覺得「三個月」刷題拿到Google offer是不是譁眾取寵博取眼球,但說實話確實是實打實的三個月,那就讓我們來看看該如何高效做題,這樣可以讓很多同學少走彎路,在這位導師看來,那些刷五遍十遍的朋友,都是走了彎路的,如果大家都能一兩遍做懂,何樂而不為呢?
  • 在IDE中刷LeetCode,編碼調試一體化,刷題效率直線up!
    今天為大家帶來兩個乾貨分享,讓你的刷題效率up up up!首先,工欲善其事必先利其器。第一份乾貨來自網友在GitHub上分享的一份教程:在IDE中刷題,讓編碼調試一體化。插件及使用的程式語言,然後點擊力扣圖標,就能在菜單中選擇題目開始刷題了。
  • 程式設計師一般都瀏覽這些網站,不僅僅提升編程水平!
    https://www.lintcode.com/算法學習網站,上去每天刷兩道算法題,走遍天下都不怕。https://leetcode.com/也是算法題網站,同上。https://lingkou.com/這個是上面算法題網站的中文站點,英文不好的可以刷這個,英文好的推薦去刷英文網站的題目,還能提升英語能力。面經和刷面試題:https://www.nowcoder.com各個公司的面試題和面經分享,找工作前認真刷一刷,一定會有很大收穫!拿到心儀的 offer!
  • PDD等主播能達到什麼水平?
    LOL國服的單雙排已開啟各大主播將在國服匯集主播直播撞車想想就好刺激看一下今天的主播八卦有什麼吧
  • 線下·東北財經大學 | 求職商科:能拿到的最好offer是什麼?
    諮詢公司對口的專業是什麼?雖然我是商科專業但是感覺達不到要求?經常聽到同學們類似的疑問每年光是會計/經濟/金融專業的海內外畢業生過百萬但真正清楚自己專業的優勢和出路做好規劃,最終拿到理想offer的學生少之又少  高考結束後選專業的時候考慮了各個專業未來就業的優勢
  • 一個程式設計師的水平能差到什麼程度
    (給伯樂在線加星標,看經典文章)轉自:知乎知乎上有一個靈魂拷問「一個程式設計師的水平能差到什麼程度
  • 剛跑完XXX,我這個分數是什麼水平?
    剛跑完XXX,我這個分數是什麼水平?
  • iP11 Pro相當於安卓機什麼水平?
    蘋果今年發布的iPhone 11系列機型中,雖然iPhone 11價格便宜廣受大家喜愛,不過要論起配置,顯然iPhone 11 Pro更能代表蘋果手機的技術
  • 我說你在 LeetCode 練死勁不好用,他說你這也沒用,我說我這個有用.
    朋友們好啊,我是張大炮來巡山,剛才有個朋友問我炮哥發生什麼事了,我說怎麼回事?給我發了一個張截圖,我一看!噢,原來是昨天有兩個年輕人,30多歲,一個體重90多公斤,一個體重80多公斤。他們說,有一個說我在 LeetCode 刷題,都快刷吐了,你能不能教教我混元功法?
  • ​LeetCode刷題實戰79:單詞搜索
    今天和大家聊的問題叫做 單詞搜索,我們先來看題面:https://leetcode-cn.com/problems/word-search/Given a 2D board and a word, find if the word exists in the grid.
  • 拿到字節50k offer的數據分析師,都是什麼水平?
    這不,我趁著前段時間的金九銀十,認真研究了一下網際網路名企對於「數據分析崗」的招聘要求,結果發現都還挺「刁鑽」:像字節跳動的數據分析師崗位,開出了30K-60K的高薪,不僅要求候選人擅長SQL、Python、R語言,還要求能通過數據分析挖掘業務增長點,指導業務決策,最終帶來實際的業務增長。
  • 學了HTML5將來能做什麼?薪資水平如何?
    什麼是HTML5?廣義上對HTML5前端的解釋是包含HTML、CSS和JavaScript在內的一套技術組合。
  • LeetCode 刷題指南(1):為什麼要刷題
    ,不過不可否認刷題確實能鍛鍊我們的編程能力,相信每個認真刷題的人都會有體會。相對其他 OJ 平臺而言,有著下面的幾個優點:下面是我刷 LeetCode 的一些收穫,希望能夠引誘大家有空時刷刷題目。問題:抽象思維波利亞用三本書:《How To Solve It》、《數學的發現》、《數學與猜想》)來試圖闡明人類解決問題的一般性的思維方法,總結起來主要有以下幾種:時刻不忘未知量。即時刻別忘記你到底想要求什麼,問題是什麼。
  • offer 爆了..
    所以,四六級如果過了,要明顯標出來,可以直接放在個人簡介裡如果自己證書較多,可以單獨開一欄,明顯地放在其中,因為證書一欄,HR是必看的,它能體現你在學習校的學習情況和學習能力:有些同學就玩躲貓貓特別好,把英語水平寫在最後,而且跟其它信息夾雜在一起,標題也不語言、證書相關,HR就很容易遺漏,一旦遺漏就會認為你沒有在程式設計師的簡歷中,最重要的莫過於實習經歷和項目經歷,這是直接讓你區別於其它人的關鍵部分。
  • 為了拿到谷歌和FB的offer,他們付出了多少努力?
    後來,經過了系統的訓練,我拿到了知名獨角獸SNAP公司的offer,我搬到SNAP總部洛杉磯,吃喝玩樂四處浪,我送給自己的24歲生日禮物是最喜歡的車,用工資買的。在收到H1B的確認信的那天,我的心情,只能用「暢快」兩個字來形容。
  • 以管窺豹:中國製造到底是什麼水平?
    科技賦能各行各業,成為這次通信圈大展會的一個重頭戲,那麼,不妨先翻開製造業這一篇細看一下,中國的製造業到2020年到底是什麼水平? 5G+製造,已到風口時。提起made in China你會想到什麼?鞋子?衣服?這些自然不必多說。
  • 【專業】什麼是「多巴胺」?多巴胺水平低會引起什麼問題?
    是在中樞神經系統中存在特殊的多巴胺能系統,由黑質緻密帶發出的黑質紋狀體束及黑質蒼白球束,即屬於多巴胺能神經通路,其神經介質是多巴胺,由神經細胞或突觸本身合成。多巴胺除了作為去甲腎上腺素的前身外,還是維持錐體外系神經功能的重要神經介質。大腦中多巴胺水平失去平衡可以導致一系列症狀和問題,如帕金森氏症、抑鬱症、多動症等。在中樞神經系統領域,多巴胺幫助身體保持正常功能。
  • 36歲,拿到年薪70萬的offer,卻因背調而取消,到底發生了什麼?
    2020年