Java 基礎 [轉自程序員之家]linux
Java 是一門純粹的面向對象的編程語言,因此除了基礎語法以外,必須得弄懂它的 oop 特性:封裝、繼承、多態。此外還有泛型、反射的特性,不少框架的技術都依賴它,好比 Spring 核心的 Ioc 和 AOP,都用到了反射,並且 Java 自身的動態代理也是利用反射實現的,這裏我特地寫了一篇 Java動態代理原理分析。此外還有 Java 一些標準庫也是很是常見,好比集合、I/O、併發,幾乎在 Web 開發中無處不在,也是面試常常會被問到的,因此在自學 Java 後端以前,不妨先打好這些基礎,另外還有 Java8 的一些新特性,也要重點關注,好比 Lambda 表達式、集合的 Stream 流操做、全新的 Date API 等等,關於新特性,我也寫了幾篇關於這方面的博客,請自行找吧,就不貼出來了。git
關於書籍推薦,我是不建議初學者一開始就拿着「Java 編程思想」啃的,由於當初我就是那個當天下午決定自學 Java,晚上就抱着這本書啃的人,說實話,我當時真的不懂它在說啥,由於我沒有一點的面嚮對象語言編程的基礎,而這本書又寫得太博大精深了,在當時的我來講,徹底是天書,可是我認爲它仍然是 Java 界的聖經,每讀一次都有所收穫。我在這裏推薦大家一開始先看「Java 核心技術」,這本書講得比較通俗易懂,初學者比較能接受。程序員
關於視頻推薦,我當初就是聽某客的畢向東老師講的 Java 基礎教程,畢老師講的實在是太生動有趣了,不知不覺把我帶進 Java 的坑裏沒法自拔,有時候我會聽他視頻時笑出聲來,也許是我那段自學階段最有趣的時刻了。github
數據庫web
關於 sql 方面:SQL 教程、MySQL 教程面試
我是瞭解了一些基礎語法以後,就直接跟着視頻的老師作一些表操做實戰練習了,好比單表查詢、多表查詢等。我建議學 sql 切勿眼高手低,需多加練習,不要只看懂了就行,由於工做中寫得一手簡練的 sql 是很是重要的。在這裏我說下我在項目一直秉承着 sql 語句是能避免多表查詢就避免多表查詢,可以分開多條語句就分開多條語句,由於這裏涉及到多表查詢性能和數據庫擴展的問題。redis
關於 JDBC 方面:JDBC 教程、 JDBC 獲取鏈接對象源碼分析spring
你須要弄懂 JDBC API 的用法,其實它只是一組規範接口,全部數據庫驅動只要實現了 JDBC,那麼咱們就能夠經過標準的 API 調用相應的驅動,徹底不用知道驅動是怎麼實現的,這就是面向接口編程的好處。並且對於 JDBC 我是直接看視頻去理解的,跟着視頻作了一個基於 Apache Dbutils 工具作了一個具備事務性的小工具,我特地用思惟導圖總結了一下sql
Web 基礎docker
曾經開源中國創始人紅薯寫了一篇文章「初學 Java Web 開發,請遠離各類框架,從 Servlet 開發」,我以爲他說的太對了,在現在 Java 開發中,不少開發者只知道怎麼使用框架,但根本不懂 Web 的一些知識點,其實框架不少,但都基本是一個套路,因此在你學習任何框架前,請把 Web 基礎打好,把 Web 基礎打好了,看框架真的是如魚得水。
關於 Http 協議,這篇文章就寫得很清楚:Http協議
關於 Web 基礎這方面數據推薦,我當時是看的是「Tomcat 與 Java Web 開發技術詳解」,很詳細地講解了整個 Java Web 開發的技術知識點,但如今看來,我以爲裏面講的有一些技術確實有點老舊了,不過能夠了解一下 Java Web 開發的歷史也是不錯的。因此在 Web 基礎這方面我都是看某客的崔老師講的「超全面 Java Web 視頻教程」,講得很詳細很生動,還有實戰項目!
關於 JSP,你只要瞭解它其實就是一個 Servlet 就好了,關於它的一些標籤用法,我認爲能夠直接忽略,由於如今互聯網幾乎沒哪間公司還用 JSP,除了一些老舊的項目。如今都是流行先後端分離,單頁應用,後端只作 API 接口的時代了,因此時間寶貴,把這些時間重點放在 Servlet 規範上面吧。
關於 Tomcat,它是一個 Web 容器,咱們寫的後端項目都要部署到Web容器才能運行,它實際上是一個遵循 Http,經過 Socket 通訊與客戶端進行交互的服務端程序:Tomcat結構及處理請求過程
Web 主流框架
Java Web 框架多如牛毛,等你有必定經驗了,你也能夠寫一個 Web 框架,網上不少說 Spring、Struts二、Hibernate 是 Java 三架馬車,我只想說,那是好久遠的事情了,我嚴重不推薦 Struts二、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 中文官網
史上最簡單的 Spring Cloud 教程
我寫的有關於 Spring Cloud 的博客:
SpringCloud微服務架構之服務註冊與發現
SpringCloud微服務架構之服務消費者
SpringCloud微服務架構之斷路器
SpringCloud微服務架構之服務網關
其它技術
Redis:一個高性能的 key-value 數據庫,當有併發量很高的請求時,將數據緩存在 Redis 中,將提升服務器的響應性能,大大減輕數據庫的壓力。
redis 中文官網
redis 教程
Git:世界上最早進的分佈式版本控制系統,建議全部初學者從命令行開始使用 Git!
關注 stormzhang 公衆號「googdev」,回覆「github」,便可免費獲取一份 GitHub 教程電子書,我以爲寫得很不錯。
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 最好用的終端!
Iterm2 使用指南
Chrome:人生苦短,請用 Chrome,來不及解釋了,快上車!
Postman:很好用的一個接口調試工具。