Java工程師 基礎+實戰 完整路線圖(詳解版)
Java 基礎
Java 是一門純粹的面向對象的編程語言,所以除了基礎語法之外,必須得弄懂它的 oop 特性:封裝、繼承、多態。此外還有泛型、反射的特性,很多框架的技術都依賴它,比如 Spring 核心的 Ioc 和 AOP,都用到了反射,而且 Java 自身的動態代理也是利用反射實現的。此外還有 Java 一些標准庫也是非常常見,比如集合、I/O、並發,幾乎在 Web 開發中無處不在,也是面試經常會被問到的,所以在自學 Java 后端之前,不妨先打好這些基礎,另外還有 Java8 的一些新特性,也要重點關注,比如 Lambda 表達式、集合的 Stream 流操作、全新的 Date API 等等,關於新特性,我也寫了幾篇關於這方面的博客,請自行找吧,就不貼出來了。
視頻推薦,我當初就是聽某客的畢向東老師講的 Java 基礎教程(畢老師講的實在是太生動有趣了,不知不覺把我帶進 Java 的坑里無法自拔,有時候我會聽他視頻時笑出聲來,也許是我那段自學階段最有趣的時刻了。
數據庫
關於 sql 方面:SQL 教程、MySQL 教程
我是了解了一些基礎語法之后,就直接跟着視頻的老師做一些表操作實戰練習了,比如單表查詢、多表查詢等。我建議學 sql 切勿眼高手低,需多加練習,不要只看懂了就行,因為工作中寫得一手簡練的 sql 是非常重要的。在這里我說下我在項目一直秉承着 sql 語句是能避免多表查詢就避免多表查詢,能夠分開多條語句就分開多條語句,因為這里涉及到多表查詢性能和數據庫擴展的問題。
關於 JDBC 方面:JDBC 教程、 JDBC 獲取連接對象源碼分析
你需要弄懂 JDBC API 的用法,其實它只是一組規范接口,所有數據庫驅動只要實現了 JDBC,那么我們就可以通過標准的 API 調用相應的驅動,完全不用知道驅動是怎么實現的,這就是面向接口編程的好處。而且對於 JDBC 我是直接看視頻去理解的,跟着視頻做了一個基於 Apache Dbutils 工具做了一個具有事務性的小工具,我特意用思維導圖總結了一下:

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



java語言本身不難學,但是技術太多,所以學java很費勁。回想一下,基本上每個初學者,在剛學習java的時候可能都會問別人這么一句話,你怎么知道的哪個方法(api)在哪個包里的?呵呵,無他,唯手熟爾。
1 基礎是王道。我們的基礎要扎實扎實再扎實。
以上面的整個流程來看java的技術分支很多,要想完全掌握是絕對不可能的。我們只有從中精通1到2個部分。但是java也是有通性的,所謂萬變不離其宗。java的所有編程思路都是“面向對象”的編程。所以大家在往更高境界發展以前一定要打好基礎,這樣不管以后是jree還是j3d都有應刃而解的感覺。在這里強烈推薦“java編程思想”.
2 所謂打好基礎並不是說要熟悉所有的java代碼。我說的意思是要了解java的結構。class,methode,object,各種套用import,extend 讓自己在結構上對java有個立體而且整體的了解即刻。其實java的學習不用固執於對代碼的熟悉,1來java本身帶有很多demo,java2d
的所有問題幾乎都有demo的樣例。2來java是開放代碼,即使沒有demo網絡上也有很多高手把自己的代碼分享。所以不要怕沒有參考,參考是到處都有的。
3 最后還有1點經驗和大家分享,對sun的api一定要學會活用,不論是學習還是作為參考api都有很大的幫助,在完全了解java的結構的基礎上,不論什么方法都是可以通過api來找到的.所以不要怕找不到方法,了解結構,了解api就能找到方法。
重點
精通:能夠掌握此技術的85%技術要點以上,使用此技術時間超過兩年,並使用此技術成功實施5個以上的項目。能使用此技術優化性能或代碼,做到最大可能的重用。
熟練:能夠掌握此技術的60%技術要點以上,使用此技術時間超過一年,並使用此技術成功實施3個以上的項目。能使用此技術實現軟件需求並有經驗的積累在實現之前能做優化設計盡可能的實現模塊或代碼的重用。
熟悉:能夠掌握此技術的50%技術要點以上,使用此技術時間超過半年上,並使用此技術成功實施1個以上的項目。能使用此技術實現軟件需求。
了解:可以在實際需要時參考技術文檔或幫助文件滿足你的需要,基本知道此項技術在你運用是所起的作用,能夠調用或者使用其根據規定提供給你的調用方式。
祝你學有所成!!!加油 少年!!
PS:轉載於 https://blog.csdn.net/chenshiyang0806/article/details/79879269
如有侵權 聯系刪除 !