原來我曾經寫過一篇《如何快速學習Java》的文章。後來也有朋友諮詢我「如何系統的學習Java」的問題。linux
這些朋友中,好多都是已經入了行,但不知足於工做枯燥的「增刪改查」,或者「模板化」的SSM框架。而是有心成爲Java技術專家,或者架構師。程序員
對於朋友的提問,我本很樂意回答。然而這個答案絕非三言兩語可以說清。因此,我就索性寫一篇文章來回答。web
文章寫得有點匆忙,不完善,遺漏之處,我會逐漸完善。面試
學習計劃 首先,我把Java系統學習分紅兩個階段。設計模式
第一階段:創建完整的的技術棧,成爲一個有富於生產力的高級軟件工程師。緩存
在這個階段要掌握一系列的基礎知識和工具。這些東西先後關聯,因此學習過程成線性順序,要從上往下進行。服務器
下面是第一階段的學習路線:架構
第二階段:這個階段的目標是成爲Java技術專家、架構師,所以必須在上一階段的技術上,往高處(例如設計模式、大數據)走,往深處(Spring源碼、Java虛擬機)走。這個階段的知識,並不存在先後的關聯。在完成第一階段的學習以後,徹底看工做的須要,以及我的的興趣,安排學習的優先級。框架
下面是第二階段的學習目標:微服務
接下來,我就點一下這個學習計劃中的「關鍵點」。Servlet 要成爲一個優秀的Java web專家。不管是你用Spring MVC實現的普通REST接口,仍是微服務。往深的走,都要深入理解Servlet以及容器(例如Tomcat).
所以,在深度學習微服務,以及Spring MVC以前,必定要把Servlet學精,由於他是整個Java web的基石。因此,在成爲軟件專家的路上,Servlet是最基本的墊腳石,務必重視。
SQL 在我做爲程序員入行的時候,沒少在SQL語言下功夫,尤爲是在SQL語言優化方面,包括在存儲過程當中各類折騰。
但如今,SQL優化在開發過程當中的優先級顯著下降,有幾個緣由:
1.各類OR map框架(例如Hibernate、Mybatis)的出現,使SQL的工做量大大下降。
2.各類OR map框架自己也會對編寫的、自動生成的SQL進行優化。
3.當前的服務器架構,若是要提升性能,首先應該考慮架構的橫向擴展性,而不是在SQL上進行極端優化。
但如今也不是說能夠徹底「任性」的編寫SQL。只是說對於程序員,只要掌握最多見的SQL優化原則,作到工整就夠了。
緩存、隊列 緩存,隊列。業界都有了較成熟的方案,例如Redis,ActiveMQ等。在學習的過程當中,第一步是掌握核心概念,以及他們要解決的問題。而後就要親自安裝,使用這些軟件,創建感性的認識。
其次就是在掌握核心概念的基礎上,掌握這些開源軟件的Java API,而後試着在此基礎上,編寫典型的Demo,從而在Java語言層面上完全掌握。
至於有些朋友提到的把概念再「實現一遍」。不知道朋友指的是使用API,仍是把緩存和隊列軟件,用Java語言實現一下。若是是後者,不是說不能夠,關鍵是太費時間。同時,就業界實踐來講,不是特別必要。若是你真有興趣,把優先級放低一點,做爲一個更長期的目標。
Linux 這個學習計劃是一個長期的,深刻的學習計劃。最終是要成長爲技術專家、或架構師。那麼有必要適時的掌握下Linux。由於在實踐中,服務器每每委託於Linux服務器。並且未來,還有很多開源軟件只能在linux上運行。
所以,在開始學習緩存和隊列錢,須要先掌握了Linux的基本用法。而後再學習的過程當中,就把這些開源軟件在Linux上運行。
這樣,在你學習Java的過程當中,順便也把Linux學習了,這遠比你未來單獨學習Linux要有趣,印象要深入。
微服務 微服務並非一門具體的技術,而是一個設計理念,不少語言和框架均可以實現,例如Java中的Spring MVC等。
所以,若是已經掌握了Spring MVC、Spring boot。那麼對微服務的掌握是水到渠成的事情。你要作的就是注意力放在微服務的應用場景上。
設計模式 設計模式是較爲靠上的東西。若是Java基礎不是太好的話,很容易陷入空泛,眼高手低。
若是你的Java基礎太薄弱,例如沒有掌握「抽象類」。那麼我建議你先把設計模式學習停一下,先把Java的基礎知識補充下,至少要學完《Java核心技術》第六章,也就是掌握完整的現象對象的概念。而後再回來學習設計模式。
在學習設計模式的時候,必定要動手。最起碼要把書中列舉的設計模式,用Java語言實現一下。若是你閱讀時是經典的GOF《設計模式》,其中的代碼(用C++描述),就不容易用Java實現。建議你能夠參照《Head First設計模式》,其中的demo都是短小精悍,很適合用Java來實現。
這樣,一則有利於理解設計模式。二則在學習設計模式的過程當中,也進一步加強對Java基礎知識的掌握。這種學習過程是一個相互促進的過程。
學習筆記很重要 特別重要的一點,學習的過程當中,儘可能的寫學習筆記,其中包括難點和重點。
由於,系統深刻的學習Java必然是一個長期的,綜合的過程。到後期,必定會出現學着後面,忘了前面。若是你沒有學習筆記,又沒有實踐中積累的代碼,那麼就會出現邊學邊忘的狀況。
而有了學習筆記,能夠給本身的學習留下了「蹤影」,之後複習的時候用來參考,很會就能把早前學習的記憶「喚醒」。
並且,這些學習筆記在後來的工做中,還能成爲本身的參考手冊,隨用隨查。
還有,那就是學習筆記仍是一個特別好的面試寶典。由於既然你記下了筆記,這些東西每每通過你深度思考,深度消化的東西,也是你區別以其餘工程師的卓越之初。
喜歡記得加關注點個贊哦!