前言
最近老是有粉絲私信我說感覺自己學java越來越難了,這其中有剛畢業的應屆生說自己的技術找不到滿意的工作,也有在學校的大學習說找不到學習方式,更多的是正在工作的java開發人員說是現在的技術更新太快,自己很難跟得上大廠的需求跳槽太難!針對粉絲跟我說的這些情況我為大家整理了java全棧的這一套學習路線,深入淺出,簡單好學!滿滿的幹貨都放在下面了!
Java 入門
學什麼?
Java 語言從誕生到現在已經有20多年了,從Tiobe排行榜上來看,Java 語言常年霸榜經久不衰,是以不要怕學完 Java 後突然不流行了,至少這幾年Java 就業機會非常多。
如果你有其他語言的基礎,比如之前學過 C、C++等,那學起 Java 應該是非常容易的,也容易上手。如果你沒有語言基礎,又不想了解太底層的東西,那學 Java 還是不錯的。至于說 python,光從語言層面上看,python 确實非常簡單,估計你一周内就可以學會并且代碼寫的還不錯,但是 Java 不一樣,一周你隻能簡單了解一下文法,想寫好代碼幾乎不可能。另外 Go 語言勢頭很猛,大家也可以關注一下。
一般來說 Java 入門你需要掌握下面這些知識點:
- 面向過程 VS 面向對象
- 面向對象基本特征:封裝、繼承、多态
- 通路控制符:private、default、protected、public
- 資料類型:基本類型、引用類型
- 控制流程:for、while、switch 等
- 序列化
- 異常處理(有點難度)
- 泛型(有點難度)
怎麼學?
如果你是零基礎,建議你可以找一些 Java 入門的視訊看一下,網上視訊魚龍混雜,大家注意甄别。推薦一個比較好的平台:B 站
不是讓你去看二次元的,裡面有很多學習資源。(嘿哈)
敲黑闆啦:視訊不要貪多,因為沒有一個大牛是看視訊看出來的。 看視訊是别人将知識點往你腦袋裡灌,最大的好處是能讓你快速入門,如果你想學到更多,你需要的是自我學習,帶有思考的自我學習。
計算機基礎
科班出身的同學對《計算機網絡》和《作業系統》這兩門課應該不會陌生,至于掌握了多少,你懂得,都是在考前一兩周突擊學習的,哈哈。
現在大公司對于應屆生的要求越來越高,計網和作業系統這兩門課是必考的。那些拿了 SSSP Offer 的大牛計算機基礎都非常紮實。
學什麼?
計算網絡的協定非常非常多,很多同學學完都一頭霧水,或者僅僅懂一點 HTTP,但是真正要掌握的東西可不少:
- OSI 七層模型、TCP/IP五層模型
- 常見網絡協定:HTTP、TCP/IP、UDP
- 網絡安全:非對稱加密、數字簽名、數字證書
- 網絡攻擊:DDOS、XSS、CSRF 跨域攻擊
怎麼學?
計算機網絡面試有一道非常經典的面試題:說說你從URL輸入到最終頁面展現的過程。這一題可以覆寫大部分計網的知識點,可以從 DNS 解析到 HTTP、TCP/IP協定、實體層協定,一直到浏覽器渲染頁面,你技術功底有多深你就可以聊多深。希望大家學完了也能試着回答一下這個問題。
資料結構和算法
學什麼?
有些同學可能要問了:我學 Java 的有必要學習算法嗎?答案是:别無選擇!
國内網際網路面試的流程逐漸在向國外靠攏,像位元組跳動、BAT 等大廠,手撕算法題已經成為了必選動作。
确實, Java 相對于 C、C++有着豐富的類庫和三方架構,進入工作後大部分人都是在寫業務代碼,俗稱 API boy 或者 Crud boy,算法看起來并不是那麼重要,但是考算法真的是公司面試篩選人的低成本辦法,如果你寫出了算法并且通過了,要麼你聰明要麼你勤奮(刷題了)。
是以不管你是學什麼語言:C、C++、python、Java、GO,算法這一關你必須得過。資料結構和算法的面試核心知識點我已經列出來了,大家可以參考學習,逐個擊破。
- 棧與隊列:先進先出、後進先出
- 線性連結清單
- 查找:順序查找、二分查找
- 排序:交換類、插入類、選擇類
- 樹、二叉樹、圖:深度優先(DFS)、廣度優先(BFS)
- 遞歸
- 分治
- 滑窗
- 三大牛逼算法:回溯、貪心、動态規劃(DP)
怎麼學?
最好或者最笨的方法就是刷題,強烈推薦力扣
建議刷300題以上,要覆寫簡單、中等、困難的題目。面試前要訓練手感,不要生疏了,可以選保持每日或幾日一題。
設計模式
學什麼?
金庸小說中牛叉的武功太多了,綜合性最強的還是九陽真經,九陰真經分為上、下兩卷,上卷為内功基礎,下卷為武功招式,這些都是極負盛名的武學秘籍。
那大家思考一下什麼是武學秘籍?其實打開來開就是一些固定的招式,牢記這些招式并運用好就是絕頂高手了。
回到程式設計上來,除了要寫幹淨的代碼(clean code),還要運用各種設計模式使代碼可讀性強、擴充性好、松耦合,這便是大家經常說的編碼大牛。
是以不管是學武功還是學編碼,都是有一些固定的招式,也就是設計模式。
說到設計模式很多同學可能會跳出來:這個我知道,就是單例模式、工廠模式……
巴拉巴拉說了一堆,但是真正在寫代碼的時候又是一臉蒙:為什麼我寫的代碼用不到設計模式?究其原因是你的代碼經驗不夠。
想一下設計模式是怎麼來的?上個世紀四個大男人搞了一個組合叫 GoF,并出版了一本書,這本書共收錄了23種設計模式,後面逐漸被人熟知。這四個人從大量的代碼實踐中總結了一套方法論(寫代碼的套路),而我們作為一個在學校的學生或者剛工作的新人,可能連代碼都寫的少,怎麼可能輕松快速地掌握這麼多設計模式。
是以說你學完了設計模式,但是還不會運用到日常的代碼實踐中,這個是很正常的,因為代碼經驗還不夠。
那還學不學?當然要學,因為面試的時候有可能會問到。設計模式的理論知識我們還是要打好基礎,需要掌握這些知識點:
設計模式的六大原則:單一職責、裡氏替換、依賴倒置、接口隔離、迪米特法則、開閉原則
UML 基礎知識
設計模式三大分類:建立型、結構型、行為型
常用設計模式基本原理
經典設計模式總共有23種(現在遠不止23種了,還有一些變種),全部掌握難度太大了,我們隻需要掌握一些常用的就好了,必須要掌握的我用小紅旗已經标出來了。
怎麼學?
網上關于設計模式的學習資料非常多,品質也是參差不齊,大家找的時候可要擦亮眼睛。
在看書之前我還是推薦你熟悉一下 UML 的理論知識,因為你如果不懂 UML 那任何一本設計模式的書你都可能讀不下去, UML 是設計模式的前提。
Java 高手進階
學什麼?
恭喜你終于Java 入門了,大牛和菜鳥的差別在于菜鳥永遠止步于入門水準,而大牛已經找到新大陸了,翻過這幾座山你離高手就不遠了。
Java 高手進階需要掌握的東西非常非常多,這裡列舉一些核心知識點,必須全部掌握的。這是 Java 面試高頻考點,也是傳說中 Java 八股文的一部分,面好了進入下一面,面不好回家等消息。
- Java 集合類源碼
- 線程池
- Java 代理
- IO 模型
- JVM
- Java 并發程式設計(JUC)
怎麼學?
Java 已經入門了,你都想進階了,建議你不要再找視訊看了,一邊看書一邊思考吧。
基礎架構(SSM)
學什麼?
學習 Java 語言特性可能比較枯燥,接下來可以學習基礎架構動手做一些項目,比如 Java 領域非常流行的 Spring 架構,這就是為 Java 後端量身定做的,非常好用。
在 spring 流行之前,還出現 Struts 這樣流行的架構,後面由于種種原因還是被 Spring 打敗了。
大家在網上應該可以經常看到 SSM 的縮寫,其實就是Spring+SpringMVC+MyBatis的縮寫了。
你需要掌握以下這些:
- Spring 全家桶(Spring、Spring MVC、Spring Boot)使用
- ORM 架構(MyBatis、Hibernate)使用
- Spring 原理
- ORM 架構原理
怎麼學?
學習 SSM 架構最好是動手完成一個簡單的項目,建議跟着視訊并且把代碼敲出來,一來熟悉項目的開發流程,也可以給自己帶來成就感。
敲黑闆:階段性成就感非常重要,沒有這個很容易放棄學習,是以要不定時給自己定個小目标,加加雞腿啥的。
有很多新手在做項目的時候非常糾結界面,作為一個 Java 後端程式員,你又不是全棧開發,糾結這個幹什麼,我的建議:要麼不要界面隻寫接口,要麼自己動手寫點 html,不需要美觀,實作功能即可。
跟着視訊做完項目之後需要幹什麼?答案是:深入了解架構原理。會用架構并不代表你懂架構,作為一個有追求的程式員,懂原理是永遠的必修課,誰讓這一行太卷了呢,人無你有你最棒。
微服務架構
學什麼?
近些年微服務架構非常火,究其原因是因為傳統的單體架構和面向服務的架構逐漸不能滿足網際網路快速疊代的需求。微服務可以更容易提供持續繼承和持續部署的能力,讓産品更快速傳遞推向市場。
面向服務的架構其實在五六年前就已經提出,期間經過了一段低潮期,泡沫散去後逐漸浮現了一些好用的架構,國外以 SpringCloud 為代表,國内以 Dubbo 為代表。
springCloud 和 Dubbo 有差別但是很多基本原理也是類似,大家學習的時候需要掌握技術的本質。
下面列舉一些核心知識點:
- Dubbo架構
- SpringCloud架構
- 服務注冊與發現
- 分布式服務鍊路追蹤
- 服務隔離、熔斷、降級
- 服務網關
常用中間件
學什麼?
最終使用者并不直接使用中間件,換言之中間件不是大衆消費類軟體産品。但是在大公司裡中間件是不可或缺的,它是支撐大型網站架構的一些基礎的元件和服務,是以非常非常有必要學。
小百科
中間件(Middleware)通常是指在一個大型分布式的系統中,負責各個不同元件(Component)/服務(Service)之間管理以及互動資料的。
業界開源的優秀中間件非常多,通常會根據業務的需要在系統中引入若幹,下面列舉了一些常見的,都是必學的,非可選哈。
- 緩存:Redis、Memcached( 推薦 Redis)
- 消息隊列:Kafka、RocketMQ、RabbitMQ、ActiveMQ、ZeroMQ(推薦 Kafka)
- 資料庫中間件:ShardingSpere、Mycat
資料庫
學什麼?
資料庫非常重要,面試也是必考的,可以考的點非常多,可以考得很淺:問一下 SQL 使用,也可以考的很深:問索引和鎖的實作原理。下面列了一些常見的知識點。
- 資料庫基本理論:範式、索引原理、資料庫引擎
- SQL 基本文法
- SQL 調優,explain 執行計劃
- 資料庫事務(ACID)
- 資料庫鎖:樂觀鎖、悲觀鎖、表鎖、行鎖等
怎麼學?
建議資料庫零基礎的同學還是要先學習一下資料庫的基本理論,因為我看到很多人都是一上來就學 SQL ,最終也隻是會用而已,到後面 SQL 調優的時候就很迷茫了。如果你隻是想用一用資料庫,這部分也可以跳過。
關于原理部分有一本非常經典的教材《資料庫系統概念》以供學習,經典書籍一般都比較難啃坑也比較厚,建議大家先看目錄,挑重點看。大學學過這本書的可以直接跳過了。
有了一些理論後就可以開始學習 SQL 文法了,這裡推薦一本《MySQL 必知必會》,一邊看書一邊對着電腦敲。
當然面試大廠肯定會問一下比較難的東西,你需要搞懂索引的原理、事務 ACID、鎖,問資料庫這些東西必考哦!
分布式架構
學什麼?
分布式這一部分就是面試的加分項了,答好了面試官會覺得你技術功底深厚,答不好,隻要你前面的基礎還不錯也能過。是以呢,作為一個有追求的技術人,千萬不要放過加分的機會。
分布式相關的内容非常多,下面列舉幾個在項目中或者面試中經常會遇到的知識點:
- 分布式事務:兩階段送出(2PC)、補償事務(TCC)
- 分布式鎖:基于關系型資料庫(MySQL)、基于 Redis、基于Zookeeper
- 分布式 ID:雪花算法(Snowflake)、美團 Leaf
怎麼學?
這部分内容學好非常難,在很多書中都是輕輕帶過,沒有深入講解原理,是以就不推薦書了。
那怎麼學呢?大家可以針對每個知識點到網上搜尋優質的部落格,後面我也會逐漸更文講解這些知識點,敬請期待,歡迎催更喲。
總結
最後為了友善大家學習我為大家準備了ava核心知識點+全套架構師學習資料和視訊+一線大廠面試寶典+面試履歷模闆+阿裡美團網易騰訊小米愛奇藝快手哔哩哔哩面試題+Spring源碼合集+Java架構實戰電子書一起免費分享給大家!
有需要的朋友關注公衆号:前程有光,領取!
感謝你看到這裡,文章有什麼不足還請指正,覺得文章對你有幫助的話記得給我點個贊,每天都會分享java相關技術文章或行業資訊,歡迎大家關注和轉發文章!