左程云|學習算法之道

【左神是我學習算法的引路人,我很喜歡他講的課程和風格丢胚,目前正在刷書与纽,希望自己在software工程師的道路上走的越來越踏實吧? ? ?----Maugham】

以下為采訪正文

CSDN:請簡單介紹下您和目前所從事的工作余舶。

左程云:之前在IBM和百度工作,為了寫書從百度辭職了一年发绢,這期間在線下開辦了50多次算法交流活動硬耍,線上講了20多次直播課。最主要的目的是通過學員反饋找到每個題怎么講才好理解边酒,然后把好的解釋寫進書里经柴。寫書期間非常累,但是現(xiàn)在終于出版了墩朦,目前剛剛閑下來坯认,出去旅游了一下放松了心情。目前剛剛投入到工作狀態(tài)中氓涣,在GrowingIO做后端工程師牛哺。

CSDN:在算法方面,您是如何和學習成長的劳吠?

左程云:本科在華中科技大學計算機學院引润,這一期間能在學業(yè)上讓自己滿意的可能就是沒有掛科而已。碩士在芝加哥大學痒玩,出國之前就了解到想要在國外找工作的話淳附,面試時幾乎只考算法和數(shù)據(jù)結構的題目议慰,于是開始了刷題,也就是搜集這方面的題奴曙,并且代碼實現(xiàn)出來别凹。就這樣從2010年到今天,刷了5年算法和數(shù)據(jù)結構的面試題洽糟。剛開始其實只是為了找工作才開始刷題炉菲,但是半年之后就上癮了,根本停不下來坤溃。最開始是把能找到的所有這方面的書全部看懂颁督,并且實現(xiàn)了好幾遍,然后開始刷LeetCode和CareerCup這兩個網(wǎng)站上的題浇雹,去網(wǎng)上搜各種各樣的分析文章沉御,總之是把一切有關代碼面試的東西都搜來學習。其實并不是一夜之間變得這么勤奮的昭灵,完全是因為學費很貴吠裆,一門課的學費高達5000美金,也就是聽一個小時的課烂完,差不多650元人民幣就沒了试疙。這件事情對我來說很刺激,覺得不好好學習真的沒臉活下去抠蚣,當時就是這么極端的想法祝旷。因為錢的刺激,我一年內(nèi)走出校園的次數(shù)都屈指可數(shù)嘶窄,用了大量的時間好好刷題怀跛。

剛開始代碼實現(xiàn)算法和數(shù)據(jù)結構的題目真的非常痛苦,因為這部分的內(nèi)容相比其他方面的知識絕對算高門檻柄冲,而我最開始的基礎也并不好∥悄保現(xiàn)在我經(jīng)常在網(wǎng)上給同學們講題,看到同學們表達的抱怨现横,那簡直就是當年的我漓拾。這是一個脫胎換骨的過程,但好在會迅速上癮戒祠,堅持半年之后就能一直堅持下去了骇两。

算法和數(shù)據(jù)結構問題的技術累積非常需要長期堅持,因為內(nèi)容又多又雜姜盈。如果大家看一下每年大公司的算法和數(shù)據(jù)結構面試題低千,就可以了解到這個特點。剛開始準備的時候贩据,肯定是先把書本上基礎的內(nèi)容熟練掌握栋操,把時間復雜度和空間復雜度的基礎分析方法熟練掌握。把基礎打實之后饱亮,接下來我技術累積的路線就是所有坑全跳進去矾芙,掉到坑里還不愿輕易出來,還在坑里打滾近上,哈哈剔宪,這和我的性格有關,就是很難聽人勸壹无。一直分析到筋疲力盡葱绒,終于明白自己的方法就是不如書上的或網(wǎng)上的,然后還要想很久這個更好的方法實質上到底是什么斗锭。每一道題基本上都是這樣做的地淀,總之就是進步非常緩慢,但好處是學的堅實岖是。差不多代碼實現(xiàn)到200題的時候帮毁,感覺自己有了很好的感覺。這里要對大家有一個提醒豺撑,刷完一道題其實是一件很難的事情烈疚,因為普通解法很容易,但是最優(yōu)解真得去耐著性子研究好久聪轿,去查資料爷肝,去做優(yōu)化,這個過程很漫長陆错。刷題圈流行一句話灯抛,“刷200道題之后,再無庸手”音瓷,說的就是用必須找到最優(yōu)解的心態(tài)去刷200道題之后牧愁,進步真的非常大。我就這樣折騰了好幾年外莲,每天都刷題猪半,每天都想解法,最后終于發(fā)現(xiàn)沒啥新鮮的面試題了偷线。最近覺得有意思的題磨确,都是ACM競賽題,這里就不再介紹這方面的內(nèi)容了声邦,因為與準備代碼面試的同學離得比較遠乏奥。在刷題這么長的時間中,代碼實現(xiàn)能力和對經(jīng)典算法的學習是共同進步的亥曹。

CSDN:不久前您出版了《程序員代碼面試指南》一書邓了,為什么寫這本書恨诱?寫書一種怎樣的體驗?有哪些心得和體會可分享骗炉?

左程云:其實現(xiàn)在拿到自己寫出來的書照宝,還是挺震撼的,沒想到能寫成句葵,還能寫這么多厕鹃。其實就是有一天我看到自己刷題的文件,好多啊乍丈,不出書似乎有點難受了剂碴,于是就開始寫。當時在百度轻专,平時工作很多忆矛,為了寫書常常熬夜,后來真的吃不消了请垛,就辭了工作洪碳,專心把書寫出來。期間還有一個很大的變化叼屠,就是開始辦一些算法交流班瞳腌,因為會做題和能把解法講清楚之間差別很大。所以我就給剛開始準備面試的人講很多題镜雨,這也是我對這本書最自信的地方嫂侍,因為在很多同學的反饋中,我修煉了自己的表達荚坞,怎么講最好懂挑宠,怎么舉例子最能說明問題,在辦算法交流班的過程中我也學到了很多颓影,教學相長的感覺很不錯各淀。寫書期間辦了60多次講座,把想寫進書里的題全講了一遍诡挂,然后根據(jù)反饋來寫書碎浇,就是這么過來的。我覺得這本書最大的特點是題目很全璃俗,涉及的代碼技巧也很多奴璃,最關鍵的是解釋清楚,難懂的地方都舉了例子城豁。這里要感謝李曠世先生和殴赌拢客網(wǎng)CEO葉向宇先生,他們給我提供了很好的平臺。

CSDN:您這本書最大的特色是什么雳旅?

左程云:題目非常多跟磨,基本上把近些年IT企業(yè)的高頻代碼面試題目一網(wǎng)打盡了。但讓我最自信的是對實現(xiàn)的技巧介紹非常全攒盈,直到今天我依然會關注新出現(xiàn)的代碼面試題抵拘,但發(fā)現(xiàn)解法的原型幾乎都跑不出我這本書的范圍。另外就是所有的解法都有完整的Java實現(xiàn)沦童。

CSDN:您這本書是介紹面試中遇到的算法和數(shù)據(jù)結構的高頻題,及其解法叹话。請問以面試為目的算法學習和我們正常理解的算法學習有什么區(qū)別和聯(lián)系偷遗?

左程云:在網(wǎng)絡上流行一句話:算法分三種,競賽的算法驼壶、面試的算法氏豌、算法。雖然我覺得這么分非常讓人無語热凹,但其實可以去這么理解泵喘,因為競賽、面試和純理論的要求和限制是不同的般妙,所以算法在不同的要求中展現(xiàn)了不同的樣子纪铺。

對于競賽來說,每道題對輸入?yún)?shù)和樣本量的要求都是非常明確的碟渺,同時規(guī)定的非常明確的還有空間的限 制和運行時間的限制鲜锚。

而對于面試來說,限制往往并不明確苫拍,造成這個現(xiàn)象的原因也很好理解芜繁。競賽中當然是分數(shù)最重要。在面試的過程中绒极,與面試官的交流和體現(xiàn) 自己想事情的方式骏令、體現(xiàn)自己邏輯的嚴密更重要。所以同一道題垄提,在競賽中必須寫清楚限制榔袋,而在面試中一道題剛開始的限制沒那么多,目的就是縮短你理解題目的時間铡俐,讓面試者先寫出一點什么摘昌,然后和面試官展開討論,隨著討論的深入高蜂,再逐漸的把限制加上去聪黎。總之在面試的場合就是想看看你想問題的習慣、軌跡以及表達 能力是否符合要求稿饰。

當然锦秒,不管是什么要求下的算法,經(jīng)常練習算法和數(shù)據(jù)結構題目對一個人在邏輯上的提升都是顯而易見的喉镰,在學校參加ACM并取得很好成績的同學旅择,如果不是表達能力特別差的話,是一定會收獲很多offer的侣姆,因為思維被鍛煉的很好生真。

CSDN:您在面試這塊有很深的實踐積累,大小互聯(lián)網(wǎng)公司有什么不同捺宗?以及國內(nèi)外的互聯(lián)網(wǎng)在算法面試這塊有著怎樣的區(qū)別柱蟀?

左程云:面試題不光有算法和數(shù)據(jù)結構題目,但是其他類型的題目都很好準備蚜厉,記住了长已,理解了,就不會忘昼牛。比如术瓮,系統(tǒng)、數(shù)據(jù)庫贰健、網(wǎng)絡胞四、編程語言等等吧,都具備這樣的特點伶椿。而算法和數(shù)據(jù)結構題目真的需要好好寫代碼才能掌握撬讽,所以我建議大家準備面試的時候,抽出20%的時間去理解和記憶非算法和數(shù)據(jù)結構的題目悬垃,剩下的時間就是去刷題游昼。

一般來講,工資高的公司在面試時算法和數(shù)據(jù)結構題目的比重較大尝蠕,工資一般的公司比重較小烘豌。當然同樣公司的不同崗位,要求也會不同看彼,但總體趨勢就是國內(nèi)好公司愛考算法和數(shù)據(jù)結構廊佩。這是目前國內(nèi)互聯(lián)網(wǎng)公司的情況。國外的互聯(lián)網(wǎng)公司幾乎只考算法和數(shù)據(jù)結構靖榕,早個8年前就是這樣了标锄,一直如此。我相信國內(nèi)會逐漸變得像國外一樣茁计,并不是崇洋媚外料皇,而是算法和數(shù)據(jù)結構題目真的能考出東西。

算法面試的特點就是沒有特點,什么樣的題都可能遇到践剂,因為根本沒有考綱鬼譬,面試官就是普通的程序員,他們在工作中或者在網(wǎng)絡上遇到什么題不錯逊脯,就可能考优质。所以我這本書寫了530頁嘛,因為內(nèi)容太多了军洼,這不是一個標準考試巩螃,這是能力考試。

CSDN:怎么看待IT企業(yè)在招聘要求中匕争,對算法和數(shù)據(jù)結構的要求越來越高這個事實避乏。

左程云:其實在很多年前,美國的那些知名IT企業(yè)在招聘的時候就已經(jīng)不怎么考除了算法和數(shù)據(jù)結構之外的東西了汗捡∈缂剩可能是覺得這樣能選出聰明的人吧畏纲。但我覺得只考算法和數(shù)據(jù)結構的東西也不健康扇住,就像練功一樣,內(nèi)功和外功同樣重要盗胀。

CSDN:對于剛開始準備代碼面試的同學艘蹋,有哪些提醒。

左程云:別覺得辛苦票灰,越練會越上癮的女阀,而且那真的很有營養(yǎng)也很精彩。

CSDN:算法學習是一條并不簡單的路屑迂,對于-1~3歲的從事算法相關職業(yè)的人或那些對算法感興趣者浸策,算法學習你有什么經(jīng)驗可分享?以及學習時應該注意什么惹盼?

【以下是本文最重要的地方S购埂!J直ār遣铡!Q诟颉枉昏!

左程云:先找到線團,然后進入線團里學著怎么玩揍鸟。為了進入線團兄裂,需要先把基礎知識掌握好,然后有一些很經(jīng)典的書可以迅速讓你進入狀態(tài),比如我這本《程序員代碼面試指南》懦窘,還有《劍指offer》(請參見作者訪談——專訪何海濤:“不正經(jīng)”程序員的進階之路)和《程序員面試金典》(《cracking?the?coding?interview》中文版)這些好書前翎。我不建議剛開始刷題的人就直接在網(wǎng)絡上搜集文章開始學習,因為太散了畅涂,而且需要花很多時間去鑒別正確與否港华。當這些內(nèi)容都掌握之后,再開始在網(wǎng)上搜集各種各樣的題午衰,并與網(wǎng)友參加各種各樣的討論立宜,會比較高效。把底子打好之后臊岸,對于專項算法的學習就得心應手了橙数,而且會學的很快。對于很龐大的算法帅戒,我個人的習慣是找例子來引導自己的思路灯帮,一點一點的接近算法的核心。唯一需要注意的是逻住,一定要寫代碼钟哥,光看沒有用的。

對于某一個具體的算法瞎访,首先要搞清楚這個算法解決的問題是什么腻贰,可能是實現(xiàn)一個具體的功能,也可能是在某些方面扒秸,比如時間復雜度或者空間復雜度方面很卓越播演,總之搞清楚這個算法被研究出來的目的是什么。

然后就要弄清楚這個算法的生存環(huán)境了伴奥,也就是看看你此時研究的東西是不是對別的知識有依賴写烤,應該先把底層依賴的知識理解并掌握。這些問題都解決之后拾徙,就進入到算法本身的學習洲炊,理解一個算法是一件辛苦的事情,剛開始看必然會產(chǎn)生很多的困惑锣吼,比如經(jīng)常會懷疑作者講述的內(nèi)容的重要性选浑?這些內(nèi)容和這個算法有什么聯(lián)系呢?經(jīng)常會有這種摸不著頭腦的感覺玄叠,其實作者做的鋪墊都是為了建立起描述算法主要內(nèi)容的基礎古徒,只有接受和理解這些基礎,才能逐漸觸碰到算法的精髓,所以耐心是很重要的。

算法的主要過程看完之后,往往還是會感到困惑惩淳,主要是不知道這個過程好在哪疹吃,這就進入了下一個階段蹦疑,理解作者對這個過程在功能性或者效率卓越這件事上的解釋和證明。這才真正觸碰到算法最精髓的部分萨驶,也就是深度的理解算法的主要過程所帶來的好處歉摧,這才是最鍛煉人理解能力的地方。

上面幾點是算法學習階段的過程了腔呜,接下來就是研究算法的代碼實現(xiàn)叁温,自己設計測試用例親自跑一下代碼,以及從代碼運行時間的角度分析這個算法的優(yōu)勢核畴,這也是加深對算法的理解的過程膝但。

最后是配合相應的題目練習,讓自己通過題目練習的方式谤草,會用跟束、善用學習到的算法,并對這個算法產(chǎn)生一定的敏感程度丑孩,具體是指看到某些題目時冀宴,能夠根據(jù)題目的特點,產(chǎn)生與該算法的對應嚎杨,也就是具備舉一反三的能力花鹅⊙跹】

CSDN:您是如何走上編程之路的枫浙?以及寫代碼如何與算法高效的結合?常用的語言是古拴?

左程云:因為本科和碩士階段都是計算機專業(yè)箩帚,所以走上編程之路的過程是非常自然的,但我真正享受編程的過程是在開始做算法和數(shù)據(jù)結構的題目之后黄痪,牛人們寫出來的東西怎么就是比我快呢紧帕?所以開始研究起來,并越來越癡迷桅打。程序=算法+數(shù)據(jù)結構是嗜,所以不存在結合的問題。常用的語言是Java挺尾。

CSDN:你是否在工作或生活中發(fā)現(xiàn)其他讓您印象深刻的算法鹅搪?以及研究算法,對您的工作和生活有什么收獲遭铺?

左程云:很多算法對我的影響都很大丽柿,從開始時的很基礎的排序算法恢准,到后來看到的BFPRT、KMP甫题、Manacher馁筐、蓄水池采樣、skew坠非、Morris遍歷等等等等先賢們的成果敏沉,震撼我的次數(shù)已經(jīng)數(shù)不清了。對自己的頭腦變得越來越自信炎码,這是最大的收獲

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赦抖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子辅肾,更是在濱河造成了極大的恐慌队萤,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矫钓,死亡現(xiàn)場離奇詭異要尔,居然都是意外死亡,警方通過查閱死者的電腦和手機新娜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門赵辕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人概龄,你說我怎么就攤上這事还惠。” “怎么了私杜?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵蚕键,是天一觀的道長。 經(jīng)常有香客問我衰粹,道長锣光,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任铝耻,我火速辦了婚禮誊爹,結果婚禮上,老公的妹妹穿的比我還像新娘瓢捉。我一直安慰自己频丘,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布泡态。 她就那樣靜靜地躺著搂漠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪兽赁。 梳的紋絲不亂的頭發(fā)上状答,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天冷守,我揣著相機與錄音,去河邊找鬼惊科。 笑死拍摇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的馆截。 我是一名探鬼主播充活,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蜡娶!你這毒婦竟也來了混卵?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤窖张,失蹤者是張志新(化名)和其女友劉穎幕随,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宿接,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡赘淮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了睦霎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梢卸。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖副女,靈堂內(nèi)的尸體忽然破棺而出蛤高,到底是詐尸還是另有隱情,我是刑警寧澤碑幅,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布戴陡,位于F島的核電站,受9級特大地震影響枕赵,放射性物質發(fā)生泄漏猜欺。R本人自食惡果不足惜位隶,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一拷窜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涧黄,春花似錦篮昧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至春宣,卻和暖如春酵颁,著一層夾襖步出監(jiān)牢的瞬間嫉你,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工躏惋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留幽污,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓簿姨,卻偏偏與公主長得像距误,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扁位,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,111評論 25 707
  • 用兩張圖告訴你准潭,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,723評論 2 59
  • 篇首語:初入職場域仇,很多事情都不懂刑然,尤其是有不成文的規(guī)定時,更加的頭疼暇务,有時候不小心碰線了闰集,也是夠頭疼的。如何向老員...
    米米心臻閱讀 2,136評論 2 0
  • 2018年2月27日,星期二蝠检,好天氣 我今天早上聽了一段新聞: 2018年2月24日沐鼠,吉利集團以近90億美元買入奔...
    賀琴說閱讀 160評論 0 2
  • 讀《唐浩明點評曾國藩日記》 咸豐九年六月初四日 用恩莫如仁,用威莫如禮叹谁。 常聽說“當領導的要恩威并施”饲梭,我以前覺得...
    讀行人聲閱讀 1,028評論 0 0