張土汪 http://github.com/shawnfan Java{script}代碼仔
[1.19.2017] 更新:
2017年1月17日, 陪我征戰多年的 2014 MackBookPro i7 3.xGHz 被一杯清水結束了生命,在這里深切緬懷悼念。這個Git Repo是小M陪我一字一句打出來的,有過蹉跎,也有過輝煌,陪我從Day1刷題一直刷到了Day1之中。直至今日,小M記錄的代碼還在給廣大coder帶來福利。為了延續小M無私奉獻的精神,我將重新在這個repo活躍起來,重整已有的問題,也會嘗試總結一些System Design方面的想法,將小M還沒有能夠達成的夢想實現。
原帖:
先貼一個福利:GitHub - shawnfan/LintCode: Java Solutions to problems on LintCode
然后再慢慢談刷題的經驗。
地點西雅圖。
這一場算是徹頭徹尾的勝利。歸功於一年來的刷題。歸功於不輸陣的心態。歸功於日漸成熟的談吐。更歸功於身邊人的支持。等待了一年多,我對這場勝利真的期待了太久。
刷題是漫長的路,身邊的人能陪伴你,但是從來無法代替你。我刷的最多的是LintCode; LeetCode其實比LintCode要更加嚴苛一些,在最終的備戰時,可以買他們的會員,專門進到各個公司的單元狂刷一下。Flash Back 一下去年刷題的體驗:
第一刷的時候完全不知道為什么要做這些事情,只覺得消耗了很多時間,但總不上道。其實什么都沒有太刷出來,基本上就是懶洋洋地做題,看看別人的解答,一輪一輪地打擊自己的信心。到頭來,也只看了100來道題目吧。
第二刷時,完全是因為有最牛逼的公司遞來了橄欖枝。那時我又興奮又緊張,更多是緊張,因為自己真的是半瓶子醋啊!(說實在的,誰平時會沒事一直練刷題呢,都是為了工作,都是需要動力的)這時開始仔細的看LeetCode還有LintCode里面的題目,分等級開始安排時間。面試的時間定在了一個月,還剩三十天!這三十天真實打了雞血地不停刷題,戰斗,總結,然后再上。到結尾的時候,大約有200道題目吧,其中100道是之前已經做過的。
然后,就失敗了。
第三刷,是來年,我還在無奈的痛苦中,但也到了春暖花開,各個公司撒網的時候了。這一年Facebook, LinkedIn貌似都不太有動靜,Twitter也在暴跌40%的痛苦中。苦苦等待,又來了幾個機會,這一次,我沒有沖動地定下30天的計划,但是依然充滿了雞血。這一邊,仔細講一講吧,說說也能算是面經。
1. 把真的想去的公司,稍微排在后面一點,一般的公司,放在前面先去,當然是增加面試經驗了。 心態還是要端正的:你想,要是后面的公司全都不要你,那么你去哪,廢話,當然是去第一家要你的公司;所以,在這個時候要卯足力氣,打好雞血,做做全面的復習,然后上!
2. 心態要好:成敗都是這幾個月的家常便飯,失敗了再走下一個。成功了也要看清自己的目標不要懈怠(雖然我拿到offer立刻就懈怠,后面的面試全部當做旅游)
3. 刷題要有策略。正所謂磨刀不誤砍柴工,不要一味地鑽進題目里面刷刷刷,復習復習復習,重點是要能總結! 有時候這種廢話聽上去一點力度都沒有,但是實際情況就是那么簡單。 咱們刷刷題就能找到工作的這個時代,遠遠不到拼智商的程度。 那拼什么?拼耐心和拼誰更加不漿糊。 刷了那么久,到底哪些題目是Tree, 哪些是DP,哪些是明顯的坑?如果你到現在還沒有總結,那。為。什。么。不。總。結! 不總結自己到底做了什么題目,腦子里就是一團漿糊。面試的時候可緊張了,我們這樣的小青年,見到面試官肯定羞射,若不胸有成竹,寫出來也是一團漿糊。 所以重中之重,就是要學會總結,學會去反思做過的題目。現在的LeetCode(竟然總結了題目開始賣錢我去!?), LintCode都會給出相應的Tag, 這非常好,就是幫助你把題目歸類,分類型去刷。
4. 分類型,一個大塊一個大塊地去攻克。就這么簡單。從簡單的String, List, Tree 開始吧。
5. 我當時還是花錢買了LeetCode的那些題目的(羞。。。)因為求勝心切,這點小錢,就幾個月,花吧,花吧。 這也是對自己的一種投資,也是一點動力,花了錢嘛,make evey peny count!
但是,有一件事情我要說清楚了:這些題目明明都是我們這些草民玩家通過一次次血淋淋的面試換來的寶貴經驗,憑什么LeetCode就要拿過去賣錢... 當然, LeetCode提供的服務是特別好的, 他們的test case更加難,比LintCode要嚴苛一些(對我們自己好),所以charge一些費用也是應該的。但是,我真的覺得知識不應該被用來販賣,知識應該共享,而你們網站提供的優質刷題環境,可以用來賣會員,比如說,我買了會員,你給我提供快兩三倍的run speed等等。。。。。
一顆熱愛Open Source的我,自然會好好‘總結’一把。跟網上大部分的大神不同,我不喜歡把我總結的題目都放在Blog里面,實在是,太難搜索了。
我把我做的所有題目都放在了GitHub上, 用我自己的標記方式,寫好了題目梗概,自己在每個階段的解法,在每個題目文件的最上方,還用中文寫了用來Trigger Memory的筆記(別問我為什么用中文寫:1. 中文容易提醒自己,母語嘛!2. 我不想讓阿三門都跑過來看,雖然,open source吧,我還是稍微給一道語言的隔閡)
話都說到這個份上了,你們自己去不去看,就是你們自己的選擇啦。用我的代碼沒問題,要是轉我的代碼,麻煩在你們轉發的帖子上面貼一條我源代碼的鏈接就好啦。 大約三百來道題目吧,你們在刷Lint或者Leet的時候,可以去我的頁面搜索題目的名字。300多道,差不多中等的題目都能涉及到了(我去別跟我說現在題目都500多了,我真不明白,以后還讓人怎么活!) GitHub - shawnfan/LintCode: Java Solutions to problems on LintCode
LeetCode, LintCode都很好,但刷題的核心是要有血性,會總結。
我的初衷就是想把自己做過的刷題路分享給還在題海的中國同伴,如果你們在看到那些解答,覺得不對,覺得幼稚的時候,send me a fix and pull request,我會定時接受代碼的更新,服務大眾嘛!