當前位置: 妍妍網 > 碼農

魚皮的 Java 學習路線【速覽版】

2024-07-16碼農

大家好,我是魚皮,21 年 - 22 年的時候,我花了一個多月的時間,整理出了一份保姆級的【Java 學習路線】,得到了不少朋友的好評。

前兩天,有讀者私信我說,他們學校的老師,給同學們推薦了我的學習路線,而且現場投屏!我隔著螢幕都感覺到了 「社死」 的氣息哈哈。

當然,這不是第一次,之前也有同學跟我說,老師上課時透過放我的學習路線來摸魚。。

魚皮的 Java 學習路線,之所以能被廣為推薦,一方面肯定是用心、註入靈魂,另一方面是結合了很多自己的真實經驗。使得無論是急著找工作還是想花更多時間進大廠的同學,都可以跟著這份路線進行學習。

文章篇幅有限, 面給大家分享這份學習 路線的 速覽版 ,完整版我 放到了【魚皮的編程寶典網站】 https://codefather.cn 中, 推薦到網站閱讀,體驗更佳。(路線原始檔我也開源到 GitHub 上啦)

💂 + 💻 = 👴🏽

大綱

寫在開頭

首先呢,我們要了解 Java 的套用場景和就業方向,看看和自己的學習目的是否一致。

目前,Java 由於其優秀的特性以及火爆的生態,崗位需求量大,是後台開發、安卓開發、大數據開發的主流程式語言,因此學習資源也很豐富,值得學習!

有關更多程式語言的選擇,大家可以看我的視訊了解:https://www.bilibili.com/video/BV1y3411r7pX/

階段 0:前期準備

  1. 準備好一款線上、隨時隨地寫程式碼的工具,不用在本地去安裝和配置,是初學者的好幫手。推薦使用我們自研的程式碼小抄:https://codecopy.cn/

  2. 準備一款記筆記的軟體,學編程的過程中老師的思路、自己遇到的問題、解決問題的方法、心得感悟、遇到的好資料,都要記下來哦,好記性不如爛筆頭,可以幫助你事半功倍。

  3. 想學好編程,別背程式碼,要多寫,把這句話刻到腦子裏。

  4. 選視訊和找資料的小技巧:多看評論區、多看隔壁評論區、不要看過期的視訊。

階段 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 求職

    目標

    找到好工作!

    建議

    1. 盡早做規劃,可以透過大廠招聘官網的崗位描述來了解崗位的要求

    2. 編寫一份優秀的簡歷,可以使用魚皮團隊開發的寫簡歷工具 —— 老魚簡歷:https://laoyujianli.com

    3. 多讀面經,堅持刷演算法

    4. 多參與面試,持續復盤總結

    資源

    求職是個比較大的話題,也有非常多的技巧,建議大家閱讀我們精心整理的求職指南:

    階段 8:持續學習

    目標

    持續追求技術的深度和廣度,培養自己的 核心競爭力 不可替代性 ,學無止境!

    學習建議

    到了這個階段,一定要自主學習,自主搜尋教程、多看書、多閱讀技術部落格、多實踐。

    可選的學習方向有:框架源碼、電腦原理、各種中介軟體、分布式技術、系統架構設計、行業問題的解決方案、前沿技術( 比如雲原生、 服務網格、 GraalVM、 ZGC)和 其他技術(比如大數據)等等。

    最後

    👇🏻 點選下方閱讀原文,獲取路線的完整版、以及魚皮往期編程幹貨。

    往期推薦