學習演算法的真正目的#

學習資料結構和演算法,並不是為了死記硬背幾個知識點,而是為了:

  • 建立時間複雜度、空間複雜度意識
  • 寫出高品質的程式碼
  • 能夠設計基礎架構
  • 訓練邏輯思維

我們學任何知識都是為了「用」的,是為了解決實際工作問題的。

不同角色的學習必要性#

業務開發工程師#

你可能會說:「我整天就是做資料庫 CRUD,哪裡用得到演算法?」

確實,大部分業務開發利用封裝好的介面、類別庫來堆砌業務邏輯,很少需要自己實現資料結構和演算法。但是:

  • 不需要自己實現,不代表不需要了解
  • 不懂原理,如何選擇 ArrayList 還是 LinkedList?
  • 不懂複雜度分析,如何評估程式碼的效能?

常用的框架如 Spring、RPC、Redis 等,都揉和了大量資料結構和演算法的設計思想。掌握這些知識,能更好地使用它們,出問題時也更容易定位。

基礎架構研發工程師#

不同的人做出的框架,架構設計思路都差不多,但品質差異巨大。高手之間的競爭在於細節

  • 演算法是否夠優化
  • 資料存取效率是否夠高
  • 記憶體是否夠節省

這些累積起來,決定了一個框架是否優秀。

資深工程師#

有的人寫程式從來不考慮非功能性需求,只完成功能、湊合能用就好。十年的積累可能跟一年沒有任何區別。

在大公司面對千萬級甚至億級用戶時,效能幾乎是開發過程中時刻都要考慮的問題。一個簡單的 ArrayList、LinkedList 的選擇,就可能產生成千上萬倍的效能差別。

面試的角度#

大公司面試為什麼喜歡考演算法?

  • 校招:學生沒有實際專案經驗,只能考察基礎知識是否牢固
  • 社招:越厲害的公司,越注重基礎知識,因為他們更看重長期潛力而非短期能力

小結#

角色學習必要性重點
業務開發選型判斷、效能評估
基礎架構極高細節優化、框架設計
資深工程師極高大規模系統效能

資料結構和演算法如果不去學,可能真的這輩子都用不到。但一旦掌握,你就會常常被它的強大威力所折服。之前需要費很大勁優化的程式碼,用了資料結構和演算法之後,很容易就可以解決。