刷完 LeetCode 是什么水平?能拿到什么水平的 offer?
點(diǎn)擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
觀點(diǎn)一
“面試是與人交流的過程”
作者|硅谷IT胖子
https://www.zhihu.com/question/32019460/answer/1214537663
刷完LeetCode != 會(huì)面試會(huì)面試 + 運(yùn)氣 == 能拿到Offer
運(yùn)氣(大勢)
運(yùn)氣(面試)
刷完LeetCode != 會(huì)面試
“刷完LeetCode“的定義
親手寫過這道題(Copy Paste不算)
在做完題后,短期(2天-1個(gè)月,因人天資、狀態(tài)而異)內(nèi)不會(huì)忘記,但長期一定會(huì)忘記
適合文科天資、強(qiáng)記憶力弱分析弱基礎(chǔ)的人
只要努力,回報(bào)特別明顯和直接
有些人是先記住,后面才理解的,硬記是一種學(xué)習(xí)方式,并非效率低
一旦考題靈活,很容易掛,成功率并不那么高
時(shí)效性太強(qiáng),施法前搖太高了
每次跳槽面試都這么搞一把太累,而且傷腦子
任何時(shí)候,拿到這道題,都可以做出來,如果忘記了,也會(huì)自己推斷和分析出來。換句話說,面試基本上不會(huì)掛了(除非是被故意陰了)
真正理解了這道題背后所隱藏的邏輯、思想和算法,并且能夠擴(kuò)展到類似其它問題,以及處理所有的followup
刷完LeetCode != 會(huì)面試
觀點(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í)題但太菜了做不動(dòng)。碩士轉(zhuǎn)了CS,也沒上過算法課和數(shù)據(jù)結(jié)構(gòu)課,做的是機(jī)器學(xué)習(xí)方向。這時(shí)候做LeetCode上難一些的easy題就會(huì)很吃力,medium中比較簡單的題可能能做出來,hard一道都做不出。
刷LeetCode的方式:
先從Top100 liked 的tag開始刷(這個(gè)tag的題我刷了好幾遍)。刷完之后按topic的tag刷過一段時(shí)間,后來改成了選擇難度之后按順序刷。一開始就按照ac率從高到低亂刷,后面就只刷點(diǎn)贊比點(diǎn)踩多不少的題。有一段時(shí)間每周的周賽基本都參加,不過最后也就是2000分的水準(zhǔn),比較弱。我一道題如果較長時(shí)間想不出來(比如半小時(shí)到一小時(shí)),就會(huì)去看discussion,主要是太懶了不想動(dòng)腦子。自己A了的題也會(huì)去看discussion,去學(xué)別人比較好的解法(后來是學(xué)寫法),然后自己照著敲一遍。不會(huì)或者不是最優(yōu)解法的題,過一段時(shí)間如果記得的話就再做一遍,不過一般都是不記得了:(
刷LeetCode之后:
大概刷了400多道題之后開始找實(shí)習(xí),這個(gè)時(shí)候的水準(zhǔn)是hard多數(shù)做不出,medium基本都能做出。找實(shí)習(xí)的時(shí)候比較閑,大概面了10來家公司,吃到了hulu的拒信,其他的公司例如Google/MS/阿里/騰訊/頭條這些都算是比較輕松地拿到了offer。hulu的題當(dāng)時(shí)確實(shí)就是做不出,實(shí)力不濟(jì)。然后后面比較閑又刷了些題,秋招開始的前一個(gè)月因?yàn)槊蛻芯蜎]怎么刷題練習(xí)了,這個(gè)時(shí)候的水準(zhǔn)是hard能做出一部分吧。秋招面的公司不多,有Google/阿里/騰訊/頭條之類的,算法/研發(fā)崗都有投,都拿到了offer,國內(nèi)企業(yè)的話給的都是ssp。就做題而言,個(gè)人感覺是外企hulu/airbnb的題不一定能做出來,國內(nèi)的企業(yè)的話頭條的題可能會(huì)碰到些挑戰(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)一些力氣才能做出來,但又不是完全做不出來的題,然后少做自己可以秒殺的題??梢哉倚』锇榻M隊(duì)一起刷,相互督促鼓勵(lì)交流討論,共同進(jìn)步~
觀點(diǎn)三
又說又練才是真把式
作者|北南
https://www.zhihu.com/question/32019460/answer/1211129124
如果你是把目標(biāo)定在了互聯(lián)網(wǎng)大廠,包括一些臨近上市的當(dāng)紅炸子雞,那我覺得你不僅僅要題目“做的出來”, 更重要的是要能“說的明白”。
正所謂光說不練假把式,光練不說傻把式,又說又練才是真把式。
做的出來這一步我不多說了,幾個(gè)高贊回答都說的很好。做的出來是一切的基礎(chǔ),是后續(xù)溝通的前提。
但“做的出來”不是最終目的,你面對的是一個(gè)有靈有肉的面試官,而不是自動(dòng)測試的機(jī)器,否則一個(gè)leetcode這樣的系統(tǒng)不就可以取代面試官了?你的目的是讓對方喜歡你,是用“說”來讓對方知曉你的能力,也是用“說”來戰(zhàn)勝其他競爭者脫穎而出。那我就重點(diǎn)來說一下“說的明白”
1. 說清楚算法的時(shí)間復(fù)雜度和空間復(fù)雜度,這個(gè)很多算法會(huì)有平均情況和最差情況, 你也要討論清楚什么時(shí)候會(huì)出現(xiàn)最差情況。
2.?說清楚各種邊界條件,要知道如何測試你的代碼。比如說對于輸入為空返回什么等等。leetcode設(shè)計(jì)的那些test cases是這個(gè)網(wǎng)站價(jià)值的重中之重。
3. 說清楚算法的適用條件,也就是什么時(shí)候這個(gè)算法才是正確的。比如說如果圖中有邊的長度是負(fù)值,那么dijkstra算法還能用嗎?又比如說選取top k這種題會(huì)有好多種算法,它們之間的優(yōu)劣又是怎么樣的?在什么情況下某種算法才是最優(yōu)的?
4. 討論多線程或者分布式的情況。很多公司會(huì)在你題目做完后,給你幾個(gè)follow up。比如說就會(huì)問你,如果把你的算法放到100臺機(jī)器上,這個(gè)算法還成立嗎?要如何修改?
5. 討論極大數(shù)據(jù)量的情況。和第4點(diǎn)類似,比如說你做個(gè)排序,如果內(nèi)存中放不下所有的元素,你如何處理?時(shí)間復(fù)雜度和空間復(fù)雜度又會(huì)有怎樣的變化?
以上是比較“硬”的“說的明白”,下面還有比較“軟”的“說的明白”。也就是現(xiàn)在HR們常說的軟技能。
1. 你是否能問對問題?
這里既包括一些clarifying的問題, 也包括你是不是能合理的要到面試官的提示。
2. 你是否能說清楚你的思維過程?有邏輯,有條理,而不是給面試官感覺你事先看過答案。
有些朋友看完題上來第一句話就是“這題用DP”,你以為你在打ACM個(gè)人戰(zhàn)嗎?你不和你隊(duì)友說下思路嗎?難道不是先找一些子結(jié)構(gòu),裝模作樣的試試看,然后再說“這題可以用DP,元芳,你怎么看”嗎?當(dāng)然,你也不用太戲精,自然就好。
3. 你是否能接著面試官給的提示進(jìn)行思考和討論,而不是固執(zhí)己見。
關(guān)于這一點(diǎn),我想很多朋友會(huì)看過一些面經(jīng),有時(shí)候候選人已經(jīng)是給出最優(yōu)解了,但是面試官會(huì)給出不同的意見,引導(dǎo)候選人去做一個(gè)其他的解法。這是為什么?是面試官不知道最優(yōu)解嗎?有這個(gè)可能,但也有可能是面試官通過這一點(diǎn)來和你溝通,看你如和應(yīng)對。往往無視面試官意見的朋友,是不容易得到很好的反饋的。當(dāng)然,我也不是說面試官說啥你都照做,因?yàn)榭赡芤驗(yàn)槟惚幻嬖嚬俟室庹`導(dǎo)或者他也真不會(huì)造成題目沒有及時(shí)做出來。如何說服對方,這就又是一門學(xué)問了。
4. 你是否能控制好時(shí)間,控制節(jié)奏,甚至引導(dǎo)面試官來到你更熟悉的領(lǐng)域。
其實(shí)軟的東西有很多,我以后還可以繼續(xù)補(bǔ)充。我說這些也不是嚇唬大家,讓大家焦慮,其實(shí)也沒必要焦慮,因?yàn)檫@些軟技能咱們大多數(shù)程序員都很一般,很少有特別好的。不管你是不是科班出身,學(xué)校也不教這個(gè)。但也正因?yàn)樵蹅兌计瘘c(diǎn)比較低,所以提升的空間才大,你稍微努力練習(xí)一下,就能有機(jī)會(huì)脫穎而出。

我建議:
找?guī)讉€(gè)朋友互相練習(xí), 你要習(xí)慣在團(tuán)隊(duì)里工作
一邊刷題,一邊自言自語講自己的思路,自問自答
把自己做題和自言自語的視頻錄下來,像我這樣
我覺得如果你能把以上把握好,那么你算法coding輪應(yīng)該可以得到不錯(cuò)的分?jǐn)?shù)??擅嬖囘€有系統(tǒng)設(shè)計(jì)輪和behavior問題輪啊,這些怎么辦?其實(shí)“說的明白”是相通的,面試不僅僅是知識水平的較量,同樣也是你和你未來同事的第一次合作,面試官和你心里都會(huì)裝著同一個(gè)問題,你以后愿意和這樣的一個(gè)人天天說話嗎?所以說呢,把“話”說好,會(huì)為你的面試加分不少。
