萬字Java知識地圖助你成為Offer收割機

最近很多讀者在問:Java 怎么學(xué)習(xí)啊?有沒有什么學(xué)習(xí)路線?
我相信這些讀者或多或少都有一些 Java 基礎(chǔ),但由于看不到全貌,學(xué)了一段時間很容易迷失。所以我在尋思著能不能寫一個學(xué)習(xí)的地圖或者路線,讓讀者能知道下一步該學(xué)什么,自己離大廠的 offer還有多遠的距離。
一個人最怕的不是路途遙遠,而是看不到勝利曙光。我希望下面這篇文章能給你的學(xué)習(xí)之路帶來一絲曙光,大家不妨試著讀一下吧,如果有收獲給我點個贊喲。
溫馨提醒:這篇文章寫著寫著就一萬字了,建議大家關(guān)注后再收藏,以防走丟。
這篇文章主要內(nèi)容包括(干貨滿滿):
學(xué)Java有哪些就業(yè)方向? 數(shù)據(jù)結(jié)構(gòu)和算法 設(shè)計模式 計算機基礎(chǔ) Java 入門 Java 高手進階 基礎(chǔ)框架(SSM) 微服務(wù)框架 常用中間件 數(shù)據(jù)庫 分布式架構(gòu) 必須掌握的工具軟件 學(xué)習(xí)資源網(wǎng)站列表匯總 學(xué)習(xí)常見問題(FAQ)
買一瓶可樂,泡一杯咖啡,lets go 學(xué)習(xí)~
學(xué)Java有哪些就業(yè)方向?
在介紹 Java 怎么學(xué)之前我給大家介紹一下學(xué)完了能干什么,因為有目標(biāo)的學(xué)習(xí)才是最高效的。
很多 Java 入門學(xué)習(xí)者對崗位或者方向的概念非常模糊,今天學(xué)安卓、后天學(xué)大數(shù)據(jù),三心二意的學(xué)習(xí)勢必造成技術(shù)不精,這就是面試官通常說的:這位面試者基礎(chǔ)比較差。
學(xué)習(xí)技術(shù)首先要認(rèn)準(zhǔn)一個方向?qū)W⑾氯ィ辛艘欢ǚe累后再將自己的知識面擴寬,找到自己感興趣的方向再沉下去學(xué)習(xí),周而復(fù)始你就成為這個行業(yè)的專家了。
Java 這門語言,在公司里根據(jù)分工不同衍生出了眾多的崗位或者技術(shù)方向。
我在 boss 直聘上搜索了 BAT 等大廠的崗位,目前有以下三類崗位非常熱門:
(1)安卓開發(fā)
技能要求:
熟悉 Android UI 開發(fā)非常熟悉,對 UI 架構(gòu)有理解,并了解基礎(chǔ)的 UI 交互知識; 熟悉 Android 調(diào)試工具和方法,可以應(yīng)付各種 Android 復(fù)雜問題; 熟悉 Android Framework 層,有通過 Android 源碼閱讀定位問題的經(jīng)驗;
(2)Java 后端開發(fā)
技能要求:
具備扎實的Java基礎(chǔ),對JVM原理有扎實的理解;對Spring、MyBatis、Dubbo等開源框架熟悉,并能了解它的原理和機制,具有大型分布式系統(tǒng)設(shè)計研發(fā)經(jīng)驗; 熟悉基于Mysql關(guān)系數(shù)據(jù)庫設(shè)計和開發(fā)、對數(shù)據(jù)庫性能優(yōu)化有豐富的經(jīng)驗; 熟悉底層中間件、分布式技術(shù)(如RPC框架、緩存、消息系統(tǒng)等);
(3)大數(shù)據(jù)/數(shù)據(jù)倉庫
技能要求:
熟悉Hadoop/Spark/sqoop/hive/impala/azkaban/kylin等大數(shù)據(jù)相關(guān)組件; 精通sql及性能調(diào)優(yōu),熟練使用java、python、scala其中一種編程語言; 掌握數(shù)據(jù)倉庫 (DW) / OLAP /商業(yè)智能 (BI) /數(shù)據(jù)統(tǒng)計理論,并靈活的應(yīng)用,具備大型數(shù)據(jù)倉庫設(shè)計經(jīng)驗;
這里只列舉了三類比較熱門的技術(shù)崗位,希望大家結(jié)合自己的經(jīng)驗思考一下方向。
敲黑板:認(rèn)清自己,找準(zhǔn)方向,越早確定方向越容易成功!
數(shù)據(jù)結(jié)構(gòu)和算法
學(xué)什么?
有些同學(xué)可能要問了:我學(xué) Java 的有必要學(xué)習(xí)算法嗎?答案是:別無選擇!
國內(nèi)互聯(lián)網(wǎng)面試的流程逐漸在向國外靠攏,像字節(jié)跳動、BAT 等大廠,手撕算法題已經(jīng)成為了必選動作。
確實, Java 相對于 C、C++有著豐富的類庫和三方框架,進入工作后大部分人都是在寫業(yè)務(wù)代碼,俗稱 API boy 或者 Crud boy,算法看起來并不是那么重要,但是考算法真的是公司面試篩選人的低成本辦法,如果你寫出了算法并且通過了,要么你聰明要么你勤奮(刷題了)。
所以不管你是學(xué)什么語言:C、C++、python、Java、GO,算法這一關(guān)你必須得過。數(shù)據(jù)結(jié)構(gòu)和算法的面試核心知識點我已經(jīng)列出來了,大家可以參考學(xué)習(xí),逐個擊破。
棧與隊列:先進先出、后進先出 線性鏈表 查找:順序查找、二分查找 排序:交換類、插入類、選擇類 樹、二叉樹、圖:深度優(yōu)先(DFS)、廣度優(yōu)先(BFS) 遞歸 分治 滑窗 三大牛逼算法:回溯、貪心、動態(tài)規(guī)劃(DP)
怎么學(xué)?
最好或者最笨的方法就是刷題,強烈推薦力扣:https://leetcode-cn.com建議刷300題以上,要覆蓋簡單、中等、困難的題目。面試前要訓(xùn)練手感,不要生疏了,可以選保持每日或幾日一題。
在刷題之前我建議你看一些書:《漫畫算法-小灰的算法之旅》
如果你之前沒有任何算法基礎(chǔ),這邊書很適合你,可以補充數(shù)據(jù)結(jié)構(gòu)和算法的基礎(chǔ)知識,像什么是時間復(fù)雜度空間復(fù)雜度、查找、排序等。如果你有了一定基礎(chǔ)了,建議你直接跳到最后面的算法實戰(zhàn)部分。
《劍指 offer》
非常經(jīng)典的一本書,學(xué)算法的人必刷。但是要注意了,這邊書里面的題目是用 C++寫的,如果你是 Java 開發(fā)人員可能會有點影響。但是要記住學(xué)習(xí)算法最關(guān)鍵的還是解題思路和方法,用什么語言實現(xiàn)是其次的,如果你時間比較多我是建議你用 Java 語言再實現(xiàn)一遍。
《labuladong的算法小抄》
非常推薦!這是一本很新的書,寫書前作者在 Github 開源了一個項目,主要講解 LeetCode 解題套路,Start 總數(shù)排名前40。在書的開頭講解了學(xué)習(xí)算法的基本思維和套路,建議看這邊書的同時再配合 leetcode 刷題,療效非常棒!
《算法導(dǎo)論》
要是不推薦這本書是不是顯得我有點 low 了,這是一本科班出身的同學(xué)必看必學(xué)的經(jīng)典大部頭。國外大佬寫的,國內(nèi)翻譯的經(jīng)典之作,雖然是經(jīng)典但是不建議剛?cè)腴T算法的同學(xué)看,因為看了這本書你可能要放棄算法了,比較難看懂。建議有了一定基礎(chǔ)再入手這邊書。
如果你覺得看書比較枯燥,可以推薦你看一些極客時間的專欄,不過是收費,但是質(zhì)量非常高。《數(shù)據(jù)結(jié)構(gòu)與算法之美》
這個專欄是文字+語音,作者是王爭,前 Google 工程師。他采用最適合工程師的學(xué)習(xí)方式,不拘泥于某一特定編程語言,從實際開發(fā)場景出發(fā),由淺入深教你學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的方法,幫你搞懂基本概念和核心理論,深入理解算法精髓,幫你提升使用數(shù)據(jù)結(jié)構(gòu)和算法思維解決問題的能力。
《算法面試通關(guān)40講》
這個專欄是視頻,作者是覃超,前Facebook工程師。作者會用白板帶你一步一步解題,層層深入一環(huán)扣一環(huán),每一題還會用多種解題方法。我基本看完了,收獲頗多。
leetcode、書和極客專欄可以并行,學(xué)練結(jié)合,不要光看不練哦。
設(shè)計模式
學(xué)什么?
金庸小說中牛叉的武功太多了,綜合性最強的還是九陽真經(jīng),九陰真經(jīng)分為上、下兩卷,上卷為內(nèi)功基礎(chǔ),下卷為武功招式,這些都是極負(fù)盛名的武學(xué)秘籍。
那大家思考一下什么是武學(xué)秘籍?其實打開來開就是一些固定的招式,牢記這些招式并運用好就是絕頂高手了。
回到編程上來,除了要寫干凈的代碼(clean code),還要運用各種設(shè)計模式使代碼可讀性強、擴展性好、松耦合,這便是大家經(jīng)常說的編碼大牛。
所以不管是學(xué)武功還是學(xué)編碼,都是有一些固定的招式,也就是設(shè)計模式。
說到設(shè)計模式很多同學(xué)可能會跳出來:這個我知道,就是單例模式、工廠模式……
巴拉巴拉說了一堆,但是真正在寫代碼的時候又是一臉蒙:為什么我寫的代碼用不到設(shè)計模式?究其原因是你的代碼經(jīng)驗不夠。
想一下設(shè)計模式是怎么來的?上個世紀(jì)四個大男人搞了一個組合叫 GoF,并出版了一本書,這本書共收錄了23種設(shè)計模式,后面逐漸被人熟知。這四個人從大量的代碼實踐中總結(jié)了一套方法論(寫代碼的套路),而我們作為一個在學(xué)校的學(xué)生或者剛工作的新人,可能連代碼都寫的少,怎么可能輕松快速地掌握這么多設(shè)計模式。
所以說你學(xué)完了設(shè)計模式,但是還不會運用到日常的代碼實踐中,這個是很正常的,因為代碼經(jīng)驗還不夠。
那還學(xué)不學(xué)?當(dāng)然要學(xué),因為面試的時候有可能會問到。設(shè)計模式的理論知識我們還是要打好基礎(chǔ),需要掌握這些知識點:
設(shè)計模式的六大原則:單一職責(zé)、里氏替換、依賴倒置、接口隔離、迪米特法則、開閉原則 UML 基礎(chǔ)知識 設(shè)計模式三大分類:創(chuàng)建型、結(jié)構(gòu)型、行為型 常用設(shè)計模式基本原理
經(jīng)典設(shè)計模式總共有23種(現(xiàn)在遠不止23種了,還有一些變種),全部掌握難度太大了,我們只需要掌握一些常用的就好了,必須要掌握的我用小紅旗已經(jīng)標(biāo)出來了。
怎么學(xué)?
網(wǎng)上關(guān)于設(shè)計模式的學(xué)習(xí)資料非常多,質(zhì)量也是參差不齊,大家找的時候可要擦亮眼睛。
在看書之前我還是推薦你熟悉一下 UML 的理論知識,因為你如果不懂 UML 那任何一本設(shè)計模式的書你都可能讀不下去, UML 是設(shè)計模式的前提。
UML 學(xué)習(xí)網(wǎng)站:
https://www.w3cschool.cn/uml_tutorial/
不要花太多時間學(xué)習(xí) UML,簡單理解入門即可。
假設(shè)你已經(jīng)入門 UML 了,那下面的這些書你可以考慮學(xué)習(xí)一下了:
《Head First 設(shè)計模式》
Head First 是一個比較經(jīng)典的系列叢書,有些人非常喜歡這種風(fēng)格。這本書講枯燥的設(shè)計概念講解的生動有趣,作為一本入手書非常值得推薦。
《大話設(shè)計模式》
大話系列是國內(nèi)非常經(jīng)典的系列叢書,有眾多粉絲。這本大話設(shè)計模式以對話的形式講解知識,在當(dāng)時可開創(chuàng)了先河。雖然書中有些例子比較牽強,但任然不失為一本入門的好書。
《圖解設(shè)計模式》
圖解系列是日本的一位作者寫的,有一本圖解 HTTP 非常經(jīng)典,這本圖解設(shè)計模式也是類似的風(fēng)格。由于是翻譯過來的,書中有些例子可能聽起來比較奇怪,貌似翻譯過來的技術(shù)書都有這個問題。
《設(shè)計模式-可復(fù)用面向?qū)ο筌浖幕A(chǔ)》
又是一本黑色大部頭書,書的作者就是 GoF,大家都說經(jīng)典。但是呢,經(jīng)典歸經(jīng)典,讀起來真的是晦澀難懂,對新人非常不優(yōu)化,如果你想入門學(xué)習(xí)設(shè)計模式,這本書就不推薦了。不推薦為什么要說出來?經(jīng)典的書如果不提,你們又要說我菜。(害)
這幾本書都要看嗎?當(dāng)然不是,如果你是在準(zhǔn)備面試,我個人建議是讀其中一本就夠了。至于說看哪一本,你可以找對應(yīng)的電子書,挑一個章節(jié)試讀一下,符合你的胃口就選擇這一本繼續(xù)讀下去。
如果你已經(jīng)有幾年的編碼經(jīng)驗,又想把代碼寫好,建議你多挑基本讀讀,吸收每本書的精華。
計算機基礎(chǔ)
科班出身的同學(xué)對《計算機網(wǎng)絡(luò)》和《操作系統(tǒng)》這兩門課應(yīng)該不會陌生,至于掌握了多少,你懂得,都是在考前一兩周突擊學(xué)習(xí)的,哈哈。
現(xiàn)在大公司對于應(yīng)屆生的要求越來越高,計網(wǎng)和操作系統(tǒng)這兩門課是必考的。那些拿了 SSSP Offer 的大牛計算機基礎(chǔ)都非常扎實。
(1)計算機網(wǎng)絡(luò)
學(xué)什么?
計算網(wǎng)絡(luò)的協(xié)議非常非常多,很多同學(xué)學(xué)完都一頭霧水,或者僅僅懂一點 HTTP,但是真正要掌握的東西可不少:
OSI 七層模型、TCP/IP五層模型 常見網(wǎng)絡(luò)協(xié)議:HTTP、TCP/IP、UDP 網(wǎng)絡(luò)安全:非對稱加密、數(shù)字簽名、數(shù)字證書 網(wǎng)絡(luò)攻擊:DDOS、XSS、CSRF 跨域攻擊
怎么學(xué)?
計算機網(wǎng)絡(luò)面試有一道非常經(jīng)典的面試題:說說你從URL輸入到最終頁面展現(xiàn)的過程。這一題可以覆蓋大部分計網(wǎng)的知識點,可以從 DNS 解析到 HTTP、TCP/IP協(xié)議、物理層協(xié)議,一直到瀏覽器渲染頁面,你技術(shù)功底有多深你就可以聊多深。希望大家學(xué)完了也能試著回答一下這個問題。
推薦幾本倍受好評的書:《網(wǎng)絡(luò)是怎么連接的》
這本書是一本日本作者寫的。文章圍繞著在瀏覽器中輸入網(wǎng)址開始,一路追蹤了到顯示出網(wǎng)頁內(nèi)容為止的整個過程,圖文并茂生動有趣,非常推薦!
《圖解 HTTP》
也是一名日本作者寫的。這本書對 HTTP 協(xié)議進行了全面系統(tǒng)的介紹,列舉了很多常見通信場景及實戰(zhàn)案例,相信讀完會有恍然大悟的感覺。書很薄,幾天就可以讀完,強烈推薦!
《TCP/IP詳解卷1:協(xié)議》
計算機網(wǎng)絡(luò)的經(jīng)典教材, 大部頭書籍,很難啃。建議挑重點看。
最后安利一款工具,學(xué)習(xí)網(wǎng)絡(luò)必備的抓包神奇:wireshark,如果你學(xué)網(wǎng)絡(luò)沒抓過包,那基本等于白學(xué)了(有點嚴(yán)重)。
(2)操作系統(tǒng)
學(xué)什么?
作為一名 Javaer 在平時的工作中可能不會直接跟操作系統(tǒng)打交道,因為 JVM 幫我們屏蔽了眾多差異。但是要想學(xué)好 JVM,懂一點操作系統(tǒng)更有助于你深刻理解 JVM 工作原理。
Java 學(xué)習(xí)者這部分的要求可以稍微放低,但是你如果是搞 C++的,那這部分可是你的重點。
進程和線程的區(qū)別 進程間的通信方式:共享內(nèi)存、管道、消息 內(nèi)存管理、虛擬內(nèi)存 死鎖檢測和避免
怎么學(xué)?
想要精通操作系統(tǒng)難度非常大,但是在面試中你要能講出一些具體的操作系統(tǒng)知識,面試官會對你刮目相看。
推薦一些視頻學(xué)習(xí)資料:
B 站:麻省理工 MIT 6.828(無字幕):
https://www.bilibili.com/video/BV1px411E7ST?
操作系統(tǒng)(哈工大李治軍老師)32講(全)超清:
https://www.bilibili.com/video/BV1d4411v7u7
推薦書籍資料:
《深入理解計算機系統(tǒng) CSAPP》
赫赫有名的 CSAPP,全稱:Computer Systems:A Programmer‘s Perspective。科班同學(xué)的圣經(jīng),哈哈,黑色大部頭書籍,難啃。
《現(xiàn)代操作系統(tǒng) (第3版)》
操作系統(tǒng)領(lǐng)域的經(jīng)典之作,因為是翻譯過來的,遇到比較晦澀的先跳過,多讀幾遍才能消化。
Java 入門
學(xué)什么?
Java 語言從誕生到現(xiàn)在已經(jīng)有20多年了,從Tiobe排行榜上來看,Java 語言常年霸榜經(jīng)久不衰,所以不要怕學(xué)完 Java 后突然不流行了,至少這幾年Java 就業(yè)機會非常多。
如果你有其他語言的基礎(chǔ),比如之前學(xué)過 C、C++等,那學(xué)起 Java 應(yīng)該是非常容易的,也容易上手。如果你沒有語言基礎(chǔ),又不想了解太底層的東西,那學(xué) Java 還是不錯的。至于說 python,光從語言層面上看,python 確實非常簡單,估計你一周內(nèi)就可以學(xué)會并且代碼寫的還不錯,但是 Java 不一樣,一周你只能簡單了解一下語法,想寫好代碼幾乎不可能。另外 Go 語言勢頭很猛,大家也可以關(guān)注一下。
一般來說 Java 入門你需要掌握下面這些知識點:
面向過程 VS 面向?qū)ο?/section> 面向?qū)ο蠡咎卣鳎悍庋b、繼承、多態(tài) 訪問控制符:private、default、protected、public 數(shù)據(jù)類型:基本類型、引用類型 控制流程:for、while、switch 等 序列化 異常處理(有點難度) 泛型(有點難度)
怎么學(xué)?
如果你是零基礎(chǔ),建議你可以找一些 Java 入門的視頻看一下,網(wǎng)上視頻魚龍混雜,大家注意甄別。推薦一個比較好的平臺:B 站(https://www.bilibili.com/) 不是讓你去看二次元的,里面有很多學(xué)習(xí)資源。(嘿哈)
敲黑板啦:視頻不要貪多,因為沒有一個大牛是看視頻看出來的。 看視頻是別人將知識點往你腦袋里灌,最大的好處是能讓你快速入門,如果你想學(xué)到更多,你需要的是自我學(xué)習(xí),帶有思考的自我學(xué)習(xí)。
看書是一種高效的自我學(xué)習(xí)方式,推薦基本比較好的書:
《Java 核心技術(shù)卷I》
這本書建議作為Java 之旅的第一本書,涵蓋的內(nèi)容非常全,比起那些30天學(xué)會 Java 之類的書,這邊書更加務(wù)實。書中有些章節(jié)其實不用看,比如Swing GUI 的直接略過,因為用 Java 寫桌面端應(yīng)用已經(jīng)過時了。
《阿里巴巴 Java 開發(fā)手冊》
大廠阿里巴巴出品的,這其實是一本 Java 編碼規(guī)范,編碼習(xí)慣從一開始就要養(yǎng)好。
《Java 編程思想(Thinking In Java)》
這是一本非常非常經(jīng)典的書,你要問搞 Java 的人如果沒聽過這本書那算是白學(xué)了,哈哈。其實說實話這本書我試圖看過幾次,最終都沒有看完,一個原因是它太厚了,另外我覺得講得太啰嗦了,所以我現(xiàn)在拿來墊桌子,高度合適挺好的。所以呢,建議新人不要一開始看這邊書,不然你會懷疑人生還沒入門就放棄了,就把它當(dāng)做編程圣經(jīng),等你后面有經(jīng)驗了拿起來再翻翻吧。
敲黑板了:學(xué)習(xí)編程要有耐心,不要急于求成,要打好基礎(chǔ)。也許你一個月兩個月還在運行一些簡單示例,這是正常的,多學(xué)習(xí)多思考。
Java 高手進階
學(xué)什么?
恭喜你終于Java 入門了,大牛和菜鳥的區(qū)別在于菜鳥永遠止步于入門水平,而大牛已經(jīng)找到新大陸了,翻過這幾座山你離高手就不遠了。
Java 高手進階需要掌握的東西非常非常多,這里列舉一些核心知識點,必須全部掌握的。這是 Java 面試高頻考點,也是傳說中 Java 八股文的一部分,面好了進入下一面,面不好回家等消息。
Java 集合類源碼 線程池 Java 代理 IO 模型 JVM Java 并發(fā)編程(JUC)
怎么學(xué)?
Java 已經(jīng)入門了,你都想進階了,建議你不要再找視頻看了,一邊看書一邊思考吧。
《Effective Java》
書中列舉了很多編程建議,其實就是告訴怎樣去寫好代碼,你需要從
能寫代碼(入門)過渡到會寫代碼,這本書值得一看。如果你的編碼經(jīng)驗比較少,那這邊書你可以稍微往后延,因為看完了你可能沒有感同身受。
《Java8 實戰(zhàn)》
Java15 都出來了為什么還要學(xué) Java8 ?因為現(xiàn)在很多公司都還停留在 Java8, Java8是繼Java5之后改動很大的一個版本,得好好學(xué)。Java8之后的版本非常不給力,換一個 JDK 版本費時費力,收益也不明顯,公司肯定不愿意動了。這邊書將 Java8所有的新特性都詳細(xì)講解了,非常推薦。
《深入理解 Java 虛擬機 第3版》
周志明大神寫的,非常非常經(jīng)典,已經(jīng)更新到第三版了。Java 虛擬機也就是 JVM,JVM 是Java 面試必考的知識,不懂這個直接回家等消息吧。這邊書我看了很多遍,每次看完都有新的收獲,墻裂建議大家看完。
《Java 并發(fā)編程的藝術(shù)》
這是一本專門講解Java并發(fā)的書,涉及到各種鎖、常見安全的集合類,基本就是將 JUC(java.util.concurrent包的簡稱)里所有的內(nèi)容覆蓋了一遍,看完你一定有收獲。強烈推薦!
上面推薦的幾本書可能不太容易讀懂,建議多讀幾遍。書中看不懂的地方可以在網(wǎng)上搜,多找一些優(yōu)質(zhì)的博客或者公眾號看。
至此 Java 語言特性基本學(xué)習(xí)完了,就算達不到高手的水平,你也在正軌上了。
基礎(chǔ)框架(SSM)
學(xué)什么?
學(xué)習(xí) Java 語言特性可能比較枯燥,接下來可以學(xué)習(xí)基礎(chǔ)框架動手做一些項目,比如 Java 領(lǐng)域非常流行的 Spring 框架,這就是為 Java 后端量身定做的,非常好用。
在 spring 流行之前,還出現(xiàn) Struts 這樣流行的框架,后面由于種種原因還是被 Spring 打敗了。
大家在網(wǎng)上應(yīng)該可以經(jīng)常看到 SSM 的縮寫,其實就是Spring+SpringMVC+MyBatis的縮寫了。
你需要掌握以下這些:
Spring 全家桶(Spring、Spring MVC、Spring Boot)使用 ORM 框架(MyBatis、Hibernate)使用 Spring 原理 ORM 框架原理
怎么學(xué)?
學(xué)習(xí) SSM 框架最好是動手完成一個簡單的項目,建議跟著視頻并且把代碼敲出來,一來熟悉項目的開發(fā)流程,也可以給自己帶來成就感。
敲黑板:階段性成就感非常重要,沒有這個很容易放棄學(xué)習(xí),所以要不定時給自己定個小目標(biāo),加加雞腿啥的。
有很多新手在做項目的時候非常糾結(jié)界面,作為一個 Java 后端程序員,你又不是全棧開發(fā),糾結(jié)這個干什么,我的建議:要么不要界面只寫接口,要么自己動手寫點 html,不需要美觀,實現(xiàn)功能即可。
跟著視頻做完項目之后需要干什么?答案是:深入理解框架原理。會用框架并不代表你懂框架,作為一個有追求的程序員,懂原理是永遠的必修課,誰讓這一行太卷了呢,人無你有你最棒。
推薦幾本書:《Spring 基礎(chǔ)內(nèi)幕》
首先聲明一下這是一本講解Spring 源碼的書,不是教你做項目的書。如果需要深入理解 Spring 的技術(shù)原理,這是一本非常推薦的書。有點難啃,多讀幾遍。
《MyBatis 技術(shù)內(nèi)幕》
MyBatis 是 ORM 框架的一種,在國內(nèi)使用比較多,據(jù)說在國外喜歡用 Hibernate。這本書對 MyBatis 的使用和基本原理都介紹比較清楚了。
敲黑板:技術(shù)更新迭代很快,抓住技術(shù)的本質(zhì)才能與時俱進。
關(guān)于基礎(chǔ)框架這部分,大神們的學(xué)習(xí)方法是:使用框架 -> 懂框架 -> 造輪子。
微服務(wù)框架
學(xué)什么?
近些年微服務(wù)架構(gòu)非常火,究其原因是因為傳統(tǒng)的單體架構(gòu)和面向服務(wù)的架構(gòu)逐漸不能滿足互聯(lián)網(wǎng)快速迭代的需求。微服務(wù)可以更容易提供持續(xù)繼承和持續(xù)部署的能力,讓產(chǎn)品更快速交付推向市場。
面向服務(wù)的架構(gòu)其實在五六年前就已經(jīng)提出,期間經(jīng)過了一段低潮期,泡沫散去后逐漸浮現(xiàn)了一些好用的框架,國外以 SpringCloud 為代表,國內(nèi)以 Dubbo 為代表。
springCloud 和 Dubbo 有區(qū)別但是很多基本原理也是類似,大家學(xué)習(xí)的時候需要掌握技術(shù)的本質(zhì)。下面列舉一些核心知識點:
Dubbo框架 SpringCloud框架 服務(wù)注冊與發(fā)現(xiàn) 分布式服務(wù)鏈路追蹤 服務(wù)隔離、熔斷、降級 服務(wù)網(wǎng)關(guān)
怎么學(xué)?
springCloud 和 Dubbo 在官網(wǎng)都有很詳細(xì)的介紹文檔:
Dubbo官網(wǎng) http://dubbo.apache.org/ 可以切到中文版 SpringCloud 官網(wǎng) https://spring.io/projects/spring-cloud
看官網(wǎng)技術(shù)文檔大家可能會很懵,但這些確實是最權(quán)威的資料,也是一手的。
SpringCloud 和 Dubbo 是這幾年剛剛流行的技術(shù),從目前看來相關(guān)書籍還是比較少,也缺少一些經(jīng)典的書,我還是列幾本,大家按需獲取。
《深入理解Apache Dubbo與實戰(zhàn)》
Dubbo 最開始是阿里巴巴開源的,后面捐贈給Apache 了。建議大家讀這本配合源碼一起看。
《Spring Cloud微服務(wù)實戰(zhàn)》
讀這本書之前你最好先學(xué)習(xí) spring 和 spring boot,不然會很懵。另外這本書是2017年出版的,稍微顯舊,大家注意分辨新舊特性。
如果技術(shù)網(wǎng)站和書籍還不能滿足你,建議你去搜一些視頻學(xué)習(xí),這里不做推薦以免認(rèn)為是廣告。推薦搜索平臺:B 站、慕課網(wǎng)、網(wǎng)易云課堂。
敲黑板:微服務(wù)框架涵蓋的內(nèi)容非常多,也是有難點的技術(shù),大家戒躁保持耐心。
常用中間件
學(xué)什么?
最終用戶并不直接使用中間件,換言之中間件不是大眾消費類軟件產(chǎn)品。但是在大公司里中間件是不可或缺的,它是支撐大型網(wǎng)站架構(gòu)的一些基礎(chǔ)的組件和服務(wù),所以非常非常有必要學(xué)。
小百科 中間件(Middleware)通常是指在一個大型分布式的系統(tǒng)中,負(fù)責(zé)各個不同組件(Component)/服務(wù)(Service)之間管理以及交互數(shù)據(jù)的。
業(yè)界開源的優(yōu)秀中間件非常多,通常會根據(jù)業(yè)務(wù)的需要在系統(tǒng)中引入若干,下面列舉了一些常見的,都是必學(xué)的,非可選哈。
緩存:Redis、Memcached( 推薦 Redis) 消息隊列:Kafka、RocketMQ、RabbitMQ、ActiveMQ、ZeroMQ(推薦 Kafka) 數(shù)據(jù)庫中間件:ShardingSpere、Mycat
怎么學(xué)?
每個中間件涵蓋的內(nèi)容都非常多,要想學(xué)精需要大量時間。
Redis 中文官方網(wǎng)站:
http://www.redis.cn/
當(dāng)做字典學(xué)習(xí) redis 常見命令
Kafka 官網(wǎng):
http://kafka.apache.org/
ShardingSpere 官網(wǎng):
http://shardingsphere.apache.org/index_zh.html
Mycat 權(quán)威指南在線 PDF 版:
http://www.mycat.org.cn/document/mycat-definitive-guide.pdf
推薦幾本相關(guān)的書:《Redis 設(shè)計與實現(xiàn)》
這時Redis 口碑比較好的一本書,書中詳細(xì)講解了 Redis 實現(xiàn)原理,如果你只是想學(xué)會怎么用,可以跳過一些章節(jié)。
《深入理解Kafka:核心設(shè)計與實踐原理》
這本書既適合新手入門掃盲也適合高手進階,想知道怎么用看前四章即可,想深入學(xué)習(xí)可以從第五章開始看,寫的非常好,推薦學(xué)習(xí)!
《分布式數(shù)據(jù)庫架構(gòu)及企業(yè)實踐——基于Mycat中間件》
Mycat 相關(guān)的書非常少,這本書是16年寫的,有些陳舊了,如果對 Mycat 非常感興趣可以簡單翻一翻,但是不是特別推薦。
書看完了你還想深入學(xué)習(xí),建議大家關(guān)注一下極客時間的兩門課:胡夕:《Kafka核心技術(shù)與實戰(zhàn)》,老師是Apache Kafka Committer,很專業(yè)。蔣德鈞:《Redis核心技術(shù)與實戰(zhàn)》
不過課程是付費的,手頭緊的建議慎重哈。免費資源網(wǎng)上也有,靠大家搜索了~
中間件的學(xué)習(xí)是一個漫長的過程,不僅需要很多理論知識還需要實踐經(jīng)驗。
比如你學(xué) Redis 的時候,要思考五種基本數(shù)據(jù)類型各自使用場景、布隆過濾器是什么原理、用 Redis 怎么實現(xiàn)分布式鎖,帶著問題去學(xué)習(xí)效率非常高。
比如你學(xué) Kafka 消息隊列,要對比常見消息隊列的優(yōu)缺點、Kafka 為什么吞吐量高、Kafka 會不會丟消息以及怎么解決。
比如你學(xué)數(shù)據(jù)庫中間件,要想數(shù)據(jù)庫為什么要分庫分表、分庫分表 ID 如果處理等等。
數(shù)據(jù)庫
學(xué)什么?
數(shù)據(jù)庫非常重要,面試也是必考的,可以考的點非常多,可以考得很淺:問一下 SQL 使用,也可以考的很深:問索引和鎖的實現(xiàn)原理。下面列了一些常見的知識點。
數(shù)據(jù)庫基本理論:范式、索引原理、數(shù)據(jù)庫引擎 SQL 基本語法 SQL 調(diào)優(yōu),explain 執(zhí)行計劃 數(shù)據(jù)庫事務(wù)(ACID) 數(shù)據(jù)庫鎖:樂觀鎖、悲觀鎖、表鎖、行鎖等
怎么學(xué)?
建議數(shù)據(jù)庫零基礎(chǔ)的同學(xué)還是要先學(xué)習(xí)一下數(shù)據(jù)庫的基本理論,因為我看到很多人都是一上來就學(xué) SQL ,最終也只是會用而已,到后面 SQL 調(diào)優(yōu)的時候就很迷茫了。如果你只是想用一用數(shù)據(jù)庫,這部分也可以跳過。
關(guān)于原理部分有一本非常經(jīng)典的教材《數(shù)據(jù)庫系統(tǒng)概念》以供學(xué)習(xí),經(jīng)典書籍一般都比較難啃坑也比較厚,建議大家先看目錄,挑重點看。大學(xué)學(xué)過這本書的可以直接跳過了。
有了一些理論后就可以開始學(xué)習(xí) SQL 語法了,這里推薦一本《MySQL 必知必會》,一邊看書一邊對著電腦敲。
當(dāng)然面試大廠肯定會問一下比較難的東西,你需要搞懂索引的原理、事務(wù) ACID、鎖,問數(shù)據(jù)庫這些東西必考哦!
MySQL 學(xué)習(xí)書籍清單:《數(shù)據(jù)庫系統(tǒng)概念》
經(jīng)典數(shù)據(jù)庫教材,理解一些基本原理,可略看。
《MySQL必知必會》
SQL 語法入門好書,推薦!
《MySQL技術(shù)內(nèi)幕 : InnoDB存儲引擎》
數(shù)據(jù)庫進階必看,理解存儲引擎以及事務(wù)、鎖、索引等原理。
分布式架構(gòu)
學(xué)什么?
分布式這一部分就是面試的加分項了,答好了面試官會覺得你技術(shù)功底深厚,答不好,只要你前面的基礎(chǔ)還不錯也能過。所以呢,作為一個有追求的技術(shù)人,千萬不要放過加分的機會。
分布式相關(guān)的內(nèi)容非常多,下面列舉幾個在項目中或者面試中經(jīng)常會遇到的知識點:
分布式事務(wù):兩階段提交(2PC)、補償事務(wù)(TCC) 分布式鎖:基于關(guān)系型數(shù)據(jù)庫(MySQL)、基于 Redis、基于Zookeeper 分布式 ID:雪花算法(Snowflake)、美團 Leaf
怎么學(xué)?
這部分內(nèi)容學(xué)好非常難,在很多書中都是輕輕帶過,沒有深入講解原理,所以就不推薦書了。
那怎么學(xué)呢?大家可以針對每個知識點到網(wǎng)上搜索優(yōu)質(zhì)的博客,后面我也會逐步更文講解這些知識點,敬請期待,歡迎催更喲。
必須掌握的工具軟件
工欲善其事,必先利其器。作為一個 Java 開發(fā)人員,你需要學(xué)習(xí)業(yè)界常用的軟件,軟件工具用得越熟你的編碼效率越高,下班的時間可能越早(打工人太難了)。
Java 最聰明的 IDE:IntelliJ IDEA (請放棄使用 Eclipse,我有一堆理由睡服你) 地球上最好用的版本管理工具:Git 經(jīng)久不衰的依賴管理工具:Maven Docker
這些軟件你要是用不好,那只能說明…… 你再多學(xué)學(xué)吧。
學(xué)習(xí)資源網(wǎng)站列表匯總
(1)視頻網(wǎng)站
B站(推薦):https://www.bilibili.com/ 網(wǎng)易云課堂:https://study.163.com/ 極客學(xué)院:https://www.jikexueyuan.com/ 慕課網(wǎng):https://www.imooc.com/
(2)專欄
極客時間(推薦):https://time.geekbang.org/ Gitchat https://gitbook.cn/
(3)Github
Java 知識地圖(推薦):https://github.com/smileArchitect/JavaMap
(4)技術(shù)博客:
CSDN 博客:https://blog.csdn.net/ 博客園:https://www.cnblogs.com/ 掘金社區(qū)(推薦):https://juejin.cn/ InfoQ:https://xie.infoq.cn/ 思否:https://segmentfault.com/ 開源中國:https://www.oschina.net/blog
(5)搜索引擎:
百度:https://www.baidu.com/ 谷歌:https://www.google.com/
(6)知識問答:
知乎(推薦):https://www.zhihu.com/ stackoverflow(推薦):https://stackoverflow.com/
(7)刷題:
力扣(推薦):https://leetcode-cn.com/ 牛客:https://www.nowcoder.com/
(8)云筆記:
石墨:https://shimo.im/ 語雀:https://www.yuque.com/ 有道云筆記:http://note.youdao.com/ 印象筆記:https://www.yinxiang.com/ 看個人習(xí)慣去選擇,不推薦了。
(9)在線畫圖:
processOn:https://www.processon.com/ drawio:https://app.diagrams.net/ 各有特色,都推薦。
學(xué)習(xí)常見問題(FAQ)
學(xué)了容易忘怎么辦?
這是大家學(xué)習(xí)會遇到的頭號大問題,怎么解決?重復(fù)學(xué)習(xí)。
打個比方,假如你正在學(xué)習(xí) spring 注解,突然發(fā)現(xiàn)了一個注解@Aspect,不知道干什么用的,你可能會去查看源碼或者通過博客學(xué)習(xí),花了半小時終于弄懂了,下次又看到@Aspect 了,你有點郁悶了,上次好像在哪哪哪學(xué)習(xí),你快速打開網(wǎng)頁花了五分鐘又學(xué)會了。
從半小時和五分鐘的對比中可以發(fā)現(xiàn)多學(xué)一次就離真正掌握知識又近了一步。
人的本性就是容易遺忘,只有不斷加深印象、重復(fù)學(xué)習(xí)才能真正掌握,所以很多書我都是推薦大家多看幾遍。哪有那么多天才,他只是比你多看了幾遍書。
推薦這么多書都要看完嗎?
當(dāng)然不是!有一些書都是同類型的,作者寫書的側(cè)重點不一樣,大家要學(xué)會挑重點看。
拿到一本書,首先要把目錄多看一遍,一般而言書的前幾章都是介紹型的內(nèi)容,如果你已經(jīng)有了基礎(chǔ),可以直接跳到后面原理解析或者實戰(zhàn)部分。
需要學(xué)多久才能成為技術(shù)大牛?
學(xué)習(xí)無止境!
業(yè)界說法,通過不斷努力學(xué)習(xí),一到兩年可以達到初級水平,三到四年達到中級水平,五年可以達到高級水平。
實際上每個人的學(xué)習(xí)能力和精力不一樣,時間參考意義不大。
只要你在一個方向或領(lǐng)域有自己的建樹,就可以叫你大牛;如果你在公司是技術(shù)骨干、技術(shù)專家、架構(gòu)師,也可以稱之為大牛。
敲黑板:技術(shù)學(xué)習(xí)千萬不要浮躁,謙卑一點多學(xué)一點,天外有天。
現(xiàn)在 python、Go 語言很火,要不要直接學(xué)它們?
不要糾結(jié)語言,語言只是工具。今天 Go 很火,明天會有其他語言。
我有一個同學(xué)畢業(yè)去阿里寫 Java,后面跳槽到深圳騰訊寫 C++,現(xiàn)在又跳到字節(jié)跳動寫 Go,在大佬面前這些語言只是語法不一樣而已。所以建議大家打好基礎(chǔ),答應(yīng)我一定打好基礎(chǔ)。
