Java 基礎
Java 是一門純粹的面向對象的編程語言乐埠,所以除了基礎語法之外,必須得弄懂它的 oop 特性:封裝禽篱、繼承畜伐、多態(tài)。此外還有泛型躺率、反射的特性烤礁,很多框架的技術都依賴它,比如 Spring 核心的 Ioc 和 AOP肥照,都用到了反射,而且 Java 自身的動態(tài)代理也是利用反射實現(xiàn)的勤众。此外還有 Java 一些標準庫也是非常常見舆绎,比如集合酝静、I/O洞焙、并發(fā),幾乎在 Web 開發(fā)中無處不在键菱,也是面試經常會被問到的窥突,所以在自學 Java 后端之前努溃,不妨先打好這些基礎,另外還有 Java8 的一些新特性阻问,也要重點關注梧税,比如 Lambda 表達式、集合的 Stream 流操作称近、全新的 Date API 等等第队,關于新特性,我也寫了幾篇關于這方面的博客刨秆,請自行找吧凳谦,就不貼出來了。
視頻推薦衡未,我當初就是聽某客的畢向東老師講的 Java 基礎教程(畢老師講的實在是太生動有趣了尸执,不知不覺把我?guī)нM Java 的坑里無法自拔家凯,有時候我會聽他視頻時笑出聲來,也許是我那段自學階段最有趣的時刻了如失。
數(shù)據(jù)庫
關于 sql 方面:SQL 教程绊诲、MySQL 教程
我是了解了一些基礎語法之后,就直接跟著視頻的老師做一些表操作實戰(zhàn)練習了岖常,比如單表查詢驯镊、多表查詢等。我建議學 sql 切勿眼高手低竭鞍,需多加練習板惑,不要只看懂了就行,因為工作中寫得一手簡練的 sql 是非常重要的偎快。在這里我說下我在項目一直秉承著 sql 語句是能避免多表查詢就避免多表查詢冯乘,能夠分開多條語句就分開多條語句,因為這里涉及到多表查詢性能和數(shù)據(jù)庫擴展的問題晒夹。
關于 JDBC 方面:JDBC 教程裆馒、?JDBC 獲取連接對象源碼分析
你需要弄懂 JDBC API 的用法,其實它只是一組規(guī)范接口丐怯,所有數(shù)據(jù)庫驅動只要實現(xiàn)了 JDBC喷好,那么我們就可以通過標準的 API 調用相應的驅動,完全不用知道驅動是怎么實現(xiàn)的读跷,這就是面向接口編程的好處梗搅。而且對于 JDBC 我是直接看視頻去理解的,跟著視頻做了一個基于 Apache Dbutils 工具做了一個具有事務性的小工具效览,我特意用思維導圖總結了一下:
Web 基礎
曾經開源中國創(chuàng)始人紅薯寫了一篇文章「初學 Java Web 開發(fā)无切,請遠離各種框架,從 Servlet 開發(fā)」丐枉,我覺得他說的太對了哆键,在如今 Java 開發(fā)中,很多開發(fā)者只知道怎么使用框架瘦锹,但根本不懂 Web 的一些知識點籍嘹,其實框架很多,但都基本是一個套路弯院,所以在你學習任何框架前噩峦,請把 Web 基礎打好,把 Web 基礎打好了抽兆,看框架真的是如魚得水识补。
關于 Web 基礎這方面數(shù)據(jù)推薦,我當時是看的是「Tomcat 與 Java Web 開發(fā)技術詳解」辫红,很詳細地講解了整個 Java Web 開發(fā)的技術知識點凭涂,但現(xiàn)在看來祝辣,我覺得里面講的有一些技術確實有點老舊了,不過可以了解一下 Java Web 開發(fā)的歷史也是不錯的切油。所以在 Web 基礎這方面我都是看某客的崔老師講的「超全面 Java Web 視頻教程」蝙斜,講得很詳細很生動,還有實戰(zhàn)項目澎胡!
關于 JSP孕荠,你只要了解它其實就是一個 Servlet 就行了,關于它的一些標簽用法攻谁,我認為可以直接忽略稚伍,因為現(xiàn)在互聯(lián)網(wǎng)幾乎沒哪間公司還用 JSP,除了一些老舊的項目∑莼拢現(xiàn)在都是流行前后端分離个曙,單頁應用,后端只做 API 接口的時代了受楼,所以時間寶貴垦搬,把這些時間重點放在 Servlet 規(guī)范上面吧。
Web 主流框架
Java Web 框架多如牛毛艳汽,等你有一定經驗了猴贰,你也可以寫一個 Web 框架,網(wǎng)上很多說 Spring河狐、Struts2糟趾、Hibernate 是 Java 三架馬車,我只想說甚牲,那是很久遠的事情了,我嚴重不推薦 Struts2蝶柿、Hibernate丈钙,相信我,一開始只需要上手 Spring交汤、SpringMVC雏赦、Mybatis 就可以了,特別是 Spring 框架芙扎,其實 Spring 家族的框架都是很不錯的星岗。
但是提醒一點就是,千萬不要沉迷于各種框架不能自拔戒洼,以會多種用法而沾沾自喜俏橘,導致知其然而不知其所以然。
Spring其核心思想就是 IOC 和 AOP:
談談對 Spring IOC 的理解
Spring 面向切面編程
SpringMVC 它的思想是全部請求統(tǒng)一用一個 Servlet 去做請求轉發(fā)與控制圈浇,這個 Servlet 叫 DispatcherServlet:
SpringMVC 初始化過程
SpringMVC 處理請求過程
Mybatis 它可實現(xiàn)動態(tài)拼裝 sql寥掐,避免了幾乎所有的 JDBC 代碼和手動設置參數(shù)以及獲取結果集:
mybatis 入門教程
Mybatis 深入淺出系列
Web 框架進階
使用了 SSM 框架后靴寂,你會覺得框架也不過這么回事,如果你對 Spring 有過大概了解召耘,你也會產生想寫一個「山寨版」Spring 的心思了百炬,一個輕量級 Web 框架主要具備以下功能:
可讀取用戶自定義配置文件,并以此來初始化框架污它;
具備 Bean 容器剖踊,管理項目的類的對象生命周期;
具備依賴注入衫贬,降低類之間的耦合性德澈;
具備 AOP 功能,使項目可進行橫向編程祥山,可不改變原有代碼的情況增加業(yè)務邏輯圃验;
具備 MVC 框架模式。
其實除了 SSM 之外缝呕,Web 框架可謂是百家齊放澳窑,其中以 Spring 全家桶最為耀眼,在這里我極力推薦兩個 Spring 家族框架:SpringBoot 和 SpringCloud供常。
SpringBoot 彌補了 Spring 配置上的缺點摊聋,再也不用為繁雜的 xml 費勁精力了,堪稱是 Java 后端開發(fā)的顛覆者栈暇,推薦書籍「Java EE 開發(fā)的顛覆者:SpringBoot實戰(zhàn)」
SpringBoot 構建 web 項目
SpringBoot 自動化配置源碼分析
自定義 SpringBoot Starter
spring-boot-starter-tutorial
SpringCloud 是一個微服務架構麻裁,能夠將項目按照業(yè)務分成一個個微服務,每個微服務都可獨立部署源祈,服務之間互相協(xié)調煎源。當一個項目越來越大時,隨之而來的是越來越難以維護香缺,此時將項目拆分成若干個微服務手销、單獨維護、單獨部署图张,也可以降低項目不同業(yè)務間的耦合度锋拖。推薦書籍「Spring Cloud 與 Docker 微服務架構實戰(zhàn)」,這本書將 Docker 與微服務完美地結合在一起祸轮,堪稱完美兽埃!
Spring Cloud 中文官網(wǎng)
其它技術
Redis:一個高性能的 key-value 數(shù)據(jù)庫,當有并發(fā)量很高的請求時适袜,將數(shù)據(jù)緩存在 Redis 中柄错,將提高服務器的響應性能,大大減輕數(shù)據(jù)庫的壓力。
redis 中文官網(wǎng)
redis 教程
Git:世界上最先進的分布式版本控制系統(tǒng)鄙陡,建議所有初學者從命令行開始使用 Git冕房!
最全 Git 教程
Git 的一些常用命令
Maven:一個用于構建項目的工具,將項目間的依賴通過 xml 完美地組織到一起趁矾,可通過編譯插件將項目編譯成字節(jié)碼文件耙册。還有類似的 Gradle 也是不錯的選擇。
maven 的 pom.xml 文件詳解
Linux:至少要求常用的命令會用毫捣,能夠在 linux 環(huán)境下部署項目详拙。
Linux 命令大全
最全的 SSH 連接遠程終端教程
Docker:簡直是項目部署神器啊,來不及解釋了蔓同,看我 Docker 系列博客饶辙,開啟 Docker 之旅吧!推薦書籍「Docker 技術入門與實戰(zhàn)」斑粱,中國首部 Docker 著作弃揽!
Docker 實戰(zhàn)(一)
Docker 實戰(zhàn)(二)
Docker 實戰(zhàn)(三)
docker-deploy-tutorial
開發(fā)工具
工欲善其事,必先利其器则北,以下是我推薦的一些開發(fā)工具:
Intellij IDEA:Java 開發(fā)最好的 IDE矿微,這個是公認的,我一開始是用 Eclipse 的尚揣,后來用了 Intellij IDEA涌矢,才發(fā)現(xiàn) Eclipse 就是一坨屎,所以我以過來人勸你們不要使用 Eclipse快骗,直接 Intellij IDEA娜庇!
IntelliJ IDEA 使用教程
Iterm2:macOS 最好用的終端!
Chrome:人生苦短方篮,請用 Chrome名秀,來不及解釋了,快上車藕溅!
Postman:很好用的一個接口調試工具匕得。
java語言本身不難學,但是技術太多蜈垮,所以學java很費勁≡U眨回想一下攒发,基本上每個初學者,在剛學習java的時候可能都會問別人這么一句話晋南,你怎么知道的哪個方法(api)在哪個包里的惠猿?呵呵,無他负间,唯手熟爾偶妖。
1 基礎是王道姜凄。我們的基礎要扎實扎實再扎實。
以上面的整個流程來看java的技術分支很多趾访,要想完全掌握是絕對不可能的态秧。我們只有從中精通1到2個部分。但是java也是有通性的扼鞋,所謂萬變不離其宗申鱼。java的所有編程思路都是“面向對象”的編程。所以大家在往更高境界發(fā)展以前一定要打好基礎云头,這樣不管以后是jree還是j3d都有應刃而解的感覺捐友。在這里強烈推薦“java編程思想”.
2 所謂打好基礎并不是說要熟悉所有的java代碼。我說的意思是要了解java的結構溃槐。class,methode,object,各種套用import,extend 讓自己在結構上對java有個立體而且整體的了解即刻匣砖。其實java的學習不用固執(zhí)于對代碼的熟悉,1來java本身帶有很多demo昏滴,java2d
的所有問題幾乎都有demo的樣例猴鲫。2來java是開放代碼,即使沒有demo網(wǎng)絡上也有很多高手把自己的代碼分享影涉。所以不要怕沒有參考变隔,參考是到處都有的。
3 最后還有1點經驗和大家分享蟹倾,對sun的api一定要學會活用匣缘,不論是學習還是作為參考api都有很大的幫助,在完全了解java的結構的基礎上鲜棠,不論什么方法都是可以通過api來找到的.所以不要怕找不到方法肌厨,了解結構,了解api就能找到方法豁陆。
重點
精通:能夠掌握此技術的85%技術要點以上柑爸,使用此技術時間超過兩年,并使用此技術成功實施5個以上的項目盒音。能使用此技術優(yōu)化性能或代碼表鳍,做到最大可能的重用。
熟練:能夠掌握此技術的60%技術要點以上祥诽,使用此技術時間超過一年譬圣,并使用此技術成功實施3個以上的項目。能使用此技術實現(xiàn)軟件需求并有經驗的積累在實現(xiàn)之前能做優(yōu)化設計盡可能的實現(xiàn)模塊或代碼的重用雄坪。
熟悉:能夠掌握此技術的50%技術要點以上厘熟,使用此技術時間超過半年上,并使用此技術成功實施1個以上的項目。能使用此技術實現(xiàn)軟件需求绳姨。
了解:可以在實際需要時參考技術文檔或幫助文件滿足你的需要登澜,基本知道此項技術在你運用是所起的作用,能夠調用或者使用其根據(jù)規(guī)定提供給你的調用方式飘庄。