<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>

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

          共 6814字,需瀏覽 14分鐘

           ·

          2020-08-21 17:28


          觀點(diǎn)一

          “面試是與人交流的過程”


          作者|硅谷 IT 胖子
          https://www.zhihu.com/question/32019460/answer/1214537663

          這個問題其實(shí)有隱蔽性,翻譯成簡單的程序語言:

          刷完LeetCode != 會面試會面試 + 運(yùn)氣 == 能拿到Offer

          讓我挨個解釋:

          運(yùn)氣(大勢)


          運(yùn)氣是最重要也最玄學(xué)的一個因素了,但絕不可忽略。所以不要輕易說 “刷 LeetCode 沒用”,很可能,你只是欠缺一點(diǎn)點(diǎn)運(yùn)氣而已。運(yùn)氣包括太多方面了:

          經(jīng)濟(jì):經(jīng)濟(jì)不好,全 Hiring Freeze,LeetCode 刷得再好也不行;經(jīng)濟(jì)太好,OPT 不夠月數(shù)了,某些公司也不要連面試都不給,因?yàn)槌楹灂r(shí)太難。

          政策:我現(xiàn)在在亞利桑那集中營里寫的這些,你還愿意接著看么?

          突發(fā)事件:疫情來了,所有作線下服務(wù)的都慘了。拿到 Offer 也能收回,甚至 intern 也有不少推遲或是收回的,今年(2020 年)屢見不鮮。

          運(yùn)氣(面試)


          面試官是比較隨機(jī)的,每個人的狀態(tài)、出題、風(fēng)格都不一樣。

          氣場:氣場要是和面試官抵觸,本身就很容易被掛;

          面試官心情:很多人把公司面試看得很神圣,殊不知這只是工程師日常的苦難和重?fù)?dān)之一,每周都要重復(fù)多次。面試官趕 deadline 可能會不耐煩,也可能就隨手放過;面試官早上被老婆罵了;面試官被老板罵了;面試官來的路上堵車了。

          我絕不是說,大公司的面試很隨機(jī)。正相反,大公司的面試非常標(biāo)準(zhǔn),判斷非常客觀。只不過我想表達(dá)的是:面試本身是人來主導(dǎo)的,只要是人,就會有隨機(jī)性和個人情緒。舉個例子:你看到一個面試官黑著臉、不耐煩,不要認(rèn)為他不是個好人、是針對你個人的、會注定掛你,很可能他只是來的路上車被哪個混蛋給蹭了而已。

          :面試官出哪道題,隨機(jī)性很強(qiáng)。很可能換個人面,另外一道題,就輕松過了,而這題你正好不會。題的隨機(jī)性,實(shí)在是太強(qiáng)了。

          接下來說
          刷完LeetCode != 會面試


          “刷完 LeetCode“的定義


          LeetCode 有些人是 “純刷” 的,有些人是 “硬記” 的,有些人是 “理解” 的,有些人是 “掌握” 的。這是我個人認(rèn)為的 4 個層次。

          第一層次,純刷

          很簡單的層次,面試時(shí)的感受是:“這題我見過”。結(jié)果一般是:卒。

          因?yàn)榧兯㈩},很多細(xì)節(jié)記不住,也不理解這道題, 而且題太多了還容易混淆。除了一些印象以外,幫助并不大,當(dāng)然,肯定是比連題都理解了 10 分鐘才明白要干嘛的有優(yōu)勢倒是。

          這里我想說的一個全篇隱含前提是:絕大多數(shù)刷 LeetCode 的人,基礎(chǔ)和技術(shù)都平平,天資也不見得如何適合計(jì)算機(jī),過去寫的代碼也不多。如果你是玩 ACM 的,或是初中就開始寫 code 的,這個回答并不適合你。

          純靠自身功力能作出 LeetCode Medium 題的人,其實(shí)面試中并不少見,但大多是經(jīng)驗(yàn)豐富的碼農(nóng),或是 CS PhD 等,對普通人的借鑒意義不大。對于普通人來說,如果停留在 “純刷” 的層面上,面試時(shí)碰到還是有很大概率會掛掉的。

          第二層次,硬記

          硬記層次的定義是:

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

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


          別小看硬記層次。我相信很多進(jìn)了一線大廠的人,刷 LeetCode 不過是硬記層次。有些人天資不適合理工和數(shù)學(xué)(比如我自己),但記憶力極佳,短期內(nèi)能記住大量的東西。這對那種原題面試基本上是有非常大的優(yōu)勢的,因?yàn)橛浀盟械年P(guān)鍵邏輯甚至所有的 edge case,不可能出 bug,也就很難掛。

          但這種硬記層次最大的問題是:一旦面對題目的變體,比如 Google 面試,很容易抓瞎。因?yàn)槭钦娴牟粫。『竺孢€有 Followup 和擴(kuò)展也很容易露餡。

          硬記層次的好處很明顯:

          1. 適合文科天資、強(qiáng)記憶力弱分析弱基礎(chǔ)的人

          2. 只要努力,回報(bào)特別明顯和直接

          3. 有些人是先記住,后面才理解的,硬記是一種學(xué)習(xí)方式,并非效率低


          壞處:

          1. 一旦考題靈活,很容易掛,成功率并不那么高

          2. 時(shí)效性太強(qiáng),施法前搖太高了

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


          第三層次,理解

          理解層次我的定義是:

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

          2. 真正理解了這道題背后所隱藏的邏輯、思想和算法,并且能夠擴(kuò)展到類似其它問題,以及處理所有的 followup


          我很久以前面試時(shí),一些題還處于 “硬記” 層次。這次疫情在家無聊,隨手做了幾道,發(fā)現(xiàn)幾年沒做題,有些題竟然自己進(jìn)化到了 “理解” 層次。可見,我自己是典型的 “先記再理解” 的學(xué)習(xí)類型,也可能是工作強(qiáng)度高導(dǎo)致的個人能力上升。

          理解層次最重要的標(biāo)志就是不需要重新看題也能面試。這其實(shí)意義極大:“說走就走”,隨時(shí)可以面試,意味著根本不怕裁員、被開、經(jīng)濟(jì)危機(jī)、組里政治斗爭,意味著一旦有更好的機(jī)會,基本上可以立刻去嘗試。而且,如果大多數(shù)題都到了理解層次,那么面試的成功率也極其高,很可能是面 5 家拿到 4 個 Offer 這種。

          第四層次,掌握

          掌握就是不僅完全理解一道題,并且能給人講清楚,能把 “純刷”、“硬記” 層次的人,無論智商多少,都提升到 “理解” 層次。

          個人認(rèn)為是沒必要修煉到的一個層次,用處不大。要知道題太多,有第三層次基本上面試都不會掛了,有這個時(shí)間還不如提升自己的系統(tǒng)設(shè)計(jì)能力,甚至工作和人際能力。

          綜合來說,“刷完” LeetCode,很多人只是停留在第一層次和第二層次,但如果大多數(shù)熱門題已經(jīng)有第二層次了,也可勉強(qiáng)一戰(zhàn),萬一混進(jìn)大廠就舒服了對吧?這時(shí)候運(yùn)氣和經(jīng)濟(jì)是主導(dǎo)因素;到了第三層次,基本上無視經(jīng)濟(jì)和運(yùn)氣這些因素了,但個人覺得大部分天資普通的人都是在工作幾年后才(有時(shí)間、有耐性、有悟性)修煉到第三層次的,也不必強(qiáng)求。

          刷完 LeetCode != 會面試


          最后來解釋這個。面試是一門學(xué)問、需要研究,這句話沒有實(shí)際意義,但我想說的是下一句:

          面試是與人交流的過程。

          作出題不見得拿到 Offer,這已經(jīng)是業(yè)界共識。舉個簡單例子:很多人能作出題,但交流太爛,基礎(chǔ)太薄弱,稍微一問就露餡,就很容易掛。面試不是高考,沒有標(biāo)準(zhǔn)答案,沒有 100% 客觀的評判。

          所以,如果面試時(shí) 100% 的精力都在做題或是思考或是硬挖出最初的做法,很容易忽視交流和分析,從而交流上失分甚至掛掉。這也是為什么我說 “硬記” 層次面試成功率并不高、而一旦到了 “理解” 層次幾乎很難掛的原因:

          在 “理解” 層次上,一個人的思維過程就是分析過程,只要同時(shí)說給面試官聽即可,同時(shí)順便自然地寫出代碼。換句話說,在這個層次,這人基本上只有 50% 的精力在考慮具體程序,50% 的精力在分析和解說上,自然容易溝通;

          而 “硬記” 層次可能 80% 的精力都在回憶自己當(dāng)時(shí)怎么做的、應(yīng)該怎么解釋,所以面試官聽不懂,答案 duang 的一下就出來了,很突兀。那么,如果不想花時(shí)間、只能達(dá)到 “硬記” 的層次,就要加強(qiáng)交流、演說方面的訓(xùn)練。

          個人認(rèn)為,交流不是口語、英文,這也是一大誤區(qū)。交流,是一種能力,怎么用最簡單最實(shí)用的辦法,讓對方明白你的思路、推導(dǎo)和過程。很多美國人的交流也不行,雖然是母語,啰哩啰嗦地說一大堆,最后反而給人一種 “這么簡單的事情,話好多” 的反感。

          交流的一個重要因素是,要跟別人在同一個平面:不僅僅要知道題的做法,還要知道別人一般是怎么想的、怎么能給他(她)解釋清楚。

          這樣看,面試又不簡單了:因?yàn)閷?shí)戰(zhàn)中,最多只有 50%-70% 的精力在應(yīng)付題本身,而平時(shí)做題是 100%。

          所以,刷完 LeetCode 的人,很可能面試還不夠熟練,甚至還沒入門、還會犯低級錯誤。這也是我認(rèn)為 “刷完 LeetCode != 會面試” 的根本原因。

          當(dāng)然,最后抬個杠,LeetCode 不會刷 “完” 的,子子孫孫無窮匱也。1000 多道題,最后只能讓第二層次 “硬記” 越來越困難,客觀上是逼迫所有人往第三層次 “理解” 發(fā)展的,即:

          LeetCode 做完多少題,已經(jīng)不是一個指標(biāo)了;更關(guān)鍵的是,一個人 “理解” 了多少題。

          如果說對策,本文就太長了。我只能說刷題 + 實(shí)戰(zhàn):刷題是基礎(chǔ),實(shí)戰(zhàn)中提高技巧和交流,兩者循環(huán)往復(fù),實(shí)力提高會很快。當(dāng)然,累。

          觀點(diǎn)二

          盡量精刷


          作者|胡津銘
          https://www.zhihu.com/question/32019460/answer/887877092

          算法弱雞過來強(qiáng)答一下。

          在 LeetCode 上前后一年多陸陸續(xù)續(xù)刷了 760 道題左右,基本上把大部分的免費(fèi)題刷完了。

          刷 LeetCode 之前的基礎(chǔ):

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

          刷 LeetCode 的方式:

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

          刷 LeetCode 之后:

          大概刷了 400 多道題之后開始找實(shí)習(xí),這個時(shí)候的水準(zhǔn)是 hard 多數(shù)做不出,medium 基本都能做出。找實(shí)習(xí)的時(shí)候比較閑,大概面了 10 來家公司,吃到了 hulu 的拒信,其他的公司例如 Google/MS/ 阿里 / 騰訊 / 頭條這些都算是比較輕松地拿到了 offer。hulu 的題當(dāng)時(shí)確實(shí)就是做不出,實(shí)力不濟(jì)。然后后面比較閑又刷了些題,秋招開始的前一個月因?yàn)槊蛻芯蜎]怎么刷題練習(xí)了,這個時(shí)候的水準(zhǔn)是 hard 能做出一部分吧。秋招面的公司不多,有 Google / 阿里 / 騰訊 / 頭條之類的,算法 / 研發(fā)崗都有投,都拿到了 offer,國內(nèi)企業(yè)的話給的都是 ssp。就做題而言,個人感覺是外企 hulu/airbnb 的題不一定能做出來,國內(nèi)的企業(yè)的話頭條的題可能會碰到些挑戰(zhàn)(據(jù)說很多創(chuàng)業(yè)公司 / 獨(dú)角獸公司的題很難,不過我全都沒投,就不知道怎么樣了)。當(dāng)然了,面試涉及的因素 / 能力很多,還有溝通交流、項(xiàng)目、其他 cs / 機(jī)器學(xué)習(xí)基礎(chǔ)等等,那就是另外一回事情了。我在 Github 上有寫一些這方面的總結(jié),也寫了一些自己轉(zhuǎn)專業(yè)自學(xué) CS 的心得,也歡迎參考~

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

          總結(jié):

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

          觀點(diǎn)三

          又說又練才是真把式


          作者|北南
          https://www.zhihu.com/question/32019460/answer/1211129124

          如果你是把目標(biāo)定在了互聯(lián)網(wǎng)大廠,包括一些臨近上市的當(dāng)紅炸子雞,那我覺得你不僅僅要題目 “做的出來”, 更重要的是要能 “說的明白”。

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

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

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

          1. 說清楚算法的時(shí)間復(fù)雜度和空間復(fù)雜度,這個很多算法會有平均情況和最差情況,你也要討論清楚什么時(shí)候會出現(xiàn)最差情況。

          2. 說清楚各種邊界條件,要知道如何測試你的代碼。比如說對于輸入為空返回什么等等。leetcode 設(shè)計(jì)的那些 test cases 是這個網(wǎng)站價(jià)值的重中之重。

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

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

          5. 討論極大數(shù)據(jù)量的情況。和第 4 點(diǎn)類似,比如說你做個排序,如果內(nèi)存中放不下所有的元素,你如何處理?時(shí)間復(fù)雜度和空間復(fù)雜度又會有怎樣的變化?

          以上是比較 “硬” 的 “說的明白”,下面還有比較 “軟” 的 “說的明白”。也就是現(xiàn)在 HR 們常說的軟技能。

          1. 你是否能問對問題?

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

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

          有些朋友看完題上來第一句話就是 “這題用 DP”,你以為你在打 ACM 個人戰(zhàn)嗎?你不和你隊(duì)友說下思路嗎?難道不是先找一些子結(jié)構(gòu),裝模作樣的試試看,然后再說 “這題可以用 DP,元芳,你怎么看” 嗎?當(dāng)然,你也不用太戲精,自然就好。

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

          關(guān)于這一點(diǎn),我想很多朋友會看過一些面經(jīng),有時(shí)候候選人已經(jīng)是給出最優(yōu)解了,但是面試官會給出不同的意見,引導(dǎo)候選人去做一個其他的解法。這是為什么?是面試官不知道最優(yōu)解嗎?有這個可能,但也有可能是面試官通過這一點(diǎn)來和你溝通,看你如和應(yīng)對。往往無視面試官意見的朋友,是不容易得到很好的反饋的。當(dāng)然,我也不是說面試官說啥你都照做,因?yàn)榭赡芤驗(yàn)槟惚幻嬖嚬俟室庹`導(dǎo)或者他也真不會造成題目沒有及時(shí)做出來。如何說服對方,這就又是一門學(xué)問了。

          4. 你是否能控制好時(shí)間,控制節(jié)奏,甚至引導(dǎo)面試官來到你更熟悉的領(lǐng)域。

          其實(shí)軟的東西有很多,我以后還可以繼續(xù)補(bǔ)充。我說這些也不是嚇唬大家,讓大家焦慮,其實(shí)也沒必要焦慮,因?yàn)檫@些軟技能咱們大多數(shù)程序員都很一般,很少有特別好的。不管你是不是科班出身,學(xué)校也不教這個。但也正因?yàn)樵蹅兌计瘘c(diǎn)比較低,所以提升的空間才大,你稍微努力練習(xí)一下,就能有機(jī)會脫穎而出。


          我建議:
          • 找?guī)讉€朋友互相練習(xí),你要習(xí)慣在團(tuán)隊(duì)里工作

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

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


          我覺得如果你能把以上把握好,那么你算法 coding 輪應(yīng)該可以得到不錯的分?jǐn)?shù)。可面試還有系統(tǒng)設(shè)計(jì)輪和 behavior 問題輪啊,這些怎么辦?

          其實(shí) “說的明白” 是相通的,面試不僅僅是知識水平的較量,同樣也是你和你未來同事的第一次合作,面試官和你心里都會裝著同一個問題,你以后愿意和這樣的一個人天天說話嗎?所以說呢,把 “話” 說好,會為你的面試加分不少。

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

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

          https://www.zhihu.com/question/303208441/answer/538071425
          瀏覽 66
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  天天操夜夜操激情影院 | 一级片网址 | 青青青国产 | 中国产一级黄色a片 | 亚洲三级网站 |