当前位置: 首页 > 编程日记 > 正文

java学习路线图(2018年最新版)

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

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 基础教程(可以关注我的微信公众号获取),毕老师讲的实在是太生动有趣了,不知不觉把我带进 Java 的坑里无法自拔,有时候我会听他视频时笑出声来,也许是我那段自学阶段最有趣的时刻了。

数据库

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

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

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

你需要弄懂 JDBC API 的用法,其实它只是一组规范接口,所有数据库驱动只要实现了 JDBC,那么我们就可以通过标准的 API 调用相应的驱动,完全不用知道驱动是怎么实现的,这就是面向接口编程的好处。而且对于 JDBC 我是直接看视频去理解的,跟着视频做了一个基于 Apache Dbutils 工具做了一个具有事务性的小工具,我特意用思维导图总结了一下:

database

jdbc-utils源码地址:jdbc-utils

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、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 框架主要具备以下功能:

  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 官网

我有一个微信公众号,经常会分享一些Java技术相关的干货;如果你喜欢我的分享,可以用微信搜索“Java团长”或者“javatuanzhang”关注。

转载于:https://www.cnblogs.com/java1024/p/8583274.html

相关文章:

php instr函数,oracle的instr函数用法

这几天在做一个项目的时候,做到关于用户组权限分配的问题,用到了Oracle的instr函数,现在好好学习下这个函数吧。 在Oracle/PLSQL中, instr 函数返回要截取的字符串在源字符串中的位置。 语法如下:instr( string1, stri…

浏览器内核Trident/Gecko/WebKit/Presto

“浏览器内核”主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML、JavaScript)并渲染、展示网页。因此,所谓的浏览器内核通常也就是指浏览器所采用的渲染引擎, 渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏…

Intellij IDEA 将工程转换成maven工程 详解

1> 右键工程,点击 Add Framework Support2> 选中 Maven,再点击 OK3> 工程根目录自动生成 pom.xml 文件,这样 工程就支持 Maven版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/che…

【组队学习】【31期】水很深的深度学习

水很深的深度学习 航路开辟者:刘洋领航员:陈宇航海士:刘洋、陈陟原、左凯文、初晓宇、刘羽中 基本信息 开源内容:https://github.com/datawhalechina/unusual-deep-learning内容属性:公测课程内容说明:本…

php返回结果判断,老司机在判断返回结果时翻了个身(ThinkPHP)

“这篇文章属于基本内容。看到它的学生检查他们的代码是否有同样的问题“序言小q又带着问题来了,今天的问题估计是大多数同志都会犯的问题。问题是使用ThinkPHP时查询返回的结果是否为空。你自信吗?你不知道的是空的!如果你是这样认为的&…

ZooKeeper客户端地址列表的随机原理

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nileader.blog.51cto.com/1381108/932948查看PDF版本 转载请用注明:ni掌柜nileadergmail.com 在之前一个文章《ZooKeeper Jav…

Intellij IDEA使用教程(超详细)

转自 http://www.phperz.com/article/15/0923/159067.html转载于:https://www.cnblogs.com/lijingran/p/8585430.html

【组队学习】【31期】青少年编程(Scratch 四级)

青少年编程(Scratch 四级) 航路开辟者:王思齐、马燕鹏领航员:马燕鹏航海士:王思齐、马燕鹏 基本信息 开源内容:https://github.com/datawhalechina/team-learning-program/tree/master/Scratch内容属性&…

java中mypoiexception,java - 如何使用Poi获取Java中单元格的数据验证源? - 堆栈内存溢出...

此问题包含多个不同的问题。首先,我们需要获取工作表的数据验证,然后为每个数据验证获取数据验证所适用的Excel单元格范围。 如果该单元格位于该单元格范围之一中,并且数据验证是列表约束,则进行进一步处理。 否则返回默认值。如果…

[20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED2.txt

[20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED2.txt--//简单探究12c TABLE ACCESS BY INDEX ROWID BATCHED特性.--//当使用12c时,执行计划出现TABLE ACCESS BY INDEX ROWID BATCHED,做一些探究.--//本文主要探究如何使用提示或者隐含参数控制这种特性.1.环境:SCOTTtest01…

Angularjs集成第三方js插件之Uploadify

有时候需要用一些第三方插件,比如datepicker,slider,或者tree等。以前的做法是直接通过jquery取得某个元素,然后调用某个方法即可。但在angularjs中,不能直接这么写,必须写在directive中。 开源项目Angular…

备考12月份电子学会青少年编程能力等级测试(图形化)的公益训练营即将开营

一、考试安排 考试方式 考试形式:在线居家考试(全国)报名时间:9月26日08:00 ~ 11月23日16:00退费截止时间:11月23日16:00准考证下载时间:11月30日 ~ 考前1天 考前集中测试时间 12月9日(周四…

mysql left join超时,MySQL 行锁超时排查方法优化

一、大纲#### 20191219 10:10:10,234 | com.alibaba.druid.filter.logging.Log4jFilter.statementLogError(Log4jFilter.java:152) | ERROR | {conn-10593, pstmt-38675}executeerror.updatexxxsetxxx ? , xxx ?whereRowGuid ?com.mysql.jdbc.exceptions.jdbc4.MySQLTra…

【优秀作业】蚁群优化算法

蚁群优化算法 一.概述 生物学家发现,自然界中的蚁群觅食是一种群体性行为,并非单只蚂蚁自行寻找食物源。蚂蚁在寻找食物源时,会在其经过的路径上释放一种信息素,并能够感知其它蚂蚁释放的信息素。信息素浓度的大小表…

RPC-原理及RPC实例分析

还有就是:RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞; (2)NIO:Non-Blocking IO, 同步非阻塞; 参考:IO多路复用,同步,异步,阻塞和非阻塞 区别 在学校期间大家都写过不少程序,比如写个…

hdu 4608 I-number

http://acm.hdu.edu.cn/showproblem.php?pid4608 直接暴力 代码&#xff1a; #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<cmath> #include<set> #include<map> #include<stack> #inc…

php tab标签,JavaScript代码分享:tab标签的切换

本文实例讲述了js实现点击切换TAB标签。分享给大家供大家参考。具体如下&#xff1a;这里演示的选项卡效果代码&#xff0c;无jq,纯JS来实现&#xff0c;灰色风格&#xff0c;没有怎么美化&#xff0c;或许看上去比较普通&#xff0c;不过兼容性和操作起来挺舒服的&#xff0c;…

二进制,十进制,十六进制

生活中其实很多地方的计数方法都多少有点不同进制的影子。 比如我们最常用的10进制&#xff0c;其实起源于人有10个指头。如果我们的祖先始终没有摆脱手脚不分的境况&#xff0c;我想我们现在一定是在使用20进制。 至于二进制……没有袜子称为0只袜子&#xff0c;有一只袜子称为…

D3.js系列——初步使用、选择元素与绑定数据

D3 的全称是&#xff08;Data-Driven Documents&#xff09;&#xff0c;顾名思义可以知道是一个被数据驱动的文档。听名字有点抽象&#xff0c;说简单一点&#xff0c;其实就是一个 JavaScript 的函数库&#xff0c;使用它主要是用来做数据可视化的。 D3 提供了各种简单易用的…

秦州:西瓜书 + 南瓜书 吃瓜系列 12. 聚类

Datawhale南瓜书是经典机器学习教材《机器学习》&#xff08;西瓜书&#xff09;的公式推导解析指南&#xff0c;旨在让在学习西瓜书的过程中&#xff0c;再也没有难推的公式&#xff0c;学好机器学习。 航路开辟者&#xff1a;谢文睿、秦州开源内容&#xff1a;https://githu…

php 5/0,PHP 5.5.0 released.该怎么解决

当前位置:我的异常网 PHP PHP 5.5.0 released.该怎么解决PHP 5.5.0 released.该怎么解决www.myexceptions.net 网友分享于&#xff1a;2013-08-02 浏览&#xff1a;12次PHP 5.5.0 released.The PHP development team is proud to announce the immediate availability of PH…

Windows下SVN权限配置过程详解

本节讲解一下Windows下SVN权限配置说明&#xff0c;针对的是一个目录下多库的情况&#xff0c;下面是具体的介绍&#xff0c;希望通过本文的学习&#xff0c;你能够对SVN权限配置问题有更加深刻的认识。 1、本文档适用于对Subvesion的自带服务svnserve进行权限配置&#xff0c;…

胡小明:大数据应用方向思考

一、警惕大数据过热 1.1 过热产生盲目性 国内大数据的宣传早已过热&#xff0c;很多区县级政府也在考虑成立大数据局&#xff0c;政府对大数据热几乎没有抵抗力&#xff0c;企业没有紧跟就对了&#xff0c;在大数据高潮中反省政府的大数据行为、冷静一下头脑是有益的&#xff0…

Datawhale组队学习周报(第040周)

本周报总结了从 11月15日至11月21日&#xff0c;Datawhale组队学习的运行情况&#xff0c;我们一直秉承“与学习者一起成长的理念”&#xff0c;希望这个活动能够让更多的学习者受益。 第 31 期组队学习已经与大家见面了&#xff0c;这次组队学习一共 11 门开源课程&#xff0…

matlab 无序数对,MATLAB中sort函数对矩阵数进行排序

(1)Bsort(A) 对一维或二维数组进行升序排序,并返回排序后的数组,当A为二维时,对数组每一列进行排序.eg: A[1,5,3],则sort(A)[1,3,5]A[1,5,3;2,4,1],则sort(A)[1,4,1;2,5,3](2)Bsort(A,dim),对数组按指定方向进行升序排序,dim 1,表示对每一列进行排序,,dim2表示对每一行进行排序…

云智易获上海CIO联盟“年度物联网云平台技术创新奖”

6月23日&#xff0c;云智易作为国内领先物联网云平台&#xff0c;受邀出席“跨界融合 聚势谋远”上海CIO联盟峰会。本次大会汇聚了全球各地各行业300位精英翘楚&#xff0c;共话未来发展趋势。 在本次大会中&#xff0c;云智易物联云平台凭借强大的技术实力、成熟的平台架构、…

d3d导致cairo不正常

最近要把cairo集成到项目中,却发现cairo不能工作了 折腾了两天才找到了原因:cairo的一个trick导致浮点数计算错误: http://blog.163.com/lvan100yeah/blog/static/6811721420131191434556/ 给d3dcreate加上D3DCREATE_FPU_PRESERVE之后一切正常 如果我直接调cairo的代码就能早点…

青少年编程竞赛交流群周报(第038周)

2021年11月21日&#xff08;周日&#xff09;晚20:00我们在青少年编程竞赛交流群开展了第三十八期直播活动。 一、直播内容 我们直播活动的主要内容如下&#xff1a; 讲解了上次测试中小朋友们做错的题目 Scratch青少年编程能力等级测试模拟题&#xff08;四级&#xff09;。…

php的遍历方法,PHP数组遍历方法总结

在PHP中数组分为两类&#xff1a; 数字索引数组和关联数组。其中数字索引数组和C语言中的数组一样&#xff0c;下标是为0&#xff0c;1&#xff0c;2…而关联数组下标可能是任意类型&#xff0c;与其它语言中的hash&#xff0c;map等结构相似。下面介绍PHP中遍历关联数组的三种…

二、Silverlight中使用MVVM(二)——提高

在第一篇文章中的示例中&#xff0c;我们已经简单的了解了应用MVVM模式的流程&#xff0c;我的本意是你已经了解了一点MVVM的概念&#xff0c;然后又没有一个较好的例子学习&#xff0c;可以跟着我一起学习MVVM模式&#xff0c;所以这个部分&#xff0c;都是没有理论知识的&…