學習演算法的真正目的#
學習資料結構和演算法,並不是為了死記硬背幾個知識點,而是為了:
- 建立時間複雜度、空間複雜度意識
- 寫出高品質的程式碼
- 能夠設計基礎架構
- 訓練邏輯思維
我們學任何知識都是為了「用」的,是為了解決實際工作問題的。
不同角色的學習必要性#
業務開發工程師#
你可能會說:「我整天就是做資料庫 CRUD,哪裡用得到演算法?」
確實,大部分業務開發利用封裝好的介面、類別庫來堆砌業務邏輯,很少需要自己實現資料結構和演算法。但是:
- 不需要自己實現,不代表不需要了解
- 不懂原理,如何選擇 ArrayList 還是 LinkedList?
- 不懂複雜度分析,如何評估程式碼的效能?
常用的框架如 Spring、RPC、Redis 等,都揉和了大量資料結構和演算法的設計思想。掌握這些知識,能更好地使用它們,出問題時也更容易定位。
基礎架構研發工程師#
不同的人做出的框架,架構設計思路都差不多,但品質差異巨大。高手之間的競爭在於細節:
- 演算法是否夠優化
- 資料存取效率是否夠高
- 記憶體是否夠節省
這些累積起來,決定了一個框架是否優秀。
資深工程師#
有的人寫程式從來不考慮非功能性需求,只完成功能、湊合能用就好。十年的積累可能跟一年沒有任何區別。
在大公司面對千萬級甚至億級用戶時,效能幾乎是開發過程中時刻都要考慮的問題。一個簡單的 ArrayList、LinkedList 的選擇,就可能產生成千上萬倍的效能差別。
面試的角度#
大公司面試為什麼喜歡考演算法?
- 校招:學生沒有實際專案經驗,只能考察基礎知識是否牢固
- 社招:越厲害的公司,越注重基礎知識,因為他們更看重長期潛力而非短期能力
小結#
| 角色 | 學習必要性 | 重點 |
|---|---|---|
| 業務開發 | 高 | 選型判斷、效能評估 |
| 基礎架構 | 極高 | 細節優化、框架設計 |
| 資深工程師 | 極高 | 大規模系統效能 |
資料結構和演算法如果不去學,可能真的這輩子都用不到。但一旦掌握,你就會常常被它的強大威力所折服。之前需要費很大勁優化的程式碼,用了資料結構和演算法之後,很容易就可以解決。