一、SpringBoot 与 SpringMVC  的区别?

SpringMVC是基于Spring的MVC框架,

而Spring Boot是基于Spring配置的开发工具框架,使用注解更加简洁和适应快速开发。

二、SpringBoot的启动机制?

从代码上看,调用了SpringApplication的静态方法run,这个run方法会构造一个SpringApplication的实例,然后再调用这里实例的run方法就表示启动SpringBoot.

具体的实例流程:

  1. 构造SpringApplication的实例
  2. 调用SpringApplication.run()方法

          构造SpringApplicationRunListeners实例

           发布ApplicationStartedEvent事件

          SpringApplicationRunListeners实例准备环境信息

         创建ApplicationContext对象

          ApplicationContext实例准备环境信息

          刷新的上下文

最重要的注解:

  • @Configuration(@SpringBootConfiguration点开查看发现里面还是应用了@Configuration)
  • @EnableAutoConfiguration
  • @ComponentScan

每次写这3个比较累,所以写一个@SpringBootApplication方便点。

三、 基于继承SpringBoot 的拦截器实现异常拦截?

继承springboot的RuntimeException拦截器创建的异常拦截,定义全局异常拦截器:继承自RuntimeException,在业务代码中专注处理业务,而不是返回各种CodeMsg(比如这里只需要知道登录时成功还是失败,其余情况直接抛出异常),可以直接抛出异常,添加一个全局异常类,根据CodeMsg来生成异常, 交由GlobalExceptionHandler全局异常处理器处理(在其中增加if条件分支即可)

登录拦截是通过实现HandlerInterceptor 拦截器达到的拦截URL请求

四、SpringBoot在实际项目中的作用是什么?(开启事务管理)

Spring Boot 通过一个自动配置和启动的项来解决Spring或SpringMVC中配置大量参数问题。为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。同时他也是应用的主入口类,并且提供事务管理的功能(在Springboot中添加@EnableTransactionManagement注解,在对应的service方法上添加@Transactional注解便可启动事务)。

五、SpringCloud是怎么进行限流的?

Hystrix使用线程池隔离,超过线程池的负载,走熔断的逻辑。在一般应用服务器中,比如tomcat容器也是通过限制它的线程数来控制并发的;也有通过时间窗口的平均速度来控制流量。常见的限流纬度有比如通过Ip来限流、通过uri来限流、通过用户访问频次来限流。

SpringCloud Gateway限流

六、关于SpringCloud 中服务熔断、服务雪崩、服务监视?

服务熔断:

当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息。一般是某个服务故障或异常引起,类似保险丝,当某个异常条件被触发,直接熔断整个服务,而不是一直等到服务超时。发生在服务端

服务降级:

通过切面的方式,在客户端实现服务熔断的效果。一般是从整体负荷考虑。当某个服务熔断后,服务器不可以被调用,此时客户端可以自己准备一个本地的Fallback回调,返回一个缺省值。这样做,虽然服务水平下降,但好歹可以使用,比直接挂掉要好。

服务雪崩效应:

是一种因“服务提供者的不可用”(原因)导致“服务调用者不可用”(结果),并将不可用逐渐放大的现象。