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

第十六封發表於2021-03-29

@

java基礎怎麼學?

當時,作為懵懂的小白,大一學習了cc++,還有資料結構,後來才自學的java。有了c++的基礎,其實學java確實感覺挺容易上手。如果沒有c或者c++的基礎,建議開始需要先把java的基礎打好,基礎是指什麼?基礎的語法,能用!至於原始碼,不建議在剛剛開始學就看原始碼,絕對勸退!!!

推薦幾本可以入門的書籍:

  • Head First Java
    • 簡單易懂,可以教你如何像一個物件開發者一樣去思考,圖文並茂學習方式能讓你快速地在腦海中掌握住知識
  • 瘋狂Java講義
    • 很全面,很厚,覆蓋了Java的基本語法結構、Java的物件導向特徵、Java集合框架體系、Java泛型、異常處理、Java GUI程式設計、JDBC資料庫程式設計、Java註釋、Java的IO流體系、Java多執行緒程式設計、Java網路通訊程式設計和Java反射機制。
  • Java核心技術·卷 I(原書第10版)
    • 特別經典的書籍,內容比較實在,但是沒有瘋狂Java講義那麼接地氣,很簡潔,上手難度也不是很大。

進階書籍:

  • Java 程式設計思想第四版
    • 聖經段位,絕對的好書,但是不適合剛剛入門的小白,如果你覺得想啃下來,也可以闡釋,裡面講得東西,很詳細,時常透露出:Java語言為什麼這樣設計,如果想進階,這絕對是本好書。
  • Java網路程式設計(中文版 第三版)(O'Reilly Java系列)
    • 這本書是我大學時一門選修課的課本,主要是講解Java裡面的網路應用,可以考慮看看,但是優先順序不是很高。

看視訊還是看書?
前期新手絕對會有的一個疑惑,看書還是看視訊?看書感覺很枯燥,堅持不下去,看視訊感覺很爽,但是看完好像不是很能記住。

個人覺得,前期看書會快點,但是確實很枯燥,可以在b站(小破站牛逼)上找一些全集的視訊來看,記得,邊看邊敲,基本記不住!!!建議,看完一節或者一章,憑藉記憶把程式碼敲出來,一開始肯定很慢,但是長期來看,幫助很大,基本可以記住並掌握。

如果視訊的話,推薦以下兩個:

總結:視訊不在於多,書籍也是,越想要全面,越不太可能,前期有一本書,一個視訊就可以了,抓大放小,要不,很容易就放棄,真的是從入門到放棄。

多打,多練習,熟能生巧!程式碼量上去才能發生質變!

在這個過程中,主要學習的東西(每一個都可以分得很細,下面只是大概,想到再補充):

  • 基本資料型別
  • 常用關鍵字
  • 介面
  • 抽象類
  • 集合
  • 繼承(子類和父類)
  • 反射
  • 序列化
  • 動態代理
  • 註解
  • 鎖與多執行緒
  • IO程式設計
  • JDBC
  • Java網路程式設計

學完基礎學什麼?

我當時學完Java的基礎之後,JDBC學了,知道怎麼連線資料庫了,就想著搞網站,我想大部分人也是,學了東西,就想做個東西出來!!這個很正常的心態,不斷地有反饋才能不斷往前~

我當時搞作業搞了一段時間的前端以及jsp之類的,如果學習Java,可以把前端知識放在一個低一點優先順序的級別,前期基本理解和會用就可以,不要忘記自己真正的目標。

我的前端是在w3School學習的,你們也可以去學習,當時還在慕課網學習了視訊,不過這些都不重要,主要是會點html和css,js就可以。

學完前端的大致知識,可以考慮學Servlet和jsp,也有一部分人說其實不需要再學習這個東西,現在直接上框架,就可以。我想說的是,如果你的時間很緊急,確實可以這麼做。如果你的時間比較充裕,在大學,可以考慮一下把這一塊也學一下,因為以後你不會再回來學了,而所謂的框架,也是建立在這上面的。

有時候,走慢一點,是為了走得更遠。
推薦JavaWeb的書籍兩本:

  • 深入分析Java Web技術內幕(修訂版)
    • 這本書主要圍繞Java Web 相關技術從三方面全面、深入地進行了闡述。首先介紹前端知識,即在JavaWeb 開發中涉及的一些基本知識,包括Web 請求過程、HTTP、DNS 技術和CDN 技術。其次深入介紹了Java 技術,包括I/O 技術、中文編碼問題、Javac 編譯原理、class 檔案結構解析、ClassLoader 工作機制及JVM 的記憶體管理等。
  • Tomcat與Java Web開發技術詳解
    • 這本書主要是講解了JavaWeb和tomcat相關的知識點,算是為了之後學習JavaWeb做準備。

再推薦一個部落格地址,主要是JavaWeb的筆記,講得挺好的:JavaWeb

學完這些可以學習框架了,框架裡面用得最多的是反射,動態代理!!!一定要熟悉。

當時我學習的框架不是主流的,是Jfinal,可能大家不怎麼聽過,那個框架比較簡單,但是現在不建議大家去學習,可以瞭解。

接下來大家需要學習的是SSM(Spring+SpringMVC+Mybatis),為啥學習Spring,不是SpringBoot,因為SpringBoot是建立在Spring的基礎上的,學了Spring,SpringBoot很快上手。

建議學習的話,可以先學Mybatis,前面有JDBC的基礎,可以很快上手。推薦自己的部落格:Mybatis學習筆記

如果學習視訊的話,我建議去b站搜尋一下,例如:SSM框架合集

關於SSM的學習視訊很多,大家各自判斷自己適合什麼型別,有一本書籍:Java EE網際網路輕量級框架整合開發 : SSM框架(Spring MVC+Spring+MyBatis)和Redis實現,是對SSM的整合以及講解,還不錯,可以考慮一下。

在這個過程中,你也瞭解瞭如何處理日誌,異常等等。

Spring的學習中,主要掌握AOP和IOC的原理以及應用,學習的過程,首先是需要會用,然後再去挖原始碼,要是直接上來看原始碼,又是一次勸退。

學習完Spring之後,可以上手SpringBoot,這個網上也有很多教程,推薦這個網站:
how2j
自己上b站按照播放量查詢也是可以的,重要的是行動,不是資源!!!

Spring有兩本本比較好的書籍推薦:

前面講解的有資料庫以及redis相關的,如果關係型資料庫,建議在網上搜尋教程學習即可,譬如:菜鳥教程

關於入門書籍:Mysql必知必會

如果是深入書籍,推薦:MySQL技術內幕 : InnoDB儲存引擎(第2版)

redis的學習,基本的資料型別,操作,這些學習直接網上菜鳥教程也有:redis教程

如果需要學習如何使用?推薦這本書:Redis 深度歷險:核心原理與應用實踐

瞭解了使用之後,再去做redis的原始碼分析?牛人可以直接下載redis的原始碼,第一版只有幾萬行程式碼,當然,需要c語言或者c++基礎。書籍:Redis5設計與原始碼分析

幾個常用框架學完學什麼?

其實這個時候,你已經可以進去開發的階段了,後面的路需要自己摸索了。

MQ

也就是訊息佇列,挑一個比較常用的大型的進行學習就可以了,不要貪圖多,比如Kafka或者RabbitMQ,系統做非同步解耦合的時候經常遇到。

先學會如何使用,然後學習裡面的原理,架構。

JVM的知識跑不掉

JVM怎麼學?
肯定的推薦周志明老師的 深入理解Java虛擬機器,這本書推薦多看幾遍。

除此之外,b站宋紅康老師的視訊也強烈推薦:JVM全套教程

搞定這兩個之後,再找一些JDK11的新特定的書籍,來看看,基本問題不大了。

微服務等等

前面學習的,肯定是單體的應用,也就是一臺伺服器,一個應用。當使用者量到達一定數量,需要做應用拆分,得學習的知識有:分庫分表,RPC框架,微服務,註冊中心,監控等等。

一開始推薦看兩本書,瞭解分散式的一些知識,知道架構大致的演變過程,為什麼要這樣做,以前怎麼樣,怎麼樣變化的。

前面兩本書看著挺爽的,擴充知識面,但是不回特別深入,算是一個概述以及全面瞭解。要想兩本書吃透,不可能的!!!一口怎麼吃成一個胖子呢?是吧。

然後再看看大型分散式的架構相關知識:
大型分散式網站架構設計與實踐 : 一線工作經驗總結,囊括大型分散式網站所需技術的全貌、架構設計的核

然後就是挨個知識點各個擊破(下面知識部分相關的例子):

  • RCP原理
  • Netty
  • DUBBO
  • Zookeeper

其他

資料結構和演算法

如果你是科班的,資料結構和演算法基本掌握,那下面這一部分僅供參考:

  • 演算法(第四版)
    • 俗稱紅書,最推薦的Java程式設計師學習的演算法書籍,入門很友好,視訊貌似b站也可以找到。
  • 資料結構與演算法分析
    • 國外資料結構與演算法分析方面的經典教材,使用卓越的Java程式語言作為實現工具討論了資料結構(組織大量資料的方法)和演算法分析(對演算法執行時間的估計)。本書把演算法分析與有效率的Java程式的開發有機地結合起來,深入分析每種演算法,內容全面、縝密嚴格,並細緻講解精心構造程式的方法。
  • Java常用演算法手冊(第3版)
    • 比較簡單的演算法資料,挺有意思,難度不大,挺薄。
  • 演算法導論
    • 絕對勸退書籍,謹慎!很多數學公式推導,以及虛擬碼,建議作為程式設計師道路上相伴的書籍???(反正我是沒有看完,太變態了)

如果刷題的話,推薦先刷劍指Offer,然後LeetCode每日/每週(時間自己定)一題,推薦一下自己的刷題筆記倉庫:codeSolution

【作者簡介】
秦懷,公眾號【秦懷雜貨店】作者,本人就職於國內某知名線上旅遊公司,技術之路不在一時,山高水長,縱使緩慢,馳而不息。個人寫作方向:Java原始碼解析,JDBC,Mybatis,Spring,redis,分散式,劍指Offer,LeetCode等,認真寫好每一篇文章,不喜歡標題黨,不喜歡花裡胡哨,大多寫系列文章,不能保證我寫的都完全正確,但是我保證所寫的均經過實踐或者查詢資料。遺漏或者錯誤之處,還望指正。

平日時間寶貴,只能使用晚上以及週末時間學習寫作,關注我,我們一起成長吧~

2020年我寫了什麼?

開源程式設計筆記

相關文章