網絡上有不少文章都描述了算法的重要性,包括大公司面試,有大量的算法題。若是算法弱,那麼極大可能與大公司錯過。下面談一談爲何算法和數據結構重要,而且算法知識須要沉澱。程序員
做爲Java web開發人員,若是剛開始沒有進入大公司,而進入小公司,又忙於項目,忙於學習各類框架,忽視了底層的學習,通過兩三年以後,總會意思到本身在某方面的薄弱,特別是想深刻一些框架底層知識,Java源碼的內容等。爲何出現這種狀況,由於在前期學習框架的內容時,框架是易學的,按照文檔規範去作就能夠了,甚至能夠不用思考。我在剛入一家公司作Java開發時,大牛將框架已經搭建完成,而本身要完成的工做就是寫接口,而且寫接口須要徹底按照必定的規範去實現,有一套標準化的流程,到了最後,本身能夠不須要太多思考,按模板去套。當這樣持續了一年以後,發現本身除了一套按照規範實現功能的技能,其餘技能都很是薄弱,大牛的框架底層實現相對複雜一點,但都已經封裝好了,上手的人能夠不須要知道框架是如何運行的,但對我的的成長在某方面是缺失的。若是本身不努力學習。web
以後去啃框架內的知識時,須要瞭解的內容才讓我打開眼界。一個簡單的例子,程序會將全部的操做都放入都一個隊列中,而後由線程中隊列中取出,再丟給其餘線程去操做,隊列是先進先出的,這樣不會由於放入的操做超時太長時間。也許會以爲這個很好理解,是的隊列的知識很簡單,可是它會常常被使用。若是之前沒有學過,可能對這個概念不太瞭解,若是這個概念不瞭解,後續的其餘操做就變得很麻煩,逐漸的,就會喪失繼續研究代碼的動力。面試
如今是2019年,互聯網發展已經進入到新的階段,而不在像前兩年的野蠻生長,現階段會對從業人員的要求會提升,畢竟市場上的人也逐漸增多,我知道的一個Java崗位,一天就有2000個簡歷投遞進入,而想要戰勝這麼多的人,能力不突出那麼就會被淘汰掉,而什麼是本身突出的能力,就須要好好思考一番。算法
突出能力包括解決複製問題的能力,有深刻框架底層,可以解決一些疑難雜症的能力,有快速學習,快速上手的能力,而這些都須要靠一些知識沉澱,這些知識的沉澱都還得是計算機知識。數據庫
爲何學習算法可讓本身的知識沉澱,經過編程語言實現算法,可以讓本身邏輯更清晰,讓本身思考的更全面,好比二叉樹,B-樹,B+樹,經過一些學習和實現,可以理解爲何數據庫中實現B+樹做爲存儲結構。在實現過程當中,也可以檢驗本身對編程語言的駕馭能力,而不是經過堆砌代碼來實現簡單的接口任務。沉澱的還有本身的架構能力,雖然這種方式與架構能力八竿子打不着,可是確能夠深深地影響本身之後架構能力,若是對算法,數據結構瞭解不深,那麼就根本不會去思考框架的優劣,不去思考框架給本身項目帶來哪些影響。編程
萬變不離其宗的是那些算法和理論,在突飛猛進的互聯網中,框架變化太快,追逐框架,本身的精力永遠也更不上。而最新的人工智能等新技術,對算法的要求特別高,應該說,若是一我的的算法知識不夠,那麼對新技術的知識就會徹底不懂,更不談經過這些新技術而衍生的方面,本身就只能錯過這些。而對於從事Java web開發領域,若是一個簡單的排序,通常會想到For循環遍歷,是否會想到冒泡排序,是否會使用到Java已經封裝好了的排序規則,而底層實現就是用到的那些算法。網絡
並非算法有多麼的好,必需要像算法開發工程師那樣精通算法,其實不是,也不是須要短期掌握的,而是經過學習算法和數據結構,以達到知識的一種沉澱。數據結構
若是真的開發了幾年的程序員,沒有計算機知識的沉澱,那麼本身就可能沒法競爭的過年輕的程序員。前幾年還好,大齡程序員由於市場野蠻生長,已經得到了足夠的經驗和地位,而以後對於新進入的程序員,要求就很是嚴苛,畢竟互聯網也在升級。架構