Java學習計划


1、做計划,並同時寫博客

在四個月的時間里,我首先按照Java后端路線圖(兩個圖結合着參考學習)安排好復習計划,每個知識點都安排一段時間。比如我可能花一天時間復習“Java反射”,兩天時間復習“設計模式”,一周的時間用於復習"JVM虛擬機”。我一般會在月初做好整個月的計划,然后根據進度做一些微調。

2、“寫博客整合知識點”

3、做項目,也刷算法

跟着牛客網的項目課做了,這兩個項目都使用SpringBoot快速開發,並且用到一些常用的后端技術比如redis,雲存儲,以及一些常見Web框架,除此之外還涉及到了solr,爬蟲等技術。雖然項目不算很難,但是我在這段時間里很快地熟悉了完整項目開發的流程,並且每天做迭代,通過Git來跟進版本,每個版本都會寫清所做的內容,這也讓我對項目的架構非常熟悉。
在項目之余,我也找一些常用的后端組件來跑一跑demo,以便讓我對這些技術有一個直觀的了解,比如面試常問的dubbo,zookeeper,消息隊列等組件。這些嘗試也讓我在理解它們的原理時更加得心應手了。)

4、“堅持刷題,注重方法”

首先我重新刷了一遍劍指offer,並且對每道題目進行總結,盡量保證每一道題都可以記在腦子里,眾所周知劍指offer中的題是面試時非常喜歡考的,所以先搞定這部分題目是最為關鍵的。
搞定劍指offer之后,當然還要刷LeetCode了,LeetCode題目這么多,怎么選擇呢,我沒有按照tag刷,也沒有按照順序刷,而是參考當時一個大佬的LeetCode刷題指南來進行刷題的,他把每個類型的題目都做了歸納,每部分只放一些比較經典的題目。所以我前后大概刷了100多道LeetCode的題目,並且在第二遍刷題復習的時候,我也對這些題目做了一份總結。

除了上面兩個經典題庫,我還着重刷了大廠的歷年真題,這部分我主要是通過牛客網的歷年真題題庫來完成刷題的。說實話,真題是非常重要的,因為公司出的題目不像平時的那些算法題,可能會出得非常奇葩,所以你如果不提前適應的話會比較吃虧。完成這部分題目之后,我對算法題的復習也基本告一段落了。

算法第四版:入門書籍,非常好。

算法主要靠刷題, 劍指offer應對面試手撕代碼,刷幾遍不重要,重要是理解,熟練。
leetcode刷題。leetcode刷題順序看自己,可以按照tag刷,可以刷leetcode前兩頁,或者前150題。一天兩道題,早日成為大佬。我是按照一個大佬的順序刷的 。 https://github.com/CyC2018/CS-Notes
慕課網也有一些算法視頻,可以看下。---玩轉算法視頻leetcode分門別類詳細解析

 (1)、Java基礎

     Java 是一門純粹的面向對象的編程語言,所以除了基礎語法之外, 必須弄懂它的oop特性:封裝、繼承、多態。此外還有泛型、反射的特性,很多框架的技術都依賴它,比如Spring核心的Ioc和AOP,都用到反射,而且Java自身的動態代理也是利用反射實現。此外還有Java一些標准庫也是非常常見,比如集合、I/O、並發,幾乎在WEB並發中無處不在,也是面試經常被問到的,所以在自學 Java 后端之前,不妨先打好這些基礎,另外還有 Java8 的一些新特性,也要重點關注,比如 Lambda 表達式、集合的 Stream 流操作、全新的 Date API 等等。

     java基礎+java集合+java並發多線程+java I/O+jvm

     推薦書籍:瘋狂java講義+java並發編程的藝術+深入理解java虛擬機

    另外我發現看書的效率很低,所以我一般結合視頻來復習,比如 java並發編程的藝術,這本書作為多線程復習還是不錯的,B站有馬士兵多線程的視頻深入理解java虛擬機這本書,其實沒有必要全部看完,應對面試看第二章(java內存區域介紹),第三章(垃圾收集算法和回收策略)第七章(類加載機制) 第12,13章(java內存模型與線程+線程安全與鎖優化,這部分可以和多線程結合看一下)。

     「Java 編程思想」這本書是Java界的聖經,但是才開始不推薦學習,我在這里推薦你們一開始先看「Java 核心技術」,這本書講得比較通俗易懂,初學者比較能接受。關於視頻推薦,推薦畢向東老師講的Java基礎教程。

(2)、數據庫

    關於 sql 方面:MySQL 教程(http://www.runoob.com/mysql/mysql-tutorial.html)

         了解一些基礎語法之后,就直接跟着視頻的老師做一些表操作實戰練習,比如單表查詢、多表查詢等。需多加練習,不要只看懂了就行,因為工作中寫得一手簡練的 sql 是非常重要的。在項目一直秉承着 sql 語句是能避免多表查詢就避免多表查詢,能夠分開多條語句就分開多條語句,因為這里涉及到多表查詢性能和數據庫擴展的問題。       

         mysql必知必會:入門書,可以快速瀏覽一遍

 

        高性能mysql:這本書比較厚,可以當做查閱書,邊學習邊看。

 

  關於 JDBC 方面:JDBC 教程(https://www.yiibai.com/jdbc/)、 JDBC 獲取連接對象源碼分析(http://objcoding.com/2017/07/03/JDBC/)

 

        需要弄懂 JDBC API 的用法,其實它只是一組規范接口,所有數據庫驅動只要實現了 JDBC,那么就可以通過標准的 API 調用相應的驅動,完全不用知道驅動是怎么實現的,這就是面向接口編程的好處。而且對於 JDBC 可以直接看視頻去理解的,跟着視頻做了一個基於 Apache Dbutils 工具做了一個具有事務性的小工具,我特意用思維導圖總結了一下:

jdbc-utils源碼地址:jdbc-utils(https://github.com/objcoding/jdbc-utils)

(3)、Web基礎

        曾經開源中國創始人紅薯寫了一篇文章「初學 Java Web 開發,請遠離各種框架,從 Servlet 開發」,我覺得他說的太對了,在如今 Java 開發中,很多開發者只知道怎么使用框架,但根本不懂 Web 的一些知識點,其實框架很多,但都基本是一個套路,所以在你學習任何框架前,請把 Web 基礎打好,把 Web 基礎打好了,看框架真的是如魚得水。

      關於 Http 協議,這篇文章就寫得很清楚:Http協議(https://www.cnblogs.com/ranyonsue/p/5984001.html)

      關於 Web 基礎這方面數據推薦,我當時是看的是「Tomcat 與 Java Web 開發技術詳解」,很詳細地講解了整個 Java Web 開發的技術知識點,但現在看來,我覺得里面講的有一些技術確實有點老舊了,不過可以了解一下 Java Web 開發的歷史也是不錯的。所以在 Web 基礎這方面我都是看某客的崔老師講的「超全面 Java Web 視頻教程」,講得很詳細很生動,還有實戰項目!

     關於 JSP,你只要了解它其實就是一個 Servlet 就行了,關於它的一些標簽用法,我認為可以直接忽略,因為現在互聯網幾乎沒哪間公司還用 JSP,除了一些老舊的項目。現在都是流行前后端分離,單頁應用,后端只做 API 接口的時代了,所以時間寶貴,把這些時間重點放在 Servlet 規范上面吧。

     關於 Tomcat,它是一個 Web 容器,我們寫的后端項目都要部署到Web容器才能運行,它其實是一個遵循 Http,通過 Socket 通信與客戶端進行交互的服務端程序:Tomcat結構及處理請求過程(http://objcoding.com/2017/06/12/Tomcat-structure-and-processing-request-process/)

(4)、Web 主流框架

    Java Web 框架多如牛毛,等你有一定經驗了,你也可以寫一個 Web 框架,網上很多說 Spring、Struts2、Hibernate 是 Java 三架馬車,我只想說,那是很久遠的事情了,我嚴重不推薦 Struts2、Hibernate,相信我,一開始只需要上手 Spring、SpringMVC、Mybatis 就可以了,特別是 Spring 框架,其實 Spring 家族的框架都是很不錯的。

   但是提醒一點就是,千萬不要沉迷於各種框架不能自拔,以會多種用法而沾沾自喜,導致知其然而不知其所以然。

  Spring其核心思想就是 IOC 和 AOP:

    談談對 Spring IOC 的理解(https://blog.csdn.net/qq_22654611/article/details/52606960/)

    Spring 面向切面編程(http://objcoding.com/2017/08/25/Spring-AOP/)

 SpringMVC 它的思想是全部請求統一用一個 Servlet 去做請求轉發與控制,這個 Servlet 叫 DispatcherServlet:

    SpringMVC 初始化過程(http://objcoding.com/2017/06/14/SpringMVC-initialization-process/)

   SpringMVC 處理請求過程(http://objcoding.com/2017/06/15/SpringMVC-processing-request-process/)

Mybatis 它可實現動態拼裝 sql,避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集:

   mybatis 入門教程(http://www.mybatis.org/mybatis-3/zh/index.html)

   Mybatis 深入淺出系列(http://www.cnblogs.com/dongying/tag/Mybatis%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BA%E7%B3%BB%E5%88%97/)

(5)、Web 框架進階

   

使用了 SSM 框架后,你會覺得框架也不過這么回事,如果你對 Spring 有過大概了解,你也會產生想寫一個「山寨版」Spring 的心思了,一個輕量級 Web 框架主要具備以下功能:

  1. 可讀取用戶自定義配置文件,並以此來初始化框架;
  2. 具備 Bean 容器,管理項目的類的對象生命周期;
  3. 具備依賴注入,降低類之間的耦合性;
  4. 具備 AOP 功能,使項目可進行橫向編程,可不改變原有代碼的情況增加業務邏輯;
  5. 具備 MVC 框架模式。

其實除了 SSM 之外,Web 框架可謂是百家齊放,其中以 Spring 全家桶最為耀眼,在這里我極力推薦兩個 Spring 家族框架:SpringBoot 和 SpringCloud。

SpringBoot 彌補了 Spring 配置上的缺點,再也不用為繁雜的 xml 費勁精力了,堪稱是 Java 后端開發的顛覆者,推薦書籍「Java EE 開發的顛覆者:SpringBoot實戰」

SpringBoot 構建 web 項目(http://objcoding.com/2017/05/03/SpringBoot/)

SpringBoot 自動化配置源碼分析(http://objcoding.com/2018/01/30/The-principle-of-Spring-Boot-automation-configuration/)

自定義 SpringBoot Starter(http://objcoding.com/2018/02/02/Costom-SpringBoot-Starter/)

spring-boot-starter-tutorial(https://github.com/objcoding/spring-boot-starter-tutorial)

SpringCloud 是一個微服務架構,能夠將項目按照業務分成一個個微服務,每個微服務都可獨立部署,服務之間互相協調。當一個項目越來越大時,隨之而來的是越來越難以維護,此時將項目拆分成若干個微服務、單獨維護、單獨部署,也可以降低項目不同業務間的耦合度。推薦書籍「Spring Cloud 與 Docker 微服務架構實戰」,這本書將 Docker 與微服務完美地結合在一起,堪稱完美!

Spring Cloud 中文官網(https://springcloud.cc/)

史上最簡單的 Spring Cloud 教程(https://blog.csdn.net/forezp/column/info/15197)

我寫的有關於 Spring Cloud 的博客:

SpringCloud微服務架構之服務注冊與發現(http://objcoding.com/2017/05/07/SpringCloud(1)/)

SpringCloud微服務架構之服務消費者(http://objcoding.com/2017/05/10/SpringCloud(2)/)

SpringCloud微服務架構之斷路器(http://objcoding.com/2017/05/15/SpringCloud(3)/)

SpringCloud微服務架構之服務網關(http://objcoding.com/2017/05/20/SpringCloud(4)/)

(6)、其他技術

Redis:一個高性能的 key-value 數據庫,當有並發量很高的請求時,將數據緩存在 Redis 中,將提高服務器的響應性能,大大減輕數據庫的壓力。

redis 中文官網(http://www.redis.cn/)

redis 教程(http://www.runoob.com/redis/redis-tutorial.html)

Redis設計與實現:這本書基本是Redis講的最好的,可以結合B站視頻學習。

Git:世界上最先進的分布式版本控制系統,建議所有初學者從命令行開始使用 Git!

Git 官網(https://git-scm.com/)

最全 Git 教程(https://git-scm.com/book/zh/v2)

Git 的一些常用命令(http://objcoding.com/2017/08/12/Git/)

Maven:一個用於構建項目的工具,將項目間的依賴通過 xml 完美地組織到一起,可通過編譯插件將項目編譯成字節碼文件。還有類似的 Gradle 也是不錯的選擇。

maven 的 pom.xml 文件詳解(http://www.cnblogs.com/hafiz/p/5360195.html)

Linux:至少要求常用的命令會用,能夠在 linux 環境下部署項目。

Linux 命令大全(http://man.linuxde.net/)

最全的 SSH 連接遠程終端教程(http://objcoding.com/2017/10/31/The-most-complete-SSH-connection-remote-terminal-tutorial/)

鳥哥的linux私房菜:了解常用命令。

Docker:簡直是項目部署神器啊,來不及解釋了,看我 Docker 系列博客,開啟 Docker 之旅吧!推薦書籍「Docker 技術入門與實戰」,中國首部 Docker 著作!

Docker 實戰(一)(http://objcoding.com/2017/12/01/Docker(1)/)

Docker 實戰(二)(http://objcoding.com/2017/12/07/Docker(2)/)

Docker 實戰(三)(http://objcoding.com/2018/02/06/Docker(3)/)

docker-deploy-tutoria(https://github.com/objcoding/docker-deploy-tutorial)

(7)、開發工具    

工欲善其事,必先利其器,以下是我推薦的一些開發工具:

Intellij IDEA:Java 開發最好的 IDE,這個是公認的,我一開始是用 Eclipse 的,后來用了 Intellij IDEA,才發現 Eclipse 就是一坨屎,所以我以過來人勸你們不要使用 Eclipse,直接 Intellij IDEA!

IntelliJ IDEA 使用教程(http://www.phperz.com/special/83.html)

Iterm2:macOS 最好用的終端!

Iterm2 使用指南(https://wdxtub.com/2016/03/20/iterm2-guide/)

Chrome:人生苦短,請用 Chrome,來不及解釋了,快上車!

Postman:很好用的一個接口調試工具。

Postman 官網(https://www.getpostman.com/)

(8)、設計模式、

     一直覺得設計模式可以和Java基礎一塊學,所以把它放在這里。當然,一些真正使用到設計模式的地方,譬如JDK的集合類,IO流等等,也需要足夠重視。

    HeadFirst 設計模式:重點了解單例模式,工廠模式,觀察者模式,等等,可以看看B站視頻

(9)、Jvm基礎與調優

     JVM是提供Java程序運行的一個進程,學習JVM知識,也是我們的必經之路。除了看懂《深入理解jvm虛擬機》以外,我們還要學習的內容就是JVM調優,使用合適的工具診斷問題,最后解決問題。

這部分內容在面試中呈現的不僅僅是GC,內存分區,以及類加載器,也包括了我所說的JVM調優問題。
(10)、數據相關     

      關系數據庫Mysql
          這個不必多說,人手都要會,不管是基礎的crud,索引,抑或是進階的存儲引擎,分布式方案等,我們都需要對應掌握。

      緩存
          如Redis,memcache一類的緩存,作為后端開發者的我們也需要對應掌握,當然,它們的高級特性,以及分布式方案,也是必備的知識點。

     搜索引擎
          基於Lucene的solr,elasticsearch這類搜索引擎,本質上也是數據源,但是並不是后端必備的內容,不過學一學也沒有壞處啦。

    大數據
          海量數據處理的場景越來越多,大數據技術如hadoop,storm等也越來越火,但是大數據應用一般會由專業的大數據工程師來做,所以我們學一些基本內容也就足夠了。
(11)、算法和數據結構  

      算法一直是校招同學面前的一座大山,作為后端同學來講,除了基本的數據結構算法以外,也要會一些高級的算法,譬如dp,搜索,貪心等等。

     另外,通過LeetCode等題庫來刷題的方式來鞏固算法也是公認的好辦法了。

(12)、分布式      

        最后一個部分,也是內容最多,覆蓋面最廣泛的部分了。分布式相關的技術實在太多了,我們這里也會做一下簡單的歸納。

        web架構
           先了解web架構的發展會對分布式的學習有更好的理解,畢竟架構的發展也對應着分布式技術的發展。

       分布式理論
           這部分內容包括分布式的發展演化,base理論和cap理論等等,學習分布式技術之前,最好能對這部分概念有一定了解。

      一致性問題
           強一致性的解決方案:事務和鎖,弱一致性的方案:消息隊列。

     分布式session
          一個常見的問題,也有多種解決方案

      分布式緩存
          和上面說的緩存一樣,只不過這里側重緩存的分布式方案

     分布式數據庫
           這里指的數據庫的分布式方案,也包括hbase這種分布式數據庫。

     負載均衡
          負載均衡也是一個值得探討的話題,一般我們討論的是七層和四層負載均衡。

    消息隊列
        消息隊列是一個比較復雜的分布式組件,我們可以了解常用消息隊列比如amq,kafka等的實現。

    服務化
         服務化的核心包括rpc,服務注冊中心等等。分布式服務相關技術也是后端同學必須掌握的內容。

    虛擬化
         虛擬化同樣不是后端同學必須掌握的內容,只不過現在越來越多的服務部署方式使用的是docker和雲服務的方式。所以了解一下也沒有什么不好的。

(13)、計算機網絡    

    計算機網絡自頂向下方法。這本書先講應用層和傳輸層,非常好,我們也一般只需要重點掌握這兩層。前四章可以看下。
    TCP/IP協議卷一:tcp/ip是常考的,可以看下。
(14)、操作系統
   現代操作系統:推薦閱讀線程與進程,死鎖,存儲管理章節。再結合面經看看。
(15)、項目
    自己准備一個好的熟悉的項目。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM