Java學(xué)習(xí)路線
簡(jiǎn)單學(xué)了遍Java囤官,發(fā)現(xiàn)Java其實(shí)還是要學(xué)習(xí)很多東西的冬阳,有些也比較難以理解,簡(jiǎn)單整理了下党饮,為第二階段的學(xué)習(xí)做個(gè)準(zhǔn)備肝陪,同時(shí),希望以過(guò)來(lái)人的身份刑顺,可以幫助大家少走一點(diǎn)彎路氯窍,避開一些坑。我是一只菜鳥蹲堂,希望大家不喜就噴狼讨。
1.Java基礎(chǔ)圖解:
2.Java總體路線
Java 總體解說(shuō)
Java 是一門純粹的面向?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ù)也是非常常見,比如集合计济、I/O茸苇、并發(fā),幾乎在 Web 開發(fā)中無(wú)處不在沦寂,也是面試經(jīng)常會(huì)被問到的学密,所以在自學(xué) Java 后端之前,不妨先打好這些基礎(chǔ)传藏,另外還有 Java8 的一些新特性腻暮,也要重點(diǎn)關(guān)注彤守,比如 Lambda 表達(dá)式、集合的 Stream 流操作哭靖、全新的 Date API 等等具垫,關(guān)于新特性,我也寫了幾篇關(guān)于這方面的博客试幽,請(qǐng)自行找吧筝蚕,就不貼出來(lái)了。
關(guān)于書籍推薦铺坞,我是不建議初學(xué)者一開始就拿著「Java 編程思想」啃的起宽,因?yàn)楫?dāng)初我就是那個(gè)當(dāng)天下午決定自學(xué) Java,晚上就抱著這本書啃的人济榨,說(shuō)實(shí)話坯沪,我當(dāng)時(shí)真的不懂它在說(shuō)啥,因?yàn)槲覜]有一點(diǎn)的面向?qū)ο笳Z(yǔ)言編程的基礎(chǔ)腿短,而這本書又寫得太博大精深了屏箍,在當(dāng)時(shí)的我來(lái)說(shuō),完全是天書橘忱,但是我認(rèn)為它仍然是 Java 界的圣經(jīng)赴魁,每讀一次都有所收獲。我在這里推薦你們一開始先看「Java 核心技術(shù)」钝诚,這本書講得比較通俗易懂颖御,初學(xué)者比較能接受。
關(guān)于視頻推薦凝颇,我當(dāng)初就是聽某客的畢向東老師講的 Java 基礎(chǔ)教程(可以關(guān)注我的微信公眾號(hào)獲扰斯啊),畢老師講的實(shí)在是太生動(dòng)有趣了拧略,不知不覺把我?guī)нM(jìn) Java 的坑里無(wú)法自拔芦岂,有時(shí)候我會(huì)聽他視頻時(shí)笑出聲來(lái),也許是我那段自學(xué)階段最有趣的時(shí)刻了垫蛆。
關(guān)于 sql 方面:
我是了解了一些基礎(chǔ)語(yǔ)法之后禽最,就直接跟著視頻的老師做一些表操作實(shí)戰(zhàn)練習(xí)了,比如單表查詢袱饭、多表查詢等川无。我建議學(xué) sql 切勿眼高手低,需多加練習(xí)虑乖,不要只看懂了就行懦趋,因?yàn)楣ぷ髦袑懙靡皇趾?jiǎn)練的 sql 是非常重要的。在這里我說(shuō)下我在項(xiàng)目一直秉承著 sql 語(yǔ)句是能避免多表查詢就避免多表查詢疹味,能夠分開多條語(yǔ)句就分開多條語(yǔ)句仅叫,因?yàn)檫@里涉及到多表查詢性能和數(shù)據(jù)庫(kù)擴(kuò)展的問題帜篇。
關(guān)于 JDBC 方面:
你需要弄懂 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é)了一下:
曾經(jīng)開源中國(guó)創(chuàng)始人紅薯寫了一篇文章? 凯亮,我覺得他說(shuō)的太對(duì)了,在如今 Java 開發(fā)中哄尔,很多開發(fā)者只知道怎么使用框架假消,但根本不懂 Web 的一些知識(shí)點(diǎn),其實(shí)框架很多岭接,但都基本是一個(gè)套路富拗,所以在你學(xué)習(xí)任何框架前,請(qǐng)把 Web 基礎(chǔ)打好鸣戴,把 Web 基礎(chǔ)打好了啃沪,看框架真的是如魚得水。
關(guān)于 JSP窄锅,你只要了解它其實(shí)就是一個(gè) Servlet 就行了创千,關(guān)于它的一些標(biāo)簽用法,我認(rèn)為可以直接忽略入偷,因?yàn)楝F(xiàn)在互聯(lián)網(wǎng)幾乎沒哪間公司還用 JSP追驴,除了一些老舊的項(xiàng)目。現(xiàn)在都是流行前后端分離疏之,單頁(yè)應(yīng)用殿雪,后端只做 API 接口的時(shí)代了,所以時(shí)間寶貴锋爪,把這些時(shí)間重點(diǎn)放在 Servlet 規(guī)范上面吧丙曙。
關(guān)于 Tomcat,它是一個(gè) Web 容器几缭,我們寫的后端項(xiàng)目都要部署到Web容器才能運(yùn)行河泳,它其實(shí)是一個(gè)遵循 Http沃呢,通過(guò) Socket 通信與客戶端進(jìn)行交互的服務(wù)端程序
Java Web 框架多如牛毛年栓,等你有一定經(jīng)驗(yàn)了,你也可以寫一個(gè) Web 框架薄霜,網(wǎng)上很多說(shuō) Spring某抓、Struts2纸兔、Hibernate 是 Java 三架馬車,我只想說(shuō)否副,那是很久遠(yuǎn)的事情了汉矿,我嚴(yán)重不推薦 Struts2、Hibernate备禀,相信我洲拇,一開始只需要上手 Spring、SpringMVC曲尸、Mybatis 就可以了赋续,特別是 Spring 框架,其實(shí) Spring 家族的框架都是很不錯(cuò)的另患。
但是提醒一點(diǎn)就是纽乱,千萬(wàn)不要沉迷于各種框架不能自拔,以會(huì)多種用法而沾沾自喜昆箕,導(dǎo)致知其然而不知其所以然鸦列。
Spring其核心思想就是 IOC 和 AOP
SpringMVC 它的思想是全部請(qǐng)求統(tǒng)一用一個(gè) Servlet 去做請(qǐng)求轉(zhuǎn)發(fā)與控制,這個(gè) Servlet 叫 DispatcherServlet
Mybatis 它可實(shí)現(xiàn)動(dòng)態(tài)拼裝 sql鹏倘,避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集薯嗤。
使用了 SSM 框架后,你會(huì)覺得框架也不過(guò)這么回事纤泵,如果你對(duì) Spring 有過(guò)大概了解应民,你也會(huì)產(chǎn)生想寫一個(gè)「山寨版」Spring 的心思了,一個(gè)輕量級(jí) Web 框架主要具備以下功能:
可讀取用戶自定義配置文件夕吻,并以此來(lái)初始化框架诲锹;
具備 Bean 容器,管理項(xiàng)目的類的對(duì)象生命周期涉馅;
具備依賴注入归园,降低類之間的耦合性;
具備 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 后端開發(fā)的顛覆者缀去,推薦書籍「Java EE 開發(fā)的顛覆者:SpringBoot實(shí)戰(zhàn)」
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ù)間的耦合度栅贴。推薦書籍「Spring Cloud 與 Docker 微服務(wù)架構(gòu)實(shí)戰(zhàn)」,這本書將 Docker 與微服務(wù)完美地結(jié)合在一起熏迹,堪稱完美檐薯!
Redis:一個(gè)高性能的 key-value 數(shù)據(jù)庫(kù),當(dāng)有并發(fā)量很高的請(qǐng)求時(shí)注暗,將數(shù)據(jù)緩存在 Redis 中坛缕,將提高服務(wù)器的響應(yīng)性能,大大減輕數(shù)據(jù)庫(kù)的壓力捆昏。
Git:世界上最先進(jìn)的分布式版本控制系統(tǒng)赚楚,建議所有初學(xué)者從命令行開始使用 Git!
Maven:一個(gè)用于構(gòu)建項(xiàng)目的工具骗卜,將項(xiàng)目間的依賴通過(guò) xml 完美地組織到一起宠页,可通過(guò)編譯插件將項(xiàng)目編譯成字節(jié)碼文件。還有類似的 Gradle 也是不錯(cuò)的選擇寇仓。
Linux:至少要求常用的命令會(huì)用举户,能夠在 linux 環(huán)境下部署項(xiàng)目。
Docker:簡(jiǎn)直是項(xiàng)目部署神器啊遍烦,來(lái)不及解釋了俭嘁,!
工欲善其事服猪,必先利其器供填,以下是我推薦的一些開發(fā)工具:
Intellij IDEA:Java 開發(fā)最好的 IDE,這個(gè)是公認(rèn)的罢猪,我一開始是用 Eclipse 的近她,后來(lái)用了 Intellij IDEA,才發(fā)現(xiàn) Eclipse 就是一坨屎膳帕,所以我以過(guò)來(lái)人勸你們不要使用 Eclipse粘捎,直接 Intellij IDEA!