• Java工程师学习指南


    java学习指南-四个部分:分别是入门篇,初级篇,中级篇,高级篇

    第一步是打好Java基础,掌握Java核心技术,                                               ---入门篇

    第二步是掌握Java Web技术栈,能够做一些项目,                                       ---初级篇

    第三步是掌握Java方面的进阶技术,包括网络编程、并发编程、JVM等,     ---中级篇

    第四步是掌握后端进阶技术,比如分布式、缓存、消息队列等技术。              ---高级篇

    Java基础知识:

    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即可,需要数据库基础)

    04 总结

    对于一个Java小白来说,入门Java可以分为这几步:

    1 首先搭建好Java开发环境
    2 通过Runoob等一些网站熟悉Java的基本语法
    3 通过看书看视频等方式熟悉Java基础知识,通过代码实践加深理解 4 通过看书看视频等方式初步了解Java核心技术,通过代码实践加深理解。

    Java Web项目

    Java Web常用技术

    JavaWeb的技术栈其实比较庞大,所以我们不要求面面俱到,只是希望你能够熟悉一下项目中可能用到的技术。下面列举一些常见的技术,大家最好要了解一下。

    1 JSP和Servlet

    推荐资源:《JavaWeb入门到精通》,慕课网、极客学院等网站上的JavaWeb基础课程

    这是Java Web开发最原始的形态,现在很少直接使用了,但是后来的各种框架其实也是建立在servlet之上来做的。你们需要了解这两个技术分别是用来干什么的,最好能写一些demo来实践。

    对于JSP,有时候你可能还要学习jstl等标签语言,因为这些标签可以让你更方便地往JSP中插入Java代码。

    2 Spring和SpringMVC

    推荐资源:《Spring实战》,慕课网、极客学院等网站上的SpringMVC基础课程。

    事实上,除了上述资源之外,你也可以直接到官网上查看快速开始文档。

    Struts2早已被时代抛弃,Spring则是当今的霸主,你需要了解Spring如何使用,以及SpringMVC如何使用,并且学会在项目中使用它。

    由于SpringBoot最近很火,并且搭建方式比SpringMVC更简单,你也可以先学习SpringBoot,以便更快速地搭建起你的第一个Java Web项目。

    3 MySQL

    推荐资源:《Sql必知必会》,Runoob上的MySQL基础教程,慕课网、极客学院等网站上的视频课程

    一个JavaWeb应用一定要有数据啊,所以我们需要用到数据库,其实搭一个mysql数据库是非常简单的,但是对于初学者来说最麻烦的就是写sql了,所以,先学会建表,熟悉sql,对你以后做项目也是大有裨益的。

    4 Hibernate和Mybatis

    推荐资源:Runoob上的Hibernate和Mybatis基础教程,慕课网、极客学院等网站上的视频课程

    当你学会了使用sql去查询数据,可能还不足以让你在项目中很方便地处理数据,因为我们还需要一个步骤,就是把数据库的数据转化成Java里的对象。orm框架就是为了解决这一问题而出现的,它可以让一张表和Java类一一对应,让数据查询变得非常方便。Hibernate和Mybatis都是orm框架,只不过现在mybatis越来越火了。

    所以,你需要了解这一技术,因为它会广泛地运用到大部分Java Web项目中。

    5 Maven

    推荐资源:《maven实战》,易百教程里的maven教程,慕课网、极客学院等网站上的视频课程

    刚才已经说过了Spring,orm框架,以及MySQL等方面的技术了。实际上,一个简单的Java Web项目也只需要这些东西了。

    但是,有一个问题,就是:一个项目里用到这么多技术,所需要的jar包也会很多,我们如何管理这些jar包呢。如果直接导入所需jar包,那当jar包更新或者需要替换时,每次都要手动操作,非常麻烦。另外,当jar包很多时,项目打包后的war格式文件也会很大,不利于传输。

    为了解决上述问题,maven应运而生了。maven通过pom.xml文件来指定所需的jar包,并且自带了很多构建相关的功能,比如编译,打包,运行单元测试等等,因为它本身就是一个构建工具。

    当然,新手可能还难以理解这些概念,你必须要知道的是,大部分Java Web项目需要用maven来管理,你需要学会maven的基本用法,最基本的用法就是:学会修改pom.xml文件。

    6 Tomcat

    推荐资源:慕课网、极客学院等网站上的视频课程。

    对于小白来说,Tomcat相关的技术是非常复杂的,毕竟它是一个应用服务器啊,事实上这个时候,你只需要学会如何安装Tomcat即可。毕竟,它在项目中的作用就是提供一个运行环境而已。

    正常来说,你只要下载解压Tomcat的压缩包即可。由于现在的IDE都支持集成Tomcat,所以一般情况下你都可以在IDE中配置好你的Tomcat路径,然后设置好你的项目路径,IDE会自动把你的工程代码部署到Tomcat服务器上。

    如果你使用想跳过IDE直接部署工程到Tomcat上,也可以直接编译工程并且打包得到war格式的文件(这个步骤可以使用maven来完成),然后拷贝war文件到Tomcat下的特定目录即可。

    上述两种部署方式的详细步骤请到搜索引擎寻找答案。

    7 Git和GitHub

    推荐资源:廖雪峰的Git教程,GitHub官网,慕课网、极客学院等网站上的视频课程。

    既然要做项目,为什么不把它发布在GitHub上。当你熟悉了Git指令之后,你可以很方便地发布你项目中的每一次更新,并且同步到GitHub上,这样既可以让你更好地管理项目版本,又可以让你GitHub更加活跃,为你未来的面试加分。

    所以,赶紧学好Git指令,然后开启你的项目之旅吧。

    04 其他常用组件

    除了上面几种必备的技术之外,有时候我们在项目中还会用到其他东西,在这里我们把它们叫做组件。这里只做简单的介绍,至于具体怎么使用,在网上都可以很容易地找到相关文章。

    1 日志系统

    当项目代码比较多的时候,容易发生错误,日志可以很好地记录代码运行时的错误,常用的日志系统有log4j,logging等等,另外你还需要了解一下slf4j。

    2 单元测试

    日志系统可以记录代码问题,单元测试则是为了避免代码出错,常用的单元测试组件主要是JUnit,建议你找个文档看一看,然后下载下来玩一下。

    3 JSON

    JSON逐渐成为前后端数据交互的标准格式,为了在项目中使用JSON的API,你也需要导入它的jar包,一般我们都会使用阿里提供的fastjson,赶快下载来玩一玩吧。

    当然,常用的Java Web组件还有很多,比如HTTPClient,再比如一些加密工具,一些压缩工具等等,这里就不再一一列举了。

    5 总结

    今天的内容就到这里了,与其说是初级篇,反而更像是“项目篇”呢。因为学完基础内容之后,做项目是最好的复习和实践方式了。所以这篇文章围绕着做项目来展开,也就不足为奇了。

    今天主要讲的是,做好一个JavaWeb项目,需要哪些知识储备,需要了解哪些技术,并且我也推荐一些比较精品的视频课程。

    1 Java基础知识储备 2 前端知识储备 3 了解和使用JavaWeb常用技术 4 JavaWeb常用组件介绍
    计算机基础知识

    JVM虚拟机

    为什么把JVM放在第一位,因为它是最基础也最重要的一块内容。所有的Java代码都运行在JVM上,事实上,JVM在操作系统中只是一个进程。为了了解Java代码的运行方式,底层引擎的执行原理,以及内存的分配情况,我们必须要学习JVM虚拟机。

    推荐资源:《深入理解JVM虚拟机》

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

    另外,JVM也是面试必考的内容,所以,相应地去准备一些面试题也是很有必要的,如果你基本掌握了这本书的内容,相信你不会惧怕任何JVM面试题。

    03 设计模式与源码阅读

    设计模式

    为什么在这里提到设计模式呢,因为设计模式是Java编程规范的经典总结,并且在JDK源码中经常使用,由于我们后面会讲到JDK源码方面的学习,所以对于设计模式,建议大家先学习一下,最好的学习方式就是看书结合实践,把一些常用的设计模式自己实现一下。

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

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

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

    为什么我们需要掌握集合类源码呢,其一是因为面试喜欢考,其二是因为集合类的源码实现都比较经典,难度也不算太大,并且运用了很多优化方法,所以了解它对于学习Java的同学来说大有裨益。

    推荐资源

    市面上并没有哪本书专门来讲JDK源码的,所以这部分内容的学习资源主要是两个部分,一是JDK源码本身,而是一些技术博客。

    1 对于JDK源码,直接看可能比较有难度,不推荐新手这么做。 2 讲解源码的文章质量参差不齐,所以我只推荐几个我自己比较熟悉的,一个是importnew。一个是我的博客。另外,我之前分享的一篇文章《你不可错过的Java学习资源》中也推荐了很多大牛和博客,大家也可以去看看。

    Spring源码

    说实话,Spring源码的复杂度远高于集合类的源码,这也是因为Spring运用了很多的设计模式,并且有着非常繁杂的类关系。所以,我不建议大家直接去读Spring源码,因为即使是看Spring源码解析的书籍,你也会感到很吃力。

    所以,我推荐的方式是,看书+看一些比较好的源码解析文章。另外要告诉大家的是,Spring的源码很多,并不是所有内容都需要你掌握的,大家都知道Spring最常用的特性就是IOC和AOP,所以看源码解析时,最重要的也是这两个部分了。

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

    推荐资源:《Spring源码深度》

    04 Java并发技术

    Java并发技术

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

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

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

    1 首先熟悉Java的多线程基础知识,比如Thread的使用,线程的状态转换,以及一些api的使用方式。 2 了解一些理论基础,比如JMM,操作系统的多线程实现。这部分内容推荐通过看书和看博客来学习。 3 了解并使用JUC的一些API,然后开始看JUC的一些源代码。这个阶段是最重要也是最困难的。

    推荐资源: 书籍:《Java并发编程艺术》,《Java并发编程实战》 网站:我的博客专栏,并发编程网,importnew,《你不可错过的Java学习资源》

    05 Java网络编程

    Java网络编程

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

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

    除此之外,如果你想要更好地理解Java网络编程,你还需要去了解Tomcat的实现原理。同时,Netty也是值得你去学习的一部分内容,最好有机会去用一用这一网络编程框架,学有余力的同学还可以考虑看看它的源码(笔者没有看)。

    推荐资源:《Java网络编程》,《你不可错过的Java学习资源》

    05 Java8

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

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

    推荐资源:《Java8实战》

    06 总结

    今天的内容貌似有点多,大家会不会感觉有点吃不消呢。没关系,因为这部分内容确实需要花很多时间去学习。对于一个在校的Java学习者来说,可能没有机会接触到多么高大上的项目,所以对内功的修炼显得格外重要。

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

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

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

    完结篇

    01 Web后端架构

    Web后端架构

    后端进阶第一步,先把Web架构相关的技术学好吧,因为之前大家都做过Java Web项目,想必对这块内容还是比较熟悉的吧。我们需要了解Web架构演化的历史,了解为什么要做服务器集群,为什么要用缓存,为什么要做拆分,做主从,以及为什么要有分布式。

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

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

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

    02 分布式理论基础

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

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

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

    1 CAP 和 BASE

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

    BASE出现的原因,为什么BASE更容易实现,更适合实际应用,BASE可以通过哪些技术去实现呢?

    2 一致性协议和算法

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

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

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

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

    如果我们退而求其次,不要求强一致性,而选择最终一致性,则可以用更加灵活的方案,比如事务消息。

    03 常见分布式技术

    推荐资源:《从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来实现。

    04 缓存

    讲到缓存,我们说的最多的就是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集群。

    05 消息队列

    消息队列的作用一般来说就是削峰,控流,解耦合,目前业界也有很多的消息队列产品,在很多公司都会使用,当然,它们各有各的优缺点,我们也不必全都了解,这里我们大概介绍3种消息队列,它们各自的特点都比较鲜明,值得大家去了解一番。

    1 RabbitMQ

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

     
    1. 安装部署简单,上手门槛低,功能丰富,符合AMQP标准;
    2. 企业级消息队列,经过大量实践考验的高可靠;
    3. 集群易扩展,可以轻松的增减集群节点;
    4. 有强大的WEB管理页面。

    2 Kafka

    与其他MQ相比较,Kafka有一些优缺点,主要如下

    优点:

    1. 可扩展。Kafka集群可以透明的扩展,增加新的服务器进集群。
    2. 高性能。Kafka性能远超过传统的ActiveMQ、RabbitMQ等,Kafka支持Batch操作。
    3. 容错性。Kafka每个Partition数据会复制到几台服务器,当某个Broker失效时,Zookeeper将通知生产者和消费者从而使用其他的Broker。

    缺点:

    1. 重复消息。Kafka保证每条消息至少送达一次,虽然几率很小,但一条消息可能被送达多次。
    2. 消息乱序。Kafka某一个固定的Partition内部的消息是保证有序的,如果一个Topic有多个Partition,partition之间的消息送达不保证有序。
    3. 复杂性。Kafka需要Zookeeper的支持,Topic一般需要人工创建,部署和维护比一般MQ成本更高。

    RocketMQ

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

    具有以下特点:

     
    1. 1、能够保证严格的消息顺序
    2. 2、提供丰富的消息拉取模式
    3. 3、高效的订阅者水平扩展能力
    4. 4、实时的消息订阅机制
    5. 5、亿级消息堆积能力

    除此之外,它还有一个优点,就是支持事务消息,让分布式事务的实现变得简单

    05 分布式数据库

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

    1 主从复制和读写分离

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

    2 分库分表方案

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

    分库分表可以在应用层做,通过对id或者其他字段进行hash以便映射到对应的表中。当然也可以通过数据库中间件来完成,例如mycat这种中间件,通过代理的方式实现分库分表,非常方便。

    06 大后端相关技术

    Hadoop生态

     常见的组件有:hdfs,hbase,hive,zookeeper,flume,sqoop,yarn。

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

    对于入门hadoop生态来说,这本书完全足够了,如果你要做大数据平台开发或者是数据研发工程师,可能需要非常全面地了解这些组件的底层原理。

    云计算

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

    docker则是现在非常流行的一种容器,用于快速部署应用。

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

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

    推荐资源:《Docker技术入门与实战》,《kubenetes权威指南》

    其他常见后端技术

    除此之外,想必大家还了解过很多其他的技术,只不过不同的业务用到的组件往往不一样,所以并不是每个东西你都需要去了解。

    比如搜索引擎技术Lucene,基于它的两款产品solr和elasticsearch,通常出现在需要搜索功能的项目中。

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

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

    当然,也有现在大火的人工智能,还有太多的技术我们没机会去了解和使用,我们能做的也就是在自己能力范围内把需要做的东西做到最好了。

    所以,这些内容并不是每一样你都需要知道,但是如果有时间去了解一下的话,还是建议多了解一点的。

    07 总结

    总结

    纵观全文,我们主要讲了这些内容:

    1 Web架构 2 分布式基础理论 3 常见分布式技术 4 缓存 5 消息队列 6 数据的分布式方案 7 大后端相关技术
  • 相关阅读:
    rem布局原理
    vue引入bootstrap.min.css报错:Cannot find module "./assets/css/bootstrap.min.css"
    安装cnpm
    安装webpack出现警告: fsevents@^1.0.0 (node_moduleschokidar ode_modulesfsevents):
    npm run dev报错,events.js:160 throw er; // Unhandled 'error' event
    让webstorm支持新建.vue文件
    电脑上已经安装mysql之后安装wamp,wamp中的mysql无法启动的解决办法
    Hibernate
    C和指针
    如何测试一个杯子
  • 原文地址:https://www.cnblogs.com/xiaoshenke/p/10880775.html
Copyright © 2020-2023  润新知