我們生活在一個高速發展的社會,在這樣的大背景下每個人都需要無時不刻學習新的知識來避免被社會所淘汰,尤其是從事IT行業的開發人員。
但求學之路不是一件容易的事,每當學習新的技術時,往往會有很多因素導致自己沒有堅持下去,最典型的原因有這些:
1.沒有導師,不知道從哪裡開始學起;
2.學習過程中遇到困難,自己無法解決,遂放棄;
3.人的惰性,不能持之以恆
4.不能很好地平衡工作時間和學習時間。
其中第1點原因,不知道如何去學習,沒有學習路徑,這就已經讓80%的開發者放棄了,為此我經過一段時間整理,寫了這篇Java的進階路線,希望這篇文章能幫助到一些初級開發者。
首先送上目錄:
1. AWS
2. Java8
3.Spring boot
4. Docker容器和編排治理
5. 資料結構和演算法
6. Hackerrank, LeetCode
7. 設計模式和設計原則
8. 系統設計
9. react.js-redux/Angular
10. 其他技術概念
11. 學習1-2門其他程式語言
接下來根據目錄中的11條標題一條一條來細說:
1. AWS
為什麼把雲技術放到第一位?這也是我的一種學習習慣,先難後易,攻破了雲技術,那麼其他技術都不是問題。雲技術棧包含的知識點幾乎涵蓋了Java高階中的所有知識點,比如負載平衡器、API 閘道器、無伺服器計算、Docker 容器和編排、彈性搜尋索引、非同步佇列和訊息流、儲存模型、NoSQL DB、關係 DB、快取等。
因此,首先做雲可以得到一個完整的Java棧技術,這樣學習後面的就容易多了。
2. Java8
深入瞭解 Java8 概念如Lambdas、功能介面、Stream API 等。
但最重要的還是確保Java的基礎一定要牢固, 比如收集器、併發和OOPS等基礎概念,一定要了解的非常透徹
認清楚一點,無論使用何種技術棧和框架,Java 都是這些技術的支柱
3. Spring Boot
微服務架構現在很熱門,它有諸多好處:
1. 高度可擴充套件
2. 更快地開發和部署
3. 雲原生
4. 適配多種程式語言
5. 每個服務都可以有不同型別的資料庫
等等
Spring Boot是在Java中構建微服務的框架。它建在Spring框架之上,和Hibernate ORM 框架可以無縫配合,因此,學習瞭解微服務架構非常重要,也是進階必不可少的一部分。
4. Docker容器和編排治理
現在,大多數公司都使用 Docker 容器將微服務部署到在雲伺服器上,使用Docker提供虛擬化。
標題中我還提到了編排治理,這個詞對於很多人來說有點陌生,這裡簡單介紹一下:
開發微服務時,會有很多服務在Docker中執行,這些服務需要監測,就需要引入編排治理。最受歡迎的工具是Kubernetes。
5. 資料結構和演算法
學完上面這些知識後,接下來就要學習資料結構和演算法了。很多開發者會很疑惑,我在業務上用不到這些,為什麼要學它呢?
我們先要清楚一個問題,任何東西都有其存在的價值。
資料分析和演算法幾乎就是高階開發者和初級程式設計師之間的分水嶺,比如業務開發需要了解時間,空間複雜度分析來評估程式碼的效能和資源消耗,又比如key-value資料庫Redis的有序集合為什麼要用跳錶而不用二叉樹?如果不瞭解演算法和資料結構,你對這些高階的操作永遠不可能懂。
學習資料結構和演算法,可以按照下面的步驟來:
1. 線性資料結構(陣列、列表、雜湊、堆疊和佇列)
2. 非線性資料結構(二叉樹、AVL 樹、堆、等)的
3. 排序演算法(快速排序、合併排序、氣泡排序、桶排序、計數排序等)
4. 搜尋演算法(線性搜尋、二進位制搜尋、三元搜尋、指數搜尋等)
5. 字串操作(字串操作和字串操作)
6. Hackerrank, LeetCode
這是兩個做面試題的平臺,建議大家都收藏起來,跳槽找工作必備,目前國內大廠的面試題大都出自這些平臺,平時在這上面刷刷題,練習一下演算法也是不錯的。
7. 設計模式和設計原則
設計模式和設計原則也很重要,目前很多公司都很重視這一點,面試官經常會根據不同的場景來測試設計技能,最好能在平時學習中使用 UML 圖表做一些示例方案,面試中拿出來,會給自己加分不少。
8. 系統設計
學習系統設計是成為架構師最快的辦法。系統設計的專案有很多,比如:聊天程式,會議室預訂系統,停車場收費系統等等。
9. react-redux/ angular
全棧開發現在是市場的一個趨勢,所以進階過程中學會前端框架也是必經之路,React和angular是兩個很好的前端框架。
10. 其他技術概念
上面提到了不少技術,但還是沒辦法涵蓋Java的所有技術,有些東西平常會經常碰到,但時間有限,無法將這些技術學精。比如以下這些技術。
1. Maven build
2. Git
3. TDD
4. BDD
5. DDD
6. 敏捷方法
對於這些技術,我的建議是,不需要精通,但需要了解他們的概念。
11. 學習其他程式語言
現在很多資深的程式設計師已經不僅僅掌握一門語言,他們在日常中用Python處理資料,Golang做微服務開發,用node做後端的測試工具……
成為一個多語種程式設計師已經是大勢所趨了,我上面提到的三種語言可以選擇1-2門去嘗試學習一下。
以上就是一個從Java初級開發者進階高階開發者的學習路線,學習的過程需要極大的耐心和大量的程式碼練習,希望大家都能堅持下去,祝大家學習順利!