“語言只是工具,而算法才是程序的靈魂。”這句話,我估計你已經(jīng)聽到過無數(shù)次。
可一旦具體到日常工作中,我們還是會遇到各類的「困擾」:- 像數(shù)據(jù)結(jié)構(gòu)和算法這種脫離實際工作的知識,是不是除了面試,這輩子也用不著?那還有學(xué)的必要嗎?
- 哪怕不懂算法,只要把 Java API、開發(fā)框架用得熟練,同樣能讓代碼“飛”起來,為什么還要花精力去學(xué)?
先不急著解答你的問題,我先問你,作為一名開發(fā)工程師,你真的愿意做一輩子的「CRUD boy 」?大部分程序員每天都在重復(fù)「增刪改查」,哪怕是在所謂的“業(yè)務(wù)開發(fā)”中,也只不過是利用已經(jīng)封裝好的現(xiàn)成的接口、類庫來堆砌或者翻譯業(yè)務(wù)邏輯。這么看來,好想確實很少能用到數(shù)據(jù)結(jié)構(gòu)或者算法之類的知識。但不需要自己實現(xiàn),并不代表什么都不需要了解和掌握!舉個例子,假如你不懂這些類庫背后的原理,不懂時間、空間復(fù)雜度分析,那又何談能用好、用對?存儲某個業(yè)務(wù)數(shù)據(jù)時,又怎么選擇用 ArrayList,還是 LinkedList ?調(diào)用了某個函數(shù)后,又該如何去評估代碼的性能和資源的消耗?清醒一點,初級程序員才比招式,高級程序員只看內(nèi)功。僅僅是一個簡單的 ArrayList或Linked List 的選擇,就可能帶來成千上萬倍的性能差別。這時候,數(shù)據(jù)結(jié)構(gòu)和算法的價值就完全凸顯出來。只要你理解背后的數(shù)據(jù)結(jié)構(gòu),可以迅速看出這些類的本質(zhì)區(qū)別。屆時根本用不上死記硬背,也能快速理解對應(yīng)場景下的選擇。剛好趕上極客時間 3 周年活動,全場新人首單 1 元,活動辦得很實在,這里強烈推薦給大家。
在西安交大讀研究生的時候,一個師兄給了我一本《算法導(dǎo)論》,從此我便一頭扎進算法世界,到現(xiàn)在也十多年了。這期間,我研究過數(shù)十本數(shù)據(jù)結(jié)構(gòu)與算法的書籍,并對它們進行了仔細地對比、分析。
我發(fā)現(xiàn),像《算法導(dǎo)論》這些經(jīng)典書籍,雖然很全面,但是過于缺乏重點。很多人學(xué)起來都非常困難。而市面很多在線課程或者線下課程,大多是為了“應(yīng)試”,只講一些看似通用,實則脫離真實開發(fā)場景的內(nèi)容。費勁學(xué)完感覺根本用不上,過不了幾天就忘了。鑒于此,我很想做一個能讓工程師真正受用的,能夠不拘泥于編程語言,與實際開發(fā)場景聯(lián)系緊密,而又能夠幫你訓(xùn)練算法思維,真正提升編程內(nèi)功的數(shù)據(jù)結(jié)構(gòu)與算法課程。我叫王爭,前 Google 工程師,從事 Google 翻譯相關(guān)的開發(fā)工作,深入研究算法數(shù)十年?,F(xiàn)任某金融公司資深系統(tǒng)架構(gòu)師,核心業(yè)務(wù)接口平臺負責人,負責公司核心業(yè)務(wù)的架構(gòu)設(shè)計、開發(fā),以及可用性、高性能等相關(guān)技術(shù)問題的解決。1、掌握數(shù)據(jù)結(jié)構(gòu)與算法的核心知識我根據(jù)自己研讀數(shù)十本算法書籍和多年項目開發(fā)的經(jīng)驗,精選了 20 個最實用數(shù)據(jù)結(jié)構(gòu)和算法結(jié)合具體的軟件開發(fā)實例,由淺入深進行講解背后的設(shè)計思想,并適時總結(jié)一些實用“寶典”,保證你印象深刻,并且能夠迅速對應(yīng)到實際工作場景中。2、提升算法思維,訓(xùn)練解決實際開發(fā)工作難題的強能力這部分我會講一些不是那么常用的數(shù)據(jù)結(jié)構(gòu)和算法。雖然不常用,但是并不是說他們沒用。設(shè)置這一部分的目的,是為了讓你開拓視野,強化訓(xùn)練算法思維、邏輯思維。如果說學(xué)完基礎(chǔ)部分可以考 80 分,那掌握這一部分就能讓你成為尖子生。再回過來說,不管是現(xiàn)在流行的區(qū)塊鏈技術(shù)還是人工智能,核心代碼實現(xiàn)中都會涉及到這些算法。3、學(xué)習開源框架、底層系統(tǒng)的設(shè)計原理,提升工作實戰(zhàn)技能最后我會通過實戰(zhàn)部分串講一下前面講到的數(shù)據(jù)結(jié)構(gòu)和算法,并且結(jié)合 Redis、Disruptor 這樣的開源項目,剖析它們背后的數(shù)據(jù)結(jié)構(gòu)和算法,幫你提升讀懂源碼的能力(JDK 很多源碼,不乏大量的數(shù)據(jù)結(jié)構(gòu),例如大家喜聞樂見的面試題 HashMap)。我掰著指頭數(shù)了下,整個專欄會涵蓋 100 多個算法真實項目場景案例。我還手繪了一些清晰易懂的詳解圖,幫你理解核心概念和實現(xiàn)過程,展示每個知識點的框架邏輯,讓晦澀難懂的算法變得輕松有趣。推薦:數(shù)據(jù)分析實戰(zhàn) 45 講作者陳旸,清華大學(xué)計算機系博士畢業(yè)。從 10 歲開始編程,2 次獲得全國信息學(xué)奧林匹克競賽一等獎,2 次 ACM 國際編程比賽亞洲區(qū)銅獎。現(xiàn)先后通過數(shù)據(jù)分析與騰訊視頻、易車、58 同城、螞蟻金服、京東等多個大廠合作。他會帶你建立數(shù)據(jù)和算法思維,并提供如何高效收集和處理數(shù)據(jù)、解決日常工作問題等的方法。不斷通過實戰(zhàn)來增強個人競爭力,讓你在人工智能、數(shù)據(jù)算法工程師等高技術(shù)型人才的市場中占據(jù)一席之地。同時,每篇文章都附帶“思維導(dǎo)圖”與“專屬題庫”,讓豐富的工具更好地輔助我們的學(xué)習。