90道SpringCloud面试题及答案(最新整理)
最新SpringCloud面试题及答案【附答案解析】SpringCloud面试题及答案,SpringCloud最新面试题及答案,SpringCloud面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集整理的。这些答案难免会存在一些错误,仅供大家参考。如果发现错误还望大家多多包涵,不吝赐教,谢谢~
如果不背 SpringCloud面试题的答案,肯定面试会挂!
这套SpringCloud面试题大全,希望对大家有帮助哈~
博主已将以下这些面试题整理成了一个Java面试手册,是PDF版的
1、什么是微服务
1、 微服务是⼀种架构⻛格,也是⼀种服务;
2、 微服务的颗粒⽐较⼩,⼀个⼤型复杂软件应⽤由多个微服务组成,⽐如Netflix⽬前由500多的微服务组成;
3、 它采⽤UNIX设计的哲学,每种服务只做⼀件事,是⼀种松耦合的能够被独⽴开发和部署的⽆状态化服务(独⽴扩展、升级和可替换)。
2、微服务限流 http限流:我们使⽤nginx的limitzone来完成:
//这个表示使⽤ip进⾏限流 zone名称为req_one 分配了10m 空间使⽤漏桶算法 每秒钟允许1个请求 limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s; //这边burst表示可以瞬间超过20个请求 由于没有noDelay参数因此需要排队 如果超过这20个那么直接返回503 limit_req zone=req_three burst=20;
3、Spring Cloud Netflix(重点,这些组件用的最多)
Netflix OSS 开源组件集成,包括Eureka、Hystrix、Ribbon、Feign、Zuul等核心组件。
1、 Eureka:服务治理组件,包括服务端的注册中心和客户端的服务发现机制;
2、 Ribbon:负载均衡的服务调用组件,具有多种负载均衡调用策略;
3、 Hystrix:服务容错组件,实现了断路器模式,为依赖服务的出错和延迟提供了容错能力;
4、 Feign:基于Ribbon和Hystrix的声明式服务调用组件;
5、 Zuul:API网关组件,对请求提供路由及过滤功能。
我觉得SpringCloud的福音是Netflix,他把人家的组件都搬来进行封装了,使开发者能快速简单安全的使用
4、什么是端到端微服务测试?
端到端测试验证了工作流中的每个流程都正常运行。这可确保系统作为一个整体协同工作并满足所有要求。
通俗地说,你可以说端到端测试是一种测试,在特定时期后测试所有东西。
图14:测试层次 – 微服务面试问题
5、什么是Netflix Feign?它的优点是什么?
Feign是受到Retrofit,JAXRS-2.0和WebSocket启发的java客户端联编程序。Feign的第一个目标是将约束分母的复杂性统一到http apis,而不考虑其稳定性。在employee-consumer的例子中,我们使用了employee-producer使用REST模板公开的REST服务。
但是我们必须编写大量代码才能执行以下步骤
1、 使用功能区进行负载平衡。
2、 获取服务实例,然后获取基本URL。
3、 利用REST模板来使用服务。 前面的代码如下
@Controller public class ConsumerControllerClient { @Autowired private LoadBalancerClient loadBalancer; public void getEmployee() throws RestClientException, IOException { ServiceInstance serviceInstance=loadBalancer.choose("employee-producer"); System.out.println(serviceInstance.getUri()); String baseUrl=serviceInstance.getUri().toString(); baseUrl=baseUrl+"/employee"; RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> response=null; try{ response=restTemplate.exchange(baseUrl, HttpMethod.GET, getHeaders(),String.class); }catch (Exception ex) { System.out.println(ex); } System.out.println(response.getBody());
之前的代码,有像NullPointer这样的例外的机会,并不是最优的。我们将看到如何使用Netflix Feign使呼叫变得更加轻松和清洁。如果Netflix Ribbon依赖关系也在类路径中,那么Feign默认也会负责负载平衡。
6、什么是OAuth?
OAuth 代表开放授权协议。这允许通过在HTTP服务上启用客户端应用程序(例如第三方提供商Facebook,GitHub等)来访问资源所有者的资源。因此,您可以在不使用其凭据的情况下与另一个站点共享存储在一个站点上的资源。
7、Ribbon是什么?
1、 Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法
2、 Ribbon客户端组件提供一系列完善的配置项,如连接超时,重试等。简单的说,就是在配置文件中列出后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。(有点类似Nginx)
8、Spring Cloud抛弃了Dubbo 的RPC通信,采用的是基于HTTP的REST方式。
严格来说,这两种方式各有优劣。虽然在一定程度上来说,后者牺牲了服务调用的性能,但也避免了上面提到的原生RPC带来的问题。而且REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更为合适。
9、什么是Idempotence以及它在哪里使用?
幂等性是能够以这样的方式做两次事情的特性,即最终结果将保持不变,即好像它只做了一次。
用法:在远程服务或数据源中使用 Idempotence,这样当它多次接收指令时,它只处理指令一次。
10、SpringBoot支持哪些嵌入式容器?
无论何时创建Java应用程序,都可以通过两种方法进行部署: 使用外部的应用程序容器。 将容器嵌入jar文件中。 SpringBoot包含Jetty,Tomcat和Undertow服务器,所有服务器都是嵌入式的。 Jetty - 用于大量项目,Eclipse Jetty可以嵌入到框架,应用程序服务器,工具和集群中。 Tomcat - Apache Tomcat是一个开源JavaServer Pages实现,可以很好地与嵌入式系统配合使用。 Undertow - 一个灵活而突出的Web服务器,它使用小型单一处理程序来开发Web服务器。
11、什么是客户证书?
客户端系统用于向远程服务器发出经过身份验证的请求的一种数字证书称为客户端证书。客户端证书在许多相互认证设计中起着非常重要的作用,为请求者的身份提供了强有力的保证。
12、REST 和RPC对比
1、 RPC主要的缺陷是服务提供方和调用方式之间的依赖太强,需要对每一个微服务进行接口的定义,并通过持续继承发布,严格版本控制才不会出现冲突。
2、 REST是轻量级的接口,服务的提供和调用不存在代码之间的耦合,只需要一个约定进行规范。
13、分布式配置中心的作用?
动态变更项目配置信息而不必重新部署项目。
14、链路跟踪Sleuth
当我们项目中引入Spring Cloud Sleuth后,每次链路请求都会添加一串追踪信息,格式是[server-name, main-traceId,sub-spanId,boolean]:
1、 server-name:服务结点名称。
2、 main-traceId:一条链路唯一的ID,为TraceID。
3、 sub-spanId:链路中每一环的ID,为SpanID。
4、 boolean:是否将信息输出到Zipkin等服务收集和展示。
Sleuth的实现是基于HTTP的,为了在数据的收集过程中不能影响到正常业务,Sleuth会在每个请求的Header上添加跟踪需求的重要信息。这样在数据收集时,只需要将Header上的相关信息发送给对应的图像工具即可,图像工具根据上传的数据,按照Span对应的逻辑进行分析、展示。
15、服务注册和发现是什么意思?Spring Cloud如何实现?
当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会产生问题。 Eureka服务注册和发现可以在这种情况下提供帮助。由于所有服务都在Eureka服务器上注册并通过调用Eureka服务器完成查找,因此无需处理服务地点的任何更改和处理。
16、21、在Spring MVC应用程序中使用WebMvcTest注释有什么用处?
在测试目标只关注Spring MVC组件的情况下,WebMvcTest注释用于单元测试Spring MVC应用程序。在上面显示的快照中,我们只想启动ToTestController。执行此单元测试时,不会启动所有其他控制器和映射。
17、什么是双因素身份验证?
双因素身份验证为帐户登录过程启用第二级身份验证。
图11: 双因素认证的表示 – 微服务访谈问题
因此,假设用户必须只输入用户名和密码,那么这被认为是单因素身份验证。
18、什么是不同类型的微服务测试?
在使用微服务时,由于有多个微服务协同工作,测试变得非常复杂。因此,测试分为不同的级别。
在底层,我们有面向技术的测试,如单元测试和性能测试。这些是完全自动化的。
在中间层面,我们进行了诸如压力测试和可用性测试之类的探索性测试。
在顶层, 我们的 验收测试数量很少。这些验收测试有助于利益相关者理解和验证软件功能。
19、什么是Eureka
Eureka作为SpringCloud的服务注册功能服务器,他是服务注册中心,系统中的其他服务使用Eureka的客户端将其连接到Eureka Service中,并且保持心跳,这样工作人员可以通过Eureka Service来监控各个微服务是否运行正常。
20、常用网关框架有那些?
Nginx、Zuul、Gateway
21、什么是Hystrix?它如何实现容错?
Hystrix是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。
通常对于使用微服务架构开发的系统,涉及到许多微服务。这些微服务彼此协作。
思考以下微服务
假设如果上图中的微服务9失败了,那么使用传统方法我们将传播一个异常。但这仍然会导致整个系统崩溃。
随着微服务数量的增加,这个问题变得更加复杂。微服务的数量可以高达1000.这是hystrix出现的地方 我们将使用Hystrix在这种情况下的Fallback方法功能。我们有两个服务employee-consumer使用由employee-consumer公开的服务。
简化图如下所示
现在假设由于某种原因,employee-producer公开的服务会抛出异常。我们在这种情况下使用Hystrix定义了一个回退方法。这种后备方法应该具有与公开服务相同的返回类型。如果暴露服务中出现异常,则回退方法将返回一些值。
22、为什么我们需要微服务容器?
要管理基于微服务的应用程序,容器是最简单的选择。它帮助用户单独部署和开发。您还可以使用Docker将微服务封装到容器的镜像中。没有任何额外的依赖或工作,微服务可以使用这些元素。
23、springcloud和dubbo有哪些区别
1、 Dubbo具有调度、发现、监控、治理等功能,⽀持相当丰富的服务治理能⼒。Dubbo架构下,注册中⼼对等集群,并会缓存服务列表已被数据库失效时继续提供发现功能,本身的服务发现结构有很强的可⽤性与健壮性,⾜够⽀持⾼访问量的⽹站。
2、 虽然Dubbo ⽀持短连接⼤数据量的服务提供模式,但绝⼤多数情况下都是使⽤⻓连接⼩数据量的模式提供服务使⽤的。所以,对于类似于电商等同步调⽤场景多并且能⽀撑搭建Dubbo 这套⽐较复杂环境的成本的产品⽽⾔,Dubbo 确实是⼀个可以考虑的选择。但如果产品业务中由于后台业务逻辑复杂、时间⻓⽽导致异步逻辑⽐较多的话,可能Dubbo 并不合适。同时,对于⼈⼿不⾜的初创产品⽽⾔,这么重的架构维护起来也不是很⽅便。
3、 Spring Cloud由众多⼦项⽬组成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系统及微服务常⽤的⼯具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、⼀次性token、全局锁、选主、分布式会话和集群状态等,满⾜了构建微服务所需的所有解决⽅案。⽐如使⽤Spring Cloud Config 可以实现统⼀配置中⼼,对配置进⾏统⼀管理;使⽤Spring Cloud Netflix 可以实现Netflix 组件的功能 - 服务发现(Eureka)、智能路由(Zuul)、客户端负载均衡(Ribbon)。
4、 Dubbo 提供了各种 Filter,对于上述中“⽆”的要素,可以通过扩展 Filter 来完善。
5、 dubbo的开发难度较⼤,原因是dubbo的jar包依赖问题很多⼤型⼯程⽆法解决。
24、SpringCloud Config 可以实现实时刷新吗?
springcloud config实时刷新采用SpringCloud Bus消息总线。
25、Zookeeper如何 保证CP
当向注册中⼼查询服务列表时,我们可以容忍注册中⼼返回的是⼏分钟以前的注册信息,但不能接受服务直接down掉不可⽤。也就是说,服务注册功能对可⽤性的要求要⾼于⼀致性。但是zk会出现这样⼀种情况,当master节点因为⽹络故障与其他节点失去联系时,剩余节点会重新进⾏leader选举。问题在于,选举leader的时间太⻓,30 ~ 120s, 且选举期间整个zk集群都是不可⽤的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因⽹络问题使得zk集群失去master节点是较⼤概率会发⽣的事,虽然服务能够最终恢复,但是漫⻓的选举时间导致的注册⻓期不可⽤是不能容忍的。
26、微服务之间如何独立通讯的?
同步通信:dobbo通过 RPC 远程过程调用、springcloud通过 REST 接口json调用 等。
异步:消息队列,如:RabbitMq、ActiveM、Kafka 等。
27、什么是OAuth?
OAuth 代表开放授权协议。这允许通过在HTTP服务上启用客户端应用程序(例如第三方提供商Facebook,GitHub等)来访问资源所有者的资源。因此,您可以在不使用其凭据的情况下与另一个站点共享存储在一个站点上的资源。
28、eureka服务注册与发现原理
1、 每30s发送⼼跳检测重新进⾏租约,如果客户端不能多次更新租约,它将在90s内从服务器注册中⼼移除。
2、 注册信息和更新会被复制到其他Eureka 节点,来⾃任何区域的客户端可以查找到注册中⼼信息,每30s发⽣⼀次复制来定位他们的服务,并进⾏远程调⽤。
3、 客户端还可以缓存⼀些服务实例信息,所以即使Eureka全挂掉,客户端也是可以定位到服务地址的。
29、Zuul与Nginx有什么区别?
Zuul是java语言实现的,主要为java服务提供网关服务,尤其在微服务架构中可以更加灵活的对网关进行操作。Nginx是使用C语言实现,性能高于Zuul,但是实现自定义操作需要熟悉lua语言,对程序员要求较高,可以使用Nginx做Zuul集群。
30、什么是Spring Cloud?
在微服务中,SpringCloud是一个提供与外部系统集成的系统。它是一个敏捷的框架,可以短平快构建应用程序。与有限数量的数据处理相关联,它在微服务体系结构中起着非常重要的作用。 以下为 Spring Cloud 的核心特性:
1、 版本化/分布式配置。
2、 服务注册和发现。
3、 服务和服务之间的调用。
4、 路由。
5、 断路器和负载平衡。
6、 分布式消息传递。
更多 SpringCloud 面试题 60道
02、什么是客户证书?
05、springcloud核⼼组件及其作⽤,以及springcloud⼯作原理:
06、接⼝限流⽅法?
08、什么是Oauth?
09、为什么在微服务中需要Reports报告和Dashboards仪表板?
11、什么是凝聚力?
13、eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?
15、什么是持续集成(CI)?
16、第⼀层缓存:
18、接⼝限流⽅法?
21、什么是微服务
22、微服务限流 http限流:我们使⽤nginx的limitzone来完成:
23、Spring Cloud Netflix(重点,这些组件用的最多)
24、什么是端到端微服务测试?
26、什么是OAuth?
27、Ribbon是什么?
28、Spring Cloud抛弃了Dubbo 的RPC通信,采用的是基于HTTP的REST方式。
31、什么是客户证书?
32、REST 和RPC对比
33、分布式配置中心的作用?
34、链路跟踪Sleuth
35、服务注册和发现是什么意思?Spring Cloud如何实现?
36、21、在Spring MVC应用程序中使用WebMvcTest注释有什么用处?
37、什么是双因素身份验证?
09、什么是Eureka
40、常用网关框架有那些?
41、什么是有界上下文?
45、负载均衡的意义是什么?
47、什么是耦合?
48、Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别
49、网关的作用是什么
50、什么是Eureka
52、什么是持续集成(CI)?
55、Spring Cloud和SpringBoot版本对应关系
56、微服务有哪些特点?
57、Ribbon是什么?
59、什么是网关?
如果不背 SpringCloud面试题的答案,肯定面试会挂!