Java后端学习路线图

转载于:Java团长php

最近有些网友问我如何自学 Java 后端,还有些是想从别的方向想转过来,但都不太了解 Java 后端究竟须要学什么,究竟要从哪里学起,哪些是主流的 Java 后端技术等等,致使想学,但又很迷茫,不知从何下手。我就以过来人的经历,写在这篇博客里,不必定都对,但都是我根据本身的经历总结出来的,供大家的参考。html

Java Back-end

Java 基础

Java 是一门纯粹的面向对象的编程语言,因此除了基础语法以外,必须得弄懂它的 oop 特性:封装、继承、多态。此外还有泛型、反射的特性,不少框架的技术都依赖它,好比 Spring 核心的 Ioc 和 AOP,都用到了反射,并且 Java 自身的动态代理也是利用反射实现的。此外还有 Java 一些标准库也是很是常见,好比集合、I/O、并发,几乎在 Web 开发中无处不在,也是面试常常会被问到的,因此在自学 Java 后端以前,不妨先打好这些基础,另外还有 Java8 的一些新特性,也要重点关注,好比 Lambda 表达式、集合的 Stream 流操做、全新的 Date API 等等,关于新特性,我也写了几篇关于这方面的博客,请自行找吧,就不贴出来了。java

关于书籍推荐,我是不建议初学者一开始就拿着「Java 编程思想」啃的,由于当初我就是那个当天下午决定自学 Java,晚上就抱着这本书啃的人,说实话,我当时真的不懂它在说啥,由于我没有一点的面向对象语言编程的基础,而这本书又写得太博大精深了,在当时的我来讲,彻底是天书,可是我认为它仍然是 Java 界的圣经,每读一次都有所收获。我在这里推荐大家一开始先看「Java 核心技术」,这本书讲得比较通俗易懂,初学者比较能接受。mysql

关于视频推荐,我当初就是听某客的毕向东老师讲的 Java 基础教程(能够关注个人微信公众号获取),毕老师讲的实在是太生动有趣了,不知不觉把我带进 Java 的坑里没法自拔,有时候我会听他视频时笑出声来,也许是我那段自学阶段最有趣的时刻了。linux

数据库

关于 sql 方面:SQL 教程MySQL 教程git

我是了解了一些基础语法以后,就直接跟着视频的老师作一些表操做实战练习了,好比单表查询、多表查询等。我建议学 sql 切勿眼高手低,需多加练习,不要只看懂了就行,由于工做中写得一手简练的 sql 是很是重要的。在这里我说下我在项目一直秉承着 sql 语句是能避免多表查询就避免多表查询,可以分开多条语句就分开多条语句,由于这里涉及到多表查询性能和数据库扩展的问题。github

关于 JDBC 方面:JDBC 教程、 JDBC 获取链接对象源码分析web

你须要弄懂 JDBC API 的用法,其实它只是一组规范接口,全部数据库驱动只要实现了 JDBC,那么咱们就能够经过标准的 API 调用相应的驱动,彻底不用知道驱动是怎么实现的,这就是面向接口编程的好处。并且对于 JDBC 我是直接看视频去理解的,跟着视频作了一个基于 Apache Dbutils 工具作了一个具备事务性的小工具,我特地用思惟导图总结了一下:面试

database

jdbc-utils源码地址:jdbc-utilsredis

Web 基础

曾经开源中国创始人红薯写了一篇文章「初学 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 框架主要具有如下功能:

  1. 可读取用户自定义配置文件,并以此来初始化框架;
  2. 具有 Bean 容器,管理项目的类的对象生命周期;
  3. 具有依赖注入,下降类之间的耦合性;
  4. 具有 AOP 功能,使项目可进行横向编程,可不改变原有代码的状况增长业务逻辑;
  5. 具有 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!

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:很好用的一个接口调试工具。

Postman 官网