1. 程式人生 > >Java學習之路 -- Java怎麼學?

Java學習之路 -- Java怎麼學?

@[toc] ## java基礎怎麼學? 當時,作為懵懂的小白,大一學習了`c`和`c++`,還有資料結構,後來才自學的`java`。有了`c++`的基礎,其實學`java`確實感覺挺容易上手。如果沒有`c`或者`c++`的基礎,建議開始需要先把`java`的基礎打好,基礎是指什麼?基礎的語法,能用!至於原始碼,不建議在剛剛開始學就看原始碼,絕對勸退!!! 推薦幾本可以入門的書籍: - [Head First Java](https://book.douban.com/subject/2000732/) - 簡單易懂,可以教你如何像一個物件開發者一樣去思考,圖文並茂學習方式能讓你快速地在腦海中掌握住知識 - [瘋狂Java講義](https://book.douban.com/subject/25959184/) - 很全面,很厚,覆蓋了Java的基本語法結構、Java的面向物件特徵、Java集合框架體系、Java泛型、異常處理、Java GUI程式設計、JDBC資料庫程式設計、Java註釋、Java的IO流體系、Java多執行緒程式設計、Java網路通訊程式設計和Java反射機制。 - [Java核心技術·卷 I(原書第10版)](https://book.douban.com/subject/26880667/) - 特別經典的書籍,內容比較實在,但是沒有瘋狂Java講義那麼接地氣,很簡潔,上手難度也不是很大。 進階書籍: - [Java 程式設計思想第四版](https://book.douban.com/subject/2130190/) - 聖經段位,絕對的好書,但是不適合剛剛入門的小白,如果你覺得想啃下來,也可以闡釋,裡面講得東西,很詳細,時常透露出:Java語言為什麼這樣設計,如果想進階,這絕對是本好書。 - [Java網路程式設計(中文版 第三版)(O'Reilly Java系列)](https://book.douban.com/subject/1438754/) - 這本書是我大學時一門選修課的課本,主要是講解Java裡面的網路應用,可以考慮看看,但是優先順序不是很高。 **看視訊還是看書?** 前期新手絕對會有的一個疑惑,看書還是看視訊?看書感覺很枯燥,堅持不下去,看視訊感覺很爽,但是看完好像不是很能記住。 個人覺得,前期看書會快點,但是確實很枯燥,可以在b站(小破站牛逼)上找一些全集的視訊來看,記得,邊看邊敲,基本記不住!!!建議,看完一節或者一章,憑藉記憶把程式碼敲出來,一開始肯定很慢,但是長期來看,幫助很大,基本可以記住並掌握。 如果視訊的話,推薦以下兩個: - [Java零基礎教程](https://www.bilibili.com/video/BV1Kb411W75N?from=search&seid=12627698240394885697) - 宋紅康老師的視訊,七百多集了,真的可以看很久,內容真的很全,講的也很細緻,不會很枯燥,老師挺有趣的,無利益相關,我在b站看過老師的Jvm視訊。 - [Java零基礎教程視訊(適合Java 0基礎,Java初學入門)](https://www.bilibili.com/video/BV1Rx411876f?from=search&seid=12627698240394885697) - 也是七八百集,挺詳細 總結:視訊不在於多,書籍也是,越想要全面,越不太可能,前期有一本書,一個視訊就可以了,抓大放小,要不,很容易就放棄,真的是從入門到放棄。 **多打,多練習,熟能生巧!程式碼量上去才能發生質變!** 在這個過程中,主要學習的東西(每一個都可以分得很細,下面只是大概,想到再補充): - 基本資料型別 - 常用關鍵字 - 介面 - 抽象類 - 集合 - 繼承(子類和父類) - 反射 - 序列化 - 動態代理 - 註解 - 鎖與多執行緒 - IO程式設計 - JDBC - Java網路程式設計 ## 學完基礎學什麼? 我當時學完Java的基礎之後,JDBC學了,知道怎麼連線資料庫了,就想著搞網站,我想大部分人也是,學了東西,就想做個東西出來!!這個很正常的心態,不斷地有反饋才能不斷往前~ 我當時搞作業搞了一段時間的前端以及jsp之類的,如果學習Java,可以把前端知識放在一個低一點優先順序的級別,前期基本理解和會用就可以,不要忘記自己真正的目標。 我的前端是在[w3School](https://www.w3school.com.cn/)學習的,你們也可以去學習,當時還在慕課網學習了視訊,不過這些都不重要,主要是會點html和css,js就可以。 學完前端的大致知識,可以考慮學Servlet和jsp,也有一部分人說其實不需要再學習這個東西,現在直接上框架,就可以。我想說的是,如果你的時間很緊急,確實可以這麼做。如果你的時間比較充裕,在大學,可以考慮一下把這一塊也學一下,因為以後你不會再回來學了,而所謂的框架,也是建立在這上面的。 有時候,走慢一點,是為了走得更遠。 推薦JavaWeb的書籍兩本: - [深入分析Java Web技術內幕(修訂版)](https://book.douban.com/subject/25953851/) - 這本書主要圍繞Java Web 相關技術從三方面全面、深入地進行了闡述。首先介紹前端知識,即在JavaWeb 開發中涉及的一些基本知識,包括Web 請求過程、HTTP、DNS 技術和CDN 技術。其次深入介紹了Java 技術,包括I/O 技術、中文編碼問題、Javac 編譯原理、class 檔案結構解析、ClassLoader 工作機制及JVM 的記憶體管理等。 - [Tomcat與Java Web開發技術詳解](https://book.douban.com/subject/1152116/) - 這本書主要是講解了JavaWeb和tomcat相關的知識點,算是為了之後學習JavaWeb做準備。 再推薦一個部落格地址,主要是JavaWeb的筆記,講得挺好的:[JavaWeb](https://www.cnblogs.com/xdp-gacl/category/574705.html) 學完這些可以學習框架了,框架裡面用得最多的是反射,動態代理!!!一定要熟悉。 當時我學習的框架不是主流的,是`Jfinal`,可能大家不怎麼聽過,那個框架比較簡單,但是現在不建議大家去學習,可以瞭解。 接下來大家需要學習的是SSM(Spring+SpringMVC+Mybatis),為啥學習Spring,不是SpringBoot,因為SpringBoot是建立在Spring的基礎上的,學了Spring,SpringBoot很快上手。 建議學習的話,可以先學Mybatis,前面有JDBC的基礎,可以很快上手。推薦自己的部落格:[Mybatis學習筆記](https://blog.csdn.net/Aphysia/article/details/109006229?spm=1001.2014.3001.5502) 如果學習視訊的話,我建議去b站搜尋一下,例如:[SSM框架合集](https://www.bilibili.com/video/BV1mE411X7yp?from=search&seid=2275609375584527505) 關於SSM的學習視訊很多,大家各自判斷自己適合什麼型別,有一本書籍:[Java EE網際網路輕量級框架整合開發 : SSM框架(Spring MVC+Spring+MyBatis)和Redis實現](https://book.douban.com/subject/27090950/),是對SSM的整合以及講解,還不錯,可以考慮一下。 在這個過程中,你也瞭解瞭如何處理日誌,異常等等。 Spring的學習中,主要掌握AOP和IOC的原理以及應用,學習的過程,首先是需要會用,然後再去挖原始碼,要是直接上來看原始碼,又是一次勸退。 學習完Spring之後,可以上手SpringBoot,這個網上也有很多教程,推薦這個網站: [how2j](https://how2j.cn/k/springboot/springboot-eclipse/1640.html) 自己上b站按照播放量查詢也是可以的,重要的是行動,不是資源!!! Spring有兩本本比較好的書籍推薦: - [Spring實戰(第4版)](https://book.douban.com/subject/26767354/):實戰的知識 - [Spring原始碼深度解析](https://book.douban.com/subject/25866350/):主要是深挖原始碼,其實也可以b站上找一些優質的課程 前面講解的有資料庫以及redis相關的,如果關係型資料庫,建議在網上搜索教程學習即可,譬如:[菜鳥教程](https://www.runoob.com/mysql/mysql-tutorial.html) 關於入門書籍:[Mysql必知必會](https://book.douban.com/subject/3354490/) 如果是深入書籍,推薦:[MySQL技術內幕 : InnoDB儲存引擎(第2版)](https://book.douban.com/subject/24708143/) redis的學習,基本的資料型別,操作,這些學習直接網上菜鳥教程也有:[redis教程](https://www.runoob.com/redis/strings-setnx.html) 如果需要學習如何使用?推薦這本書:[Redis 深度歷險:核心原理與應用實踐](https://book.douban.com/subject/30386804/) 瞭解了使用之後,再去做redis的原始碼分析?牛人可以直接下載redis的原始碼,第一版只有幾萬行程式碼,當然,需要c語言或者c++基礎。書籍:[Redis5設計與原始碼分析](https://book.douban.com/subject/34804798/) ## 幾個常用框架學完學什麼? 其實這個時候,你已經可以進去開發的階段了,後面的路需要自己摸索了。 ## MQ 也就是訊息佇列,挑一個比較常用的大型的進行學習就可以了,不要貪圖多,比如Kafka或者RabbitMQ,系統做非同步解耦合的時候經常遇到。 先學會如何使用,然後學習裡面的原理,架構。 ## JVM的知識跑不掉 JVM怎麼學? 肯定的推薦周志明老師的 [深入理解Java虛擬機器](https://book.douban.com/subject/34907497/),這本書推薦多看幾遍。 除此之外,b站宋紅康老師的視訊也強烈推薦:[JVM全套教程](https://www.bilibili.com/video/BV1PJ411n7xZ) 搞定這兩個之後,再找一些JDK11的新特定的書籍,來看看,基本問題不大了。 ## 微服務等等 前面學習的,肯定是單體的應用,也就是一臺伺服器,一個應用。當用戶量到達一定數量,需要做應用拆分,得學習的知識有:分庫分表,RPC框架,微服務,註冊中心,監控等等。 一開始推薦看兩本書,瞭解分散式的一些知識,知道架構大致的演變過程,為什麼要這樣做,以前怎麼樣,怎麼樣變化的。 - [大型網站技術架構 : 核心原理與案例分析](https://book.douban.com/subject/25723064/) - [大型網站系統與Java中介軟體開發實踐](https://book.douban.com/subject/25867042/) 前面兩本書看著挺爽的,拓展知識面,但是不回特別深入,算是一個概述以及全面瞭解。要想兩本書吃透,不可能的!!!一口怎麼吃成一個胖子呢?是吧。 然後再看看大型分散式的架構相關知識: [大型分散式網站架構設計與實踐 : 一線工作經驗總結,囊括大型分散式網站所需技術的全貌、架構設計的核](https://book.douban.com/subject/25972633/) 然後就是挨個知識點各個擊破(下面知識部分相關的例子): - RCP原理 - Netty - DUBBO - Zookeeper ## 其他 ### 資料結構和演算法 如果你是科班的,資料結構和演算法基本掌握,那下面這一部分僅供參考: - [演算法(第四版)](https://book.douban.com/subject/19952400/) - 俗稱紅書,最推薦的Java程式設計師學習的演算法書籍,入門很友好,視訊貌似b站也可以找到。 - [資料結構與演算法分析](https://book.douban.com/subject/26745780/) - 國外資料結構與演算法分析方面的經典教材,使用卓越的Java程式語言作為實現工具討論了資料結構(組織大量資料的方法)和演算法分析(對演算法執行時間的估計)。本書把演算法分析與有效率的Java程式的開發有機地結合起來,深入分析每種演算法,內容全面、縝密嚴格,並細緻講解精心構造程式的方法。 - [Java常用演算法手冊(第3版)](https://book.douban.com/subject/30605227/) - 比較簡單的演算法資料,挺有意思,難度不大,挺薄。 - [演算法導論](https://book.douban.com/subject/20432061/) - 絕對勸退書籍,謹慎!很多數學公式推導,以及虛擬碼,建議作為程式設計師道路上相伴的書籍