本文覆盖内容较广,从研发基础、框架、组件、部署、工具几个方面分别讲述了Java 后台研发涉及的知识,各种技术选取最常用和实用的部分,可以让读者花较少的时间获取精要的内容。
基础篇包含Java语言的使用和特性、Maven 工程管理、Svn 和Git代码管理、Linux 服务器命令。服务框架篇包含Spring 框架治理、SpringMVC、SpringBoot.框架演进、Spring Cloud微服务框架。
组件篇包含MySQL数据库及操作、MongoDB存储、Redis 缓存、Zookeeper 配置及注册发现原理、FastDFS文件存储、ElasticSearch 搜索、定时任务、RabbitMQ 消息队列、ELK日志展示及分析。
部署篇包含Docker镜像技术、Jenkins 持续集成、Harbor 镜像仓库、Rancher 容器管理。
工具篇包含Swagger接口文档编写及测试工具、JMeter 测试工具、VisualVM 分析工具等。
全文共分为五篇,21章的内容,每篇内容如下:
第一篇主要讲解Java语言,以及工程构建、代码管理和基本的服务器命令,以这些内容作为本文的起点和基础。
第1章Java概要,Java是一门面向对象的编程语言,它选择性地吸取了C++语 言的优点,并在其基础上丰富了自己的体系。Java 在健壮性、可移植性、安全性等多个方面均有所突破。同时Java 的单一继承性和引用的概念(无指针)也使语言更易理解。本章通过讲解Java中常用的能力使读者能够快速地了解和使用Java。如果您已经对Java有非常深的理解,那么此章也可以作为Java核心内容的提炼笔记,需要时可以随手翻阅。
第2章Maven,在Java的世界中,依赖管理是不得不面对的问题。无论是外部的开源类库依赖,还是项目内部的模块间依赖,都需要进行依赖管理。可以说依赖管理是持续集成的核心内容之,- - 。Maven抽象定义了一个软件的完整生命周期,遵循这个模型,可轻松地管理自己的软件项目,避免不必要的学习成本,并促进软件项目管理的标准化、流程化。
第3章代码管理,本章会介绍两个优秀的版本管理工具Svn和Git。
Svn是集中式版本控制系统,版本库存放在中央服务器,必须联网才能工作。
Git是分布式版本控制系统,也就是每个研发人员从中心版本库的服务器上拉取代码后会在自己的计算机上克隆-个自己的版本库。工作的时候不需要联网,因为版本都在自己的计算机上。
第4章Linux命令,在日常工作中,通常测试环境和生产环境的软件都是运行在Linux 服务器上,了解并掌握基本的Linux命令对研发者来讲尤为重要。本章将讲解Linux系统的常用命令。
第二篇主要讲解Spring框架治理、服务框架Spring MVC和Spring Boot、 服务架构的演进以及微服务框架Spring Cloud.
第5章Spring,Spring是一-个轻量级JavaSE/JavaEE 开发应用框架9,可以一-站式地构建企业应用。Spring是模块化的,几乎涵盖了开发所需要的所有组件,如果业务需求超出其能力,也可方便集成第三方组件。Spring 可以管理对象,还提供了适用于安全控制、异常处理、日志记录等场景的面向切面的能力,同时,Spring 提供与第三方框架无缝集成能力,进一步方便业务开发和拓展。
第6章Spring MVC,Spring MVC是传统框架SSM的组成部分,本章将介绍Spring MVC框架的特性以及此框架在工程中的作用和用法。
第7章Spring Boot,前面已经详细地介绍了Spring 的能力,相信大家对Spring 已经有了自己的理解。那么Spring Boot和Spring之间存在什么联系呢?
Spring的核心理念是让研发者专注于业务的逻辑,而不过分考虑框架的治理,基于此思想,Spring 确实做出了很多改进,例如使用XML进行配置和后期的使用注解进行配置。但是即使如此,Spring 还是没有逃脱大量的配置工作,例如引入外部工程依赖时的配置等;在工程中管理大量的工程依赖时,各个依赖版本间的兼容性和配置属性繁琐等问题变得更为明显。这些问题与Spring的初衷相悖,所以Spring Boot的出现就是Spring初衷继续贯彻的升级版。因此,可以把Spring Boot理解为简化并且丰富了的Spring。
Spring Boot的使用会让编程更加简单,更加专注于业务,如果对比上面Spring MVC的配置,你会发现Spring Boot的改进到底有多大。这些改进基于Spring Boot的自动配置和起步依赖。本文对Spring Boot做最精要的提炼,目的是让大家快速了解Spring Boot的神奇之处。
第8章服务架构,第一篇的几章内容,从Java语言开始,讲解如何使用语言以及了解语言的特性;然后讲解了Maven工程的管理;接下来使用Git和Svn版本控制软件来管理代码;介绍了Linux 系统命令,并且在Linux 服务器中运行了一个Java 程序。在第二篇的头几章内容中,学习了使用Spring框架治理来管理程序,并且了解了Spring MVC的页面编写等内容;.上一 章使用 SpringBoot更简便的管理程序。其实到目前为止,已经可以通过讲解的内容编写自己的业务了。但是本书的范围明显不限于此。通过本章的了解,可以看到一个小系统是如何一步步变大的,以及系统变大后这种复杂系统的管理办法。
第9章Spring Cloud,Spring Cloud是一套微服务治理框架,正如前面提到的,如果把一个传统架构的程序拆分为一个一个小的微服务,那么出现的治理和使用上的问题就可以通过Spring Cloud解决。
Spring Cloud提供了服务发现、配置管理、消息总线、负载均衡、断路器、链路跟踪、数据监控等微服务治理能力,使微服务集群可以全面地被管理和组合起来。同时Spring Cloud各个组件是基于Spring Boot的,这些能力可以通过Spring Boot的简单配置实现。
本章使用Spring Cloud 的Edgware.SR2版本。Spring Cloud的可选组件很多,文中选择其中的一部分进行演示,例如Eureka 和Zookeeper都可以作为服务发现组件,文中只演示Eureka。
第三篇主要讲解在服务中使用的数据库、缓存、定时任务、消息队列、全局搜索等功能组件的使用方法和使用场景。
第10章MySQL,常见的数据库种类很多,例如Oracle、 MySQL、 SQL Server 等,各有特点和应用范围,其中MySQL由于支持多语言开发、成本低、可定制、社区活跃度高、开放源码等特点,成为许多项目的首选。MySQL是一个多用户、多线程的关系型数据库管理系统,本章将讲解MySQL的特性、命令及用法。
第11章MongoDB,随着互联网业务的发展,传统的关系型数据库RDBMS日(MySQL等)在一-些场合遇到挑战。首先,对数据库存储的容量要求越来越高,单机无法满足需求,很多时候需要用集群来解决问题,而RDBMS由于要支持join, union 等操作,- -般不支持分布式集群。其次,在大数据流行的今天,很多数据都“频繁读和增加,不频繁修改”,而RDBMS对所有操作一视同仁,这就带来了空间浪费以及查询性能问题。另外,互联网业务的不确定性导致数据库的存储模式也需要频繁变更,不自由的存储模式增大了实现的复杂性和扩展的难度。而非关系型数据库NoSQL9正好填补了这块空白,MongoDB 正是非关系型数据库的代表产品之一。
第12章Redis,在实际业务中,如果仅使用关系型数据库,当然可以对数据进行增删改查等操作,但随着业务量的上升,就会遇到数据库的性能瓶颈,虽然可以通过优化数据库或者使用读写分离等技术使数据库的承载能力提高,但还有一-种可 以显著提高业务性能的方式:添加缓存。
缓存凭借着超强的数据读写能力,能够承担非常大的业务请求压力,并且- -些不适合存入数据库的数据放入缓存中也是一-种不错的选择。 缓存分为本地缓存和分布式缓存,本章仅介绍分布式缓存Redis。
Redis支持数据的持久化,可以在重启Redis时把持久化的数据再加载进缓存; Redis 提供了5种数据格式的存储,分别是String、List、 Hash、 Set、 ZSet; Redis 支持数据的备份,也就是可以建立多节点。单台Redis 在不考虑网络的情况下,可以达到每秒10万次左右的读能力。所以对于一名研发者来讲,使用好Redis会让工作变得简单且流畅。
第13章Zookeeper,Zookeeper从英文直译是“ 动物管理员”。各个系统就好比动物园里的动物,为了使各个系统能正常提供统一的服务, 必须用一-种机制来进行协调, 这就是ZooKeeper的作用。
第14章FastDFS,业务开发过程中,或多或少都会接触到文件的存储和下载,这些文件在服务器中存储时,需要一个稳定、易扩容、高可用的环境。FastDFS 很好地支持了这些需求,本章使用FastDFS实现文件储存的相关操作。
第15章ElasticSearch,随着业务数据的增多,在站内搜索信息可能是--个新的挑战。如果直接查询数据库,前提是要知道数据存放在哪个表中,有哪些字段,但是实际上大部分情况是只知道要搜索的内容,而不知道具体的位置。同时站内搜索对搜索耗时有较高的要求,如何优化查询也是要面临的一系列问题。ElasticSearch 的出现正是为了解决上面问题的。本章介绍如何使用ElasticSearch 实现搜索相关的业务需求。
第16章定时任务,业务系统常常由于某些业务的需求,要在特定时刻或者特定时间间隔中做一-些事情。 例如研发-一个电商平台,需要实时查看当前订单成交总额情况,这就需要用定时任务不停地查看系统内的订单并.且统计总额;或者对于用户还未支付的订单,想在订单有效期内提醒用户,这就需要定时查看系统内的未支付订单,并且监控订单的有效时间,在失效前提醒用户支付;或者运营人员期望每天生成-一个统计表,用来展示前-天平台内所有用户的购买情况,这也需要用一个定时任务每天按时启动统计。以上这些应用场景都是定时任务的用武之地。
第17章RabbitMQ,对于某些时限要求不高的业务,或者为了降低后端服务压力的情况,可能会用到消息队列。消息队列就像一个仓储或者转运中心,某些服务需要处理一些事务, 但是又不急于得到返回,或者能够处理此事务的服务由于各种原因不能立刻返回,这种情况下就会把这个事务放入消息队列,然后由能够处理此事务的服务从消息队列中获取需要执行的事务再执行。所以消息队列在此种情形下达到了解耦、暂存、削峰的目的。
RabbitMQ是实现了AMQPθ 协议的消息中间件的一种, 易用性、扩展性、高可用性较好,同时支持多种客户端,如Python、Java、 PHP、C等。本章介绍RabbitMQ的主要用法。
第18章ELK,在一个使用Spring Cloud进行微服务化的系统集群内,包含不同能力的服务,同一服务还包含多个程序实例,这些实例可能运行在不同的服务器中。如果集群中某- -服 务出现了问题需要查看日志,可能要到不同的服务器中逐个查看日志文件,这明显是个很麻烦的事情。使用ELK就能够很好地解决此问题。
ELK是ElasticSearch、 Logstash、 Kibana 三个软件的聚合,使用这三个软件最后达到日志搜集、存储、分析等目的。其中ElasticSearch 提供存储及搜索引擎的能力; Logstash9是 日志搜集、分析、过滤、输出的工具; Kibana为日志分析提供友好的Web界面,可以对日志进行可视化的搜索、汇总和分析。
第四篇主要讲解镜像技术的用法,使用镜像技术快速搭建功能环境的服务组件,并且讲解使用Jenkins构建工程以及服务部署相关的内容。
第19章Docker,当把程序部署到服务器时,常常面临环境的问题,例如系统版本和程序不匹配、使用的JDK版本需要重新安装、系统的环境变量需要重新设置、新程序与服务器中已存在程序之间的冲突等问题。这些问题给服务集群的部署带来了- -定的麻烦,每次上线可能由于几个环境问题要调试好久。解决以上问题就是Docker应用的场景。
第20章项目构建,本章介绍使用Jenkins9进行 软件的持续集成,然后自动构建程序的镜像,推送至Harbor私有仓库,最后用Rancher管理容器的运行。
第五篇主要讲解在日常工作中,为了提高工作质量和效率所使用的研发工具。
第21章常用工具,本章将介绍Swagger、 JMeter、 ab、VisualVM、 JD- GUI工具的使用,这些工具会帮助你提高工作效率和质量。
因为文中包含的内容实在是太多了,所以小编只把部分知识点拿出来粗略的介绍了一下,每个小节都有更加细化的内容。
这份【Java服务端研发知识图谱】共有424页
大家加油好好学习吧!!!