演算法一直學一直都是一知半解,為什麼?因為沒有堅持下去,容易挫敗?因為沒有興趣?因為總是紙上談兵?
最近各種推送中接觸了極客時間,現在的學生真幸福,不用再從漫漫書海中找到適合自身階段的學習資料,不用再愁閉門造車,無人討論,相互學習。
話不多說,上正篇。
認真學習演算法基礎
對每個存疑點都動手寫一寫
對每個存疑點都停下來思考思考,不要一遍過了,然後束之高閣
頻繁總結,不要懶,把知識真正學到血液裡
別怕丟臉,該問就問
做軟體開發也有幾年的時間了,現在清楚原來自己一直是在做業務開發。比如遊戲邏輯、渲染引擎的使用、web前端、資料庫簡單的維護等等。剛入行的幾年還挺有幹勁,覺得每天都在學新東西,每天都在進步。可久而久之,就發現路漫漫其修遠,而我確不在路上。一直想往底層深入,卻一直在一遍遍重複著業務邏輯的開發。
就像梭羅在《瓦爾登湖》中寫道:「我曾活了幾十年,現在每天我都在生活。」每個人每天都在路上行走,有的人只是在不停地趕路,有的人卻記住了沿途的風景。人有時候是很容易糊塗的,也很容易麻木,更可怕的是還不自知。
回到正題,如果不了解類庫背後的原理,不懂的時間、空間複雜度分析,如何能在恰當的時候用對用好它們?(比如:有次面試就被問到「std::vector」是如何實現的?)在spring、rpc、redis這些基礎架構中,一般都柔和了很多基礎資料結構和演算法的設計思想。掌握資料結構和演算法,不管對閱讀原始碼框架,還是理解其背後的設計思想,都非常有用。寫出達到開源水平的框架才是基礎架構研發工程師的目標!(比如:我曾被不知一次問道,是否參加過開源(引擎)專案的研發工作)
如果不想被行業淘汰,對程式設計還有追求,就不要只寫湊合用的**!拒絕增刪改查crud!
有很多大齡應聘者,建立能寫幾十頁,但每個專案都是重複地堆砌業務邏輯,完全沒有梯度遞進,看不出能力提公升。久而久之,十年的積累和一年沒任何區別。這樣的人怎麼不會被行業淘汰呢?所謂「程式設計師35歲以後容易進入瓶頸」,原因就在這裡。有的人寫**的時候,從不考慮非功能性的需求,只是完成功能;作死去的時候,也從來沒有長遠規劃,只把眼前的事情做好就滿足了。
總之,要想真正學好程式設計,資料結構和演算法是必須熟練掌握的基礎。
資料結構與演算法 筆記(1)概念
程式 資料結構 演算法 1.緒論 1 邏輯結構 a 集合結構 同屬於乙個集合外沒有關係 b 線性結構 元素之間存在一對一關係 c 樹形結構 一對多 d 圖形結構 多對多 2 物理結構 a 如何把資料元素存放到計算機的儲存器中,針對記憶體而言,像硬碟 軟盤 光碟等外部儲存器的資料結構組織通常使用檔案結...
資料結構基礎筆記(1)
c語言中只有定義了變數才會分配記憶體,定義資料型別不會分配記憶體。1 特點 元素型別相同,大小相等。2 優缺點 優點 訪問速度很快。缺點 插入刪除元素很慢,空間通常有限制,事先必須知道陣列的長度,需要大塊連續記憶體。1 定義 n個結點離散分配,彼此通過指標相連,每個結點只有乙個前驅結點,只有乙個後續...
資料結構與演算法(1)
演算法 資料結構 一 演算法 1.演算法的幾個特徵是什麼。2.演算法複雜性的定義。大o 小o分別表示的含義。3.遞迴演算法的定義 遞迴演算法的兩要素。4.分治演算法的思想,經典的分治演算法 全排列 二分搜尋 歸併排序 快速排序 線性時間選擇 最接近點對問題 5.動態規劃演算法解題框架,動態規劃演算法...