Java工程師 基礎(chǔ)+實(shí)戰(zhàn) 完整路線圖(詳解版)
經(jīng)常有朋友私信我某個(gè)資料全不全? ?這里我還是給過(guò)我路線圖吧? ?不一定需要一個(gè)資料全? 你就開(kāi)始學(xué)? ?集百家所長(zhǎng)? ?來(lái)進(jìn)行學(xué)習(xí)!如果這個(gè)資料缺少某一部分? 你就學(xué)其他的? ?學(xué)完了以后 再去看其他的課程? 你沒(méi)學(xué)的部分就好? 不用拘泥于資料?
Java 基礎(chǔ)
Java 是一門(mén)純粹的面向?qū)ο蟮木幊陶Z(yǔ)言,所以除了基礎(chǔ)語(yǔ)法之外,必須得弄懂它的 oop 特性:封裝、繼承、多態(tài)。此外還有泛型、反射的特性,很多框架的技術(shù)都依賴它,比如 Spring 核心的 Ioc 和 AOP,都用到了反射,而且 Java 自身的動(dòng)態(tài)代理也是利用反射實(shí)現(xiàn)的。此外還有 Java 一些標(biāo)準(zhǔn)庫(kù)也是非常常見(jiàn),比如集合、I/O、并發(fā),幾乎在 Web 開(kāi)發(fā)中無(wú)處不在,也是面試經(jīng)常會(huì)被問(wèn)到的,所以在自學(xué) Java 后端之前,不妨先打好這些基礎(chǔ),另外還有 Java8 的一些新特性,也要重點(diǎn)關(guān)注,比如 Lambda 表達(dá)式、集合的 Stream 流操作、全新的 Date API 等等,關(guān)于新特性,我也寫(xiě)了幾篇關(guān)于這方面的博客,請(qǐng)自行找吧,就不貼出來(lái)了。
數(shù)據(jù)庫(kù)
關(guān)于 sql 方面:SQL 教程、MySQL 教程
我是了解了一些基礎(chǔ)語(yǔ)法之后,就直接跟著視頻的老師做一些表操作實(shí)戰(zhàn)練習(xí)了,比如單表查詢、多表查詢等。我建議學(xué) sql 切勿眼高手低,需多加練習(xí),不要只看懂了就行,因?yàn)楣ぷ髦袑?xiě)得一手簡(jiǎn)練的 sql 是非常重要的。在這里我說(shuō)下我在項(xiàng)目一直秉承著 sql 語(yǔ)句是能避免多表查詢就避免多表查詢,能夠分開(kāi)多條語(yǔ)句就分開(kāi)多條語(yǔ)句,因?yàn)檫@里涉及到多表查詢性能和數(shù)據(jù)庫(kù)擴(kuò)展的問(wèn)題。
關(guān)于 JDBC 方面:JDBC 教程、?JDBC 獲取連接對(duì)象源碼分析
你需要弄懂 JDBC API 的用法,其實(shí)它只是一組規(guī)范接口,所有數(shù)據(jù)庫(kù)驅(qū)動(dòng)只要實(shí)現(xiàn)了 JDBC,那么我們就可以通過(guò)標(biāo)準(zhǔn)的 API 調(diào)用相應(yīng)的驅(qū)動(dòng),完全不用知道驅(qū)動(dòng)是怎么實(shí)現(xiàn)的,這就是面向接口編程的好處。而且對(duì)于 JDBC 我是直接看視頻去理解的,跟著視頻做了一個(gè)基于 Apache Dbutils 工具做了一個(gè)具有事務(wù)性的小工具,我特意用思維導(dǎo)圖總結(jié)了一下:

Web 基礎(chǔ)
曾經(jīng)開(kāi)源中國(guó)創(chuàng)始人紅薯寫(xiě)了一篇文章「初學(xué) Java Web 開(kāi)發(fā),請(qǐng)遠(yuǎn)離各種框架,從 Servlet 開(kāi)發(fā)」,我覺(jué)得他說(shuō)的太對(duì)了,在如今 Java 開(kāi)發(fā)中,很多開(kāi)發(fā)者只知道怎么使用框架,但根本不懂 Web 的一些知識(shí)點(diǎn),其實(shí)框架很多,但都基本是一個(gè)套路,所以在你學(xué)習(xí)任何框架前,請(qǐng)把 Web 基礎(chǔ)打好,把 Web 基礎(chǔ)打好了,看框架真的是如魚(yú)得水。
關(guān)于 Web 基礎(chǔ)這方面數(shù)據(jù)推薦,我當(dāng)時(shí)是看的是「Tomcat 與 Java Web 開(kāi)發(fā)技術(shù)詳解」,很詳細(xì)地講解了整個(gè) Java Web 開(kāi)發(fā)的技術(shù)知識(shí)點(diǎn),但現(xiàn)在看來(lái),我覺(jué)得里面講的有一些技術(shù)確實(shí)有點(diǎn)老舊了,不過(guò)可以了解一下 Java Web 開(kāi)發(fā)的歷史也是不錯(cuò)的。所以在 Web 基礎(chǔ)這方面我都是看某客的崔老師講的「超全面 Java Web 視頻教程」,講得很詳細(xì)很生動(dòng),還有實(shí)戰(zhàn)項(xiàng)目!
關(guān)于 JSP,你只要了解它其實(shí)就是一個(gè) Servlet 就行了,關(guān)于它的一些標(biāo)簽用法,我認(rèn)為可以直接忽略,因?yàn)楝F(xiàn)在互聯(lián)網(wǎng)幾乎沒(méi)哪間公司還用 JSP,除了一些老舊的項(xiàng)目。現(xiàn)在都是流行前后端分離,單頁(yè)應(yīng)用,后端只做 API 接口的時(shí)代了,所以時(shí)間寶貴,把這些時(shí)間重點(diǎn)放在 Servlet 規(guī)范上面吧。
Web 主流框架
Java Web 框架多如牛毛,等你有一定經(jīng)驗(yàn)了,你也可以寫(xiě)一個(gè) Web 框架,網(wǎng)上很多說(shuō) Spring、Struts2、Hibernate 是 Java 三架馬車(chē),我只想說(shuō),那是很久遠(yuǎn)的事情了,我嚴(yán)重不推薦 Struts2、Hibernate,相信我,一開(kāi)始只需要上手 Spring、SpringMVC、Mybatis 就可以了,特別是 Spring 框架,其實(shí) Spring 家族的框架都是很不錯(cuò)的。
但是提醒一點(diǎn)就是,千萬(wàn)不要沉迷于各種框架不能自拔,以會(huì)多種用法而沾沾自喜,導(dǎo)致知其然而不知其所以然。
Spring其核心思想就是 IOC 和 AOP:
談?wù)剬?duì) Spring IOC 的理解
Spring 面向切面編程
SpringMVC 它的思想是全部請(qǐng)求統(tǒng)一用一個(gè) Servlet 去做請(qǐng)求轉(zhuǎn)發(fā)與控制,這個(gè) Servlet 叫 DispatcherServlet:
SpringMVC 初始化過(guò)程
SpringMVC 處理請(qǐng)求過(guò)程
Mybatis 它可實(shí)現(xiàn)動(dòng)態(tài)拼裝 sql,避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集:
mybatis 入門(mén)教程
Mybatis 深入淺出系列
Web 框架進(jìn)階
使用了 SSM 框架后,你會(huì)覺(jué)得框架也不過(guò)這么回事,如果你對(duì) Spring 有過(guò)大概了解,你也會(huì)產(chǎn)生想寫(xiě)一個(gè)「山寨版」Spring 的心思了,一個(gè)輕量級(jí) Web 框架主要具備以下功能:
可讀取用戶自定義配置文件,并以此來(lái)初始化框架;
具備 Bean 容器,管理項(xiàng)目的類(lèi)的對(duì)象生命周期;
具備依賴注入,降低類(lèi)之間的耦合性;
具備 AOP 功能,使項(xiàng)目可進(jìn)行橫向編程,可不改變?cè)写a的情況增加業(yè)務(wù)邏輯;
具備 MVC 框架模式。
其實(shí)除了 SSM 之外,Web 框架可謂是百家齊放,其中以 Spring 全家桶最為耀眼,在這里我極力推薦兩個(gè) Spring 家族框架:SpringBoot 和 SpringCloud。
SpringBoot 彌補(bǔ)了 Spring 配置上的缺點(diǎn),再也不用為繁雜的 xml 費(fèi)勁精力了,堪稱是 Java 后端開(kāi)發(fā)的顛覆者,推薦書(shū)籍「Java EE 開(kāi)發(fā)的顛覆者:SpringBoot實(shí)戰(zhàn)」
SpringBoot 構(gòu)建 web 項(xiàng)目
SpringBoot 自動(dòng)化配置源碼分析
自定義 SpringBoot Starter
spring-boot-starter-tutorial
SpringCloud 是一個(gè)微服務(wù)架構(gòu),能夠?qū)㈨?xiàng)目按照業(yè)務(wù)分成一個(gè)個(gè)微服務(wù),每個(gè)微服務(wù)都可獨(dú)立部署,服務(wù)之間互相協(xié)調(diào)。當(dāng)一個(gè)項(xiàng)目越來(lái)越大時(shí),隨之而來(lái)的是越來(lái)越難以維護(hù),此時(shí)將項(xiàng)目拆分成若干個(gè)微服務(wù)、單獨(dú)維護(hù)、單獨(dú)部署,也可以降低項(xiàng)目不同業(yè)務(wù)間的耦合度。推薦書(shū)籍「Spring Cloud 與 Docker 微服務(wù)架構(gòu)實(shí)戰(zhàn)」,這本書(shū)將 Docker 與微服務(wù)完美地結(jié)合在一起,堪稱完美!
Spring Cloud 中文官網(wǎng)
其它技術(shù)
Redis:一個(gè)高性能的 key-value 數(shù)據(jù)庫(kù),當(dāng)有并發(fā)量很高的請(qǐng)求時(shí),將數(shù)據(jù)緩存在 Redis 中,將提高服務(wù)器的響應(yīng)性能,大大減輕數(shù)據(jù)庫(kù)的壓力。
redis 中文官網(wǎng)
redis 教程
Git:世界上最先進(jìn)的分布式版本控制系統(tǒng),建議所有初學(xué)者從命令行開(kāi)始使用 Git!
最全 Git 教程
Git 的一些常用命令
Maven:一個(gè)用于構(gòu)建項(xiàng)目的工具,將項(xiàng)目間的依賴通過(guò) xml 完美地組織到一起,可通過(guò)編譯插件將項(xiàng)目編譯成字節(jié)碼文件。還有類(lèi)似的 Gradle 也是不錯(cuò)的選擇。
maven 的 pom.xml 文件詳解
Linux:至少要求常用的命令會(huì)用,能夠在 linux 環(huán)境下部署項(xiàng)目。
Linux 命令大全
最全的 SSH 連接遠(yuǎn)程終端教程
Docker:簡(jiǎn)直是項(xiàng)目部署神器啊,來(lái)不及解釋了,看我 Docker 系列博客,開(kāi)啟 Docker 之旅吧!推薦書(shū)籍「Docker 技術(shù)入門(mén)與實(shí)戰(zhàn)」,中國(guó)首部 Docker 著作!
Docker 實(shí)戰(zhàn)(一)
Docker 實(shí)戰(zhàn)(二)
Docker 實(shí)戰(zhàn)(三)
docker-deploy-tutorial
開(kāi)發(fā)工具
工欲善其事,必先利其器,以下是我推薦的一些開(kāi)發(fā)工具:
Intellij IDEA:Java 開(kāi)發(fā)最好的 IDE,這個(gè)是公認(rèn)的,我一開(kāi)始是用 Eclipse 的,后來(lái)用了 Intellij IDEA,才發(fā)現(xiàn) Eclipse 就是一坨屎,所以我以過(guò)來(lái)人勸你們不要使用 Eclipse,直接 Intellij IDEA!
IntelliJ IDEA 使用教程
Iterm2:macOS 最好用的終端!
Chrome:人生苦短,請(qǐng)用 Chrome,來(lái)不及解釋了,快上車(chē)!
Postman:很好用的一個(gè)接口調(diào)試工具。



java語(yǔ)言本身不難學(xué),但是技術(shù)太多,所以學(xué)java很費(fèi)勁。回想一下,基本上每個(gè)初學(xué)者,在剛學(xué)習(xí)java的時(shí)候可能都會(huì)問(wèn)別人這么一句話,你怎么知道的哪個(gè)方法(api)在哪個(gè)包里的?呵呵,無(wú)他,唯手熟爾。
1 基礎(chǔ)是王道。我們的基礎(chǔ)要扎實(shí)扎實(shí)再扎實(shí)。
以上面的整個(gè)流程來(lái)看java的技術(shù)分支很多,要想完全掌握是絕對(duì)不可能的。我們只有從中精通1到2個(gè)部分。但是java也是有通性的,所謂萬(wàn)變不離其宗。java的所有編程思路都是“面向?qū)ο蟆钡木幊獭K源蠹以谕呔辰绨l(fā)展以前一定要打好基礎(chǔ),這樣不管以后是jree還是j3d都有應(yīng)刃而解的感覺(jué)。在這里強(qiáng)烈推薦“java編程思想”.
2 所謂打好基礎(chǔ)并不是說(shuō)要熟悉所有的java代碼。我說(shuō)的意思是要了解java的結(jié)構(gòu)。class,methode,object,各種套用import,extend 讓自己在結(jié)構(gòu)上對(duì)java有個(gè)立體而且整體的了解即刻。其實(shí)java的學(xué)習(xí)不用固執(zhí)于對(duì)代碼的熟悉,1來(lái)java本身帶有很多demo,java2d
的所有問(wèn)題幾乎都有demo的樣例。2來(lái)java是開(kāi)放代碼,即使沒(méi)有demo網(wǎng)絡(luò)上也有很多高手把自己的代碼分享。所以不要怕沒(méi)有參考,參考是到處都有的。
3 最后還有1點(diǎn)經(jīng)驗(yàn)和大家分享,對(duì)sun的api一定要學(xué)會(huì)活用,不論是學(xué)習(xí)還是作為參考api都有很大的幫助,在完全了解java的結(jié)構(gòu)的基礎(chǔ)上,不論什么方法都是可以通過(guò)api來(lái)找到的.所以不要怕找不到方法,了解結(jié)構(gòu),了解api就能找到方法。
重點(diǎn)
精通:能夠掌握此技術(shù)的85%技術(shù)要點(diǎn)以上,使用此技術(shù)時(shí)間超過(guò)兩年,并使用此技術(shù)成功實(shí)施5個(gè)以上的項(xiàng)目。能使用此技術(shù)優(yōu)化性能或代碼,做到最大可能的重用。
熟練:能夠掌握此技術(shù)的60%技術(shù)要點(diǎn)以上,使用此技術(shù)時(shí)間超過(guò)一年,并使用此技術(shù)成功實(shí)施3個(gè)以上的項(xiàng)目。能使用此技術(shù)實(shí)現(xiàn)軟件需求并有經(jīng)驗(yàn)的積累在實(shí)現(xiàn)之前能做優(yōu)化設(shè)計(jì)盡可能的實(shí)現(xiàn)模塊或代碼的重用。
熟悉:能夠掌握此技術(shù)的50%技術(shù)要點(diǎn)以上,使用此技術(shù)時(shí)間超過(guò)半年上,并使用此技術(shù)成功實(shí)施1個(gè)以上的項(xiàng)目。能使用此技術(shù)實(shí)現(xiàn)軟件需求。
了解:可以在實(shí)際需要時(shí)參考技術(shù)文檔或幫助文件滿足你的需要,基本知道此項(xiàng)技術(shù)在你運(yùn)用是所起的作用,能夠調(diào)用或者使用其根據(jù)規(guī)定提供給你的調(diào)用方式。
? 祝你學(xué)有所成?。?!加油 少年?。?
