初學者福音!多是最適合你的Java學習路線和方法推薦。

我本身總結的Java學習的系統知識點以及面試問題,已經開源,目前已經 35k+ Star。會一直完善下去,歡迎建議和指導,同時也歡迎Star: https://github.com/Snailclimb...

前言

大一的時候,我僅僅接觸過 C 語言,對 C 語言的掌握程度僅僅是能夠完成老師佈置的課後習題。那時候個人主要的精力都放在了參加各類課外活動,跟着一個很不錯的社團嘗試了不少我以前從何嘗試過的事情:露營、戶外燒烤、公交車演講、環跑古城牆、徒步旅行、異地求生、聖誕節賣蘋果等等。前端

到了大二我才接觸到 HTML、CSS、JS、Java、Linux、PHP 這些名詞。最開始接觸 Java 的時候由於工做的須要我選擇的安卓方向,我本身是在學習了大概 3 個月的安卓方向的知識後才轉向 Java 後臺方向的。最開始本身學習的時候,走了一些彎路,可是整體路線相對來講仍是沒問題的。我讀的第一本 Java Web 方向的書籍是《Java Web 整合開發王者歸來》,這本書我如今已經不推薦別人看了,一是內容太冗雜,二是年代比較久遠致使不少東西在如今都不適用了。git

不少人在學完 Java 基礎以後,不知道後面該如何進行下一步地進行學習,或者不知道如何去學習。如何系統地學習 Java 一直是困擾着不少新手或者期待在 Java 方向進階的小夥伴的一個問題。我也在知乎上回答了好幾個相似的問題,我以爲既然不少人都須要這方面的指導,那我就寫一篇本身對於如何系統學習 Java 後端的見解。恰好關注公衆號的不少朋友都是學 Java 不過久的,但願這篇文章對學習 Java 的朋友能有一點啓示做用。github

因爲我我的能力有限,下面的學習路線以及方法推薦必定還有不少欠缺的地方。歡迎有想法的朋友在評論區說一下本身的見解。面試

學習路線以及方法推薦

下面的學習路線以及方法是筆主根據我的學習經歷總結改進後得出,我相信照着這條學習路線來你的學習效率會很是高。 學習某個知識點的過程當中若是不知道看什麼書的話,能夠看公衆號發的這篇文章 :Java 學習必備書籍推薦終極版!。建議使用 Intellij IDEA 進行編碼,能夠單獨抽時間學習 Intellij IDEA 的使用。算法

下面提到的一些視頻,公衆號「JavaGuide」後臺回覆關鍵「1」便可獲取!編程

step 1:Java 基礎

《Java 核心技術卷 1/2》《Head First Java》 這兩本書在我看來都是入門 Java 的很不錯的書籍 (《Java 核心技術卷 1/2》 知識點更全,我更推薦這本書),我卻是以爲《Java 編程思想》有點屬於新手勸退書的意思,慎看,建議有點基礎後再看。你也能夠邊看視頻邊看書學習(黑馬、尚硅谷、慕課網的視頻都還行)。對於 Java8 新特性的東西,我建議你基礎學號以後能夠看一下,暫時看不太明白也不要緊,後面抽時間再回過頭來看。後端

看完以後,你能夠用本身學的東西實現一個簡單的 Java 程序,也能夠嘗試用 Java 解決一些編程問題,以此來將本身學到的東西付諸於實踐。前端框架

記得多總結!打好基礎!把本身重要的東西都記錄下來。 API 文檔放在本身能夠看到的地方,以備本身能夠隨時查閱。爲了能讓本身寫出更優秀的代碼,《Effective Java》《重構》 這兩本書沒事也能夠看看。網絡

學習完以後能夠看一下關於 Java 基礎你不得不會的 34 個問題 ,檢測一下本身的掌握狀況,這 34 個問題都時 Java 中比較重要的知識點,最重要的是在 Java 後端面試中的出場率很是高。數據結構

step 2:多線程的簡單使用

多線程這部份內容可能會比較難以理解和上手,前期能夠先簡單地瞭解一下基礎,到了後面有精力和能力後再回來仔細看。推薦《Java 併發編程之美》 或者 《實戰 Java 高併發程序設計》 這兩本書。我目前也在重構一份我以前寫的多線程學習指南,後面會更新在公衆號裏面。

學習完多線程以後能夠經過下面這些問題檢測本身是否掌握,下面這些問題的答案以及常見多線程知識點的總結 在這裏:https://github.com/Snailclimb...

Java 多線程知識基礎:

  1. 什麼是線程和進程?
  2. 請簡要描述線程與進程的關係,區別及優缺點?
  3. 說說併發與並行的區別?
  4. 爲何要使用多線程呢?
  5. 使用多線程可能帶來什麼問題?
  6. 說說線程的生命週期和狀態?
  7. 什麼是上下文切換?
  8. 什麼是線程死鎖?如何避免死鎖?
  9. 說說 sleep() 方法和 wait() 方法區別和共同點?
  10. 爲何咱們調用 start() 方法時會執行 run() 方法,爲何咱們不能直接調用 run() 方法?

Java 多線程知識進階:

  1. synchronized 關鍵字:①說一說本身對於 synchronized 關鍵字的瞭解;②說說本身是怎麼使用 synchronized 關鍵字,在項目中用到了嗎;③講一下 synchronized 關鍵字的底層原理;④說說 JDK1.6 以後的 synchronized 關鍵字底層作了哪些優化,能夠詳細介紹一下這些優化嗎;⑤談談 synchronized 和 ReentrantLock 的區別。
  2. volatile 關鍵字: ①講一下 Java 內存模型;②說說 synchronized 關鍵字和 volatile 關鍵字的區別。
  3. ThreadLocal:①簡介;② 原理;③ 內存泄露問題。
  4. 線程池:①爲何要用線程池?;②實現 Runnable 接口和 Callable 接口的區別;③ 執行 execute() 方法和 submit() 方法的區別是什麼呢?;④ 如何建立線程池。
  5. Atomic 原子類: ①介紹一下 Atomic 原子類;② JUC 包中的原子類是哪 4 類?;③ 講講 AtomicInteger 的使用;④ 能不能給我簡單介紹一下 AtomicInteger 類的原理。
  6. AQS :①簡介;②原理;③ AQS 經常使用組件。

step 3(可選):操做系統與計算機網絡

操做系統這方面我以爲掌握操做系統的基礎知識和 Linux 的經常使用命令就行以及一些重要概念就好了。

我沒啥操做系統方面的書籍能夠推薦,我推薦一個 Github 上開源的哈工大《操做系統》課程給你們吧!地址:https://github.com/hoverwinte...

對於 Linux 咱們要掌握基本的使用就須要對一些經常使用命令很是熟悉好比:目錄切換命令、目錄操做命令、文件的操做命令、壓縮或者解壓文件的命令等等。

計算機網絡方面的學習,我以爲掌握基本的知識就好了,不須要太深究,通常面試對這方面要求也不高,畢竟不是專門作網絡的。推薦 《網絡是怎樣鏈接的》《圖解 HTTP》 這兩本書來看,這兩本書都屬於比較有趣易懂的類型,也適合沒有基礎的人來看。

step 4(可選):數據結構與算法

若是你想進入大廠的話,我推薦你在學習完 Java 基礎或者多線程以後,就開始天天抽出一點時間來學習算法和數據結構。爲了提升本身的編程能力,你也能夠堅持刷 Leetcode 。就目前國內外的大廠面試來講,刷 Leetcode 能夠說已經成了不起不走的一條路。

對於想要入門算法和數據結構的朋友,建議看這兩本書 《算法圖解》《大話數據結構》,這兩本書雖然算不上很經典的書籍,可是比較有趣,對於剛入門算法和數據結構的朋友很是友好。《算法導論》 很是經典,可是對於剛入門的就不那麼友好了。

另外,還有一本很是讚的算法書推薦給各位,這本書的名字就叫《算法》,書中的代碼都是用 Java 語言編寫。這本書的優勢太多太多好比它的講解基礎而全面、對閱讀者比較友好等等。我以爲這本書惟一的缺點就是太厚了 (小聲 BB,可能和做者講解某些知識點的時候優勢囉嗦有關)。除了這本書以外,《劍指 offer》《編程珠璣》《編程之美》 這三本書都被不少大佬推薦過了,對於算法面試很是有幫助。《算法之美》 這本書也很是不錯,很是適合閒暇的時候看。其餘算法資源,詳見算法學習資源推薦:https://github.com/Snailclimb...

《算法》

step 5:前端知識

這一步主要是學習前端基礎 (HTML、CSS、JavaScript),固然 BootStrap、VUE 等等前端框架你也能夠了解一下。網上有不少這方面資源,我只推薦一個大部分初學這些知識都會看的網站:http://www.w3school.com.cn/ ,這個網站用來回顧知識也很不錯 。推薦先把 HTML、CSS、JS 的基礎知識過一遍,而後經過一個實際的前端項目來鞏固。

step 5:MySQL

學習 MySQL 的基本使用,基本的增刪改查,SQL 命令,索引、存儲過程這些都學一下吧!推薦書籍 《SQL 基礎教程(第 2 版)》(入門級)、《高性能 MySQL : 第 3 版》 (進階)、《MySQL 必知必會》

MySQL 學習資源推薦以及重要知識點總結: https://github.com/Snailclimb...

step 6:Maven

建議學習經常使用框架以前能夠提早花半天時間學習一下Maven的使用。(處處找 Jar 包,下載 Jar 包是真的麻煩費事,使用 Maven 能夠爲你省不少事情)

step 7:經常使用框架

學習 Struts2(可不用學)、SpringSpringMVCHibernateMybatisshiro 等框架的使用, (可選) 熟悉 Spring 原理(大廠面試必備),而後頗有必要學習一下 SpringBoot。我也遇到不少公司對於應屆生直接上手SpringBoot,不過我仍是推薦你把 SpringSpringMVC 好好學一下。

Spring 真的很重要! 必定要搞懂 AOP 和 IOC 這兩個概念。Spring 中 bean 的做用域與生命週期、SpringMVC 工做原理詳解等等知識點都是很是重要的,必定要搞懂。

推薦看文檔+視頻結合的方式,中途配合實戰來學習。

step 8:高性能網站架構

學習 Dubbo、Zookeeper、常見的消息隊列(好比ActiveMq、RabbitMQ)、RedisElasticsearch 的使用(這些東西能夠經過黑馬視頻最後一個分佈式項目來學,邊看視頻,邊本身作,查閱網上博客,效果更好)。

必定要學會拓展知識,養成自主學習的意識。黑馬項目對這些知識點的介紹都比較走馬觀花。

step 9:其餘

能夠再回來看一下多線程方面的知識,還能夠利用業餘時間學習一下 NIONetty ,這樣簡歷上也能夠多點東西。若是想去大廠,JVM 的一些知識也是必學的(Java 內存區域、虛擬機垃圾算法、虛擬垃圾收集器、JVM 內存管理)推薦《深刻理解 Java 虛擬機:JVM 高級特性與最佳實踐(最新第二版》和《實戰Java虛擬機》,若是嫌看書麻煩的話,你也能夠看我整理的文檔:。

另外,如今微服務特別火,不少公司在面試也明確要求須要微服務方面的知識。若是有精力的話能夠去學一下SpringCloud生態系統以及其餘微服務經常使用框架。

總結

我上面主要歸納一下每一步要學習的內容,對學習規劃有一個建議。知道要學什麼以後,如何去學呢?我以爲學習每一個知識點能夠考慮這樣去入手:官網(大機率是英文,不推薦初學者看)書籍(知識更加系統徹底,推薦)視頻(比較容易理解,推薦,特別是初學的時候)網上博客(解決某一知識點的問題的時候能夠看看)

這裏給各位一個建議,看視頻的過程當中最好跟着一塊兒練,要作筆記!!! 最好能夠邊看視頻邊找一本書籍看,看視頻沒弄懂的知識點必定要儘快解決,如何解決?首先百度/Google,經過搜索引擎解決不了的話就找身邊的朋友或者認識的一些人。另外,必定要進行項目實戰!不少人這時候就會問沒有實際項目讓我作怎麼辦?我以爲能夠經過下面這幾種方式:

  1. 在網上找一個符合本身能力與找工做需求的實戰項目視頻或者博客跟着老師一塊兒作。作的過程當中,你要有本身的思考,不要淺嘗輒止,對於不少知識點,別人的講解可能只是知足項目就夠了,你本身想多點知識的話,對於重要的知識點就要本身學會去往深出學。
  2. Github 或者碼雲上面有不少實戰類別項目,你能夠選擇一個來研究,爲了讓本身對這個項目更加理解,在理解原有代碼的基礎上,你能夠對原有項目進行改進或者增長功能。
  3. 本身動手去作一個本身想完成的東西,遇到不會的東西就臨時去學,現學現賣。

作項目不光要作,還要改進,改善。另外,若是你的老師有相關 Java 後臺項目的話,你也能夠主動申請參與進來。

必定要學會分配本身時間,要學的東西不少,真的不少,搞清楚哪些東西是重點,哪些東西僅僅瞭解就夠了。必定不要把精力都花在了學各類框架上,算法和數據結構真的很重要!

學習的過程當中有一個能夠參考的文檔很重要,很是有助於本身的學習,我當初弄 JavaGuide: https://github.com/Snailclimb... 的很大一部分目的就是由於這個。JavaGuide 目前已經接近40K star,關閉了 128 個 issue 和 169 個 pr。客觀來講,相比於博客,JavaGuide 裏面的內容由於更多人的參與變得更加準確和完善。

公衆號

若是你們想要實時關注我更新的文章以及分享的乾貨的話,能夠關注個人公衆號。

《Java面試突擊》: 由本文檔衍生的專爲面試而生的《Java面試突擊》V2.0 PDF 版本公衆號後臺回覆 "Java面試突擊" 便可免費領取!

Java工程師必備學習資源: 一些Java工程師經常使用學習資源公衆號後臺回覆關鍵字 「1」 便可免費無套路獲取。

個人公衆號

相關文章
相關標籤/搜索