Spring_Mybatis_SpringMVC_SpringBoot_SpringCloud框架

# SpringMVC执行流程: #
1.用户发送请求至前端控制器DispatcherServlet
2.DispatcherServlet收到请求调用处理器映射器HandlerMapping。
3.处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。
4.DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作
5.执行处理器Handler(Controller,也叫页面控制器)。
6.Handler执行完成返回ModelAndView
7.HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet
8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9.ViewReslover解析后返回具体View
10.DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)。
11.DispatcherServlet响应用户。

**组件说明:**
1.DispatcherServlet:前端控制器。用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性,系统扩展性提高。由框架实现
2.HandlerMapping:处理器映射器。HandlerMapping负责根据用户请求的url找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,根据一定的规则去查找,例如:xml配置方式,实现接口方式,注解方式等。由框架实现
3.Handler:处理器。Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
4.HandlAdapter:处理器适配器。通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。由框架实现。
5.ModelAndView是springmvc的封装对象,将model和view封装在一起。
6.ViewResolver:视图解析器。ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
7View:是springmvc的封装对象,是一个接口, springmvc框架提供了很多的View视图类型,包括:jspview,pdfview,jstlView、freemarkerView、pdfView等。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。

# SpringMVC 常用注解都有哪些? #
@requestMapping 用于请求 url 映射。
@RequestBody 注解实现接收 http 请求的 json 数据,将 json 数据转换为 java 对象。
@ResponseBody 注解实现将 controller 方法返回对象转化为 json 响应给客户。

# springboot介绍 #
Spring Boot 已经建立在现有 spring 框架之上。使用spring 启动,我们避免了之前我们必须做的所有样板代码和配置。因此,Spring Boot 可以帮助我们以最少的工作量,更加健壮地使用现有的 Spring 功能。springboot是纯以注解开发的,配置文件默认application.properties/yml,

Spring Boot作为微服务的入门级微框架,有四点好处

   1) Spring Boot使编码变简单
   2) Spring Boot使配置变简单
   3) Spring Boot使部署变简单
   4) Spring Boot使监控变简单

# springboot启动类注解是什么?具体包含哪些注解,最好说说每个注解含义 #

@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。标注这个类是属于SpringBoot的启动类

@Configuration 等同于spring的XML配置文件

@EnableAutoConfiguration 自动配置。

@ComponentScan 组件扫描,可自动发现和装配一些Bean。

@Component可配合CommandLineRunner使用,在程序启动后执行一些基础任务。

@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。

@Autowired自动导入。

@PathVariable获取参数。


# Docker #
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

# Dubbo #
Dubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案, 可以和Spring框架无缝集成。
5.dubbo中消费者调用提供者原理
    Provider:暴露服务方称之为“服务提供者”
    Consumer:调用远程服务方称之为“服务消费者”
    Registry:服务注册与发现的中心目录服务称之为“服务注册中心”
    Monitor:统计服务的调用次调和调用时间的日志服务称之为“服务监控中心”
Provider发布后会在Registry中注册, Consumer从Registry订阅服务,一旦注册中心提供了Provider, Consumer就可以异步得到通知,从而调用Provider的功能,这两者都会在Monitor监控中心中被记录调用的信息.


# 9.消费者调用提供者如果网络断了怎么办? #
三种方案
1,dubbo部署集群,当前网络中断可在集群中匹配到其它提供者实现,如果没有找到其它提供者, 服务提供者和服务消费者仍能通过本地缓存通讯,直到网络恢复.

2 消费者在调用过程中如果得不到提供者的回馈则设定时间取消操作,事务进行回滚处理.保证事务完整性

3将请求消息放入消息队列中,提示用户操作,当提供者正常服务后进行消费,从而保证事务完整性.

如果是客户网断的情况大多不用担心,根据当前环境判断是否回滚,给出通知让用户上线后知道刚才做了什么,保留了什么,业务进行到哪。如果是服务器断网(环境肯定是分布式了)判断是否有集群,有则直接切换。没有集群的话消费者读取本地缓存,继续提供服务,实在获取不到服务的情况下,为了保证数据安全,消费者将在设定时间后进行事务回滚,除此之外,请求消息可暂时放入消息队列,在提供者上线后再进行操作。


# SpringCloud: #
springcloud是一套完整的微服务解决方案,基于springboot框架。但准确来说,它并不是一个框架,而更像是一个大的容器,将市面上成型比较好的微服务框架集成进来,简化了开发者的代码;

A:分两类
一类是融合在微服务中,依赖其他组件并为其提供服务:
Ribbon  客户端负载均衡; 
Hystrix 客户端容错保护;
Feign 声明式服务调用,本质上是Ribbon+Hystrix;
Stream  消息驱动;  
Bus 消息总线;
Sleuth  分布式服务追踪

第二类是独自启动,不需要依赖其他组件的:
Eureka    服务注册中心;
Dashboard      Hystrix仪表盘;
Zuul       API服务网关
Config    分布式配置中心

# Springcloud 常用组件介绍; #
Spring Cloud Eureka:注册中心
        Spring Cloud Feign:声明式服务调用,本质上就是Ribbon+Hystrix,使得Eureka和Ribbon的使用更为简单
        Spring Cloud Hystrix:融断机制,断路器,防止对某一故障服务持续进行访问
        Spring Cloud Ribbon:实现客户端负载均衡
        Spring Cloud Zuul:服务网关,具备服务路由、均衡负载、权限控制等功能
        Spring Cloud Config:统一管理配置文件
        Spring Cloud Sleuth:分布式追踪解决方案(服务多了,调用的线路就会很复杂,需要跟踪来知道你到底是怎么走的)

# feign与ribbon是什么以及都有些什么区别? #
    spring cloud的 Netflix 中提供了两个组件实现软负载均衡调用:ribbon 和 feign 。
    区别:
    ribbon 使用 HttpClient 或 RestTemplate 模拟http请求 步骤相当繁琐。
    feign本身里面就包含有了ribbon
    feign自身是一个声明式的伪http客户端,写起来更加思路清晰和方便

# 1.JVM原理 #
JVM->java虚拟机,解释器,负责将程序员编写的.java文件编译为多平台通用的字节码(.class)文件,最终将字节码解释给计算机执行

[JVM内存区域主要划分为“线程共享区”“非线程共享区”,比如,Method Area(方法区,non-heap)与Heap(堆),Direct Memory(运行时数据区域)是线程共享的,VM Stack(java方法栈,虚拟机栈),Native Method Stack(本地方法栈)和Program Counter Register(程序计数器)是非线程共享的]

2.JVM运行时初始分配方法区与堆,遇到线程时,分配程序计数器,虚拟机栈,本地方法栈,线程终止时,三者的内存空间会被释放(生命周期==所属线程生命周期),这也是为什么GC机制只会发生在“线程共享区”的原因。

# Redis有哪些数据类型 #
        
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。


# RabbitMQ调用过程以及相关的配置参数有哪些? #
调用过程:
生产者连接到RabbitMQ Broker , 建立一个连接 ,开启一个信道,声明一个交换器,声明一个队列,通过路由键将交换器和队列绑定起来,发送消息至RabbitMQ Broker,其中包含路由键、交换器等信息,相应的交换器根据接收到的路由键查找相匹配的队列。

如果找到,则将从生产者发送过来的消息存入相应的队列中,如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者关闭信道。 关闭连接。

消费者连接到RabbitMQ Broker ,建立一个连接 ,开启一个信道,消费者向RabbitMQ Broker 请求消费相应队列中的消息,等待RabbitMQ Broker 回应并投递相应队列中的消息, 消费者接收消息。消费者确认接收到的消息。RabbitMQ 从队列中删除相应己经被确认的消息, 关闭信道。关闭连接。

配置:
环境变量设置 如: 节点名称,rabbitmq配置文件地址, 节点内部通讯端口等
配置文件 如: 端口, ip, 网络,内存等
运行时参数和策略 在运行时设置

# 消息队列是如何进行消费的 #
        JMS规范目前支持两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subscribe,topic)在点对点模式中,消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。

猜你喜欢

转载自www.cnblogs.com/yh2two/p/11754164.html