總結(jié)
數(shù)據(jù)結(jié)構(gòu)和算法的基礎(chǔ)知識到這里就完結(jié)了,但這并不意味著我們就完全掌握了這些知識,也不是說我們就有能力能夠輕易的解答各種算法題目,或者在實際的項目中使用它。但這是這一切的開始从撼。
從今年的四月份開始,我就著手研究數(shù)據(jù)結(jié)構(gòu)以及它們的Java實現(xiàn)钧栖,也就是JDK中的Java集合源碼低零,以及基于這些數(shù)據(jù)結(jié)構(gòu)的各種排序、查找等算法拯杠,到現(xiàn)在也算是收獲頗豐掏婶。最開始受面試需要的影響,也因為自己的一點興趣潭陪,僅僅想要提高一點自己的能力而學(xué)習(xí)雄妥。但是隨著學(xué)習(xí)的深入,我漸漸感覺到這些知識的迷人依溯。每一個數(shù)據(jù)結(jié)構(gòu)的設(shè)計老厌,每一個算法的誕生都富有創(chuàng)造性,能讓我們感覺到前人在此投入了大量的精力和思考黎炉,也激勵了我要不斷學(xué)習(xí)和思考問題枝秤,而不是陷于終日寫重復(fù)代碼而不反思的陷阱里(雖然許多時間都是為了生存而不斷的Ctrl+C、Ctrl+V)慷嗜。學(xué)習(xí)這些知識淀弹,并不能給我的編碼能力帶來直接的提升丹壕,平時的工作中需要算法的場景少之又少。但是這些知識大大的提升了我的認知垦页,糾正了我之前許多錯誤雀费,也可能依靠這些知識將來有望勝任更加復(fù)雜的工作干奢。
這里舉一個簡單的例子來做收獲總結(jié)吧痊焊。數(shù)組和鏈表大抵是現(xiàn)在面試必問的知識點了,多數(shù)也都會問到它們的區(qū)別忿峻。我們在各種文章中都能看到增刪多用鏈表薄啥、查詢多用數(shù)組的說法,但這種說法并不完全正確逛尚。只要我們對數(shù)組和鏈表稍加分析垄惧,就會發(fā)現(xiàn)它們查詢數(shù)據(jù)時都很慢,O(n)的時間復(fù)雜度使得它們只能處理少量的數(shù)據(jù)绰寞。鏈表的確在增刪時比數(shù)組優(yōu)秀的多到逊,而數(shù)組因為RandomAccess
特性能按下標獲取值,但這只是獲取而不是查詢滤钱,而且它的使用場景遠不如查詢多觉壶。所以當我們看到一個論斷時不能貿(mào)然相信,除非它有十分合理的證明件缸,或者我們自己親自求證铜靶。
類似這樣的還有很多,只有知道的更多他炊,才能理解的更加深刻争剿。所以,如果想跟上知識發(fā)展的腳步痊末,我們需要不停的學(xué)習(xí)蚕苇,不斷的充實自己,給自己的未來增加強有力的保障凿叠。
規(guī)劃
現(xiàn)在我們已經(jīng)掌握了這些知識捆蜀,但是這種掌握只能說是走馬觀花,只有充分運用起來才能發(fā)揮它們最大的價值幔嫂。LeetCode上擁有很多優(yōu)秀的算法題目辆它,而且有為數(shù)眾多的活躍用戶,用來鞏固知識再好不過履恩,所以LeetCode刷題是接下來重要的事情之一锰茉。
不過由于題目眾多(目前已經(jīng)接近1000道),我們不可能把全部的精力用在刷題上切心,所以近期的規(guī)劃主要有兩點:LeetCode和多線程飒筑。
多線程的知識體系十分龐大片吊,讀了一些書和文章之后依然感覺入不了門,即使能操作線程池协屡,能處理中斷俏脊,也因為無法透徹理解它的機制,只能復(fù)制別人的代碼肤晓,而沒有清晰合理的邏輯爷贫。所以我希望自己能夠把這些東西琢磨清楚,并分享出來补憾,希望大家能夠指正漫萄,或者和我一起進步。
本文到此就結(jié)束了盈匾,如果您喜歡我的文章腾务,可以關(guān)注我的微信公眾號: 大大紙飛機
或者掃描下方二維碼直接添加:
您也可以關(guān)注我的github:https://github.com/LtLei/articles
編程之路,道阻且長削饵。唯岩瘦,路漫漫其修遠兮,吾將上下而求索窿撬。