根据 Gartner 的说法,微服务是云开发的新应用平台。微服务是独立部署和管理的,一旦应用实现在容器内,它们与底层操作系统的交互很少。因此,如果你希望把微服务添加到自己的技术栈中,并想要了解与之相关的技能,那么现在正是潜心研究的时候。
在本文中,我收集了面试官最常问到的问题。
微服务面试题与答案
说说微服务架构的优势
独立开发 :所有微服务都可以根据各自的功能轻松开发
独立部署 :根据他们所提供的服务,可以在任何应用中单独部署
故障隔离 :即使应用中的一个服务不起作用,系统仍然继续运行
混合技术栈:可以用不同的语言和技术来构建同一应用程序的不同服务
粒度缩放 :各个组件可根据需要进行扩展,无需将所有组件融合到一起
你对微服务是怎么理解的?
请参考上图。这里,每个六边形都代表单独的服务组件。与蜜蜂的工作类似,每个敏捷团队都使用可用的框架和所选的技术栈构建单独的服务组件。就像在蜂巢中一样,这些服务组件形成一个强大的微服务架构,以提供更好的可扩展性。此外敏捷团队可以单独处理每个服务组件的问题,而不会对整个应用程序产生影响或使影响最小。
微服务有哪些特点?
设计微服务的最佳实践是什么?
微服务架构的优点和缺点是什么?
微服务架构的优点 , 微服务架构的缺点,可以自由使用不同的技术,增加故障排除的难度|,每个微服务都专注于单一功能|由于远程调用而导致延迟增加,支持单个可部署单元,增加配置和其他操作的工作量,允许软件的持续发布,难以维持处理的安全性,可确保每项服务的安全性,很难跟踪各种边界的数据,并行开发和部署多个服务,服务之间难以编码
单体应用 SOA 和微服务架构有什么区别?
在使用微服务架构,你面临的挑战是什么
开发较小的微服务听起来很容易,但在开发时会经常遇到一些挑战。
什么是通用语言(UL)?
如果你必须定义通用语言(UL),那么它是特定域的开发人员和用户使用的通用语言,通过该语言可以轻松解释领域。
通用语言必须非常清晰,以便将所有团队成员处于同一水平线上,并以机器可以理解的方式进行翻译。
什么是内聚?
内聚是一个模块内部各元素之间相关联程度的度量
什么是耦合?
组件之间依赖关系强度的度量被称为耦合。好的设计总是高内聚和低耦合的。
什么是REST/RESTful ?它的用途是?
Representational State Transfer(REST)/ RESTful (表述性状态转移)是一种帮助计算机系统通过 Internet 进行通信的架构风格。这使得微服务更容易理解和实现。
微服务可以用 RESTful API 来实现,当然也可以不用,但是用 RESTful API 去构建松散耦合的微服务总是更容易些。
你怎么理解 Spring Boot?
随着新功能的增加,spring 变得越来越复杂。如果必须启动新的 spring 项目,必须添加构建路径或添加 maven 依赖项,配置服务器,添加 spring 配置。所以一切都必须从头开始。
Spring Boot 是解决这个问题的方法。使用 spring boot 可以避免所有样板代码和配置。因此,基本上认为自己就好像在烤蛋糕一样,spring 就像做蛋糕所需的原料一样, spring boot 就是完整的蛋糕。
Spring boot 的执行器是什么?
Spring Boot 执行器提供 restful 服务,以访问在生产环境中运行程序的当前状态。在执行器的帮助下,你可以检查各种指标并监控自己的程序。
什么是 Spring Cloud?
根据 Spring Cloud 的官方网站,Spring Cloud 为开发人员提供了一些快速构建分布式系统常见模式的工具(例如配置管理、服务发现、断路器、智能路由、领导选举、分布式会话、集群状态)。
我们如何进行跨功能测试?
跨功能测试是对非功能性需求的验证,即那些不能像普通功能那样实现的要求。
如何在测试中消除不确定性?
不确定性测试(NDT)基本上是不可靠的测试。因此,它们有时可能会通过,显然有时也可能会失败。当它们失败时,会重新运行以通过。
从测试中排除不确定性的一些方法如下:
Mock 与 Stub 有什么区别?
Stub
例如,对于空栈,你可以创建一个对于 empty() 方法只返回 true 的 stub。因此这并不关心栈中是否存在元素。
例如,对于 Customer 对象,你可以通过设置姓名和年龄来模拟它。你可以将年龄设置为 12,然后测试isAdult()方法,该方法将在大于 18 岁时返回 true。因此你的 Mock Customer 对象适用于指定的条件
微服务之间是如何通讯的?
第一种:远程过程调用(Remote Procedure Invocation)
直接通过远程过程调用来访问别的service。
示例:REST、gRPC、Apache、Thrift
优点:简单,常见。因为没有中间件代理,系统更简单
缺点:只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应
降低了可用性,因为客户端和服务端在请求过程中必须都是可用的
第二种:消息
使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。
示例:Apache Kafka、RabbitMQ
优点:
缺点:消息中间件有额外的复杂性
springcloud 与dubbo有哪些区别?
相同点:SpringCloud 和Dubbo可以实现RPC远程调用框架,可以实现服务治理。
不同点:SpringCloud是一套目前比较网站微服务框架了,整合了分布式常用解决方案遇到了问题注册中心Eureka、负载均衡器Ribbon ,客户端调用工具Rest和Feign,分布式配置中心Config,服务保护Hystrix,网关Zuul Gateway ,服务链路Zipkin,消息总线Bus等。
Dubbo内部实现功能没有SpringCloud强大(全家桶),只是实现服务治理,缺少分布式配置中心、网关、链路、总线等,如果需要用到这些组件,需要整合其他框架。