前言
真诚的和大家说一句抱歉,因为最近家庭原因 + 我自己思想的懒惰,所以导致有一段时间没有更新技术文章,一直都在憋这一篇关于学习 Java 如何从入门到精通的文章,在没有发文的这段时间很煎熬,甚至无数次的想放弃写这篇文章,因为这篇文章不是很好写,我付出大量的时间和心血来收集大量的素材、研究大量的书本进而熔铸成这篇文章,希望对你有所帮助。
PS:可能文章某些观点大家不认同,甚至学习路线大家不认可,请尽可能的喷我,我会心平气和的回复。文章中某些知识点不是很全面,我会在后面慢慢重构。
注意:文章中有大量的链接无法显示,我在文末汇总成为了 PDF,你可以直接在文末公众号领取!!!
其实学习 Java 学到什么程度算是精通,这个其实没有盖棺定论的,也不是说你拿个年薪几十万的 offer 就可以自诩精通了。另外,每当面试的时候简历上填个精通 offer 的家伙我就觉得很搞笑,没有几个熬得过开出门左拐的命运。但是我认为,如果市面上这些资料、书籍你都啃的差不多,你能在所有的 Java 程序员中跻身前 0.1% 的话,你就可以达到"精通" 这个阶段了,因为没人比你强了,你当然是精通了。
所以,我还是选择罗列一些知识点推荐给大家,如果你都能够掌握并且真正理解这些东西的话,那你就可以到了精通这个阶段了。
首先要学的是计算机基础知识,因为 Java 不是像 Python 那样简单,它是需要一定基础的,如果你上来直接硬肝 Java,那么 90% 的几率你会放弃。
因为要想学好 Java ,你就得理解什么是面向对象的设计思想,而面向对象的这种设计思想又不是刚开始学习编程的新人能够熟练掌握呢?那怎么办呢?这不是死局了吗?
其实,如果要想真正理解这种设计思想的话,你要首先学的不是 Java,而是 C 语言。
为什么呢?因为 C 语言是面向过程的,什么是面向过程和面向对象的设计思想呢?我给你举个例子你就知道了。
面向过程与面向对象的区别,由“如何把大象装进冰箱”来看:
一、面向过程
为了把大象装进冰箱,需要3个过程。
思路:
1、把冰箱门打开(得到打开门的冰箱)。
2、把大象装进去(打开门后,得到里面装着大象的冰箱)。
3、把冰箱门关上(打开门、装好大象后,获得关好门的冰箱)。
根据上面的思路,可以看到,每个过程都有一个阶段性的目标,依次完成这些过程,就能把大象装进冰箱。
二、面向对象
为了把大象装进冰箱,需要做三个动作(或者叫行为)。每个动作有一个执行者,它就是对象。
思路:
1、冰箱,你给我把门打开。
2、冰箱,你给我把大象装进去(或者说,大象,你给我钻到冰箱里去)。
3、冰箱,你给我把门关上。
依次完成这些动作,你就可以把大象装进去。
这里我只是举个例子,可能大家还是很懵逼,这里我就要给你推荐几本入门 C 语言的视频和书籍了。
关于书籍推荐,可以看看这篇回答
初学C语言,有什么好书推荐?
书一般是能够静下心来的人看的,一般初学者最大的问题就是很难静下心来编程,如果你觉得难以看得下去书的话,你可以看看这篇回答,里面的视频可以说很全了
有哪些优秀的c语言课程视频?
初学 C 语言周期大概是3 - 6 个月,学编程的捷径就是每天敲代码,比如 C primer plus 上面就有很多代码示例,你要对着敲,课后练习要跟着做,坚持 3 - 6 个月,你会感谢你自己的坚持。
学到这里,你就可以说 C 语言基本入门了。
如果 C 语言你能够坚持下来的话,那么 Java 入门,那会非常容易了,其原因有两点
C 语言基本上可以说是高级语言的鼻祖,如果你 C 学得好,那么学其他语言都会非常容易。
C 语言比 Java 稍微难点,而且有很多特性非常像,从一门比较难的语言 -> 一门难度中等的语言,那会变得很容易。
好了,那么从现在开始,我们就要进入 Java 的学习环节了。
学习 Java,我将会从三个阶段来介绍,分为初级、中级和高级
Java 基础
什么是初级 Java 的水平呢?我认为就是理解 Java 的语法规则、语言特性,这么说有点干瘪,直接上思维导图!
就这一张图,如果你能把图中内容都理解的差不多,那你就可以说是入门 Java 了,但是这里要注意一个概念,这并不等于说你是一个合格的初级 Java 程序员了,因为要想达到初级 Java 程序员的水平,你要会能干活,能干活的标准是你要懂框架,不要急,我们后面会说。
有人问图中为什么没有并发或者 Java 虚拟机这些,这些属于中高级内容,刚开始学 Java 不用懂什么并发和 JVM!!!有一些人或者培训班都喜欢秀自己懂 xxx ,懂 xxx ,这不就是误导小白么。
那么话又说回来了,如何才能学习并了解到上面这些内容呢?接下来重点来了!!!
如果你能看到这里,我就认为你养成了每日编程的习惯,此时的你能够静下心来编程了。
那么我首先给你推荐一本初学 Java 非常合适的一本书
Head First Java
《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导。此书是根据学习理论所设计的,让你可以从学习程序语言的基础开始一直到包括线程、网络与分布式程序等项目。最重要的,你会学会如何像个面向对象开发者一样去思考。
书中涉及的 Swing 图形化接口和 GUI 这部分可以不用学习,或者作为简单了解,因为现在几乎很少有人 拿 Swing 开发桌面化程序。
这本书可以说是非常适合小白的一本了,零基础就可以看,Head First 系列的书籍一般都是语言诙谐幽默,读起来不累,而且书中有非常多锻炼思维的游戏/方法,对于有经验的人来说,看这本书感觉非常弱智,但是对于零基础或者 Java 新手来说,这是一本非常适合系统学习 Java 和查漏补缺的一本书。
Java 核心技术卷一
有人把 Java 核心技术卷一作为入门书籍推荐,其实我觉得并不友好,虽然这也是一门基础书籍,但是对不同的人来说,这本书的接收程度不同,我推荐看完上面的 Head First Java 再看这本。
Java 编程思想
Java 编程思想就是一本神书了,不管你是初、中还是高级程序员,你每次看这本书的时候都会有新的收获
这本书同样不适合刚开始入门 Java 的同学看,甚至前三章并不友好,因为 Java 编程思想只是讲面向对象过程的设计思想就用了很大篇幅,这本书包含很多示例代码,我强烈推荐你要学习里面的代码思想,到工作中,这些编码思想和代码规范会非常有用!!!
所以综上所述,入门 Java 你需要掌握的基础知识有
这里就需要区分不同的电脑类型了,一种是 Mac ,一种是 Windows,很少有直接拿 Linux 进行开发的,所以我们这里不探讨 Linux 的方式
Mac 上的相关配置可以看这篇
Windows 上的相关配置可以看这篇
这里你需要使用集成开发工具,一种是 Eclipse 、一种是 IDE,初学者建议使用 Eclipse,因为 IDE 对新手并不友好。
Eclipse下载与安装
Java 入门程序编写
好了,如果你能按照上面的步骤一步步走下来,那么恭喜你,你能够成功编写一个 Java 入门程序了。
现在,你就可以进入到 Java 相关知识点的学习了。
首先,你需要先认识到什么是面向对象的设计思想。
这里我推荐你看一下 《Java编程思想》 的第一章和二章
知乎的这个回答也能帮助你理解 什么是面向对象编程思想?
关于 Java 变量,可以参考这篇文章
Java 中的变量有很多,很容易让初学者不知所措,这里我写了一篇 Java 变量解惑的相关文章
Java 中到底有哪几种变量
Java 控制流程
Java 访问控制权限
面向对象
- 继承
封装
多态
面向对象最主要有三大特征:继承、封装和多态,你可以参考这篇博客 面向对象的三大基本特征和五大基本原则
Java 抽象类和接口 ,也可以参考这篇文章 深入理解Java接口和抽象类
Java 异常 Exception 和 Error ,这里我也写了一篇文章 看完这篇Exception 和 Error,和面试官扯皮就没问题了
Java 集合
泛型 ,深入理解泛型可以参考这篇文章 java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一
内部类,系统化的了解内部类,可以参考这篇文章 Java内部类详解 - Matrix海子 - 博客园
Java IO ,深入理解 Java IO ,可以参考这篇文章 为什么一个还没毕业的大学生能够把 IO 讲的这么好?
Java 枚举 Enum ,全面理解 Enum,就这一篇文章
反射 ,这篇文章简直太好了 学会反射后,我被录取了!(干货)
Java 注解
上面所有的内容和思维导图,都可以在这篇文中获取
Java技术核心总结 PDF 下载
上面都是以文章方向为主的自学流程,下面是视频方向的自学流程。
一、Java基础 1、尚硅谷宋红康(强力推荐):
尚硅谷宋红康Java基础教程(java入门神器、配套资料齐全)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
2、黑马Java基础+就业班+各种项目idea版本(推荐):
黑马Java基础+就业班+各种项目idea版本(正在更新)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
3、动力节点Java零基础教程视频:
Java零基础教程视频(适合Java 0基础,Java初学入门)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
4、北京尚学堂高琪(推荐):
高淇老师应各位网友要求又更新了JAVA300集_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
5、求知讲堂:2019求知讲堂零基础Java入门编程视频教程 高口碑 无废话 无尿点 :
2019求知讲堂零基础Java入门编程视频教程 高口碑 无废话 无尿点_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
6、尚硅谷Java8新特性+JUC+NIO:
尚硅谷Java8新特性+JUC+NIO_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
如果你能掌握上面的基础内容部分,我觉得你应该花至少 3 - 6 个月,如果你能坚持下来的话,这里我需要鼓励一下你,但是不要自满,因为这才只是最最最最基础的部分,但是现在你可以说是一只脚踏入 Java 大门了。
设计模式
设计模式放在这里不是让你马上就要学习的(当然你也可以学习,没有人能阻碍你学习),因为设计模式涉及到你工作的方方面面。有些设计模式你可能这辈子都用不到,但是你需要了解其思想,以便写出思路严谨,条理清晰的代码。
设计模式我给你推荐几本书,你看哪个都行。
Head First 设计模式
这本书虽然只有 14 章,但是却介绍到了所有的二十三种设计模式,每一种设计模式都有对应的应用案例,以风趣幽默的语言描述来一步一步为你揭开设计模式的面纱,告诉你设计模式的演进过程。
读这本书不仅仅是学习知识,而是在学习一种思考的方法,学习一种认知的技巧,学习一种成长的阶梯。总之,用你闲暇的时间来读这本书,并不亚于你专注的工作或学习。
图解设计模式
设计模式更多是一种思想,而不是一种固定的代码编写方式,千万不要局限于这些条条框框。日本人的书写的就是非常通俗易懂,适合小白。194张图表 + Java示例代码 = 轻松理解 GoF 的23种设计模式。
本书以浅显易懂的语言逐一说明了 GoF 的 23 种设计模式。在讲解过程中,不仅搭配了丰富的图片,而且理论结合实例,用 Java 语言编写代码实现了设计模式的程序,让程序真正地运行起来,并提供了运用模式解决具体问题的练习题和答案。除此以外,本书在必要时还对 Java 语言的功能进行补充说明,以加深读者对 Java 的理解,在学习设计模式的同时也在复习 Java。
上面这两本书非常适合初学者学习设计模式
设计模式
这本书结合设计实作例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。书中分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别有用。此书适合大学计算机专业的学生、研究生及相关人员参考。
这本书并不适合初学者,因为这本书是用C++ 写的,如果你没有对 C++ 语法有了解的话,不容易看懂。下面这段评价我觉得非常合适。
重学 Java 设计模式
给大家推荐一下我的朋友
小傅哥
写的重学 Java 设计模式,这本书是彩印的,作者写设计模式大概花了两年的时间,非常用心。书中包含大量的图示和例子。
本书从六大设计原则入手,警示我们在日常开发过程中需要注意代码的编写原则。同时,本书列举了大量生动形象的例子,在遇到相关业务场景时可以把代码写得非常漂亮。原则既是规范,也是日常开发过程中要遵守的约定;设计模式是在业务场景下能够使用的工具。遵守原则并在合适的场景下用合适的工具,你的代码将无懈可击!
设计模式不用看视频,就研读上面这几本就够了。
设计模式并不适合一口气读完,因为你看完几个设计模式就会容易混,相信我,你可以一周熟悉一个设计模式,这样在工作中你也可以使用。一口气看完所有,就会记住最后一个设计模式,相信我,亲身实践。。。。。。
Java 进阶
Java 进阶需要学习的东西就有很多了,内容涉及许多方面,我们接下来就来和你聊聊
注意:当你学会这些 Java 进阶的内容后,不代表你就是一个中级程序员了,恰恰相反,你需要把这些知识融会贯通并运用到项目/实践中去。掌握多少就看你自己了。
首先是 Java 多线程,这里我先列出来多线程应该掌握知识的大纲
这里有个我小伙伴整理的一个多线程思维导图,不知道对你有没有帮助,获取地址如下
搞懂这 10 张脑图后,我膨胀了。
或者微信搜索「程序员cxuan」,回复「秋招」有很多更优质的思维脑图。
那么先抛开这张脑图不看,我先给你推荐几本关于 Java 并发方面的书。
Java 并发编程实战
不要犹豫了,这本书就是并发编程界的王者,也是你必看的一本书。
外版书籍不会和你讨论什么源码啥的,他们只看思想,思想有了,实现也就轻而易举。所以并发编程实战讨论更多的是思想,这本书同时也罗列了很多伪代码和应用场景来验证这些思想。
这本书并不完全适合国内互联网现状,因为在八股文、背书如此盛行的今天,想要进大厂,成为"高级程序员",你还要懂一些八股文。
Java 并发编程艺术
所以如果你想要在国内找工作的话,那么下面这本书,更适合你。不要为我为什么,阿里人写的。
这些书罗列出来的一些知识点,其实都是大厂所经常问到的,所以这本书值得你仔细研读。
Java 并发编程之美
这本书比较适合初学者,我虽然没有系统看过,但是也翻了一下,这也是学习 Java 并发编程一本不错的书,可以当作查漏补缺或者巩固的一本。
图解Java多线程设计模式
不得不说,日本人写的书就是通俗易懂,充满趣味性,这点不得不佩服,这本 Java 多线程设计模式,就是了解多线程中使用设计模式一本非常好的书籍。本书通过具体的Java 程序,以浅显易懂的语言逐一说明了多线程和并发处理中常用的12 种设计模式,帮助读者加深对多线程和并发处理的理解,并掌握其使用技巧。
书籍看这几本就差不多了,而且 Java 并发这块我不推荐你看视频,最好是亲自验证,视频这个东西毕竟也是别人吃过的剩下的,最主要的还是要穿一手鞋,亲自验证。
说到这里,那么 Java 并发这块你应该掌握的知识点都有哪些呢?划重点划重点了!!!
进程和线程的概念,阮一峰老师有一个通俗易懂的解释 进程与线程的一个简单解释 - 阮一峰的网络日志,从操作系统角度理解进程和线程,可以看一下我写的这篇文章
Java 多线程基础, 可以看下我写的这篇文章,介绍了基本的 Java 多线程方法和操作2w字 + 40张图带你参透并发编程!
Java 线程状态以及线程状态的转换,Java线程的6种状态及切换(透彻讲解)_
Java 线程间的通信机制
理解 Java 内存模型
happens-before 原则 或者阅读 Java 并发编程艺术的第三章
volatile 关键字解析
Synchronized 关键字解析
CAS 与原子操作 这个我写了一篇解析原子类的文章 一场 Atomic XXX 的魔幻之旅,为什么要有 AtomicReference ?
AQS 大厂面试必问的 AQS ,这篇文章简直太好了 ,我画了35张图就是为了让你深入 AQS
线程池相关原理 肝完这篇线程池,我咳血了
线程池这部分内容的思维导图
锁这部分内容我也汇总了一个思维导图
多线程工具类
对了,我这里也总结了一本 《深入浅出 Java 多线程》,你可以在 太赞了!阿里几位工程师重写了 《Java 并发编程》 下载
上面的内容如果你能理解,那么你 Java 这部分已经可以算是高级水平了,你去大厂面试问一些八股文,多线程这块问题不大了。
JVM
Java 虚拟机也叫做 JVM ,这部分是判断一个 Java 程序员分水岭的关键,如果你想要达到中高级 Java 程序员的层次,那么 JVM 是你必须要突破和提高的一个点。下面我就来和大家聊一下 JVM 都需要了解哪些内容。
还是照例先给大家介绍几本了解 JVM 非常优秀的书籍
深入理解 Java 虚拟机
这本书是你必看的一本,而且作者是我们国内的周志明,国内作者一般讲实现比较多,专业术语比较少,这本书讲的更是通俗易懂,虽然有许多概念,不过周志明大佬都给出了示例和解释
豆瓣能给出国内作者 9.5 的评分,可知这本书写的有多好了,这本书是了解 JVM 非常经典的一本书,五星强烈推荐。
Java 虚拟机规范
Java 虚拟机规范同样也是周志明大佬参与翻译的一本,这本书的权威性不容置疑,其实就是按照 Java 官方文档来写的,可以说看完这一本在面试的时候聊到 JVM 你都能够给出 "官方" 回答,大大增加你的面试通过几率。
按理说学习 JVM 掌握上面两本书就 OK 了,但是这里我还是给喜欢学习的小伙伴们一些拓展书籍推荐。
HotSpot 实战
深入浅出地讲解了 HotSpot 虚拟机的工作原理,将隐藏在它内部的本质内容逐一呈现在读者面前。本书适合于已具有一定 Java 编程基础的读者,以及在 Java 或基于 JVM 的编程语言平台下进行各类软件开发的开发人员、测试人员和运维人员。对于 JVM 和编程语言爱好者来说,《HotSpot 实战》也具有一定的学习参考价值。
自己动手写 Java 虚拟机
我们大家都知道,学习编程最好的方式就是动手实践,幸好 JVM 我们也能自己写了。
自己动手写 Java 虚拟机是《自己动手系列》中的一本,这个系列有很多硬核的书籍,给大家看一下。
如果大家有时间的话,我推荐大家按着书中的内容写一个虚拟机,对于掌握理解其运行原理有非常大的帮助。
学习 JVM 我同样也不推荐大家看视频,看书就够了,学习 JVM 在于让你去想去思考,你如果非要让我推荐一个视频的话,那我也愿意双手奉上
尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机)
JVM 所涉及到的一些内容
获取地址如下
搞懂这 10 张脑图后,我膨胀了。
主要涉及内容
Java 内存划分与内存管理
JVM 中的垃圾收集器,这里推荐两篇文章 搞定JVM垃圾回收就是这么简单,或者是这一篇 JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)
JVM 性能监控,这里推荐两篇文章 噜噜呀:必须掌握的JVM性能监控工具 和 别再说你不会 JVM 性能监控和调优了,看完这篇再发言!
JVM 调优,或者是这一篇 JVM性能调优(4) -- 性能调优工具
JVM 中的类文件结构
JVM 类加载机制,或者这一篇 零壹技术栈:JVM系列(五) - JVM类加载机制详解
JVM 字节码,JVM 字节码这部分内容,我建议看一本书,这本书就是
这是一本揭示 JVM 字节码“黑科技”的著作,它从原理和应用两个维度深入剖析了 JVM 字节码。书中内容涉及 JVM 字节码的大部分应用场景,如 Java 性能优化、软件防护与破解、APM 等,通过大量实战案例讲解了它在这些场景中的实操技巧。
这里再给大家推荐几篇不错的字节码文章
字节码增强技术探索
JVM基础系列第5讲:字节码文件结构 - 陈树义 - 博客园
轻松看懂Java字节码
到现在为止,Java 语言这条线算是走通了,虽然上面关于并发和 JVM 我列出了学习路线,但是这个学习路线并不是说只能学了并发才学 JVM,其实上这两个掺杂着一起学效果会更好,因为并发会涉及到对于 volatile synchronized 和 内存模型的关系,内存模型又是 JVM 中的内容,所以这两块其实是相辅相成的。而且没必要学并发和 JVM 的时候就要一股脑把东西全看明白,这些内容是中高级的东西,你可以一周看一篇都行。
上面这些内容真正掌握起码要花 2 - 3 年的时间,也不是说这三年你就学上面这些东西,你可以学习其他的,我下面推荐的这些,就是在这个时间段内你应该掌握的。
MySQL
MySQL 其实要和 Java 基础以及 Java 并发、JVM 一起学习,甚至要比并发和 JVM 还要早,也就是说,你学完 Java 基础就可以学 MySQL 了。
此时的 MySQL 我指的是 MySQL 基础,因为 MySQL 博大精深,想要深入理解 MySQL 不容易,而且我们一般 Java 开发把 MySQL 掌握到中级水平就可以了。
MySQL 初级水平就是要求你会写 MySQL ,这里推荐几本书,由初级到高级,大家可以根据自己的水平和能力看对应的书籍。
MySQL 基础教程
这本书是日本公认的 MySQL 入门首选教程,原版长销13年,好评如潮,非常详细。
SQL 基础教程
又是日本人写的一本高分书。
这本书介绍了关系数据库以及用来操作关系数据库的 SQL 语言的使用方法。书中通过丰富的图示、大量示例程序和详实的操作步骤说明,让读者循序渐进地掌握 SQL 的基础知识和使用技巧,切实提高编程能力。每章结尾设置有练习题,帮助读者检验对各章内容的理解程度。另外,本书还将重要知识点总结为“法则”,方便读者随时查阅。
深入浅出 MySQL
这本书是零基础学习 MySQL 非常好的一本书,由浅入深,文字通俗易懂。
但是这本书非常厚,涵盖的内容非常多,不容易把握重点。
MySQL 必知必会
相对来说,这本书就比较薄了。
同样也是入门 MySQL 非常值得看的一本。书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。通过重点突出的章节,条理清晰、系统而扼要地讲述了读者应该掌握的知识,使他们不经意间立刻功力大增。
SQL 必知必会
SQL 语法简洁,使用方式灵活,功能强大,已经成为当今程序员不可或缺的技能。
这本书是深受世界各地读者欢迎的 SQL 经典畅销书,内容丰富,文字简洁明快,针对 Oracle、SQL Server、MySQL、DB2、PostgreSQL、SQLite 等各种主流数据库提供了大量简明的实例。与其他同类图书不同,它没有过多阐述数据库基础理论,而是专门针对一线软件开发人员,直接从SQL SELECT 开始,讲述实际工作环境中最常用和最必需的 SQL 知识,实用性极强。通过本书,读者能够从没有多少SQL经验的新手,迅速编写出世界级的 SQL!
上面推荐了一些 MySQL 的基础书籍,把上面任意 1 - 2 本啃会了之后,那么你的 CRUD 的功力就初步具备了。恭喜你离初级 Java 程序员又近了一步。
下面我会推荐一些中高级内容,这些内容会一直伴随着你的整个开发生涯,是的你没听错,如果你做开发,那么下面这些书中的内容,真的会伴随着你整个开发生涯,不论任何语言。
高性能 MySQL
这本书太优秀了!这本书是 MySQL 领域的经典之作,拥有广泛的影响力。我之前和出版社联系给读者送了 20 本书,超过一半的人都要的是 高性能MySQL,由此可见这个影响力!
原文链接:cxuan 给大家送 20 本书!!!
MySQL 是怎样运行的
这本书是去年刚出的,小孩子大佬非常牛批,之前在掘金写了一篇小册,好像是购买人数最多的课程,这本书就是小册的汇总,非常硬核。
本书采用诙谐幽默、通俗易懂的写作风格,针对上面这些问题给出了相应的解答方案。尽管本书的表达方式与司空见惯的学术派、理论派IT图书有显著区别,但本书的确是相当正经的专业技术图书,内容涵盖了使用 MySQL 的同学在求职面试和工作中常见的一些核心概念。无论是身居 MySQL专家身份的技术人员,还是技术有待进一步提升的 DBA,甚至是刚投身于数据库行业的“萌新”人员,本书都是他们彻底了解 MySQL 运行原理的优秀图书。
数据库索引与优化
这本书大家可能听的比较少,但这是很好的关于索引介绍的书,提供了估计查询支行时间和方法,并解释了索引对于查询效率的影响方式,对实践和指导意义。而且数据库的索引和优化是 MySQL必问的重点。
上面推荐的这些算是进阶篇,而我们下面推荐的这几本就算是 MySQL 的高级内容了。
MySQL 技术内幕:InnoDB存储引擎
作为 MySQL 5.5 之后的首选存储引擎,InnoDB 存储引擎到底有哪些特别之处?这本书会给你详细介绍一波。这本书从源代码的角度深度解析了 InnoDB 的体系结构、实现原理、工作机制,并给出了大量最佳实践,能帮助你系统而深入地掌握 InnoDB,更重要的是,它能为你设计管理高性能、高可用的数据库系统提供绝佳的指导
MySQL技术内幕
《MySQL技术内幕(第5版)》是MySQL方面名副其实的经典著作,全面介绍MySQL的基础知识以及MySQL有别于其他数据库系统的独特功能,书中特别关注如何高效地使用和管理MySQL。《MySQL技术内幕(第5版)》由4个部分组成:第一部分集中介绍与数据库使用相关的一些基本概念,第二部分重点关注的是自己如何动手编写和使用 MySQL 的程序,第三部分主要是面向那些负责数据库管理的读者,第四部分提供了一些参考附录。书中包含大量示例,详尽地演示了MySQL的各项功能特性。此外,本书还为使用C语言、PHP语言和Perl语言开发数据库应用的读者提供了相关内容。《MySQL技术内幕(第5版)》不仅适合MySQL初学者阅读,也适合想要深入了解 MySQL 的数据库管理人员和开发人员参考。
MySQL 内核
非常优秀的一本书,这本书在 InnoDB 介绍性图书的基础之上,更深入地介绍InnoDB存储引擎的内核,例如latch、B+树索引、事务、锁等,从源代码的角度深度解析了InnoDB的体系结构、实现原理、工作机制,并给出了大量最佳实践,希望通过《MySQL内核:InnoDB存储引擎 卷1》帮助用户真正了解一个数据库存储引擎的开发。
好了,推荐了这么多本 MySQL 的书籍,那么有没有 MySQL 的视频推荐呢?啊?MySQL 还用看视频吗?MySQL 不好讲呀,初级的直接对着命令敲就可以了,高级的内容,很多讲师也讲不清楚,更别提内核这块了,所以大家还是看书把,看书就够了!
那么关于 MySQL ,内容其实是很多的,不过为了这个回答能作为一个标准回答来解释,我耐着性子给大家把所要学习的内容罗列一下,读者朋友们如果觉得我的付出是值得的,不妨给这篇文章点个赞哟!
获取地址:
搞懂这 10 张脑图后,我膨胀了。
那么 MySQL ,走你!
MySQL 基础入门
SQL 基础使用
查询语言分类
DDL 语句
如何使用 MySQL 帮助文档
按层次查询
MySQl 数据类型
数值类型
整数
日期类型
YEAR
TIME
DATE
DATETIME
TIMESTAMP
字符串类型
CHAR 和 VARCHAR
BINARY 和 VARBINARY
BLOB
TEXT
ENUM
SET
MySQL 运算符
算数运算符
比较运算符
逻辑运算符
位运算符
MySQL 常用函数
字符串函数
数值函数
日期和时间函数
流程函数
其他函数
上面这些内容都可以在这篇文章中找到,我自己写的关于 MySQL 的实战入门总结
138 张图带你 MySQL 入门
MySQL 开发中应该掌握哪些知识点
MySQL 存储引擎
存储引擎概述
存储引擎特性
MyISAM
选择合适的存储引擎
MySQL 字符集
索引的设计和使用
索引概述
索引设计原则
视图
什么是视图
对视图的操作
创建或者修改视图
存储过程
存储过程使用
创建存储过程
变量的使用
用户变量
MySQL 流程介绍
触发器
创建触发器
删除触发器
查看触发器
触发器的作用
上面这些内容,可以在我自己写的 MySQL 开发中找到
47 张图带你 MySQL 进阶!!!
MySQL 高级内容,主要包括
上面这些内容,你可以在我自己写的关于 MySQL 高级部分找到
炸裂!MySQL 82 张图带你飞!
以上这些 MySQL 内容都是偏重日常开发和使用,没有深入到 MySQL 架构和底层,所以下面我们介绍的这些内容,会涉及到 MySQL 架构和底层的相关内容,这些内容,也是你在 CRUD 的背后,需要下的功夫。
这些内容我也在学习,因为我是 MySQL 新手,所以这部分内容应该不是特别全,大家可以追更这个答案,我会在后面更新这个回答。
这里再提醒大家一点,MySQL 高级内容是你在工作中慢慢掌握的,如果你想要成为初级 Java 程序员,当下不需要掌握这些内容,把我写的几篇文章看完,并且跟着敲下来,那么就可以说你的 MySQL 已经达到入门水准了,可以进行下面的学习了!!
Maven
在学习框架前,我建议你先了解一下什么是 Maven,以及项目为什么要使用 Maven,狼哥的这个 Maven 系列可以了解下。
Maven学习总结
市面上关于 maven 的书不多,你可以看下这本
Maven 对于初学者来说,只做为了解即可,但是 Maven 这个优秀的架构是如何简化代码的,如何让我们更方便的使用,以及 Maven 中的一些不为人知的秘密,你都可以在这本书中找到。
下面该学啥了?终于到了框架了!!!作为一门开发,框架就是你的武器!!!就是玩儿!在抗美援朝的时候,志愿军使用轻武器加迫击炮照样干翻米国骑兵第一师和陆战第一师这种王牌军队。
框架要学习的就是 SpringMVC 、Spring 、MyBatis,SSH 框架已经不行了,至于为什么不行,可以看一下这篇回答
JAVA的三大框架是什么?
框架首先要学的就是 MyBatis
MyBatis
MyBatis 入门,看一本书就够了。
MyBatis 从入门到精通
这本书是我刚开始学 MyBatis 的时候看的,书中的内容我对照着都敲了一遍,可以说是非常有参考价值的一本。
《MyBatis从入门到精通》中从一个简单的MyBatis查询入手,搭建起学习MyBatis的基础开发环境。通过全面的示例代码和测试讲解了在MyBatis XML方式和注解方式中进行增、删、改、查操作的基本用法,介绍了动态SQL在不同方面的应用以及在使用过程中的最佳实践方案。针对MyBatis高级映射、存储过程和类型处理器提供了丰富的示例,通过自下而上的方法使读者更好地理解和掌握MyBatis的高级用法,同时针对MyBatis的代码生成器提供了详细的配置介绍。
深入理解 MyBatis ,你可以参考
MyBatis 技术内幕
嗯,这本书其实可以说是把 MyBatis 的一些核心特性和核心组件说完了,《MyBatis 技术内幕》旨在为读者理解 MyBatis 的设计原理、阅读 MyBatis 源码、扩展 MyBatis 功能提供帮助和指导,让读者更加深入地了解 MyBatis 的运行原理、设计理念。希望《MyBatis 技术内幕》能够帮助读者全面提升自身的技术能力,让读者在设计业务系统时,可以参考 MyBatis的 优秀设计,更好地应用MyBatis。
这本书我还是强烈推荐给大家的。
另外,你也可以去看 MyBatis 官方文档 mybatis - MyBatis 3
英文版的看不懂,汉化的也给你安排了。mybatis - MyBatis 3
MyBatis 这部分内容可以去看一些视频
【狂神说Java】Mybatis最新完整教程IDEA版通俗易懂
2020最新MyBatis教程【IDEA版】-MyBatis从入门到精通
那么 MyBatis 都应该掌握哪些内容呢?当然你要会用 MyBatis 了,用法直接参见官网或者 MyBatis 从入门到精通这本书就可以了。
MyBatis 基础架构
MyBatis 核心配置之 Executor
MyBatis 核心配置之StatementHandler
MyBatis 核心配置之 ParameterHandlers
MyBatis 核心配置之 ResultSetHandler
MyBatis一级缓存详解
MyBatis 二级缓存详解
Mybatis源码分析-解析器模块
面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他
MyBatis源码解析-类型转换篇
MyBatis源码解析 - 资源加载模块
Mybatis源码解读-设计模式总结
【MyBatis源码分析】Configuration加载(上篇)
【MyBatis源码分析】Configuration加载(下篇)
我上面给出的这些连接,都是让你在工作中逐步掌握的,MyBatis 要是达到能够开发的程度,你只需要看完 MyBatis 从入门到精通或者一门视频课程就可以了。
Spring
在学完 MyBatis ,就该学习我们的核心框架 Spring 了,Spring 能风靡到现在一定有他的道理,等你到工作中再慢慢体会它的精髓。
学习 Spring ,我首先给你推荐的一本书就是 Spring 实战,也就是 Spring In Action,这本书我认为即使学习 Spring 最好的一本,没有之一了。
这个评价我认为是有些低了,还有评价说是什么不注重思想的,这只是一本实战书诶,又不是讲思想的,不能要求一本书能够涵盖所有的内容吧,只要这本书能够给出实战案例,代码示例,清楚的讲明白逻辑,我觉得就是好的。
Spring 揭秘
这本书和上面的 Spring 实战一起学习,那么 Spring 你就能击败大部分选手了,这两本书是绝配。这本书更多讲解的是方案和思想。这本书没有教程似的训导,更多的是说故事般的娓娓道来,本书是作者在多年的工作中积累的第一手 Spring 框架使用经验的总结,深入剖析了 Spring 框架各个模块的功能、出现的背景、设计理念和设计原理,揭开了 Spring 框架的神秘面纱,使你“知其然,更知其所以然”。每部分的扩展篇帮助读者活学活用 Spring 框架的方方面面,同时可以触类旁通,衍生出新的思路和解决方案。
关于 Spring 基础的视频,我推荐下面几个
【狂神说Java】Spring5最新完整教程IDEA版通俗易懂
尚硅谷-Spring5框架最新版教程(idea版)
作为进阶学习,我推荐宁看看官网
Core Technologies
Spring 官网的权威性不用我多说了吧,但是官网有个特点,这个不只是 Spring 特有的,几乎所有的外国官网都不会带你分析源码,所以如果你想要了解设计思想和理论精髓,还是要撸源码。
撸源码当然很费劲了,这里推荐给你两本书可以搭配着看下,网上对这两本书的褒贬不一,我不强烈推荐任何一本。。。。。。
Spring 源码深度解析
这本书我看了一些,以我目前的能力水平可能还无法完全看懂这本书,里面的内容非常深奥,不过如果你对 Spring 源码有一些研究的话,可以看看。
Spring 技术内幕
这本书和上面一样,代码比较多,但是解释相对较少,适合对 Spring 源码有一些了解的同学看。
推荐给你几个 Spring 源码的视频
这可能是B站讲的最好的SPRING源码教程(2021年最新版)
尚硅谷Spring注解驱动教程(雷丰阳源码级讲解)
当然,Spring 你终究还是要看源码的,所以还是硬着头皮啃源码吧,骚年们~
关于 Spring,有哪些需要学习的东西呢?
Spring学习(1)——快速入门
Spring学习笔记(二):Spring Bean装配
【Spring实战】高级装配 谢随安
谈谈对Spring IOC的理解
详解Spring IOC
Spring系列之beanFactory与ApplicationContext
BeanFactory 简介以及它 和FactoryBean的区别(阿里面试)
Spring(4)——面向切面编程(AOP模块)
Spring AOP 扫盲
Spring注解?啥玩意?
精进Spring—Spring常用注解【经典总结】
关于 Spring 的文章,可以看下 Spring 系列目录 查漏补缺
使用spring validation完成数据后端校验
Spring进阶 - 验证、数据绑定和类型转换
浅谈Spring的Resources体系
Spring 单独拿来使用的场景非常少,更多是作为框架的整合来用,Spring 最主要的特点就是两个:IOC 容器和 Aop,IOC 容器就是 Spring 和 各种资源整合的基础,可以说有了 IOC 的这个特点,才会有 bean 的装配,自动装配等等特性,而 Aop 就是减少业务耦合性的一种技术,让我们能够以"切面"的方式来看到业务关联性。最主要的就是这两项技术,把这两项技术弄懂了 Spring 就差不多了。
HTTP
再继续往下学习之前,我们先聊聊 HTTP 协议,HTTP 协议可以说是我们 Java 开发打交道最多的协议了,关于 HTTP 协议,我们这里不讲述太多,大家可以参考一下我的这篇文章,里面有详细的 HTTP 教程。
想深入了解 HTTP 协议,有哪些值得推荐的书籍?
Tomcat
我刚开始接触 Tomcat 之前也有这个疑问,这个 Tomcat 是啥。。。。。。听起来很别扭,但是你可以通过这篇文章了解一下什么是 Tomcat
Tomcat(一) Tomcat是什么:Tomcat与Java技术 Tomcat与Web应用 以及 Tomcat基本框架及相关配置
牧酱:什么是TOMCAT
Tomcat 我推荐你看看这几本书
这本书是一本万能工具,其主题涵盖了Apache Tomcat这一广受欢迎的开源servlet、JSP容器和高性能的web server。《Tomcat权威指南》对管理员和web站点管理员而言,具有较强的参考价值;对在开发或产品中要使用 Tomcat 作为 web 应用程序服务器的开发者而言,这是一本有用的指南书;对 Tomcat 感兴趣的人而言,这是一本优秀的介绍工具。
但是这本书翻译好像比较糟糕,大家可以看看英文版
http://index-of.co.uk/Misc/O'Reilly%20Tomcat%20The%20Definitive%20Guide%20(2nd%20Edition).pdf
深入剖析 Tomcat
另外一本就是深入剖析 Tomcat
这本书会揭示 Tomcat 的工作原理,通过学习本书,你将可以自行开发 Tomcat 组件,或者扩展已有的组件,甚至可以让你自制一个 Tomcat 服务器。
关于 Tomcat 学习有多深,这个没有一个明确的定论,对于初级 Java 开发而言,你知道 Tomcat 是干什么的,能够起到什么作用就可以了,如果你想要达到中高级 Java 程序员的水平,那么任何深入的学习都是不为过的。
Tomcat 架构解析
本书全面介绍了Tomcat的架构、各组件的实现方案以及使用方式。包括Tomcat的基础组件架构以及工作原理,Tomcat各组件的实现方案、使用方式以及详细配置说明,Tomcat与Web服务器集成以及性能优化,Tomcat部分扩展特性介绍等。读者可以了解应用服务器的架构以及工作原理,学习Tomcat的使用、优化以及详细配置。
这本书和深入剖析 Tomcat 差不多,都是带你深入理解 Tomcat 的一本书,我认为你看哪本都可。
Servlet/JSP 技术
下面要聊的不是框架了,而是一项非常古老的技术:Servlet 和 JSP 技术,这两项技术很多人说不用在学习了,说这话的人有两点考量:1. 他认为老的技术都不用学了;2. 他自己根本就不懂。
在没有前后端分离前,我们的项目架构都是单体,也就是各种 JSP 页面直接耦合进去,Servlet 负责前端和后端的交互,这个时候项目非常冗余,很多文件都扔在一个项目中,导致逻辑混乱,文件类型庞杂。后来随着技术的发展,出现了 SpringMVC ,封装了 Servlet,让我们不用再管理 HttpServletRequest 和 HttpServletResponse,直接让 SpringMVC 把这事干了,我们只用遵照其要求的风格 --- restFul 格式,我们就能够把前后端的接口"标准化",随着 HTML5 等动态页面的发展,从而出现了后面我们说的前后端分离的项目架构,也就是前端是一个项目,后端是一个项目。
但是他们的核心还是 Servlet 和 JSP。
这里我又开始推荐书了
Head First Servlet/JSP
Head First 系列的书就是幽默,通俗易懂,用轻松愉快的语言,通过做游戏的方式就把知识点给你讲明白了。讲述了关于如何编写 servlets 和 JSP 代码,如何使用 JSP 表达式语言,如何部署 Web 应用,如何开发定制标记,以及会话状态、包装器、过滤器、企业设计模式等方面的知识,以一种轻松、幽默而又形象的方式让你了解、掌握 servlets 和 JSP,并将其运用到你的项目中去。
这本书 cxuan 强烈推荐
这里给大家推荐一个学习 Servlet 的网站
Servlet/JSP Gossip
这同时也是一本书
作者是台湾人,除了语言有点没有那么痛快之外,其他技术点的讲解还不错。
Servlet & JSP 核心编程
这也是一本基础书籍,条理清晰。对于初学者来说是一本不可多得的入门书籍。
Servlet 和 JSP 的视频,我给你推荐
尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版
这个其实也包括了前端 HTML CSS JavaScript Servlet JSP 部分
JavaWeb视频教程(JSP/Servlet/上传/下载/分页/MVC/三层架构/Ajax)
这两个视频都是 Web 整合的,单独的 Servlet 可以看看
【千锋】Servlet教程-Servlet入门
2020最新servlet教程-Servlet全解和案例实操_
Spring MVC
SpringMVC 终于来了!!!!为什么最后再说 SpringMVC,因为Spring MVC 其实就是 Servlet 的一种封装,而且 Spring MVC 打交道的对象是 HTTP 协议,所以你需要先掌握上面知识再学 Spring MVC。
学习 SpringMVC,我推荐你看
SpringMVC 学习指南
本书重在讲述如何通过 Spring MVC 来开发基于 Java 的 Web 应用。全书共计12章,分别从 Spring框架、模型2和 MVC模式、Spring MVC 介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,本书还配有丰富的示例以供读者练习和参考。
看透 SpringMVC
全面介绍 Spring MVC 的架构、原理、核心概念和操作,通过案例完整呈现 Tomcat 的实现,系统总结 Spring MVC 九大组件的处理以及常用的技巧和实践。
这两本书看完,SpringMVC 就差不多了,如果觉得还有遗漏的话,不妨看看官网。
Web on Servlet Stack
视频可以看看这个
2020最新SpringMVC教程【IDEA版】
那么关于 SpringMVC 都需要掌握哪些内容呢?
Spring MVC【入门】就这一篇!
Spring MVC 解析之 DispatcherServlet
Spring Web MVC-09-springmvc 过滤器与拦截器 Handler and Filter
SpringMVC全局异常处理
SpringMVC 单文件上传与多文件上传
SpringMVC上传文件的三种方式
一文读懂SpringMVC中的文件上传与下载
Spring MVC打印@RequestBody、@Response日志
Spring MVC拦截器实现用户登录权限验证案例
Spring MVC框架原理分析
SpringMVC - 视图解析过程详解
RestTemplate 最详解
Spring MVC中使用RestTemplate访问REST服务详解
SpringMVC之Controller常用注解功能全解析
MVC设计模式介绍 & SpringMVC实现
Stop. Stop. Stop
当你从 Java 基础 -> MySQL基础 -> MyBatis -> Spring -> HTML/CSS -> Servlert/JSP -> SpringMVC 学完之后,我觉得你应该需要花 1 - 2 年左右的时间,此时的你应该能够具备完成一个小型 SSM 项目的能力了,现在先不忘下面继续学习了,你应该把你的知识进行整合,你可以按照书中的内容搭建小型项目,或者完成一些 SSM 项目等,很多 Java 方向的毕业设计也就到这里就能完事儿了。
这里给你推荐一些整合资源
Java SSM练手小项目-手把手带你搭建一个基于SSM框架的人力资源管理后台系统
liddhome/yosebook-ssm
ZhongFuCheng3y/910convenienceSite
学生管理系统(SSM简易版)总结
https://github.com/saysky/ForestBlog
或者看一下尚硅谷的整合教程
尚硅谷SSM框架实战,ssm整合教程
此时的你,可以说能够具备一个初级 Java 开发的基本素质了,但是你可能还找不到工作,为什么?因为现阶段最最最流行的框架你还没有接触,下面有请大名鼎鼎的 SpringBoot 大佬登场。
SpringBoot
SpringBoot 可以说是当今 Java 领域最火的框架了,那么 SpringBoot 为什么这么火呢?
从设计理念谈起
要说到 Spring Boot 为什么这么火,就必须得聊聊 Spring Boot 的设计理念,正是此设计理念奠基了Spring Boot 开发设计的基准,让 Spring Boot 走到了今天。
那 Spring Boot 的设计理念是什么呢?它就是
约定优于配置(convention over configuration)。
约定优于配置并不是一个新概念,它是一种软件设计范式,很早就应用在软件架构设计中,它的作用是减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。
只是 Spring Boot 让这个设计理念上升了一个层次,Spring Boot 不止在某个功能上实现此设计理念,而是整个软件体系都在践行约定优于配置。
Spring Boot 体系将约定优于配置的思想展现得淋淋尽致,小到配置文件,中间件的默认配置,大到内置容器、生态中的各种 Starters 无不遵循此设计规则。
Spring Boot Jpa 80% 大部分查询功能都以约定的方式给与提供,另外 20% 复杂的场景,提供另外的技术手段来解决,典型的约定优于配置的实现。
Spring Boot Starter ,在项目启动的时候,根据约定信息对组件进行加载、初始化。因此项目中引入了对于的 Starter 之后,就可以到达开箱即用的效果。
甚至 Spring Cloud 的设计,也借鉴了约定优于配置的思想,很多组件都是在启动时,默认提供了其相关的功能,可以让我们的使用到达很少配置或者零配置。
Spring Boot 的 Starter 机制
Spring Boot Starter 是 Spring Boot 的 星辰大海。
正是因为丰富的 Spring Boot Starter ,让 Spring Boot 征服了使用各个开源软件的开发者,只要 Spring Boot Starter 指向哪个开源软件,就会让某个开源软件变得异常好用。
这真的是这样,有一种神笔马良的感觉(夸张了一点)。
那什么是 Spring Boot Starter 呢?
在 Spring Boot 中,Starter 是为快速应用开发提供“一站式服务”的依赖(Dependency)。Starter 使得开发人员在开始编写新的模块时不需要拷贝样板式的配置文件、编写样板式的代码,只需要提供最简单的配置即可开始编程。
Spring Boot Starter 有两个核心组件:自动配置代码和提供自动配置模块及其它有用的依赖。也就意味着当我们项目中引入某个 Starter ,即拥有了此软件的默认使用能力,除非我们需要特定的配置,一般情况下我仅需要少量的配置或者不配置即可使用组件对应的功能。
Spring Boot 由众多 Starter 组成,随着版本的推移 Starter 家族成员也与日俱增。在传统 Maven 项目中通常将一些层、组件拆分为模块来管理,以便相互依赖复用,在 Spring Boot 项目中我们则可以创建自定义 Spring Boot Starter 来达成该目的。
Spring Boot Starter 统一了使用不同软件的编程体验。
在没有使用 Spring Boot Starter 之前,我们需要按照每个开源软件的特性,将对应的组件包集成到我们的开发项目中,因为每个组件的设计理念和开发团队都不一致,因此会有很多不同的调用风格在我们的项目中。
Spring Boot 强大到很多技术社区都主动提供了对应的 Starter 组件,比如 MyBatis 、Apache Camel、Apache CXF 等等。随着 Spring Boot 的发展 Starter 组件会越来越多。
Spring Boot 非常强大的原因之一就是提供了大量的 Spring Boot Starter ,如此多的“开箱即用” 的依赖模块,让我们在日常开发中“拿来即用”,以便更加快速和高效专注于业务开发。
Spring Boot 的豪华开发团队
我们经常会看到在介绍 Spring Boot 的时候有这么一句:Spring Boot 是由 Pivotal 团队提供的全新框架。由此我们得知 Spring Boot 是由 Pivotal 团队所研发,那么 Pivotal 团队到底是一个什么样的团队呢?其实这里的 Pivotal 团队是指 Pivotal 公司。
Pivotal 公司介绍:致力于“改变世界构造软件的方式(We are transforming how the world builds software)”,提供云原生应用开发 PaaS 平台及服务,帮助企业客户采用敏捷软件开发方法论,从而提高软件开发人员工作效率、减少运维成本,实现数字化转型、IT 创新,并最终实现业务创新。
Pivotal 公司可谓是大牛云集,公司研发的产品有:Spring 以及衍生框架、缓存中间件 Redis、消息队列框架 RabbitMQ、数据引擎产品 Greenplum,还有 Tomcat、Groovy 里的一些顶级开发者,DevOps 理论的提出者都在这个公司。
2016 年风靡全球的云原生理念亦是 Pivotal 公司提出,美国硅谷著名的精益化创业书籍的作者 Eric Ries 也加入了 Pivotal公司。Spring Boot 为什么如此的优秀,正是因为背后有这些全球的顶级开发者。
Pivotal 公司的背后其实是一场商业并购大片,有很多著名的公司在其身后,戴尔、Spring、EMC、VMware 等等,详情大家开源看这篇文章:《是时候给大家介绍 Spring Boot/Cloud 背后豪华的研发团队了》。
有个好干爹
Spring Boot 的干爹是谁呢?毫无疑问就是 Spring 了。有图为证,看下面:
Spring Boot 完全依赖 Spring 来开发,发明 Spring Boot 也是为了让大家更好的使用 Spring,而不是消灭 Spring ,所以说没有 Spring 这个干爹,就没有 Spring Boot 。
当然 Spring Boot 不仅是基于 Spring 开发这么简单,Spring Boot 完全继承了 Spring 干爹的声誉,说实话如果没有 Spring 这个老干爹十多年来打拼下来的天气,哪有 Spring Boot 今天来的风光。
2002 年的时候, Rod Johnson 可能也没有想到自己开创的一个小开源软件,可以发展到今天这么辉煌的一刻。到了今天,如果一个 Java 程序员说自己不知道 Spring ,那估计会把他当作外星人吧。
Spirng 当时以 IoC 和 Aop 开始发家,一开始的目标只是想干掉 EJB 这个庞然大物,但是随着时间的发展,Spring 开始了一路的逆袭之路,在2010年的时候 Spring 还是 SSH 三大框架之一,到了今天 Spring 要说自己是老二,还这没有人敢说自己是第一。
正是因为 Spring 在 Java 社区中有如此强大的影响力,所以在 Spring Boot 一出生的时候,就受到了广大社区爱好者的关注、使用、写教程、贡献代码、提 Bug。正是因为庞大的开源爱好者,才一起反铺 Spring Boot ,让 Spring Boot 发展这么快,这么好。
上面这段内容转载自 Spring Boot 为什么这么火?
所以你只需要再学习完 SpringBoot ,就能够完成一个初级 Java 开发的用人需求了。所以你必须要学好 SpringBoot,之前看很多大咖推荐 SpringBoot 实战这本书,我觉得这本书并不好,反正我看这本书的时候找不到头绪和思路
很多人认为是基础入门书籍,但是我觉得学习 SpringBoot ,看这几个 github 就行了
Github点赞接近 100k 的Spring Boot学习教程+实战项目推荐!
推荐以 Spring Boot 教程与 Spring Cloud 教程的详细开源项目
“SpringBoot-Learning”
此项目内容为 Spring Boot 教程程序样例,对于 Spring Boot 的初学者来说非常有用,文末也列出了Spring 相关开源项目,供大家交流学习。
1. SpringBoot-Learning 部分样例:
快速入门
工程配置
Web开发
chapter3-1-1:构建一个较为复杂的RESTful API以及单元测试
chapter3-1-2:使用Thymeleaf模板引擎渲染web视图
chapter3-1-3:使用Freemarker模板引擎渲染web视图
chapter3-1-4:使用Velocity模板引擎渲染web视图
chapter3-1-5:使用Swagger2构建RESTful API
chapter3-1-6:统一异常处理
数据访问、日志管理等等,项目地址:
程序猿DD/SpringBoot-Learning - 码云 Gitee.com
2. 项目名称:
spring boot 实践学习案例 springboot-learning-example
项目结构:
a. 『 基础 - 入门篇 』
b. 『 基础 - Web 业务开发篇 』
springboot-restful 《Springboot 实现 Restful 服务,基于 HTTP / JSON 传输》《Spring Boot 之 RESRful API 权限控制》
springboot-freemarker 《Spring Boot 集成 FreeMarker 详解案例》
springboot-validation-over-json 《Spring Boot HTTP over JSON 的错误码异常处理》
c. 『 基础 – 数据存储篇 』
springboot-mybatis 《Springboot 整合 Mybatis 的完整 Web 案例》
springboot-mybatis-annotation 《Spring Boot 整合 Mybatis Annotation 注解的完整 Web 案例》
springboot-mybatis-mutil-datasource 《Spring Boot 整合 Mybatis 实现 Druid 多数据源详解》
d. 『 基础 – 数据缓存篇 』
e. 『 其他篇 』
springboot-elasticsearch 《Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询》
springboot-dubbo-server
springboot-dubbo-client
Dubbo 服务提供者工程和 Dubbo 服务消费者工程 《Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例》《Spring Boot 中如何使用 Dubbo Activate 扩展点》
Spring Data ES 篇
项目地址:
泥沙砖瓦浆木匠/springboot-learning-example - 码云 Gitee.com
Spring 相关项目推荐:
1. 项目名称:
基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构
项目内容:
基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构,提供整套公共微服务服务模块:集中权限管理(单点登录)、内容管理、支付中心、用户管理(支持第三方登录)、微信平台、存储系统、配置中心、日志分析、任务和通知等,支持服务治理、监控和追踪,努力为中小型企业打造全方位J2EE企业级开发解决方案。
项目地址:
shuzheng/zheng - 码云 Gitee.com
2. 项目名称:
模块化开发系统 ybg-spring-fast
项目简介:
以SpringBoot 为中心,模块化开发系统,用户可以随意删减除权限框架外 任意的系统模块。复用,组装性强主要应用技术:spring Security+Ehcache+quartz+swagger2+Mysql5.6+springjdbc+druid+spring social+spring session + layerui+vue.js等。
项目地址:
YYDeament/ybg-spring-fast - 码云 Gitee.com
3. 项目名称:
JAVA分布式快速开发平台 iBase4J
项目内容:
JAVA分布式快速开发平台:SpringBoot,SpringMVC,Mybatis,mybatis-plus,motan/dubbo分布式,Redis缓存,Shiro权限管理,Spring-Session单点登录,Quartz分布式集群调度,Restful服务,QQ/微信登录,App token登录,微信/支付宝支付;日期转换、数据类型转换、序列化、汉字转拼音、身份证号码验证、数字转人民币、发送短信、发送邮件、加密解密、图片处理、excel导入导出、FTP/SFTP/fastDFS上传下载、二维码、XML读写、高精度计算、系统配置工具类等等。
项目地址:
iBase4J/iBase4J - 码云 Gitee.com
4. 项目名称:
Java EE(J2EE)快速开发框架 ThinkGem
项目内容:
Java EE(J2EE)快速开发框架,基于经典技术组合(Spring MVC、Apache Shiro、MyBatis、Bootstrap UI),包括核心模块如:组织机构、角色用户、权限授权、数据权限、内容管理、工作流等。虽说很长时间没有大的更新了,但它的架构精良易于扩展深受大家喜爱,依然是中小企业的首选,它的功能设计、底层架构也非常具有参考意义、是学习入门的首选。关注我ThinkGem开源中国博客了解4.0最新动态。
项目地址:
ThinkGem/JeeSite - 码云 Gitee.com
5. 项目名称:
Java快速开发平台 MCMS
项目内容:
完整开源,Java快速开发平台。基于Spring、SpringMVC、Mybatis架构,MStore提供更多好用的插件与模板(文章、商城、微信、论坛、会员、评论、支付、积分、工作流、任务调度等,同时提供上百套免费模板任意选择),价值源自分享!铭飞系统不仅一套简单好用的开源系统、更是一整套优质的开源生态内容体系。
项目地址:
铭飞/MCMS - Gitee
6. 项目名称:
基于Spring Cloud微服务化开发平台 AG-Admin
项目内容:
AG-Admin是国内首个基于Spring Cloud微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关API管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。核心技术采用Eureka、Fegin、Ribbon、Zuul、Hystrix、JWT Token、Mybatis等主要框架和中间件,前端采用vue-element-admin组件。
项目地址:
老A/AG-Admin - 码云 Gitee.com
7. 项目名称:
轻量级的Spring Boot快速开发平台 renren-fast
项目简介:
renren-fast是一个轻量级的Spring Boot快速开发平台,其设计目标是开发迅速、学习简单、轻量级、易扩展;使用Spring Boot、Shiro、MyBatis、Redis、Bootstrap、Vue2.x等框架,包含:管理员列表、角色管理、菜单管理、定时任务、参数管理、代码生成器、日志管理、云存储、API模块(APP接口开发利器)、前后端分离等。
项目地址:
人人开源/renren-fast - 码云 Gitee.com
作者:Gitee 链接:https://www.zhihu.com/question/53729800/answer/255785661
其实你学了一段时间就会发现,SpringBoot 就完全是个脚手架,方便我们快速搭建一个项目,简化了配置,不用再让你写繁杂的 XML 表达式,相反的而是用 注解 来实现,他们的原理类似,只不过使用注解能让你的项目更加简洁。
最后再推荐一下 SpringBoot 的官网
https://docs.spring.io/spring-boot/docs/2.3.10.RELEASE/reference/htmlsingle/
Spring Cloud
Spring Cloud 是以 SpringBoot 为基础的微服务项目架构,现在大多数互联网公司甚至一些传统行业都开始用 Spring Cloud 为基础架构,有些是因为业务需求,有些是为了装 B,反正不管怎样,面试官问起你会不会 Spring Cloud,你说不会的话,那么你的印象分估计会降低,所以初级程序员,或多或少要了解一下 Spring Cloud ,所以我给你推荐几本书和 Github 作为基础和练习。
我刚开始学 Spring Cloud 是看的这本书,当然现在这个书中的版本有些好了,不过作为了解,你也应该看一下这本书
《Spring Cloud 微服务实战》从时下流行的微服务架构概念出发,详细介绍了 Spring Cloud 针对微服务架构中几大核心要素的解决方案和基础组件。对于各个组件的介绍,《Spring Cloud 微服务实战》主要以示例与源码结合的方式来帮助读者更好地理解这些组件的使用方法以及运行原理。同时,在介绍的过程中,还包含了作者在实践中所遇到的一些问题和解决思路,可供读者在实践中作为参考。
这本书的作者翟永超(DD)也建了一个网站
https://blog.didispace.com/spring-cloud-learning/
反正学习 Spring Cloud 跟着 D 总没错的。
可以看下 Spring Cloud 大致都要学习哪些东西
Brixton 版本
Dalston 版本
Edgware 版本
Finchley 版本
还有各种套件的选择
顺便把阿里巴巴开源框架 Spring Cloud Alibaba 学了
除了上述内容之外,还可以看看到底什么是微服务
本书全面介绍了微服务的建模、集成、测试、部署和监控,通过一个虚构的公司讲解了如何建立微服务架构。主要内容包括认识微服务在保证系统设计与组织目标统一上的重要性,学会把服务集成到已有系统中,采用递增手段拆分单块大型应用,通过持续集成部署微服务,等等。
什么是微服务设计模式,微服务设计模式都有哪些,以及微服务的拆分策略等。
估计很多人可能会把集群、微服务和分布式搞混了,下面来解惑下
集群是个物理形态,分布式是个工作方式。
1.分布式:一个业务分拆多个子业务,部署在不同的服务器上
2.集群:同一个业务,部署在多个服务器上
分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。
分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。
举例:就比如新浪网,访问的人多了,他可以做一个集群,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。
而分布式,从窄意上理解,也跟集群差不多,但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。
分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务就不可访问了。
简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
例如:如果一个任务由 10 个子任务组成,每个子任务单独执行需 1 小时,则在一台服务器上执行该任务需 10 小时。
采用分布式方案,提供 10 台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是 Hadoop 的 Map/Reduce 分布式计算模型)
而采用集群方案,同样提供 10 台服务器,每台服务器都能独立处理这个任务。假设有 10 个任务同时到达,10 个服务器将同时工作,1 小时后,10 个任务同时完成,这样,整体来看,还是 1 小时内完成一个任务!
好的设计应该是分布式和集群的结合,先分布式再集群,具体实现就是业务拆分成很多子业务,然后针对每个子业务进行集群部署,这样每个子业务如果出了问题,整个系统完全不会受影响。
另外,还有一个概念和分布式比较相似,那就是微服务。
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。
系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
区别:
1.分布式
将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。区别分布式的方式是根据不同机器不同业务。
上面:service A、B、C、D 分别是业务组件,通过API Geteway进行业务访问。
注:分布式需要做好事务管理。
分布式事务可参考:微服务架构的分布式事务解决方案
2.集群模式
集群模式是不同服务器部署同一套服务对外访问,实现服务的负载均衡。区别集群的方式是根据部署多台服务器业务是否相同。
注:集群模式需要做好session共享,确保在不同服务器切换的过程中不会因为没有获取到session而中止退出服务。
一般配置Nginx的负载容器实现:静态资源缓存、Session共享可以附带实现,Nginx支持5000个并发量。
分布式是否属于微服务?
答案是肯定的。微服务的意思也就是将模块拆分成一个独立的服务单元通过接口来实现数据的交互。
微服务架构
微服务的设计是为了不因为某个模块的升级和BUG影响现有的系统业务。微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。
分布式和微服的架构很相似,只是部署的方式不一样而已。
链接:https://www.jianshu.com/p/1f9455139a31
作者:mayiwoaini
然后我就要推荐给你一本分布式方向的神书了
有些人认为这是数据处理方向的人看的书,但是里面涉及 NoSQL, 大数据,最终一致性,CAP,MapReduce,流处理确实 Java 程序员也需要知道和了解的,这本书讲的比较高深,适合在工作中慢慢研究,不太适合 Java 方向的初学者。
综上所述,我上面推荐的三本书都适合中高级 Java 程序员来看的,初学者把 D 总的文章搞懂了就行,或者可以做做下面的 github