刷题方法论
【轉(zhuǎn)自一畝三分田】談?wù)劽嬖嚬僭诿嬖嘽oding題目時(shí)的考察終點(diǎn)與心理活動(dòng)
本人簡(jiǎn)介: 曾經(jīng)微軟dev, 35+, 10年經(jīng)驗(yàn), 有FLG offer.??去年加入一個(gè)start up 公司, 最近前景不明, 在猶豫要不要去個(gè)穩(wěn)定點(diǎn)的大公司。??我從sde開始面試其他人, 到現(xiàn)在估計(jì)面試過100+人次的面試和debrief。 我面過coding, problem solving, design, behavior.??本帖子只談?wù)摷兇鈉oding, 視情況討論要不要再開帖子討論其他方面。
本文涉及下面幾個(gè)問題:
1) 我刷過這個(gè)題目, 還要不要偽裝
2) 我覺得這題很簡(jiǎn)單, 但是不知道為什么就掛了
3) 我覺得面試官不是很友好, 沒提示
4) 我一定要bug free才能被錄取嗎
5) leet code的hard問題真的會(huì)被問到嗎? 考起來(lái)有什么意義?
我們從一個(gè)非常經(jīng)典的, 大家可能都刷過的題目開始。 序列化/反序列化 二叉樹。先說個(gè)背景, 能面到我這里的, 基本需要面試者有3-5年的面試經(jīng)驗(yàn)。 做為應(yīng)聘任何微軟或者flg的高級(jí)dev (63 and above, T4/E4 and above), 面試官其實(shí)都是假設(shè)你刷過不少題目的。 我假設(shè)你刷過這個(gè)題目, 所以我并不關(guān)心你寫的到底有多快,寫的是不是完全bug free, 我更關(guān)心的是你做事的方式和溝通問題的能力。 具體請(qǐng)看下面。??
1. 提出問題, 請(qǐng)序列化/反序列化二叉樹。??
什么? 面試者不知道什么是序列化, 反序列化? 那我就問個(gè)多線程爬蟲, timing LRU 一類的。 如果多線程, 鎖也不會(huì), 那說明這個(gè)面試者的項(xiàng)目經(jīng)驗(yàn)很不足。 為了和其他有經(jīng)驗(yàn)的人相match, 往往我會(huì)給一個(gè)很open的問題, 或者一個(gè)很難的hard coding (取決于他已經(jīng)被考察了哪個(gè)方面). 我個(gè)人覺得很少有面試官上來(lái)會(huì)考你 very hard coding question, 只是當(dāng)某個(gè)面試者與其他面試人比顯得相當(dāng)缺少項(xiàng)目經(jīng)驗(yàn), 那他除非能在聰明敏捷或者下苦功方面有突出表現(xiàn), 否則很難擊敗其他候選人。
2. 交流階段
如果面試者馬上開始寫程序, 或者馬上給出他的想法, 我會(huì)覺得面試者太過于著急了。 在實(shí)際項(xiàng)目中, 你很熟悉的地方可能成為項(xiàng)目中的滑鐵盧, 因?yàn)槟闶煜さ牡胤娇赡苡凶兓?#xff0c; 可能有個(gè)big change你不知道, 可能很快你熟悉的api就不工作了。 你總是要有很好的溝通能力, 確保大家知道你在做什么, 及早的發(fā)現(xiàn)你的錯(cuò)誤。 在code review甚至是test 階段被人發(fā)現(xiàn)問題對(duì)項(xiàng)目來(lái)說就是個(gè)災(zāi)難。?
我期望面試者能夠在這個(gè)階段提出一些問題, 例如,有什么限制條件嗎? 二叉樹的value是什么類型? 這個(gè)api誰(shuí)來(lái)使用, 內(nèi)部的還是public的? 這個(gè)api更注重speed還是space???我需要多線程嗎? 如果面試者沒問任何問題馬上開始照著leetcode的signature開始coding, 甚至class 名字也叫solution(很多人), 我會(huì)覺得面試者做事的方式不夠成熟。 可能以后工作中會(huì)很毛躁, 需要人來(lái)指導(dǎo)。
3. 無(wú)論你提出的建議是什么, 例如你說你覺得speed更重要, 我可能會(huì)說我更期待space. 這樣做是避免陷入你最熟悉的套路。??假設(shè)我說, 我更需要序列化之后的空間占用最小。 這時(shí)候一般的候選人不會(huì)刷到這么深, 開始思考。?
如果候選人根本沒有辦法優(yōu)化空間, 那我會(huì)認(rèn)為他give up too early.??我希望候選人能安靜的思考, 提出幾種方案, 哪怕方案不成立。
如果候選人提出過多的方案, 沒有問help, 這些方案也不工作, 我就認(rèn)為候選人溝通有問題, 無(wú)法把握好度。
舉個(gè)leetcode的例子來(lái)說明問題的深入, leetcode的序列化格式中, ','是必要的嗎? ‘[’是必要的嗎? 有沒有辦法用byte直接序列化? byte還能變長(zhǎng)嗎? base64是什么? zip會(huì)有幫助嗎?
4. 候選人選定方案后, 我希望他能和我溝通, 看看是不是在有限時(shí)間內(nèi)能夠?qū)懲辍?項(xiàng)目中, 很多時(shí)候誰(shuí)都知道什么design是正確的, 什么是bad smell, 最聰明的人不是能做出最好design的, 而是在有限時(shí)間內(nèi)能給出大家都能接受的solution的人。??如果空間優(yōu)化非常好, 但是代碼將超級(jí)復(fù)雜, 無(wú)法寫完, 那么面試者應(yīng)該及時(shí)和我交流。 我也會(huì)偶爾提醒一下這樣能不能在40分鐘內(nèi)寫完。 如果面試者堅(jiān)持, 我不會(huì)堅(jiān)持, 我會(huì)看他是不是能寫完。 這就是either strong hire or fail.
5. 候選人可能這時(shí)候說太復(fù)雜了, 我們簡(jiǎn)化一下, 簡(jiǎn)化到他熟悉的, 刷過的coding.?
6. coding 開始
到這一步, 如果你做了2,3,4,5中的大部分, 并且code看起來(lái)似乎是work的, 沒有什么致命的問題,我不會(huì)糾結(jié)于比如正負(fù)數(shù), nullpointer, int.min, coding是不是整潔一類的無(wú)聊問題。??一般就開始7. 如果你2,3,4,5都skip, 那么一般我就希望你bug free, 否則你沒辦法和其他候選者做比較。往往bug free又要求你code組織很好, 否則誰(shuí)都很難一眼看出你有沒有問題。?
7. follow up
還有什么能改進(jìn)的嗎? 這是考察面試者的知識(shí)面, 也看你是不是耐心。 很多時(shí)候, 很多面試者做出題目高興的得意忘形, 到這里就開始語(yǔ)無(wú)倫次的亂說, 這不會(huì)影響到是不是hire, 但是可能會(huì)影響是不是strong hire, 也可能影響到你的level.
舉例子: 我覺得還需要寫點(diǎn)java doc啊,unit test, regression test, performance tuning, benchmarking, A/B testing, 等等。
總結(jié): 如果你能想到1-7中的所有點(diǎn), 誰(shuí)會(huì)在乎你是不是刷過這個(gè)題目? 即使你刷過這個(gè)題目, 我也十分確定你刷的比別人好很多, 你就是我心中想要的那個(gè)同事。 反之, 如果你只做到了6#, 但是別人做了1,2,3,4,5,6,7, 那你又怎么能面試成功呢?
?
?
?
前幾天寫了個(gè)關(guān)于面試官心理活動(dòng)和側(cè)重點(diǎn)的帖子, 見?談?wù)劽嬖嚬僭诿嬖嘽oding題目時(shí)的考察終點(diǎn)與心理活動(dòng), 求大米,?首先感謝大家的捧場(chǎng)與大米, 也請(qǐng)大家原諒我的一些錯(cuò)別字與語(yǔ)無(wú)倫次(為了快速求大米寫的粗糙了一點(diǎn)), 反應(yīng)超出我的預(yù)期。??也讓我有了動(dòng)力接著寫這一篇帖子。?
在上一篇帖子中提到了coding的一般步驟與考察點(diǎn), 在開貼討論design,behavior, culture fit前, 繼續(xù)深入的討論一下coding的考察范圍, 也以此做為對(duì)一些同學(xué), 特別是new grad的問題的統(tǒng)一回復(fù)。我就不排版和檢查拼寫了, 大家繼續(xù)湊合讀。
coding 種類與應(yīng)對(duì)策略
大致上, 面試官在開始面試前, 會(huì)收到一封email, 里面回大致說明每個(gè)人需要側(cè)重于考察面試者的哪個(gè)方面。 對(duì)于coding來(lái)說, 一般有三類問題, 每個(gè)面試官會(huì)被分配到一類問題。
1. solid coding
這類問題說白了, 誰(shuí)都知道怎么做, 純粹就是考察coding是不是扎實(shí), 平時(shí)自己寫code多不多, 能不能快速的把自己的idea轉(zhuǎn)化為code。 對(duì)于面試者來(lái)說屬于必考種類, new grad 一般會(huì)有兩輪甚至三輪這樣的題目, 有很多工作經(jīng)驗(yàn)的人可能就只有1輪了。??這類題目不過關(guān), 很可能電面死掉或者前幾輪突然死亡。?
solid coding又一般可以分成兩個(gè)小類:
1.1??考察你對(duì)算法的基本理解以及邊界條件的運(yùn)用, 比如findkth largest integer, search in rotate array, bit manipulation 等等。?
1.2 考察你對(duì)基本數(shù)據(jù)結(jié)構(gòu)以及復(fù)雜度的理解。 比如binary search tree, linkedlist vs array, stack, tree dfs, tree bfs 等等。?
按難度來(lái)分, easy的比如3 sum, tree level order iterator.??medium 難度的比如 reverse linked list from index m to index n, course schedule,string multiplication, hard 難度的比如valid number, 復(fù)雜的calculator等。
應(yīng)對(duì)策略:
1.1 類型, 如果是簡(jiǎn)單和medium的沒得說了, 就是希望你又快又好, 除了勤奮和熟練, 沒有什么好策略。 對(duì)于像merge sort, partition這類的算法, 如果7-8分鐘還寫不出bug free我估計(jì)就沒戲了。easy問題請(qǐng)多多注意邊界條件, int 溢出, nullpointer, 負(fù)數(shù), 非法輸入等。??
hard 1.1的請(qǐng)參考1.3
1.2 類型, 簡(jiǎn)單和medium請(qǐng)?jiān)趯懘a前多闡明復(fù)雜度, 這類數(shù)據(jù)結(jié)構(gòu)的問題往往也可以在coding前畫圖來(lái)表示運(yùn)行狀態(tài), 圖畫的清楚也是個(gè)重要的加分項(xiàng)。 hard請(qǐng)參考1.3
1.3 hard類型的coding題目. 這往往是考察你的solid coding的能力, 即我在前文中提到的, 你做事的方式和你思考問題的方法。 即給你一個(gè)coding任務(wù), 你如何從白板開始, 一步步的做出bug free的程序。 這類問題的過程重于結(jié)果。 比如valid number, 你能確保每實(shí)現(xiàn)一個(gè)模塊, 都沒有regressgion, 都沒有bug, 比你一下子實(shí)現(xiàn)所有的feature但是有很多bug 要好很多。??一般來(lái)說面試官看你是否能夠一步步的分隔出小的coding模塊(method), 你如何設(shè)計(jì)test case, 你如何能夠確保這些test case能cover所有的scenario, 你是不是和面試官提前做了足夠的溝通并且限定了coding范圍。? ?從這個(gè)角度來(lái)說, valid number其實(shí)是個(gè)很不錯(cuò)的solid coding面試題。??限于篇幅, 我就不展開來(lái)說了。?
2. problem resolving
這類問題對(duì)于new grad是關(guān)鍵, 也是能幫你differentiate的關(guān)鍵。 說白了, 計(jì)算機(jī)并不是只有算法,我們還需要數(shù)據(jù)庫(kù), 操作系統(tǒng), 網(wǎng)絡(luò), 安全等方面的知識(shí)。??new grad這些方面要弱一些, 所以面試者希望new grad能展現(xiàn)出思維敏捷, 多思考, 快速反應(yīng)的能力。 problem resolving就為了考察這個(gè)能力而誕生的。?
problem resolving也可以分成四個(gè)小類型。
2.1??API design.??這類問題是為了更深入的考察你對(duì)數(shù)據(jù)結(jié)構(gòu)的理解與運(yùn)用。 例如LRU cache,??insert delete getRandom ALL O(1) , design twitter等等。?
2.2??Abstraction.??這類問題是考察你能不能把一個(gè)相對(duì)抽象的問題規(guī)約到你熟悉的問題上面。 比如skyline problem, int stream find median, cleaning robot等等。?
2.3 計(jì)算機(jī)小程序, 例如thread pool, 爬蟲,日志merge等, random generator等。?
2.4 dynamic programming問題。 這類問題有點(diǎn)像solid problem resolving.??主要考察你是不是有systemmatic的方法來(lái)降低一個(gè)brute force程序的復(fù)雜度
這類問題一般都不是很easy的問題, 根據(jù)面試官心情, 可能走的很深很難。 也可能最后演變成bar raiser.?
應(yīng)對(duì)策略:
2.1??主要考察你對(duì)數(shù)據(jù)結(jié)構(gòu)的深層次認(rèn)識(shí)。??首先請(qǐng)同時(shí)確保你理解了題目的意思, 最好能問清點(diǎn)條件 例如immutable array max subarray sum, 那數(shù)組將來(lái)會(huì)變嗎?問清這類的問題有助于你寫代碼前做好重構(gòu)和測(cè)試的準(zhǔn)備。 其次, 如果你能證明你選擇的算法的復(fù)雜度, 甚至證明這就是最佳復(fù)雜度, 那是一個(gè)大大的加分項(xiàng), 如果不能, 至少你也問問面試官是不是已經(jīng)滿意了再開始寫代碼。?
2.2??這個(gè)我自己也頭疼, 說實(shí)話如果第一次遇見了skyline, 我也不知道能不能搞定。??大家有好辦法請(qǐng)回復(fù)有什么好辦法能系統(tǒng)化的解決這類的問題, 我個(gè)人覺得很多時(shí)候靠靈光一閃。?
2.3??這類問題主要看你平時(shí)積累, 也是一大類不能通過leetcode練習(xí)的問題。臨時(shí)抱佛腳的話, 我個(gè)人推薦java concurrency in practice這本書。?
2.4??動(dòng)態(tài)規(guī)劃, 我不知道為什么很多人害怕動(dòng)態(tài)規(guī)劃。 面試中的動(dòng)態(tài)規(guī)劃大致分為單向遞歸(首或者尾), O(n2)或者O(n3) 距離遞歸,??O(mn)遞歸,有限定條件的NP (背包)。 每種類型聽?zhēng)坠?jié)課, 懂了基本原理即可。 至于貪心和帶狀態(tài)的dp(走道鋪磚)一類的dp, 至少我沒在面試中遇到過, 因?yàn)楹茈y臨時(shí)造出一道這樣的題目, 面試官一般也沒這個(gè)能力和時(shí)間來(lái)思考題目是不是嚴(yán)謹(jǐn)。 貪心準(zhǔn)備下加油站, 迪杰斯特拉, 最小生成樹就足夠了。?
3. bar raiser
這類的問題只有當(dāng)onsite應(yīng)聘者的數(shù)量遠(yuǎn)遠(yuǎn)大于head count的時(shí)候, 或者你前幾輪明顯超出了電面時(shí)對(duì)你的定位才會(huì)發(fā)生。 其目的是幫助公司選擇最優(yōu)秀的人。 對(duì)應(yīng)聘者來(lái)說, 壞消息是要度過痛苦一小時(shí), 好消息是你能充分了解這公司厲害的人有多厲害, 能充分展示你的能力, 甚至被越級(jí)錄取也不是不可能。?
bar raiser也是三小類。??
?
?
?
較難的hard題,最好在徹底理解答案的基礎(chǔ)上背題。面試官比較看重的是得到這個(gè)解法的過程。
我們來(lái)以skyline的表演為例,拋磚引玉一下~
題目要求的是建筑的剪影,可以抽象為每個(gè)固定橫坐標(biāo)上的最高點(diǎn)(劃重點(diǎn):提取問題核心)。因此這個(gè)解法可以分成兩部分:
(1)如何把input轉(zhuǎn)換為線性,從而抽象成掃描線問題(甩名詞:sweep line)?
(2)掃描線的具體實(shí)現(xiàn)
第一部分,如果想要簡(jiǎn)單掃一遍,數(shù)據(jù)必須是按x軸排序的。假設(shè)我們 start_x 來(lái)對(duì) building 排序,則end_x仍然是無(wú)序的,這樣不好。(此時(shí)演技爆棚一拍腦袋想到)我們只需要知道skyline的線段是在哪里開始的,因此在building高度發(fā)生變化的X位置進(jìn)行處理即可。building的開始和結(jié)束都算是高度變化,因此可以把 start 和 end 拆開處理,只需要標(biāo)記 X 位置上的高度數(shù)據(jù)以及這個(gè)高度是開始還是結(jié)束。
至于每個(gè)X位置數(shù)據(jù)的具體結(jié)構(gòu),可以用一個(gè)tuple(int h 高度,bool start 表示是開始還是結(jié)束),也可以像高票解法一樣用正數(shù)代表開始、負(fù)數(shù)代表結(jié)束。可以和面試官闡明。
第二部分,主要是如何維持一個(gè)高度的queue。
闡明在掃描過程中需要三個(gè)操作,插入(遇到start),刪除(遇到end),獲取最大值(高度更新),因此可能有:
1. 因?yàn)橐∽畲笾德?#xff0c;所以很明顯我們?cè)囋噃eap,插入O(logn),max O(1),但是刪除是O(n),不太好,我們?cè)囋噭e的;
2. balanced bst (c++ ordered map以及java treemap),全場(chǎng)O(logn),通通O(logn);
3. 有沒有可能優(yōu)化方法1呢?可以用 hashmap + heap的方式來(lái)實(shí)現(xiàn),O(logn) insert, O(logn) remove, O(1) get_max。
第一部分稍微舉例說明了一下如何展示思路。
第二部分我認(rèn)為是裝逼重點(diǎn)。能寫方法3,就先列出1和2,指出他們的不足,然后提出3。如果懶得實(shí)現(xiàn)3,先提出1,再提出2,指出紅黑樹的時(shí)間優(yōu)于heap,在面試官看來(lái)也是對(duì)數(shù)據(jù)結(jié)構(gòu)足夠熟練的應(yīng)用了。
最后記得提出edge case,比如兩個(gè)building高度相同怎么辦(假裝思考一下)如果先push start,再pop end,就不會(huì)有高度變化的問題了嘛,所以我們重寫compare函數(shù)的時(shí)候注意一下就行了。
以上整個(gè)過程,在表演不崩的情況下用5-8分鐘來(lái)解釋,我認(rèn)為都是可以的。
兩年沒刷題了,具體細(xì)節(jié)可能記得不太清楚。最近剛開始當(dāng)面試官,在演技方面給大家舉個(gè)栗子🌰。對(duì)于這種candidate,即使對(duì)方可能是在表演,如果能夠把問題肢解得這么清楚、把多種實(shí)現(xiàn)細(xì)節(jié)的trade-off分析得這么明白,我也會(huì)給一個(gè)pass的。
(皮完就跑 #滑稽#
補(bǔ)充內(nèi)容 (2018-7-29 05:14):
解釋思路的時(shí)間擴(kuò)展到10+分鐘應(yīng)該也可以吧,諸位要不要試試mock一下計(jì)個(gè)時(shí)?我們統(tǒng)計(jì)一下(笑)
總之只要思路連貫,有理有據(jù)令人信服,就不會(huì)演崩。但一定要有develop思路的過程,這也能體現(xiàn)對(duì)解法的充分理解
?
?
寫一點(diǎn)刷題感想
?
前前后后刷題也一年了,很多感想。所以想總結(jié)出來(lái)。我也不知道自己說的對(duì)不對(duì),所以正好和大家交流,相互學(xué)習(xí)。
最核心的三條:
1.?想刷的好沒別的,唯手熟爾。
刷題跟高考數(shù)學(xué)本質(zhì)一模一樣。想想過去高中三年啥事兒都不做,天天做卷子,看到題就大概知道怎么做。而如今因?yàn)樯蠲β?#xff0c;各種事情distraction,導(dǎo)致刷題可能變得時(shí)間不夠。再看看leetcode contest那些20分鐘做完四道題的牛人,很多都是有ACM競(jìng)賽背景的。當(dāng)然或許他們的確天資過人,但我更相信他們是從小開始訓(xùn)練coding,見多識(shí)廣,經(jīng)驗(yàn)豐富,submission上萬(wàn)遍,付出無(wú)數(shù)努力才能維持如此高的應(yīng)試水平的。
另外,對(duì)于所有l(wèi)eetcode mediun題甚至一些hard題,也是要求你在半個(gè)小時(shí)甚至更短時(shí)間內(nèi)做出來(lái),不是要你花幾個(gè)月幾年時(shí)間做調(diào)研寫報(bào)告或者做research探究人類未知,所以內(nèi)容本身應(yīng)該是很簡(jiǎn)潔的一個(gè)小問題(當(dāng)然簡(jiǎn)潔不代表簡(jiǎn)單)。所以刷不出來(lái)?why?就一句話:刷少了。知識(shí)點(diǎn)不夠熟,或者XX算法沒見過,或者這種題型很陌生。不會(huì)的東西都可以在網(wǎng)上找到答案/資料/訓(xùn)練,而不像做research你面對(duì)的是unknown的東西需要花費(fèi)巨大精力去不斷嘗試和研究;所以不會(huì)的就學(xué)習(xí),缺少的就補(bǔ)課,每學(xué)一點(diǎn),就進(jìn)步一點(diǎn)。非常公平。
所以主要還是自己努力的不夠。這是我最大的感受。
2.?最好做到不間斷。
上面說的是刷題本質(zhì),回答的是what的問題。現(xiàn)在說一下how的問題。
我的一個(gè)感想就是,從應(yīng)試記憶的角度來(lái)說,一定要不間斷的刷題,時(shí)刻保持手感。中間如果停掉一個(gè)月或者幾個(gè)月,再pickup起來(lái)的成本就會(huì)很大。這也是我自己的一個(gè)重大教訓(xùn),我自己毅力不夠。往往別的事情一忙碌,就徹底把刷題拋在腦后了。過了一個(gè)月再回來(lái)狂刷。但我慢慢發(fā)現(xiàn)這個(gè)方式并不好,那些刷題很牛的人,他們一定是細(xì)水長(zhǎng)流的,每天刷,哪怕每天只submit一次也可以。
當(dāng)然說的容易,做起來(lái)難。就是毅力。
3.?不停的總結(jié)套路+題型。。
如果說刷題有啥技巧,最核心的我覺得就是要不停的總結(jié)套路和題型。當(dāng)然還沒刷到200題的就不要care這個(gè),先把量做到足夠多才有必要總結(jié)。還是那個(gè)古老的規(guī)律:好記性不如爛筆頭。之前說了,刷題本質(zhì)就是努力,而努力的核心就是不停刷;如何高效的不停刷呢?就是做總結(jié)筆記。而且一定是參考其他人筆記后,做出的最適合自己的那個(gè)筆記,宛如自己的指紋,全世界獨(dú)一份屬于你的。比如,DFS/BFS畫個(gè)圖寫個(gè)pseudo code總結(jié)下。然后有的題為啥BFS比DFS強(qiáng)?拿一個(gè)題做例子總結(jié)一下。有的題是DFS/BFS+union find;有的題是DFS/BFS+DP,分別總結(jié)下。backtracking里各種subset,permutation,combination總結(jié)一下看看他們的區(qū)別。Comparator怎么寫?忘記了?趕緊總結(jié)個(gè)模板。類似的,2D array/priorityqueue如何sort? 。。。
不管任何大模板,還是小細(xì)節(jié),都要做筆記。不管你用evernote,github,gitbook還是什么別的。
除了少數(shù)技巧特殊的題目,其他所有題目一定掌握核心靈魂,而不是死記硬背。我過去就犯過這種錯(cuò)誤。已經(jīng)兩個(gè)月沒刷題了,突然來(lái)個(gè)面試,慌了,所以趕緊把code背一背寄希望碰到原題。最后面試的時(shí)候一塌糊涂。而我那時(shí)候還沒有很認(rèn)真的做總結(jié)。所以有一份刷題總結(jié)在手,作為面試前復(fù)習(xí)的精華,就不怕任何突如其來(lái)的面試了。
所以刷來(lái)刷去,刷出來(lái)的就是套路。如何掌握這些套路?努力唄。
另外還兩小點(diǎn)。
第一就是我覺得現(xiàn)在題型核心就是DFS/BFS/Tree/Backtracking/UF以及延伸出的一些東西,這些都是一條繩上的螞蚱(說的不對(duì)請(qǐng)指正)。當(dāng)然還有一個(gè)點(diǎn)就是DP。 但是過于難的DP實(shí)在是想不出來(lái)。所以我不知道DP這個(gè)東西也是可以通過不停努力掌握的嗎?
第二就是,面試的時(shí)候和leetcode刷題還是很不同的。lc刷習(xí)慣了會(huì)產(chǎn)生對(duì)那種環(huán)境的依賴感。而實(shí)際面試可能要你自己寫main function;或者白板面試。這些都是要額外訓(xùn)練的。
?
轉(zhuǎn)載于:https://www.cnblogs.com/shawshawwan/p/9498910.html
總結(jié)
- 上一篇: 07.必须修正致命弱点摘录——卓越领导者
- 下一篇: 第六周进度总结报告