大家好,我是魚皮,21 年 - 22 年的時候,我花了一個多月的時間,整理出了一份保姆級的【Java 學習路線】,得到了不少朋友的好評。
前兩天,有讀者私信我說,他們學校的老師,給同學們推薦了我的學習路線,而且現場投屏!我隔著螢幕都感覺到了 「社死」 的氣息哈哈。
當然,這不是第一次,之前也有同學跟我說,老師上課時透過放我的學習路線來摸魚。。
魚皮的 Java 學習路線,之所以能被廣為推薦,一方面肯定是用心、註入靈魂,另一方面是結合了很多自己的真實經驗。使得無論是急著找工作還是想花更多時間進大廠的同學,都可以跟著這份路線進行學習。
文章篇幅有限,
下
面給大家分享這份學習
路線的
速覽版
,完整版我
放到了【魚皮的編程寶典網站】 https://codefather.cn 中,
推薦到網站閱讀,體驗更佳。(路線原始檔我也開源到 GitHub 上啦)
💂 + 💻 = 👴🏽
大綱
寫在開頭
首先呢,我們要了解 Java 的套用場景和就業方向,看看和自己的學習目的是否一致。
目前,Java 由於其優秀的特性以及火爆的生態,崗位需求量大,是後台開發、安卓開發、大數據開發的主流程式語言,因此學習資源也很豐富,值得學習!
有關更多程式語言的選擇,大家可以看我的視訊了解:https://www.bilibili.com/video/BV1y3411r7pX/
階段 0:前期準備
準備好一款線上、隨時隨地寫程式碼的工具,不用在本地去安裝和配置,是初學者的好幫手。推薦使用我們自研的程式碼小抄:https://codecopy.cn/
準備一款記筆記的軟體,學編程的過程中老師的思路、自己遇到的問題、解決問題的方法、心得感悟、遇到的好資料,都要記下來哦,好記性不如爛筆頭,可以幫助你事半功倍。
想學好編程,別背程式碼,要多寫,把這句話刻到腦子裏。
選視訊和找資料的小技巧:多看評論區、多看隔壁評論區、不要看過期的視訊。
階段 1:Java 入門
目標
培養興趣、快速上手,能執行和編寫簡單的 Java 程式。
學完本階段後,可以試著用 Java 解決一些數學計算問題、編寫圖書管理系統等桌面端 GUI 程式,甚至是五子棋之類的小遊戲。
Java 編程基礎
知識
Java 特點(看不懂沒事,別背!)
環境搭建
IDEA 開發工具
Java 基礎語法
數據型別
流程控制
陣列
物件導向
抽象類
介面
列舉
常用內建類
集合類
泛型
註解
例外處理
多執行緒
IO 流
反射
學習建議
初學一門語言時, 一定要持續學習,不能中斷!
想要學好編程,一定要多敲程式碼!建議先跟著書上的例子敲一遍程式碼,然後試著自主編寫程式碼,並完成課後練習。
不理解程式碼也沒關系,可以學習 Debug 後,一行一行地打斷點執行,檢視程式的執行過程。千萬不要覺得麻煩,養成習慣後真的能節省很多重復學習的時間。
在自學 Java 基礎的過程中,可能會感覺很難,這是完全正常的,先易後難嘛。這個階段除了學基礎之外,也要試著多了解一些自學編程的方法和套路,建議有機會多和別人交流、或者能找個大佬給你指明一些方向,可以節約很多的時間。自薦一下魚皮的編程導航,能夠幫助大家更快更好地學編程做計畫: 。
資源
視訊
⭐ 韓順平 - 零基礎 30 天學會 Java:
https://www.bilibili.com/video/BV1fh411y7R8(900 多集,順序安排很合理,每個知識真正的打碎了,通俗、有範例、有實戰、有思想)
Java 8
知識
Stream API
Lambda 運算式
新日期時間 API
介面預設方法
學習建議
Java 8 是如今企業開發中最主流的 Java 穩定版本,在這個版本出現了很多實用的新特性,雖然面試考點不多,但能夠提升編程效率,建議學習。
尾聲
學完了 Java 基礎後,有些同學會感到迷茫了啊,感覺好像啥也做不出來,不知道下一步做什麽,我這一身的本領該如何施展啊?
不要慌,也不要急著去學新技術,接下來我們要多用 Java 來寫程式碼了,鞏固基礎,但是寫什麽呢?
當然是數據結構和演算法!
階段 2:鞏固基礎
目標
想學好編程,電腦基礎知識要學好。
比如演算法,是程式設計師的靈魂。學好演算法有助於我們理解程式、開拓思路,因此也是很多公司面試時考察的關鍵,在找工作前,還是要刷個上百道演算法題目的。
我們這個階段的目標是:熟練使用 Java 語言來編寫程式,鞏固 Java 基礎。(那直接用 Java 來寫演算法題目,一舉兩得,豈不美哉?)
此外,建議大家利用零碎時間多去了解 電腦基礎知識 ,比如作業系統、電腦網路等,對你後面學習開發框架之類的知識都有幫助。
Java 基礎
學習建議
建議大家去閱讀 【Java 核心技術卷 1】,這本書堪稱經典,是幫助你復習鞏固 Java 的不二之選,其中 「圖形界面」 章節完全不需要看。
如果你時間不夠,只是想快速找到工作,那麽本章節甚至可以完全跳過,後面慢慢彌補即可。
🌖 數據結構與演算法
學習建議
推薦閱讀魚皮的演算法學習路線:https://codefather.cn
學演算法一定要多思考、多練習!!!
在復習 Java、鞏固基礎的過程中,每天可以堅持用 Java 做 2 - 3 道演算法題目。
不用擔心看不懂,直接進入 LeetCode 學習板塊 LeetBook,提供了免費的教程,文字、圖解、動畫講演算法、線上練習應有盡有,從 0 開始,跟著學習基礎知識、跟著教程刷一些同類題目,培養演算法思路。
之後再由簡單到復雜、由透過率高到低,自主刷題,多看題解,舉一反三。一定要把自己做過的每道題目程式碼都自行保存好,定期復習。時間足夠的話,也可以試著自己寫寫題解,在網上分享一下自己的刷題思路,找到自己堅持的動力。
有條件的朋友也可以試著參與競賽,沒什麽門檻,可以幫助你集中精神,而且周賽的題目還是挺友好的~
電腦導論(可不學)
知識
電腦發展歷史
電腦套用領域
電腦發展方向
電腦基本組成
二進制
程式語言發展
學習建議
大學電腦專業的同學一般剛開學就會上這門課,雖說學習它並不會直接提高你的編程技能,但能夠讓你更了解電腦和編程,從而在一定程度上幫助你培養學習興趣、確定學習方向。
自學的話,不用刻意去學習電腦導論,而是可以透過看視訊、閱讀課外讀物的方式慢慢地了解電腦的故事。
作業系統
知識
作業系統的組成
行程、執行緒
行程 / 執行緒間通訊方式
行程排程演算法
行程 / 執行緒同步方式
行程 / 執行緒狀態
死結
記憶體管理
局部性原理
學習建議
說實話,作業系統這一塊知識挺枯燥的。你說說我現在計畫都不會做,你又讓我看這些理論,是不是想讓我頭禿?
我的建議是,可以先利用課余時間看一些網課或者有趣的課外書,對一些作業系統的概念先有個大致的印象,比如行程、執行緒、死結,等後面有時間了再系統學習、等到找工作了再去背相關八股文。
還在校園就跟著學校的進度學習就成,自學的話可以看下【清華作業系統原理】視訊,有實力的小夥伴,能看懂大黑書就更好了,但如果看不懂也別擔心,這並不影響你後續知識的學習。
電腦網路
知識
網路分層模型
網路傳輸過程
IP、埠
HTTP / HTTPS 協定
UDP / TCP 協定
ARP 地址解析協定
網路安全
DNS 網域名稱解析
學習建議
很多學習 Java 開發的同學最後都是從事 後端開發 的工作,而電腦網路知識是後端開發的重點。
和作業系統一樣,自學網路可能會很枯燥,建議先看有趣的課外書,比如【圖解 HTTP】;或者有趣的視訊,比如【電腦網路微課堂】。後面要找工作面試前,再重點去背一些八股文就好了。還在學校的同學好好上課一般就沒問題。
學習基礎能幫助自己今後發展更穩定,且更容易接受新知識,所以請不要相信基礎無用論。
尾聲
鞏固基礎要花至少 1 個月的時間,當你讀完【Java 核心技術卷1】並且不用查詢文件也能熟練地用 Java 做題時,就可以接著往下了。
階段 3:Java 企業開發基礎
目標
面向薪資編程,學習實際後台開發工作要用的基礎技術和框架,並能 獨立 做出一個具有完整功能的 Java Web 計畫。
學完這個階段後,你應該已經能獨立開發出大多數常見的後台系統了,比如各種管理系統、商城系統等。
MySQL 資料庫
企業中大部份業務數據都是用關系型資料庫儲存的,因此資料庫是後台開發同學的必備技能,其中 MySQL 資料庫是目前的主流,也是面試時的重點。
知識
基本概念
MySQL 搭建
SQL 語句編寫
約束
索引
事務
鎖機制
設計資料庫表
效能最佳化
學習建議
其中, SQL 語句編寫 和 設計資料庫表 這兩個能力一定要有!
比如讓你做一個學生管理系統,你要能想到需要哪些表,比如學生表、班級表;每個表需要哪些欄位、欄位型別。
這就要求大家多寫 SQL、多根據實際的業務場景去練習設計能力。
推薦使用魚皮本人開發的 SQL 闖關式自學網站入門 SQL:http://sqlmother.yupi.icu/
開發框架
Java 之所以能成為主流的企業開發語言,很大一部份原因是它完善的框架生態,用好框架,不僅能夠大大提升開發效率,還能提高計畫的穩定性、減少維護成本。
開發框架是後台開發工作中不可或缺的,也是面試考察的重點,一定要好好學!
不知道 Java 能做什麽的朋友們,學完開發框架,就會有答案啦。
下面給大家推薦的都是企業中套用最多的主流開發框架,知識點比較零碎,就放在一起講了。
知識
Java Web
描述:Java 網頁套用開發基礎
Spring 5
描述:Java 輕量級套用框架
IOC
AOP
事務
SpringMVC
描述:Java 輕量級 web 開發框架
什麽是 MVC?
請求與響應
Restful API
攔截器
配置
執行過程
MyBatis
描述:數據存取框架,操作資料庫進行增刪改查等操作
增刪改查
全域配置
動態 SQL
緩存
和其他框架的整合
逆向工程
MyBatis Plus
描述:Mybatis 的增強工具,能夠簡化開發、提高效率
引入
通用 CRUD
條件構造器
程式碼生成器
外掛程式擴充套件
自訂全域操作
SpringBoot 2
描述:簡化 Spring 套用的初始搭建以及開發過程,提高效率
常用註解
資源整合
高級特性
本地熱部署
Spring Security
描述:Spring 的安全管理框架
使用者認證
許可權管理
相關技術:Shiro
Maven / Gradle
描述:計畫管理工具
構建
依賴管理
外掛程式
配置
子父工程
多模組打包構建
Nexus 私服搭建
學習建議
由於技術較多,且框架之間存在一定的聯系,因此建議大家看同一系列的視訊教程(尚矽谷、狂神說等等都可以),以保證學習內容的連續以及體驗上的一致。
學這些技術的時候, 千萬不能懶 !一定要多記筆記,並且跟著老師寫程式碼。原理部份不要太過糾結,先以能跟著敲出程式碼、寫出可執行的計畫為主,有些東西做出來也能幫助你更好地理解理論。
學習順序挺重要的,建議按我推薦的順序學,不要一上手就學 Spring Boot。只有先學習下自己整合框架的方法,才能幫你理解 SpringBoot 解決的問題,感受到它的方便和高效。
Maven / Gradle 當成工具用就好,面試基本不問,跟著框架教程去用就行了,急著找工作的話,先不用花太多時間去深入學。大廠面試問這個的也不多。
開發規範
開發不規範,同事兩行淚。
開發規範是團隊開發中必須遵守的,有利於提高計畫的開發效率、降低維護成本。
知識
程式碼規範
程式碼風格
命名
其他規則
程式碼校驗(Check style)
送出規範
學習建議
有時間的話,簡單過一遍大廠團隊的程式碼規範手冊就好了,以後做計畫的時候能想起來的話就去使用,或者從書中、網上查規範文件,再去遵守。
計畫做得多了,自然會養成好的習慣,不用刻意去記(畢竟每個團隊規範也不完全相同,背了也沒用)。也可以直接利用開發工具內建的一些程式碼檢查外掛程式,幫忙養成好的編碼習慣。
資源
書籍
⭐ 阿裏巴巴 Java 開發手冊:https://developer.aliyun.com/graph/java(搜尋【Java開發手冊】)
Git
此前大家可能聽說過 GitHub,一流的程式碼開源托管平台。
Git 和它可不一樣,是一個版本控制工具,可以更好地管理和共享計畫程式碼,比如把自己的程式碼傳到 GitHub 上、或者從遠端下載。
無論自己做計畫、還是團隊開發,Git 都是現在不可或缺的神器。
知識
區分 Git 和 GitHub
工作區
分支
程式碼送出、推播、拉取、回退、重設
分支操作
程式碼合並、解決沖突
標簽
cherry-pick
Git Flow
相關技術:SVN(比較老)
學習建議
每個命令跟著敲一遍,有個大致的印象,會用即可。
建議平時大家可以多把自己的程式碼使用 Git 命令上傳到 GitHub 上,用的多了自然就熟悉了。
Linux
企業中的很多前後台計畫都是部署在 Linux 伺服器上的,因此很有必要熟悉 Linux 的操作和指令碼的編寫。
後面學微服務、學架構都是在多台伺服器操作,如果你不熟悉 Linux,會有點吃力。
知識
Linux 系統安裝
環境變量
檔管理
使用者管理
記憶體管理
磁盤管理
行程管理
網路管理
軟體包管理
服務管理
日誌管理
Linux 內核
常用命令
常用環境搭建
Shell 指令碼編程
VIM 的使用
學習建議
多動手實踐,建議自己購買一台雲伺服器,並且在本地搭建 Linux 虛擬機器環境。
一定要自己從 0 開始手敲命令安裝軟體、部署服務,熟悉整個計畫的上線流程。
每個命令至少要跟著敲一遍,了解它們的作用,並透過自然地練習,熟悉常用的 Linux 命令。
記不住沒關系,用文件查就行了。
先會用,再理解。一般面試問的 Linux 題目也不會很難,面試前去背一下八股文就沒什麽問題,感興趣的話可以去看看 Linux 內核設計。
前端基礎
雖然 Java 程式設計師面試時基本不會出現前端相關問題,但是在企業中,往往需要前後端程式設計師配合完成工作。會一些前端,不僅可以提高你們的協作效率,還能提高自己對整個計畫的了解和掌控力,甚至能獨立開發出一個完整計畫!這點也是能給面試加分的。
知識
HTML
CSS
JavaScript
Ajax
Vue
學習建議
不需要學習太多的前端技術,熟悉下基礎的前端三件套,了解前端是如何向後端發送請求來做數據互動的一般就夠了。有時間的話可以學下 Vue ,是比較容易上手的主流前端開發框架,Vue + SpringBoot 還是很香的。
練手計畫
首推魚皮自己的保姆級實戰計畫系列:
尾聲
學完這個階段的知識後,一定要再串起來回憶一遍,必須自己獨立開發一個 Java Web 計畫(量級可以不大,但你學過的技術盡可能地用上),能釋出到 Linux 伺服器上讓其他小夥伴存取就更好了~
如果你只是對 Java 感興趣、或者只是想試著自己開發後台,並不是想靠 Java 找工作的話,學到這裏就可以了。可以把更多時間投入到你主方向的學習中。
但如果你是想找 Java 方向的工作,尤其是想進大廠的話,一定要繼續努力,用心學習下個階段的企業開發進階知識。
階段 4:Java 企業開發進階
目標
學習更多企業級開發技術和編程思想,能夠結合多種技術,獨立開發出架構合理的完整系統, 解決實際問題 。
要了解為什麽需要這個技術?什麽時候用這個技術?某個需求該用哪些技術?
當然,這個階段的內容有些過於豐富,不是所有的東西都要學,大家可以根據自己的實際情況(時間),有選擇地學習。
軟體工程
急著找工作的同學可以先不學。
軟體開發和管理的一些概念、原則、技術、方法、工具和經驗。
知識
軟體的本質
軟體特性
軟體流程
軟體開發原則
軟體流程模型
敏捷開發
軟體開發模型
需求建模
軟體設計
UML
體系結構設計
設計模式
軟體品質管理
評審
軟體品質保證
軟體測試
軟體配置管理
軟體計畫管理
軟體計畫估算
計畫進度安排
風險管理
軟體流程改進
成熟度模型
學習建議
大學軟體專業的必修課,偏理論,能學到很多企業軟體開發的方法,也是對軟體開發同學綜合能力的提升,有時間的話可以了解下。但對想要快速找工作的同學來說,忽略即可,面試基本不會問。
設計模式
設計模式是軟體開發中解決一類問題的通用方法。
使用設計模式能讓你寫出更優雅、可維護的程式碼,也正因如此,很多框架源碼都用到了設計模式,你不學很難看懂。
知識
建立型模式:物件例項化的模式,建立型模式用於解耦物件的例項化過程
單例模式
工廠方法模式
抽象工廠
建造者模式
原型模式
結構型模式:把類或物件結合在一起形成一個更大的結構
介面卡模式
組合模式
裝飾器模式
代理模式
享元模式
外觀模式
橋接模式
行為型模式:類和物件如何互動,及劃分責任和演算法
叠代器模式
樣版方法模式
策略模式
命令模式
狀態模式
責任鏈模式
備忘錄模式
觀察者模式
存取者模式
中介者模式
直譯器模式
學習建議
先理解概念,了解每個設計模式的特點和套用場景,再多加練習,運用到實際計畫。
資源
書籍 ⭐【圖解設計模式】(強烈推薦這本書,正是用 Java 語言實作,圖多、有範例程式碼、有習題和答案,很不錯)
緩存
緩存是高並行系統不可或缺的技術,可以提高系統的效能和並行,因此是後台開發必學的知識點,也是面試重點。
知識
什麽是緩存?
本地緩存
Caffeine 庫
多級緩存
Redis 分布式緩存
Spring Boot Redis Template
Redisson
數據型別
常用操作
Java 操作 Redis
主從模型搭建
哨兵集群搭建
日誌持久化
緩存(Redis)套用場景
數據共享
單點登入
計數器
限流
點贊
即時排行榜
分布式鎖
緩存常見問題
緩存雪崩
緩存擊穿
緩存穿透
緩存更新一致性
相關技術:Memcached、Ehcache
學習建議
學會如何簡單地使用緩存並不難,和資料庫類似,無非就是呼叫 API 對數據進行增刪改查。
因此,建議先能夠獨立使用它,了解緩存的套用場景;再學習如何在 Java 中操作緩存中介軟體,並嘗試和計畫相結合,提高系統的效能。
跟著視訊教程實操一遍即可,可以等到面試前再去深入了解原理和高級特性。
訊息佇列
訊息佇列是用於傳輸和保存訊息的容器,也是大型分布式系統中常用的技術,主要解決套用耦合、異步訊息、流量削鋒等問題。後台開發必學,也是面試重點。
知識
訊息佇列的作用
RabbitMQ 訊息佇列
生產消費模型
交換機模型
死信佇列
延遲佇列
訊息持久化
Java 操作
集群搭建
相關技術:Kafka、ActiveMQ、TubeMQ、RocketMQ
學習建議
和緩存一樣,學會如何使用訊息佇列並不難,無非就是呼叫 API 去生產、轉發和消費訊息。
因此,建議先能夠獨立使用它,了解訊息佇列的套用場景;再學習如何在 Java 中操作訊息佇列中介軟體,並嘗試和計畫相結合,感受訊息佇列帶來的好處。
這裏我建議初學者先學習 RabbitMQ,比 Kafka 要好理解一些。跟著視訊教程實操一遍即可,可以等到面試前再去深入了解原理和高級特性。
Nginx
Nginx 是主流的、開源的、高效能的 HTTP 和反向代理 web 伺服器,可以用於掛載網站、請求轉發、負載均衡、閘道器路由等。前後端開發同學都需要學習,在後端開發的面試中有時會考到。
知識
Nginx 作用
正向代理
反向代理(負載均衡)
常用命令
配置
動靜分離(網站部署)
集群搭建
相關技術:HAProxy、Apache
學習建議
Nginx 的基本使用非常簡單,甚至不需要看任何的視訊,跟著一篇文章就能夠用它來提供網站存取能力、實作反向代理。
但是在企業中,Nginx 的使用往往沒那麽簡單,作為負載均衡、請求轉發的重要元件,往往需要針對實際場景去寫一些特定的配置。因此建議有時間的話,實踐下 Nginx 的配置方法,了解 Nginx 基本的設計思想,對今後自己設計系統時也有幫助。
Netty 網路編程
開源的 Java 網路編程框架,用於開發高效能(事件驅動、異步非阻塞)、高可靠的網路伺服器和客戶端程式。
很多網路框架和伺服器程式都用到了 Netty 作為底層,學好 Netty 不僅可以讓我們自己實作高效能伺服器,也能更好地理解其他的框架套用、閱讀源碼。
知識
IO 模型(BIO / NIO)
Channel
Buffer
Seletor
Netty 模型
WebSocket 編程(動手做個聊天室)
相關技術:Vertx(比 Netty 簡單多了,實在看不懂 Netty 也可以學習下這個)
學習建議
不同於之前學的 SSM 框架,Netty 還是需要一定學習成本的,一方面是國內資源太缺乏,另一方面很多重要的概念(比如 NIO)還是要多動手寫程式碼偵錯才能理解。
還是建議先從視訊入門,並且不建議在 Netty 上花太多時間,面試的時候一般也就考察一些 Netty 背後的思想(比如 NIO)而非框架本身的語法細節。
微服務
隨著互聯網的發展,計畫越來越復雜,單機且龐大的巨石計畫已無法滿足開發、運維、並行、可靠性等需求。
因此,後台架構不斷演進,可以將龐大的計畫拆分成一個個職責明確、功能獨立的細小模組,模組可以部署在多台伺服器上,相互配合協作,提供完整的系統能力。
換言之,想做大型計畫,這塊兒一定要好好學!
知識
Dubbo
架構演進
RPC
Zookeeper
服務提供者
服務消費者
計畫搭建
相關技術:DubboX(對 Dubbo 的擴充套件)
微服務
微服務概念
Spring Cloud 框架
子父工程
服務註冊與發現
註冊中心 Eureka、Zookeeper、Consul
Ribbon 負載均衡
Feign 服務呼叫
Hystrix 服務限流、降級、熔斷
Resilience4j 服務容錯
Gateway(Zuul)微服務閘道器
Config 分布式配置中心
分布式服務匯流排
Sleuth + Zipkin 分布式鏈路追蹤
Spring Cloud Alibaba
Nacos 註冊、配置中心
OpenFeign 服務呼叫
Sentinel 流控
Seata 分布式事務
介面管理
Swagger 介面文件
Postman 介面測試
相關技術:YApi、ShowDoc
學習建議
時間不急的話,建議先從 Dubbo 學起,對分布式、RPC、微服務有些基本的了解,再去食用 Spring Cloud 全家桶會更香。學完 Spring Cloud 全家桶後,再去學 Spring Cloud Alibaba 就很簡單了。
這部份內容的學習,原理 + 實踐都很重要,也不要被各種高大上的詞匯唬住了,都是上層(套用層)的東西,基本沒有什麽演算法,跟著視訊教程學,其實還是很好理解的。
分布式相關知識非常多,但這裏不用刻意去背,先透過視訊教程實戰使用一些微服務框架,也能對其中的概念有基本的了解。
大廠面試的時候很少問 Spring Cloud 框架的細節,更多的是微服務以及各元件的一些思想,比如閘道器的好處、訊息匯流排的好處等。
容器
將套用和環境進行封裝,相互隔離、獨立部署、便於移植,提高安全性、提高開發和維護效率。
便於實作微服務、持續整合和交付。
知識
Docker
容器概念
映像
部署服務
Dockerfile
Docker Compose
Docker Machine
Docker Swarm
多階段構建
K8S(Kubernetes)
相關技術:Apache Mesos、Mesosphere
學習建議
業務上雲是趨勢,但是對於開發同學來說,會用 Docker / K8S 部署計畫和服務就行。實際工作中,企業一般都有現成的平台直接用,面試考察的也不多,不用花太多時間。
CI / CD
持續整合 / 持續交付,貫穿整個研發到計畫上線的過程,提高效率。
大公司一般都有自己的 CI / CD 平台。
知識
什麽是 CI / CD
CI / CD 有什麽好處
使用任一 CI / CD 平台
相關技術:Jenkins、GitLab、微信雲托管
學習建議
了解它是什麽,並且實戰使用任一 CI / CD 平台,感受它和傳統開發運維到底有什麽不同,就足夠了。其實很簡單,不要花太多時間。
真正要自己去搭建的時候,跟著官方文件來就行。
尾聲
看到這裏,相信你已經感嘆:程式語言一輩子學不完了!
但是,不用擔心,透過對這麽多知識點的學習,相信你已經有了一定的積累,也不知不覺地鍛煉了自主學習能力、資源檢索能力、程式碼閱讀能力、問題解決能力,之後的學習會越來越輕松。
接下來,可以試著用你學到的技術來解決實際的問題,自主從 0 開始做一些計畫,保持編程手感。
階段 5:計畫實戰
目標
綜合所學技術從 0 到 1 開發和上線一個全面、有特色的、可以寫進簡歷的個人計畫。
學習建議
其實在之前的框架學習視訊中應該就做過幾個計畫了,但相對不夠完整和體系化。
有想法的同學可以做任何自己想做的計畫,推薦參加一些作品類競賽,練手、拿獎、收獲計畫經歷一舉三得。
暫時沒想法的朋友,建議先跟著專門帶做計畫的視訊教程做 1 - 2 套 Java 完整計畫,一定要從 0 到 1 自己手寫!
有能力的朋友也可以試著用 GitHub 上的源碼來學習啦~
做一個完整的計畫的確很不容易,建議大家根據自己的 時間、興趣 選擇 較新的 、 有配套源碼的 教程,保持耐心。
當然,魚皮首推自己的保姆級實戰計畫系列:
魚皮就是針對後端必須的技術,設計實作了這些計畫,帶大家快速掌握。
階段 6:Java 高級
目標
不滿足於能做,而是透過更 深入 和 廣泛 的學習,實作高品質的程式碼和更優秀的架構,培養解決問題的能力。
已經到了這個階段,建議除了看完成的教程外,平時多自主搜尋資訊去學習,積少成多。比如遇到了一個不了解的名詞,可以去網上搜一下,感興趣的話再進行下一步的學習。
並行編程
對 Java 後端開發程式設計師來說,懂得如何利用有限的系統資源來提高系統的效能是很重要的,也是大廠面試考察的重點,因此並行編程(尤其是 Java 並行包的使用)這塊的知識很重要。
把它放到高級,是因為在學並行編程前,需要有一定的編程經驗、了解一定的作業系統知識。
知識
執行緒和行程
執行緒狀態
並列和並行
同步和異步
Synchronized
Volatile 關鍵字
Lock 鎖
死結
可重入鎖
執行緒安全
執行緒池
JUC 的使用
AQS
Fork Join
CAS
學習建議
並行編程入門不難,依然是 先學會使用 基礎的 Java 並行包, 再透過大量地實踐和測試,了解一些原理,才能真正掌握何時使用、如何更合理地使用並行編程。而不是張口閉口多執行緒,上天入地高並行。
JVM
想要深入理解 Java,探秘 Java 跨平台的奧秘,一定要了解 Java 底層的虛擬機器技術。
了解虛擬機器、掌握虛擬機器效能調優方法,有助於你寫出更高效能、資源占用更小的優質程式。
在學習 JVM 的過程中,也能學到很多精妙的設計,開拓思路。
知識
JVM 記憶體結構
JVM 生命周期
主流虛擬機器
Java 程式碼執行流程
類載入
類載入器
類載入過程
雙親委派機制
垃圾回收
垃圾回收器
垃圾回收策略
垃圾回收演算法
StopTheWorld
字節碼
記憶體分配和回收
JVM 效能調優
效能分析方法
常用工具
參數設定
Java 探針
線上故障分析
學習建議
JVM 的知識略顯枯燥,建議先看視訊,有實操的地方一定要實操!自己多去分析。
第一遍不理解沒有關系,可以再看書來鞏固,想要真正學好,【深入理解 Java 虛擬機器(第三版)】一定要讀。
架構設計
分布式
分布式理論
CAP
BASE
分布式緩存
Redis
Memcached
Etcd
一致性演算法
分布式事務
分布式 id 生成
分布式任務排程
分布式服務呼叫
分布式儲存
分布式資料庫
分布式檔案系統
分布式協調工具
分布式監控
分布式訊息佇列
RabbitMQ
Kafka
Apache Pulsar
分布式日誌收集 Elastic Stack
分布式搜尋引擎 Elasticsearch
分布式鏈路追蹤 Apache SkyWalking
分布式配置中心
Apollo
Nacos
高可用
限流
降級熔斷
冷備
雙機熱備
同城雙活
異地雙活
異地多活
容災備份
高並行
資料庫
MyCat 中介軟體
Apache ShardingSphere 中介軟體
分庫分表
讀寫分離
緩存
緩存雪崩
緩存擊穿
緩存穿透
負載均衡
負載均衡演算法
軟硬體負載均衡(2、3、4、7 層)
服務網格
服務網格用來描述組成應用程式的微服務網路以及它們之間的互動。服務網格的規模和復雜性不斷的增長,它將會變得越來越難以理解和管理,常見的需求包括服務發現、負載均衡、故障恢復、度量和監控等。
知識
Istio
Envoy(開源的邊緣和服務代理)
DDD 領域驅動設計
將數據、業務流程抽象成容易理解的領域模型,透過用程式碼實作領域模型,來組成完整的業務系統。
知識
DDD 的優勢
DDD 的適用場景
DDD 核心概念
DDD 實踐
其他
Sidecar
Serverless
雲原生
學習建議
架構設計的學習沒有頂點,多看文章,思考每種設計的優缺點和適用場景,有機會的話在企業中實踐即可。
還在學校、或者初入這行的同學切記,千萬不要一味地去背誦架構設計的八股文。你可以背,但是這一塊的知識只有結合具體的計畫才有意義,所以要多做計畫去實踐設計的合理性,而不是什麽設計都哢哢往系統裏去懟。比如面試問到分布式事務,能結合自己計畫中用分布式事務解決問題的經驗去回答最好。
其他技術
熱數據探測技術:京東 HotKey
資料庫流水訂閱:阿裏 Canal
監控告警
套用安全
故障演練
流量回放
階段 7:Java 求職
目標
找到好工作!
建議
盡早做規劃,可以透過大廠招聘官網的崗位描述來了解崗位的要求
編寫一份優秀的簡歷,可以使用魚皮團隊開發的寫簡歷工具 —— 老魚簡歷:https://laoyujianli.com
多讀面經,堅持刷演算法
多參與面試,持續復盤總結
資源
求職是個比較大的話題,也有非常多的技巧,建議大家閱讀我們精心整理的求職指南:
階段 8:持續學習
目標
持續追求技術的深度和廣度,培養自己的 核心競爭力 和 不可替代性 ,學無止境!
學習建議
到了這個階段,一定要自主學習,自主搜尋教程、多看書、多閱讀技術部落格、多實踐。
可選的學習方向有:框架源碼、電腦原理、各種中介軟體、分布式技術、系統架構設計、行業問題的解決方案、前沿技術( 比如雲原生、 服務網格、 GraalVM、 ZGC)和 其他技術(比如大數據)等等。
最後
👇🏻 點選下方閱讀原文,獲取路線的完整版、以及魚皮往期編程幹貨。
往期推薦