8. 高频面试题-SpringBoot&SpringCloud

##高频面试题-SpringBoot&SpringCloud
(1) 什么是springboot

  • 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)
  • 创建独立的spring引用程序 main方法运行
  • 嵌入的Tomcat 无需部署war文件
  • 简化maven配置
  • 自动配置spring添加对应功能starter自动化配置

(2) springboot常用的starter有哪些

  • spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持
  • spring-boot-starter-data-jpa 数据库支持
  • spring-boot-starter-data-redis redis数据库支持
  • spring-boot-starter-data-solr solr支持
  • mybatis-spring-boot-starter 第三方的mybatis集成starter

(3) 你如何理解 Spring Boot 中的 Starters?

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。

(4) springboot自动配置的原理

  • 在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration会自动去maven中读取每个starter中的spring.factories文件 该文件里配置了所有需要被创建spring容器中的bean

(5) springboot读取配置文件的方式

  • springboot默认读取配置文件为application.properties或者是application.yml. 最先会读取一个bootstrap.yml的文件

(6) springboot集成mybatis的过程

  • 添加mybatis的starter maven依赖
  • 在mybatis的接口中 添加@Mapper注解
  • 在application.yml或者application.properties配置数据源信息

(7) 为什么要用 Spring Boot?

  • 独立运行
  • 简化配置
  • 自动配置
  • 无代码生成和XML配置
  • 应用监控
  • 上手容易

(8) Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

  • Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。bootstrap 配置文件有以下几个应用场景。
  • 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;一些固定的不能被覆盖的属性;一些加密/解密的场景;

(9) Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

  • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
  • @ComponentScan:Spring组件扫描。

(10) 运行 Spring Boot 有哪几种方式?

  • 打包用命令或者放到容器中运行
  • 用 Maven/ Gradle 插件运行
  • 直接执行 main 方法运行

(11) Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?

  • 配置变更
  • JDK 版本升级
  • 第三方类库升级
  • 响应式 Spring 编程支持
  • HTTP/2 支持
  • 配置属性绑定
  • 更多改进与加强

(12) Spring Boot 有哪几种读取配置的方式?

Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量

(13) SpringBoot 实现热部署有哪几种方式?

  • Spring Loaded
  • Spring-boot-devtools

(14) Spring Cloud 微服务的那点事

https://www.toutiao.com/a6604246003090457096/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&timestamp=1543670961&app=news_article&utm_source=weixin&iid=34453696208&utm_medium=toutiao_android&group_id=6604246003090457096

(15) Spring Cloud 你们在项目中如何使用?

项目中基础的Spring Cloud架构是有架构师搭建好的,我们主要安装代码规范开发微服务,并且把微服务注册到Eurake 注册中心,然后在需要调用微服务的客户端使用Feign的注解@FeignClient绑定接口来调用,同时
在网关项目中配置自己编写的服务地址

(16) Spring Cloud 有哪些组件?

  • Eurake: SpringCloud的服务发现和注册的组件

    • 注册中心 : Eureka server
        1. 引入SpringBoot依赖,Eureka server依赖
      • 2)编写启动类,添加注解@EnableEurekaServer
      • 3)在application.yml中配置注册中心相关信息和指定注册中心的地址
    • 生产者: Eureka Client
      • 1) 引入SpringBoot依赖,Eureka client依赖
        1. 编写启动类,添加注解@EnableEurekaClient
      • 3)在application.yml中配置相关信息同时指定服务注册中心的地址
      • 4) 编写微服务(controller+service+dao)
    • 消费者: Eureka Client
      • 1) 引入SpringBoot依赖,Eureka client依赖
        • ribbon依赖
        • feign依赖
        1. 编写启动类,添加注解@EnableEurekaClient
        • @EnableDiscoveryClient : 服务发现的注解
        • @EnableFeignClients : 开启feign的注解
      • 3)在application.yml中配置相关信息同时指定服务注册中心的地址
        1. 编写微服务访问接口同时使用@FeignClient 指定该接口访问哪一个微服务,然后指定方法访问的url地址
  • Ribbon:负载均衡客户端,需要结合RestTemplate进行服务的调用

    • 默认的负载均衡:轮询
    • 服务器启动时,先从Eureka server获取服务列表,然后
      在请求微服务时,通过RestTemplate进行http调用
  • Feign:Feign默认集成了Ribbon

    • Feign可以通过@FeignClient 注解标识一个接口,通过该接口生成一个代理类来进行远程的微服务调用
  • Hystrix : 熔断限流的组件

    • 为了防止微服务直接调用时,由于某一个微服务宕机导致整个无法雪崩,这里采用Hystrix来阻断对存在宕机,异常情况的请求,直接本地返回

    • 1)Ribbon集成,首先引入相关的依赖,接着开启@EnableHystrix
      接着在调用微服务方法上添加 @HystrixCommand(fallbackMethod = “hiError”)指定服务异常的之后本地执行的方法

    • 2)Feign集成,在微服务绑定的接口@FeignClient(value = “service-hi”,fallback = SchedualServiceHiHystric.class)中指定异常时调用本地接口实现

    • 判定失败:Hystrix会在某个服务连续调用N次不响应的情况下,立即通知调用端调用失败,避免调用端持续等待而影响了整体服务,执行本地业务。

    • 恢复服务:Hystrix间隔时间会再次检查此服务,如果服务恢复将继续提供服务。Hystrix间隔几秒会让其中一个请求去调用远程微服务,如果调用成功,就表示服务正常,后面就重新链接

    • 开路 断路

  • Spring Cloud Config : 集中管理中心- 特点:(1)集中管理配置文件,可以将配置文件存在本地或者用git仓库存储 (2)配置文件自动刷新,不用重启client

    • 在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client
    • Server提供配置文件的存储、以接口的形式将配置文件的内容提供出去
    • Client通过接口获取数据、并依据此数据初始化自己的应用。
  • Zull (网关):Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能。

    • 1) 引入相关的依赖, Eureka client和zuul的依赖

      1. 启动类添加
        @EnableZuulProxy – 开启网关
        @EnableEurekaClient – 表示时一个eurake客户端
        @EnableDiscoveryClient – 开启服务发现
    • 3) 编写application.yml配置注册中心地址,
      - 配置zuul转发路径和微服务的对应关系

    • 4)编写过滤器拦截请求,完成相关权限的校验

(17) springcloud如何实现服务的注册和发现

  • 服务在发布时 指定对应的服务名(服务名包括了IP地址和端口) 将服务注册到注册中心(eureka或者zookeeper)
  • 这一过程是springcloud自动实现 只需要在main方法添加@EnableDisscoveryClient 同一个服务修改端口就可以启动多个实例
  • 调用方法:传递服务名称通过注册中心获取所有的可用实例 通过负载均衡策略调用(ribbon和feign)对应的服务

(18) ribbon和feign区别

  • Ribbon添加maven依赖 spring-starter-ribbon 使用@RibbonClient(value=“服务名称”) 使用RestTemplate调用远程服务对应的方法

  • feign添加maven依赖 spring-starter-feign 服务提供方提供对外接口 调用方使用 在接口上使用@FeignClient(“指定服务名”)

  • Ribbon和Feign的区别: Ribbon和Feign都是用于调用其他服务的,不过方式不同。

    • 启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。
    • 服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
    • 调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

(19) springcloud和dubbo的区别

  • 最大的区别:Spring Cloud抛弃了Dubbo 的RPC通信,采用的是基于HTTP的REST方式。Dubbo目前也已经支持REST风格的服务,但是在项目中使用dubbo还有很多问题需要解决,比如熔断机制,集中配置等需要自行使用其他技术,但是Spring Cloud提供一套微服务架构比较完善的解决方案。所以目前更多的企业使用Spring Cloud
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开&烎&火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值