超硬核Java工程师学习指南,真正的从入门到精通,众多粉丝亲测已拿offer!

最近有不少小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。本来我觉得以前的几篇文章已经能够解决你们的问题了,其实否则,由于我以前写的文章都是站在Java后端的全局上进行思考和总结的,忽略了不少小白们的感觉,而不少朋友都须要更加基础,更加详细的学习路线。java

因此,今天咱们从新开一个新的专题,分别按照四篇文章讲述Java的学习路线(分别是入门篇,初级篇,中级篇,高级篇),笔者也打算趁此机会,回忆一下本身的Java学习历程。今天咱们要讲的是,小白同窗如何入门Java。nginx

先声明一点,文章内容不会详细到每一步怎么操做,只会提供大体的思路和方向,给你们以启发,若是真的要一步一步指导操做的话,那至少须要一本书的厚度啦。git

本文所述的方法不必定适合全部人,若有错误敬请谅解。程序员

Java工程师学习指南 入门篇

文中提到个人技术博客专栏

https://github.com/h2pl/Java-Tutorialgithub

【Java工程师面试复习指南】本仓库涵盖大部分Java程序员所须要掌握的核心知识,整合了互联网上的不少优质Java技术文章,力求打造为最完整最实用的Java开发者学习指南,若是对你有帮助,给个star告诉我吧,谢谢!面试

前期准备工做

开发环境搭建

这一步咱们每每会直接跳过,但既然是面向小白的教程,这里就提一下吧。首先你须要一台电脑,而后安装好JDK和JRE,JDK提供的是Java开发工具,也就是一些必备的jar包,JRE则是Java的运行环境组件,咱们熟悉的JVM就在这里面。算法

安装好这两个东东以后,通常还要配置一下环境变量,不然有一些目录可能没法被正确找到。spring

IDE选择和安装

IDE指的就是本地开发编辑器,没有了它,你就只能直接在记事本这类工具里敲代码了。IDE最大的好处就是整合了大量的工具和功能模块,让你很是轻松地完成开发。docker

之前你们都用eclipse,不过eclipse已经不流行了,如今我推荐你直接用intellij idea做为你的第一个代码编辑器。若是是用过eclipse的同窗,基本上也能够无痛切换。数据库

intellij idea能够直接在官网上下载,试用版30天,若是想要永久使用,网上也有一些办法滴。

关于jar包

jar包是什么,其实就是将一堆class格式文件打包,Java中把它称为jar包,这些jar包在编译器中能被直接识别,让开发者使用。

对于新手来讲,可能只须要用到JDK自带的一些API,可是若是你要引用外部jar包,可能就会遇到一些困难了。对于idea来讲,导入外部jar包有两种办法,一种是手动导入jar包,一种是使用maven。后者会在Java Web相关的文章中讲起。

手动导入jar包其实也不难,你须要先下载好jar包,而后在对应的项目下选择导入jar包便可,具体的方法这里就不展开说了,由于在网上都找获得。

学习Java基础的几种方法

了解基础语法

学习一门语言,最开始要作的事情就是学习它的语法。我最先学习Java语法是在Runoob,这个网站可让你对任意一门语言完成最快速的语法入门,固然,这只是至关于你浏览了一遍基础语法。

想要真正掌握Java语言基础,光看基础语法还远远不够,我在大三第一次接触Java课程,听老师讲面向对象三大特征听得一头雾水,连数组的初始化方式都理不清楚,但这些内容都是咱们须要掌握的。因此,为了学好Java基础,咱们还须要看视频或者看书进行学习。

看视频

视频的话,能够到极客学院或者慕课网听Java基础课程,固然也能够看我分享的Java视频课程。你们也都知道,如今Java的培训班很是多,基本上学的东西也都大同小异,不过它们的有些课程还不错,你们有渠道的话也能够去看一看。

看视频的好处是你能够更好地接收知识,同时也会耗费你更多实践,因此,有时候你也能够选择看书。

看书

看书的话,对于小白来讲不推荐太复杂的书,好比《Java编程思想》这种书,新手千万不要看。我我的建议,你只须要先看看《Java入门到精通》这种类型的书就足够了,由于这个部分的学习只是为你后面的学习开个头,你之后可能还要回过头来从新研究这些内容。

如今市面上介绍Java基础的书籍实在太多了,质量良莠不齐,内容同质化严重,笔者看过的其实也很少。给你们一个建议,你只须要挑一两本书来看便可,这里推荐两本最简单的吧,《head first java》和《Java从入门到精通》。

看博客

这里再推荐另外一种学习方式,就是看博客,博客比起书籍来讲,更适合对于某个技术点的学习,你能够很容易地在网上找到这个知识点相关的原理,实现方法,以及代码范例。

个人博客里没有讲解特别基础的东西,若是你看一些比较基础的文章,能够到Runoob等网站上查看。若是你有一个很明确的知识点想要学习,相信搜搜引擎会给你更好的答案。

代码实践

除此以外,通常的Java书籍或者视频课程都会要求你相应完成一些练习题,这部份内容你须要本身在电脑里使用IDE完成。

在IDE里,你能够很好地熟悉Java语言的使用,基本代码的实现,同时能够尝试各类各样的API,而且测试一些语言特性,好比继承,封装,多态等等。

另外,这也是你熟悉IDE的一个好机会,由于在公司里作开发可能要用到IDE各类各样的功能,提早熟悉好IDE绝对是有益无害的。

Java入门必备知识点梳理

在Java入门阶段,你可能须要接触到如下这部分知识,无论你是从经过哪一种方式学习,这些内容都是你学习Java基础时绕不过的重点。

Java基础知识

这部份内容是你必需要掌握的内容,在入门阶段你须要把这些基础打扎实,以便于在学习后面的内容时能够更上一层楼。

如何把基础打扎实呢,最好的办法就是在IDE上把书上或者视频上的每一个例子都实现一遍,固然有的时候你也能够本身写一些有意思的例子。

1 基本数据类型

好比int,double,char,以及其包装类。

熟悉基本数据类型的使用,了解每种类型所占的字节数,以及它们和包装类之间的相互转换。

2 流程控制

好比for循环,if else,while循环等等

若是是学过c语言的同窗,这部分能够跳过了。

3 字符串类型String的使用

字符串类型是Java中很重要的类型,它不是基本数据类型,但却很经常使用,熟悉和实践String相关的api,开始你对字符串的学习吧。

4 数组

数组的初始化方式有哪些,二维数组应该怎么写,把数组当成方法参数又该怎么处理?

5 类和对象

Java中最重要的两个概念:类和对象,它们有什么用呢,有什么区别和联系呢,请在代码中实践它们吧。

Java核心技术

对于这部份内容,我相信不少小白只能了解它们的基本使用方法,可是并不明白其背后的一些原理:好比为何接口和抽象类有这些区别,多态的意义是什么,为何要有反射。

新手在学习这部份内容时,只须要知道怎么用就能够了。固然,你最好把这些特性都实现一遍,以加深印象。

至于为何有这些特性,这些特性背后的原理是什么,不是咱们如今讨论的内容,这些内容咱们将在初级和中级篇中讲述。由于,要了解这些原理,你得了解JVM,了解并发技术的基础,了解网络基础,甚至更多。显然,这不是你如今能作到的。

1 接口和抽象类

写一些接口,同时写一些实现类去实现这些接口,而且了解一下为何咱们须要接口,为何子类须要实现接口里的方法。

同理,去实现一些抽象类吧。而后,看看它和接口有什么不一样。

2 继承,封装和多态

如何理解继承,子类和父类之间有什么联系呢。

封装是一种保护代码的方式,有哪些方式能够实现封装呢。

多态通常分为重载和重写,它们分别怎么使用?

3 异常处理

Java中的异常处理主要用于捕获和处理错误,请你写一些try catch代码块去捕获错误吧。

4 集合类

集合类是咱们常常须要打交道的东西,List,Map,Set等等,赶快去熟悉API,而后写一些测试例子吧。

5 IO输入流和输出流

IO输入流和输出流能够操做文件,网络数据等内容,如何在Java代码中完成这么复杂的操做呢,其实只须要简单的几个api就能够了。

6 多线程

为了让系统资源最合理地分配和调度,咱们须要多线程,多线程会让程序变得有趣,也会带来不少问题,使用Thread和相关API,去尝试这些有趣的事情吧。

可选内容:

1 反射(了解便可,不是入门必须)

2 枚举类型和泛型(了解便可,不是入门必须)

3 网络通讯(了解基本的socket使用便可,须要网络基础)

4 数据库操做(了解基本的JDBC便可,须要数据库基础)

总结

总而言之,对于一个Java小白来讲,入门Java能够分为这几步:

1 首先搭建好Java开发环境

2 经过Runoob等一些网站熟悉Java的基本语法

3 经过看书看视频等方式熟悉Java基础知识,经过代码实践加深理解

4 经过看书看视频等方式初步了解Java核心技术,经过代码实践加深理解。

本文主要是为你们提供一个学习的思路,以及推荐一些学习方法,若是你可以按照这样的步骤去学习,而且配合上一些适合你本身的学习方法来完成学习计划,相信你能够很好地完成对Java的入门。

Java工程师学习指南 中级篇

在上一小节中,咱们主要讨论的是如何作一个Java Web项目,以及前期须要哪些方面的基础。

跟着视频课程作完一个项目,你只是照葫芦画瓢又练习了一遍,可能其中有不少东西你并不太理解,好比你可能不知道为何代码要分层,为何要用maven进行线上编译,为何Tomcat启动时会输出那么多的日志。

有疑问很正常,由于一个Java Web项目涉及的技术仍是不少的,若是要理解这些技术的原理,光靠一个项目课程是远远不够的。因此,在你体验了Java Web项目的开发流程之后,你应该花些时间去了解相关技术原理了,今天咱们要讲的也是这部份内容。

对于即将参加校招的同窗来讲,最重要的也是这部份内容,你须要了解JVM虚拟机原理,Java并发原理,而且熟悉JDK的部分源码,了解这些API的底层实现。除此以外,还有不少,下面咱们分别来谈一谈。

文中提到个人技术博客专栏

https://github.com/h2pl/Java-Tutorial

【Java工程师面试复习指南】本仓库涵盖大部分Java程序员所须要掌握的核心知识,整合了互联网上的不少优质Java技术文章,力求打造为最完整最实用的Java开发者学习指南,若是对你有帮助,给个star告诉我吧,谢谢!

计算机基础知识

若是你不是计算机专业的同窗,那你可能要注意一下了。在学习下面这些内容以前,你最好要学习一下计算机基础课程。

这里咱们说的计算机课程是:数据结构,操做系统,计算机网络。

数据结构:这门课应该算是三门课程比较简单的一门了,推荐《大话数据结构》,看书结合代码实践,把基本的数据结构算法写一写就能够了。

操做系统:关于操做系统我看了不少本书,可是没有感受特别好的,因此若是有时间的话能够先看另一本书《深刻理解计算机系统》,这本书讲了不少计算机的基本概念,不局限于操做系统。

而后能够看一看《操做系统导论》或者大家学校的教材。

计算机网络:网络方面的书也很是多,推荐看一下《计算机网络:自顶向下方法》,另外还有一本《TCP/IP 详解:卷一》也是备受推崇的书。

除此以外,我还要推荐一下刘欣老师的书 《码农翻身》,书中用一些有趣的故事来说解操做系统和计算网络的一些复杂概念,有助于你们理解这部份内容。

JVM虚拟机

为何把JVM放在第一位,由于它是最基础也最重要的一块内容。全部的Java代码都运行在JVM上,事实上,JVM在操做系统中只是一个进程。为了了解Java代码的运行方式,底层引擎的执行原理,以及内存的分配状况,咱们必需要学习JVM虚拟机。

推荐资源:《深刻理解JVM虚拟机》个人技术博客专栏“深刻了解JVM虚拟机”

很高兴地告诉大家,学习JVM你只须要把这本书吃透便可,固然,看一遍可不够,笔者先后至少看了三遍,有条件的话最好把书中的实例都跑一跑。

另外,JVM也是面试必考的内容,因此,相应地去准备一些面试题也是颇有必要的,若是你基本掌握了这本书的内容,相信你不会害怕任何JVM面试题。

设计模式与源码阅读

为何在这里提到设计模式呢,由于设计模式是Java编程规范的经典总结,而且在JDK源码中常用,因为咱们后面会讲到JDK源码方面的学习,因此对于设计模式,建议你们先学习一下,最好的学习方式就是看书结合实践,把一些经常使用的设计模式本身实现一下。

推荐资源:《head first 设计模式》

JDK源码(主要指集合类源码)

接下来下场的选手是:JDK源码。不过对于大部分人来讲,只要可以掌握集合类,字符串这些源码就能够了,其余部分的源码主要集中在JUC并发包里,而这些内容咱们会放在Java并发技术里来说。

为何咱们须要掌握集合类源码呢,其一是由于面试喜欢考,其二是由于集合类的源码实现都比较经典,难度也不算太大,而且运用了不少优化方法,因此了解它对于学习Java的同窗来讲大有裨益。

推荐资源

个人技术博客专栏“spring和springmvc源码解析”

市面上并无哪本书专门来说JDK源码的,因此这部份内容的学习资源主要是两个部分,一是JDK源码自己,而是一些技术博客。

1 对于JDK源码,直接看可能比较有难度,不推荐新手这么作。

2 讲解源码的文章质量良莠不齐,比较优质的文章能够到掘金和开发者头条看看,另外【JavaDoop】和【芋道源码】等几位老哥的源码文章也很好

Spring源码

说实话,Spring源码的复杂度远高于集合类的源码,这也是由于Spring运用了不少的设计模式,而且有着很是繁杂的类关系。因此,我不建议你们直接去读Spring源码,由于即便是看Spring源码解析的书籍,你也会感到很吃力。

因此,我推荐的方式是,看书+看一些比较好的源码解析文章。另外要告诉你们的是,Spring的源码不少,并非全部内容都须要你掌握的,你们都知道Spring最经常使用的特性就是IOC和AOP,因此看源码解析时,最重要的也是这两个部分了。

另外,看完Spring的源码解析之后,别忘了看SpringMVC的源码解析,学习方法也是同样的,找重点内容看便可。

Java并发技术

推荐阅读,个人技术博客专栏“Java并发编程技术“

相信你为了搞定集合类源码和Spring源码花了很多功夫了,接下来轮到Java并发技术出场了。咱们在入门篇其实已经谈到了多线程,可是也仅仅停留在使用Thread或者Runnable实现简单的多线程demo。

实际上,为了理解Java并发技术的底层实现,咱们还须要知道JMM模型,了解synchronized和volatile的底层实现,同时还要明白Java中的多线程和操做系统的多线程和什么联系和区别。除此以外,咱们常常谈到的线程安全,有哪些实现方法,也是这部份内容的要点。

学习并发技术,我建议分为三个步骤

1 首先熟悉Java的多线程基础知识,好比Thread的使用,线程的状态转换,以及一些api的使用方式。

2 了解一些理论基础,好比JMM,操做系统的多线程实现。这部份内容推荐经过看书和看博客来学习。

3 了解并使用JUC的一些API,而后开始看JUC的一些源代码。这个阶段是最重要也是最困难的。

Java网络编程

推荐阅读,个人技术博客专栏“分布式系统理论与实践”

在搞懂Java并发编程技术以后,相信这部份内容也难不倒你。固然,前提是你对计算机网络有必定了解,由于网络编程涉及到TCP和HTTP相关的知识点。

在学习这部份内容的时候,你首先要了解socket的使用以及原理,而后再去了解NIO的相关API,多写一些客户端和服务端通信的demo,以便熟悉这些内容。为了更好地理解网络编程,你还要去了解UNIX网络编程模型。

除此以外,若是你想要更好地理解Java网络编程,你还须要去了解Tomcat的实现原理。同时,Netty也是值得你去学习的一部份内容,固然这页是比较进阶的内容了,有机会的话能够去用一用这一网络编程框架,学有余力的同窗还能够考虑看看它的源码(笔者没有看)。

Java8

Java的版本一直在更新,但目前在用的主要仍是Java8和Java7,等再过几年可能这部分的内容就过期了。可是目前看来,对Java8的学习和了解仍是很重要的,毕竟面试也喜欢考。

对这部份内容学习的最好方式就是:看文章+代码实践

总结

今天的内容貌似有点多,你们会不会感受有点吃不消呢。不要紧,由于这部份内容确实须要花不少时间去学习。对于一个在校的Java学习者来讲,可能没有机会接触到多么高大上的项目,因此对内功的修炼显得格外重要。

看书,写demo,读源码,看似简单的事情实际上须要花费大量时间和精力,这个过程是须要你静下心来,慢慢沉淀的,在学习的过程当中你也能够和笔者同样,写一些总结和博客,以便更好地回顾本身的学习历程。

总结如下今天所讲的内容吧:

1 计算机基础课程:数据结构,网络和操做系统 
2 JVM基本原理 
3 设计模式,JDK源码,Spring源码 
4 Java并发技术,JUC源码 
5 Java网络编程 
6 Java8

Java工程师学习指南 完结篇

之因此把这部分放在Java Web项目以后来说,是由于我以为,一开始作项目的时候你不可能已经掌握好上述内容了,因此你彻底能够带着问题去作项目,再花时间去学习底层原理,这样你能够很好地结合你以前实践过的代码去理解那些底层技术了。

本期主要介绍的是Java后端技术比较“高端”的一些内容,也就是咱们常常聊的分布式,架构,缓存,消息队列等内容,另外咱们也会介绍一些大后端相关的技术,好比云计算(OpenStack和docker),大数据(hadoop生态),以及一些经常使用的后端技术。

这些内容其实离咱们并不远,只不过在平时的项目中可能用的比较少,因此做为学生党通常也只能经过一些文章或者书本去学习理论知识。那么基于这么一个状况,咱们来谈谈怎么学习这部分的内容吧。

文中提到个人技术博客专栏

https://github.com/h2pl/Java-Tutorial

【Java工程师面试复习指南】本仓库涵盖大部分Java程序员所须要掌握的核心知识,整合了互联网上的不少优质Java技术文章,力求打造为最完整最实用的Java开发者学习指南,若是对你有帮助,给个star告诉我吧,谢谢!

Web后端架构

后端进阶第一步,先把Web架构相关的技术学好吧,由于以前你们都作过Java Web项目,想必对这块内容仍是比较熟悉的吧。咱们须要了解Web架构演化的历史,了解为何要作服务器集群,为何要用缓存,为何要作拆分,作主从,以及为何要有分布式。

推荐资源:《深刻分析Java Web技术内幕》,《大型网站技术架构》

两本都是阿里大佬出的书,两位都是淘宝系的技术大牛。前一本书主要讲述的Java Web的一些技术基础,关于Web架构的内容比较少。

后一本则是李智慧大佬写的架构科普书籍,用很是简单易懂的语言写出了大型Web项目架构之美,分别着眼于高可用,高性能,高扩展等方面讲解了不少设计结构的原则和方法。这本书应该是Web架构小白最好的入门书籍了。

分布式理论基础

因为下面的内容或多或少都会涉及到分布式相关的知识,因此这一部分咱们主要介绍一下有关分布式的基础知识。笔者对分布式的学习主要也停留在理论上,因此这里讲的也是一些理论的东西。

推荐资源:《从Paxos到zookeeper分布式一致性原理与实践》 个人技术博客专栏“分布式系统理论与实践”

这本书比较好地科普了分布式基础知识,也介绍了zookeeper的原理和使用。了解zookeeper是了解分布式技术很重要的一个环节。

1 CAP 和 BASE

谈分布式就要谈CAP,一致性,高可用,网络分区容忍性为什么只能三选二,为何网络分区容忍性必需要被考虑。CAP在实际应用中真的可靠么?

BASE出现的缘由,为何BASE更容易实现,更适合实际应用,BASE能够经过哪些技术去实现呢?

2 一致性协议和算法

一致性协议也是分布式理论的一个重点,2PC,3PC,分别指的是什么,其中分别有什么问题。3PC解决了2PC的一个问题,却仍然不完美。

Paxos和Raft两种一致性算法,显然前者比后者复杂得多,可是Raft可能更加实用。为何咱们须要一致性算法,它们又有什么用呢。

3 分布式事务和最终一致性

分布式事务是一个复杂的概念,主要指分布式系统中须要强一致场景时所用到的事务。理解和实现它都不是简单的事情。

若是咱们退而求其次,不要求强一致性,而选择最终一致性,则能够用更加灵活的方案,好比事务消息。

常见分布式技术

推荐资源:《从Paxos到zookeeper分布式一致性原理与实践》,《深刻理解Spring Cloud与微服务构建》,《分布式服务框架原理与实践》。

推荐阅读个人技术博客专栏“分布式系统理论与实践”

1 zookeeper

上文说到zookeeper是分布式技术很重要的一块内容,这是由于zookeeper用于管理和协调分布式组件,虽然它出自hadoop生态,却用于不少应用当中,基本上有分布式的地方就有zk的存在。

简单说来,zk能够提供全局统一的节点树结构,经过节点来管理资源,同时zk自身是使用集群方式部署的,因此保证本身是高可用的。根据这一特色,它能够做为服务注册中心,还能够实现分布式锁等功能。

2 分布式服务

分布式服务是一个挺有意思的东西,也很经常使用,简单来讲,就是把服务组件部署在不一样节点上,经过rpc的方式访问,为了实现这一功能,咱们须要考虑通讯协议,序列化方式,进一步来讲,咱们还要了解如何作服务注册和发现,以及如何作限流,作服务熔断和降级,等等等等。

常见的分布式服务框架有dubbo,以及Spring Cloud这类产品,学会使用他们,而后了解它们的底层实现原理,相信会是一个颇有趣的过程。

3 负载均衡

关于负载均衡,提及来其实很简单,就是把一组请求分红多组,按照某种规则分发到多台服务器上。

可是负载均衡也涉及不少内容,包括负载均衡的算法,负载均衡的实现方式,咱们须要了解它究竟是在哪一层实现的。

通常来讲,经常使用的负载均衡方式有nginx和lvs两种,分别是7层和4层的负载均衡,一个基于域名进行负载均衡,一个基于端口号作负载均衡。了解它们的实现原理,会让你更好地理解这部份内容。

4 分布式session和分布式锁

这两个组件也是分布式项目中常常要用到的,了解它们的使用和实现原理,有助于之后在项目中的实践。

分布式session通常有多种实现方式,能够存数据库或者缓存,也能够单独部署成一个服务,总之最重要的一点就是,性能要好,而且要高可用。

分布式锁则用于一些须要一致性的场景中,好比订单生成这种全局惟一的功能,分布式锁一般能够用缓存或者数据库来实现,但为了保证高性能,而且避免死锁,咱们通常采用Redis或者zookeeper来实现。

缓存

讲到缓存,咱们说的最多的就是Redis,因此咱们要讲的也是Redis。学习Redis,除了学会使用简单的api以外,最好还要了解它的实现原理。

推荐阅读:个人技术博客专栏“从新学习MySQL和Redis”,《Redis设计与实现》

这里咱们主要介绍三部份内容,也是我我的认为比较重要的三块内容。

1 数据结构和底层实现

Redis的数据结构比较丰富,但更有意思的是这些数据结构背后的底层实现,也就是做者如何用c语言来实现这些结构的。其中会有你熟悉的数组,链表,还有一些有意思的结构好比跳表,哈希表。

2 持久化方式

持久化方式主要分两种,aof和rdb,前者基于追加日志的方式来实现日志持久化,后者则是使用备份数据的方式来实现持久化。

3 分布式方案

这是Redis最有趣也最复杂的部分。 首先,Redis可使用主从的方式部署,其中“哨兵”这一组件用于故障切换。

基于哨兵的主从部署后来发展为Redis cluster的部署方式,也就是Redis集群,经过分片的方式来部署Redis集群,而且集群中任一节点均可以用来对外提供服务。

固然,除了Redis集群以外,还有codis的分布式方案,codis基于代理的方式来实现,表面上仍是使用原来的Redis API,但实际上访问的倒是一个Redis集群。

消息队列

消息队列的做用通常来讲就是削峰,控流,解耦合,目前业界也有不少的消息队列产品,在不少公司都会使用,固然,它们各有各的优缺点,咱们也没必要全都了解,这里咱们大概介绍3种消息队列,它们各自的特色都比较鲜明,值得你们去了解一番。

1 RabbitMQ

笔者刚开始接触的消息队列是rabbitmq,它的使用方法比较简单。 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现

2 Kafka

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它能够处理消费者在网站中的全部动做流数据。 这种

RocketMQ

RocketMQ是一个纯java、分布式、队列模型的开源消息中间件,前身是Metaq,当 Metaq 3.0发布时,产品名称改成 RocketMQ。

它支持事务消息,让分布式事务的实现变得简单

分布式数据中间件

这里说的分布式”数据库“,其实指的是数据库的分布式方案,更具体来讲,主要指的是数据库的主从部署,以及分库,分表。

1 主从复制和读写分离

这是数据库高可用的基础。MySQL数据库会使用日志来完成主从复制,先写主库,而后再同步到从库。读写分离则通常是指的是:从库负责读,主库负责写。

2 分库分表方案

分库分表是解决大表性能瓶颈的一种方法,固然也分为横向拆分和纵向拆分,横向拆分指的就是减小单表的数据量,放到其余表或者其余库中。纵向拆分则通常指按照业务来拆分,把没必要要的字段放到其余表中。

分库分表能够在应用层作,经过对id或者其余字段进行hash以便映射到对应的表中。固然也能够经过数据库中间件来完成,例如mycat这种中间件,经过代理的方式实现分库分表,很是方便。

大后端相关技术

推荐阅读个人技术博客专栏“后端技术杂谈”

这部分的内容笔者也只是略知一二,因此这里只是抛砖引玉,作一个简单的科普罢了。毕竟我们学技术的人都是先讲深度再来谈广度。当你对以前的内容掌握得比较好的时候,再去看看大后端的一些其余技术,也会感受挺有意思的。

下面这些技术主要是我本身学习路上接触过的一些内容,因此比较熟悉,才拿出来分享,至于适不适合你们的口味,可能就见仁见智了。

Hadoop生态

笔者以前参与过数据仓库相关的项目,因此稍微了解了这方面的内容,感受hadoop生态仍是挺有意思的。

你们不妨去了解一下其中的基本组件,而后打一个集群本身玩玩看。 常见的组件有:hdfs,hbase,hive,zookeeper,flume,sqoop,yarn。

推荐:《大数据技术原理与应用》

对于入门hadoop生态来讲,这本书彻底足够了,若是你要作大数据平台开发或者是数据研发工程师,可能须要很是全面地了解这些组件的底层原理。

云计算初探

笔者以前参与过私有云相关的项目,因此稍微了解了这方面的内容,感受这方面的内容也蛮有趣的。

我在项目中主要接触到的是OpenStack,docker以及kubenetes,OpenStack是一个私有云生态,内部结构对于咱们来讲仍是比较复杂的,不过最根本的虚拟化技术仍是基于kvm虚拟化来实现的。

docker则是如今很是流行的一种容器,用于快速部署应用。

kubenetes也借着docker的东风火了起来,能够理解为是基于容器的分布式调度系统。

这些技术在企业中也是比较经常使用的,只不过对于研发同窗来讲,更多时候扮演的是工具的角色。

其余常见后端技术

除此以外,想必你们还了解过不少其余的技术,只不过不一样的业务用到的组件每每不同,因此并非每一个东西你都须要去了解。

好比搜索引擎技术Lucene,基于它的两款产品solr和elasticsearch,一般出如今须要搜索功能的项目中。

再好比流式计算技术,如storm和spark streaming等等,一般都用于大数据部门,用做实时数据采集。

又如ELK实现的分布式日志系统,多用于分析和定位系统问题,常常会出如今一些比较重要的应用当中。

固然,也有如今大火的人工智能,还有太多的技术咱们没机会去了解和使用,咱们能作的也就是在本身能力范围内把须要作的东西作到最好了。

因此,这些内容并非每同样你都须要知道,可是若是有时间去了解一下的话,仍是建议多了解一点的。

总结

今天码的字有点多,因此不免有些写的不太好的地方,但愿你们见谅。纵观全文,咱们主要讲了这些内容:

1 Web架构

2 分布式基础理论

3 常见分布式技术

4 缓存

5 消息队列

6 数据的分布式方案

至此本系列文章就已经结束了,不知道你们有什么问题或者建议想和笔者交流吗?

写本系列文章也是由于有不少朋友想要了解更加清晰的Java后端学习路线,因此我总结了以前本身的学习历程,才创做出这四篇文章,但愿可以对你们有所帮助~

更多内容请关注微信公众号【Java技术江湖】

一位阿里 Java 工程师的技术小站。做者黄小斜,专一 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!(关注公众号后回复”Java“便可领取 Java基础、进阶、项目和架构师等免费学习资料,更有数据库、分布式、微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送做者原创的Java学习指南、Java程序员面试指南等干货资源)

超硬核Java工程师学习指南,真正的从入门到精通,众多粉丝亲测已拿offer!超硬核Java工程师学习指南,真正的从入门到精通,众多粉丝亲测已拿offer!

相关文章
相关标签/搜索