寫給那些想要自學成才的java程序員
一:我的大學:第一年泡在圖書館看雜七雜八的書,跟學習毫無關系。第二年瘋狂打LOL,從白銀打到黃銅(黃銅守門員)。第三年上半年,被某人點醒,學習了整套C#知識體系,某馬。下半年又決定轉行,又開始了為期半年的自學java路程。所以我的經歷可能適用一些正在學校的孩子或者準備轉行做java的。
二:如果你還是在校生,或者準備轉行做java,你必須要學會下面的:
2.1:java基礎,不得不提,重中之重!你需要把每個知識點都記錄下來,通過實戰去強化,可以借助外來的視頻資料,但是記住視頻為輔(一般都不是很深入),看完對應的都必須要看一本書:"java編程思想或者java核心技術",建議都看,十分經典,可以在你的筆記基礎之上再次提升文章等級。
2.2 :對於有了java基礎的小夥伴來說,那麽不得不提的就是算法與數據結構以及設計模式這兩大塊內容,重中之重!依然是結合視頻,你需要了解常用的數據結構,知道他們的使用場景以及性能分析,需要具備一定的算法能力,常用的排序算法等等之類,可以去leetcode網站去找一些算法題目去練練,java語言也可以在這個階段再一次提高,你要註意你寫的代碼的邏輯性和美觀性以及性能。設計模式不得不提,隨處可見,23種設計模式都必須了解並知道之間的區別以及常用的場景,比如抽象工廠與建造者模式的區別,常用的單例模式,門面模式,等等。headfirst設計模式和算法4不錯,可以在有了基礎後再去看看。
2.3 :java、算法與數據結構、設計模式都必須學好,必須。會為你以後解決業務場景,看源碼等等起到很關鍵的作用。
2.4 :學習了這些之後你可以嘗試去學web開發相關的一些內容了,主要包括了Html/css/js,J2EE ,mysql相關的一些知識,對於如果以後專門要做java後端的小夥伴,前端相關知識可以稍微的花一些時間,因為不需要很久,可以入門。J2EE相關的你都必須掌握,servlet的運行原理等等很關鍵,mysql同樣是你必須要非常深入的去學的內容,你必須要能熟練的寫出SQL語句,業務的關鍵就在於此。你不僅僅要會寫SQL,更要配合業務寫出可重用,性能高的sql,建議深入的看一下高性能mysql,你不能僅僅停留在簡單的增刪改查,如果連數據庫的設計都不會,性能優化都不了解,那麽真的需要再逼一下自己,讓自己懂的更多。
2.5:到了這個地步,你應該可以試著開發一個完整的網站出來了,你可以在搜尋項目資料,自己去練,至少要有兩個完整的,不管是跟著做還是自己做的,你能在這裏面遇到很多bug,也能解決很多bug.這是你必須要邁過的門檻。
2.6:現在你已經能靠著自己做出一個很一般的網站了,但是工作上用的遠遠不止這些,你可能還不能找到比較好的工作,當然若是你前面我說的那幾個都非常優秀,尤其是算法和數據結構,那另當別論。如果前面掌握的很一般,那麽你還需要學習一些常用的web框架,比如spring,springboot ,springmvc,mybatis,什麽hibernate還有structs2就不要再碰了,你必須熟練掌握這些框架的基本用法,要能明白常用的一些配置,有興趣的可以進入裏面看看源碼,記著:研究源碼是你做這份工作不能停下來的事。spring重中之重,不斷的探索,不斷的去研究源碼。順便再學一下maven如何管理項目,還有git的一些pull,push ,merge,rebase等用法,公司很常用,不要僅僅停留在svn,很多公司都是用git的。
2.7:當你學會了上述那些知識,有了自己的知識框架,也可以去找點工作幹幹了,還沒畢業就趕緊找實習,攢工作經驗,畢了業的就要繼續下面的學習內容,不能停下來。
三:工作一年經驗內的小夥伴
應該嘗試了不少crud的滋味了吧,也接觸到了復雜業務的情景了吧,加班成了平常事了吧,是不是開始又覺得漫無目的了。可能在開發中你會接觸到新的知識,比如,springboot ,springcloud ,dubbo,zookeeper,linux,rabbitmq,redis,mongdb,kafka,elasticsearch等等,你需要學會去用好這些工具。
四:工作1-3年的小夥伴
可能你不再需要寫簡單的crud了,但是你能否自己搭建框架,能否寫出可復用的模塊代碼,是否能寫出優雅的代碼,如果不能,還得繼續學,必須重新拾起設計模式,要能對業務封裝,對工具類封裝,要能重構代碼,要把設計模式運用到項目中去,你需要去看《重構 改善既有代碼的設計》、《effective java》,久而久之,你可以寫出比較出色又優雅的代碼。但這還不夠,你必須要對java虛擬機有深入的理解,要能解決項目中遇到的內存溢出異常等等,這部分內容比較枯燥,但是你必須要啃下去,還要會模擬場景去制造異常,因為很多異常你真的不知道從何下手,只能從日誌裏去看堆棧的打印信息,去看虛擬機的日誌信息,去分析,你才能解決問題。所以必須學好,必須死磕這方面的內容。與此同時你還需要研究jdk的源碼,就跟著你一開始學java基礎的來,從集合開始,去深入的看源碼,這時候你會發現java基礎和數據結構和設計模式有多重要。還需要去學習並發相關的知識,要對Java並發包java.concurrent有深刻的認識,這些內容需要你摒棄浮躁的心,慢慢看,不能急,急你也看不出什麽效果。
五:3年及以上
可能在這個階段的小夥伴提升已經很難了,你可能已經接觸過很多分布式相關的技術了,分布式緩存,分布式消息隊列,分布式計算,負載均衡,大數據等等,你可能都已經用過了,所以現在的你既有了基礎知識的架構支撐,也還沒到退休年齡(哈哈),建議你深入的去研究一門技術,是很深入,不要既搞分布式計算,又搞分布式緩存,又研究大數據等等,說自己懂的那麽多,花裏胡哨的,真正懂得基本都能拿下你。所以你必須開始確定自己的研究方向,專門的去研究某個內容,讓這一塊成為你的優勢和強項,這也是為了避免大齡被淘汰的法門。你應該朝著某個領域的專家去努力。
六:提高自己的影響力
有了自己深入研究的方向,你應該去幫助更多的人,去發表更多的優質文章,也可以去打造屬於自己的開源項目,做出對別人,對自己有價值的東西。所以這個階段的你應該提高自己的影響力,幫助更多的人,更多想學習的人。因為你老了。
七:最後希望你們能入了門,成為自己想成為的人,如果有想要資料的,留下郵箱或者加微信號:codecarver
寫給那些想要自學成才的java程序員