Spring Cloud面试题整理

1、Spring Cloud由什么组成?

  • Spring Cloud Eureka:服务注册与发现
  • Spring Cloud Zuul:服务网关
  • Spring Cloud Ribbon:客户端负载均衡
  • Spring Cloud Feign:声明性的Web服务客户端
  • Spring Cloud Hystrix:断路器
  • Spring Cloud Config:分布式统一配置管理

2. Spring Cloud 和dubbo区别?

(1)服务调用方式:dubbo是RPC springcloud Rest Api
(2)注册中心:dubbo 是zookeeper springcloud是eureka,也可以是zookeeper
(3)服务网关,dubbo本身没有实现,只能通过其他第三方技术整合,springcloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素

3、什么是Eureka的自我保护模式?

 默认情况下,如果Eureka server在一定时间内没有收到某个微服务实例的心跳,那么服务器将会注销该实例 默认为90s 其实这种行为是比较危险的,当遇到例如网络分区的影响的时候、便会出现误判。此时就需要Eureka的自我保护模式来解决这个问题。-当Eureka server节点在短时间内丢失过多的客户端时 那么这个节点就会进入自我保护模式。进入该模式。 eureka server会保护服务注册表中信息,不在删除服务注册表中的数据、当网络故障恢复 server会自动退出自我保护模式、

4、Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别? 

1. ZooKeeper中的节点服务挂了就要选举 在选举期间注册服务瘫痪,虽然服务最终会恢复,但是选举期间不可用的, 选举就是改微服务做了集群,必须有一台主其他的都是从

2. Eureka各个节点是平等关系,服务器挂了没关系,只要有一台Eureka就可以保证服务可用,数据都是最新的。 如果查询到的数据并不是最新的,就是因为Eureka的自我保护模式导致的

3. Eureka本质上是一个工程,而ZooKeeper只是一个进程

4. Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像ZooKeeper 一样使得整个注册系统瘫痪

5. ZooKeeper保证的是CP,Eureka保证的是AP(自我保护模式下保证可用性)

CAP: C:一致性>Consistency; 取舍:(强一致性、单调一致性、会话一致性、最终一致性、弱一致性) A:可用性>Availability; P:分区容错性>Partition tolerance;

5、zuul网关的作用

  • 统一管理微服务请求,权限控制、负载均衡、路由转发、监控、安全控制黑名单和白名单等

 6、 Zuul与Nginx有什么区别?

  • Zuul 是 java 语言实现的,主要为 java 服务提供网关服务,尤其在微服务架构中可以更加灵活的对网关进行操作。
  • Nginx 是使用 C 语言实现,性能高于 Zuul ,但是实现自定义操作需要熟悉 lua 语言,对程序员要求较高,可以使用Nginx 做 Zuul 集群。

7、Riboon的几种负载均衡算法 

Ribbon中的7中负载均衡算法:

(1)RoundRobinRule:轮询;

(2)RandomRule:随机;

(3)AvailabilityFilteringRule:会先过滤掉由于多次访问故障而处于断路器状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问;

(4)WeightedResponseTimeRule:根据平均响应时间计算所有服务的权重,响应时间越快的服务权重越大被选中的概率越大。刚启动时如果统计信息不足,则使用RoundRobinRule(轮询)策略,等统计信息足够,会切换到WeightedResponseTimeRule;

(5)RetryRule:先按照RoundRobinRule(轮询)策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用的服务;

(6)BestAvailableRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务;

(7)ZoneAvoidanceRule:复合判断Server所在区域的性能和Server的可用性选择服务器;

8、什么是 Hystrix?

Hystrix是一种断路器,主要的作用是在微服务治理中保护服务。主要的功能设计:

服务降级(当接口调用失败,自动执行一个空的方法。避免线程阻塞)

服务熔断  当接口调用失败,自动执行提前定义好的熔断方法 统一返回错误信息)

服务隔离:隔离服务间的相互影响 

Hystrix实现服务隔离_仰望飞机的博客-CSDN博客_hystrix的服务隔离

服务监控:将服务调用的每秒请求数和每秒成功请求书记录下来

9、服务雪崩效应产生的原因

  • 当大多数人在使用Tomcat时,多个HTTP服务会共享一个线程池,假设其中一个HTTP服务访问的数据库响应非常慢,这将造成服务响应时间延迟增加,大多数线程阻塞等待数据响应返回,导致整个Tomcat线程池都被该服务占用,甚至拖垮整个Tomcat。因此,如果我们能把不同HTTP服务隔离到不同的线程池,则某个HTTP服务的线程池满了也不会对其他服务造成灾难性故障。这就需要线程隔离或者信号量隔离来实现了。
     

10、openFeign夺命连环9问,这谁受得了? 

Spring Cloud OpenFeign 的核心工作原理:

  • 通过 @EnableFeignCleints 触发 Spring 应用程序对 classpath 中 @FeignClient 修饰类的扫描
  • 解析到 @FeignClient 修饰类后, Feign 框架通过扩展 Spring Bean Deifinition 的注册逻辑, 最终注册一个 FeignClientFacotoryBean 进入 Spring 容器
  • Spring 容器在初始化其他用到 @FeignClient 接口的类时, 获得的是 FeignClientFacotryBean 产生的一个代理对象 Proxy.
  • 基于 java 原生的动态代理机制, 针对 Proxy 的调用, 都会被统一转发给 Feign 框架所定义的一个 InvocationHandler , 由该 Handler 完成后续的 HTTP 转换, 发送, 接收, 翻译HTTP响应的工作

大佬的文章写的非常nice,关于Feign相关的面试题都可以在这篇文章中找到答案

​​​​​​​openFeign夺命连环9问,这谁受得了?openFeign一波带走!https://mp.weixin.qq.com/s/YJu2oN-qxtpShrmHlyrByw

11、Spring Cloud配置中心相关。

阿里面试这样问:Nacos、Apollo、Config配置中心如何选型?这10个维度告诉你!icon-default.png?t=LA92https://mp.weixin.qq.com/s/S_8HQYHOG624Vzeu94CFSA

12、微服务限流如何设计?常用的限流算法?

 限流算法:

没想到,为了一个限流我写了1万字!限流作为现在微服务中常见的稳定性措施,在面试中肯定也是经常会被问到的,我在面试的时候也经常喜欢问一下你对限流https://mp.weixin.qq.com/s/_Gzr69vV-ob6jOwxYxu7pw阿里限流工具:

https://mp.weixin.qq.com/s/Q7Xv8cypQFrrOQhbd9BOXwicon-default.png?t=LA92https://mp.weixin.qq.com/s/Q7Xv8cypQFrrOQhbd9BOXw

13、OAuth2鉴权相关

OAuth2.0实战!使用JWT令牌认证!https://mp.weixin.qq.com/s/ckWzRsUoZz6Tt3iBqnZdRg 

参考大佬文章:

【金三银四】Spring Cloud面试题(2021最新版)_SQY0809的博客-CSDN博客_springcloud面试题2021 

你可能感兴趣的:(Spring,spring,cloud,面试,java)