微服务面试题 及答案

2025年3月17日 | 阅读 15 分钟

以下是最常被问到的微服务面试题及其最佳答案列表。

1) 什么是微服务?/ 您对微服务有什么理解?

微服务是一种用于构建应用程序的架构方法或风格。微服务架构能够快速、频繁、可靠地交付大型复杂应用程序。它具有分布式和松耦合的特点,因此更改一个团队中的内容不会破坏整个应用程序。

微服务也被称为微服务架构,是面向服务架构(SOA)结构风格的一个变体,用于将应用程序构建成一组具有以下特点的服务:

  • 分布式且松耦合
  • 高度可维护和可测试
  • 可独立部署
  • 围绕业务能力组织
  • 由小团队拥有

2) 使用微服务最显著的好处是什么?

使用微服务最显著的好处是它构建了一个用于收集为业务领域开发的自治小型服务的应用程序。因此,如果业务需求不断变化,开发团队可以快速构建新的应用程序组件以满足需求。

每个微服务运行一个唯一的进程,并通过一个定义良好、轻量级的机制(如容器)进行通信,以服务于业务目标。它还使组织能够发展其技术栈。


3) 用于微服务的三个常用工具是什么?

以下是三个常用的微服务工具:

  • Wiremock
  • Docker
  • Hysrix

4) 微服务的主要组成部分是什么?

以下是微服务或微服务架构主要组成部分的列表:

  • 容器、集群和编排
  • IaC(基础设施即代码概念)
  • 云基础设施
  • API 网关
  • 企业服务总线
  • 服务交付

5) 微服务架构是如何工作的?

应用程序的微服务架构可以简化为多个模块,每个模块独立执行单一精确的独立任务。让我们看看微服务架构是如何工作的:

  • 应用程序被分解为松散耦合的各种模块,每个模块执行不同的功能。
  • 它分布在云和数据中心。
  • 每个应用程序模块都是一个独立的、可以替换、更新或删除而不会干扰应用程序其余部分的进程/服务。
  • 在微服务架构下,应用程序可以随着需求一起增长。

6) 使用微服务的主要优点是什么?

以下是一些使用微服务最重要的优点列表:

  • 微服务提供了出色的技术多样性。您可以轻松地将其与其他框架、库和数据库混合使用。
  • 微服务支持故障隔离,因为它收集了小的自治服务或进程,因此进程失败不应导致整个系统崩溃。
  • 它为小型并行团队提供了出色的支持。
  • 它显著减少了部署时间。
  • 独立部署

7) 您对单体架构有什么理解?

单体架构就像一个大容器,包含应用程序的所有软件组件。这些应用程序被打包在应用程序内的单个包中。


8) 微服务部署中最大的挑战是什么?

我们可以从两个方面说明微服务部署中最大的挑战,即技术和功能。

从业务角度来看的主要挑战

  • 微服务需要大量投资。
  • 它还需要大量的硬件基础设施设置。
  • 我们需要过度的规划来管理运营开销。
  • 它在员工招聘和维护方面成本很高。

从技术角度来看的主要挑战

  • 微服务中的组件总是相互依赖的,因此,它需要在应用程序中进行它们之间的通信。
  • 部署中也有很多挑战。
  • 测试和调试非常具有挑战性。
  • 它需要完整的组件自动化和应用程序维护。
  • 它会产生沉重的运营开销。
  • 它需要熟练的专业人员来支持异构分布的微服务。

9) 您对 Spring Cloud 有什么理解?

Spring Cloud 是一个用于集成外部系统的集成软件。它允许微服务框架构建执行有限数据处理量的应用程序。


10) 微服务和单体架构之间有什么主要区别?

微服务和单体架构之间的主要区别

微服务单体架构
微服务的服务启动速度很快。单体架构的服务启动速度慢,需要时间。
它是一种松耦合的架构。它主要是紧耦合的架构。
在微服务中,如果您更改单个数据模型,它不会影响其他模型。在单体架构中,任何对数据模型的更改都会影响整个数据库。
它主要关注产品,而不是项目。它主要关注整个项目。

11) 在哪些情况下微服务架构最适合?

微服务架构最适合所有技术设备,如桌面、Web、移动设备、智能电视、可穿戴设备等。


12) 使用微服务最显著的优点和缺点是什么?

以下是使用微服务最显著的优点和缺点列表:

微服务的优点

  • 提供改进的可伸缩性
  • 增加敏捷性
  • 局部的复杂性
  • 提供故障隔离
  • 调试和维护简单方便。
  • 开发人员与业务用户之间的沟通顺畅且更好。
  • 小型开发团队
  • 您可以轻松升级技术。

微服务的缺点

  • 作为整个项目,它并不容易,因为它在应用程序中使用了多个组件。
  • 它在使用前需要准确的预规划。
  • 它使用难以计算的模块化依赖项。
  • 第三方应用程序难以控制。
  • 模块间依赖关系难以追踪。
  • 恶意入侵的机会更多。
  • 完整的端到端测试很复杂。
  • 部署挑战。

13) 有哪些著名的公司在使用微服务架构?

大多数大型软件公司和网站,如 Twitter、Netflix、Amazon,都在使用微服务架构而不是单体架构。


14) 您对 RESTful 有什么理解?

REST 或 RESTful 代表 Representational State Transfer。RESTful Web 服务是一种帮助计算机系统在互联网上进行通信的架构风格。这些 Web 服务使微服务更容易理解和实现。


15) 微服务部署中有哪些不同的策略?

微服务部署中使用以下策略:

  • 每个主机有多个服务实例:它用于在单个或多个物理/虚拟主机上运行应用程序的单个或多个服务实例。
  • 每个主机有服务实例:它用于每个主机运行一个服务实例。
  • 每个容器有服务实例:它用于每个服务实例在其各自的容器中运行。
  • 无服务器部署:它将服务打包成 ZIP 文件并上传到 Lambda 函数。Lambda 函数是一个无状态服务,它自动运行足够的微服务来处理所有请求。

16) 微服务中有哪三种类型的测试?

我们可以将微服务架构中使用的测试分为三个主要类别:

  • 底层测试:底层测试执行一般性测试,如性能测试和单元测试。这类测试是完全自动化的。
  • 中层测试:中层测试用于执行探索性测试,如压力测试和可用性测试。
  • 顶层测试:顶层测试用于进行验收测试,数量通常较少。这类测试让利益相关者了解不同的软件功能。

17) SOA 和微服务架构之间的主要区别是什么?

SOA 代表面向服务架构。它是一组服务,用于通过简单的数据传递或活动协调进行通信。另一方面,微服务架构是一组小型功能模块,它们可独立部署、可伸缩、针对特定业务目标,并通过标准协议进行通信。


18) 什么是客户端证书?它的用途是什么?

客户端证书是一种数字证书,用于向远程服务器发出经过身份验证的请求。为每个微服务生成一个证书。


19) 您对领域驱动设计有什么理解?

领域驱动设计是一种基于面向对象分析设计概念和原则的架构风格。它用于通过将软件系统的相关组件连接到一个不断发展的系统中来开发复杂系统。领域驱动设计基于三个原则:

  • 关注核心领域和领域逻辑。
  • 基于领域模型进行复杂设计。
  • 与领域专家合作,定期改进应用程序模型并解决任何新兴的领域相关问题。

20) PACT 在微服务架构中的用途是什么?

PACT 是一种用于测试服务提供者和消费者之间交互的开源工具。它提高了微服务应用程序的可靠性。


21) 您对 OAuth 有什么理解?

OAuth 代表 Open Authorization protocol。该协议允许您通过 HTTP 访问第三方提供商(如 GitHub、Facebook 等)的客户端应用程序。它还方便我们在不使用其凭据的情况下,将一个网站上存储的资源与另一个网站共享。


22) 什么是 Spring Boot?为什么使用它?

Spring Boot 是一个开源的、基于 Java 的框架,它为开发人员提供了一个优秀的平台,用于开发独立的、生产级的 Spring 应用程序。它易于理解,缩短了开发时间,并提高了生产力。它会根据应用程序的添加依赖项自动配置声明。


23) 有什么方法可以覆盖 Spring Boot 项目的默认属性?

我们可以通过在 application.properties 中指定属性来做到这一点。Spring MVC 应用程序需要指定后缀和前缀。这可以通过以下方式完成:

  • 对于后缀:mvc.view.suffix: .jsp
  • 对于前缀:mvc.view.prefix: /WEB-INF/

24) 您对微服务的端到端测试有什么理解?

端到端测试用于验证工作流程中的每个进程是否正常运行。它还确保系统作为一个整体协同工作并满足所有要求。


25) 耦合和内聚之间的区别是什么?

耦合与内聚的区别

耦合:耦合是指模块 A 与另一个模块 B 之间的关系。耦合主要有三种类型。任何模块都可以高度耦合(高度依赖)、松耦合和与外部模块解耦。最佳耦合是松耦合,可以通过接口实现。

内聚:内聚是指模块内 2 个或多个部分之间的关系。模块内高内聚表示该模块可以在不与其他模块通信的情况下,以最大效率独立执行特定任务。高内聚增强了模块的功能强度。

microservices Interview Questions

26) 容器在微服务中的用途是什么?

容器是管理基于微服务的应用程序最简单有效的方法。它们就像一个软件开发平台。它们还帮助我们独立开发和部署。Docker 是一个容器的例子。它是一个开源软件开发平台,允许我们将微服务及其依赖项封装在容器镜像中。微服务可以无需额外努力即可使用这些元素。


27) 什么是 Spring Cloud?使用 Spring Cloud 可以解决哪些问题?

Spring Cloud 是一个工具集,用于帮助开发人员快速构建分布式系统中常见的一些模式,如配置管理、断路器、服务发现、智能路由、微代理、控制总线、一次性令牌、全局锁、领导者选举、分布式会话、集群状态等。

我们可以使用 Spring Cloud 来解决以下问题:

  • 我们可以解决分布式系统中出现的网络问题、延迟开销、带宽问题、安全问题以及其他问题。
  • 我们还可以解决分布式系统中出现的冗余问题。
  • 我们可以平衡网络链路、CPU、集群等资源之间的负载分配。
  • 我们可以解决因运营开销而导致的性能问题。
  • 我们可以解决服务发现问题,以实现集群中服务之间的平滑通信。

28) 您对微服务架构中的语义监控有什么理解?

语义监控用于通过监控应用程序来组合自动化测试。它用于找出您的业务利润不高的原因。


29) 您对分布式事务有什么理解?

分布式事务是一种涉及两个或多个网络主机的事务。在此类事务中,事务管理器负责开发和处理事务。如果事务涉及多个对等方,则每个对等方的事务管理器会使用下属或上属关系进行通信。同样,资源管理器负责管理资源,并与分布式事务协调器协调事务的原子性和隔离性。


30) CDC 的全称是什么?它的用途是什么?

CDC 的全称是 Consumer-Driven Contract(消费者驱动的契约)。它是一种用于开发微服务的模式,以便外部系统能够有效地使用它们。


31) 微服务中的响应式扩展是什么?

Reactive Extension(响应式扩展)是一种设计模式,它允许通过调用多个服务来收集结果,然后编译一个组合的响应。它也被称为 Rx。Rx 是分布式系统中一个流行的工具,其工作方式与传统流程相反。


32) 如何配置 Spring Boot 应用程序的日志记录?

我们可以通过在 application.properties 文件中指定 logging.level 来配置 Spring Boot 应用程序的日志记录。通常,它预配置为控制台输出。


33) 您对“持续监控”这个术语有什么理解?

“持续监控”一词用于描述一种用于搜索与公司运营和财务环境相关的合规性和风险问题的方法。这种方法包含人工流程和工作系统,以支持高效的实际操作。


34) 什么是 Mike Cohn 的测试金字塔?

Mike Cohn 的测试金字塔用于最大化所有级别的测试自动化,例如单元测试、服务级别测试、UI 测试等。这个金字塔表明,虽然单元测试更快、更独立,但位于最高级别的 UI 测试需要时间并且侧重于集成。

microservices Interview Questions

35) 独立的微服务之间如何通信?

我们可以根据项目的需求使我们的微服务相互通信。在大多数情况下,开发人员在使用任何通信协议时会使用 HTTP/REST(带有 JSON)或二进制协议。


36) 如何在 Spring Boot 应用程序中实现 Spring Security?

我们可以通过以下方法在 Spring Boot 应用程序中快速实现 Spring Security:

  • 通过在 pom.xml 文件中添加 spring-boot-starter-security。
  • 通过创建一个 Spring 配置类,该类将在扩展 WebSecurityConfigurerAdapter 时覆盖所需的方法,以在应用程序中实现安全性。

37) 您对通用语言(ubiquitous language)有什么理解?

通用语言(Ubiquitous Language/UL)是一种由特定领域的开发人员和用户使用的通用语言,用于轻松解释该领域。通用语言需要让所有团队成员达成共识,并且需要进行转换,以便机器能够理解。


38) REST 和微服务之间有什么区别?

有多种实现微服务的方法。基于 HTTP 的 REST 是其中一种。REST 也用于其他应用程序,例如 Web 应用程序、API 设计和 MVC 应用程序,以服务业务数据。

另一方面,在微服务架构中,所有系统组件都被放入独立的组件中,这些组件可以独立构建、部署和扩展。微服务提供了一些原则和最佳实践,有助于构建弹性应用程序。所以,我们可以说 REST 是构建微服务的一种媒介。


39) 您对幂等性(Idempotence)有什么理解?它在哪里使用?

幂等性是一种属性,它使我们能够执行某项操作两次,但结果始终保持不变,就像只执行了一次一样。幂等性用途:幂等性用于远程服务或数据源,以便当它收到一次以上的指令时,它只会处理一次该指令。


40) 微服务中的 Actuator 是什么?为什么使用它?

Actuator 是 Spring Boot 的一个子项目。它为应用程序带来了生产就绪的功能,主要用于公开有关正在运行的应用程序的健康状况、指标、信息、转储、环境变量等操作信息。它使用 HTTP 端点或 JMX Bean 进行交互。


41) 限界上下文(Bounded Context)在领域驱动设计中的用途是什么?

限界上下文是领域驱动设计中的一个核心模式。它是领域驱动设计战略设计部分的核心,该部分处理大型模型和团队。它用于将大型模型划分为不同的限界上下文,并明确它们之间的关系。


42) PACT 在微服务架构中是什么?

消费者应用程序和提供者应用程序之间的契约称为 PACT。每个 PACT 都是一组交互。它是一个可以用于在微服务中实现消费者驱动契约的开源工具。


43) 您对双因素身份验证(Two Factor Authentication)有什么理解?双因素身份验证中使用了哪些不同类型的凭证?

双因素身份验证使用户能够在帐户登录过程中满足第二个级别的身份验证。如果用户在登录时只需要输入用户名和密码,那么这将被认为是单因素身份验证。但在双因素身份验证中,用户需要输入比登录密码更多的信息。

双因素身份验证主要使用三种类型的凭证:

  • 你知道的东西:在此身份验证步骤中,您需要输入 PIN、密码或图案。
  • 你拥有的东西:此身份验证步骤需要 ATM 卡、手机或 OTP。
  • 你是谁:在此身份验证步骤中,您需要输入您的生物识别指纹或语音打印。

44) 微服务中需要报告和仪表板的原因是什么?

报告和仪表板主要用于监控微服务。有多种工具可用于此目的。

以下是一些报告和仪表板在微服务中的用途列表:

  • 报告和仪表板用于找出哪些微服务暴露了哪些资源。
  • 它还用于在更改组件时指定受影响的服务。
  • 当需要文档时,它提供了一个易于访问的点。
  • 它指定了已部署组件的版本。
  • 它还用于从组件中获得成熟度和合规性的感觉。

45) 您对金丝雀发布(Canary Releasing)有什么理解?

金丝雀发布是一种通过将更新的版本或新的代码/功能发布给一部分用户作为初步测试,然后再向所有人提供整个基础设施的技术,用于引入新软件版本。这项技术被称为金丝雀发布,因为它基于煤矿中的金丝雀发布,当有毒气体达到危险水平时会提醒矿工。


46) 为什么许多开发人员不愿意使用微服务?/ 使用微服务最大的缺点是什么?

微服务存在一些缺点,可能导致开发人员不愿意使用微服务:

  • 微服务需要大量投资:它需要大量的协作。由于您的团队独立工作,他们应该能够始终保持良好的同步。
  • 架构设置成本高:微服务系统是分布式的,因此架构涉及大量且成本高昂。
  • 处理运营开销复杂:使用微服务可能会导致开销,因此如果您计划使用微服务架构,则需要准备好应对运营开销。
  • 自主员工选择:它需要熟练的专业人员来支持异构分布的微服务。

47) 什么是不可确定性测试(Non-deterministic tests)?如何消除它们?

不可确定性测试(NDT)是不可靠的测试,有时通过有时失败。当这些测试失败时,它们会重新运行。我们可以通过以下方式消除不可确定性测试中的不确定性:

  • 隔离
  • 异步
  • 远程服务
  • 隔离
  • 时间
  • 资源泄漏

48) WebMvcTest 注释在 Spring MVC 应用程序中的用途是什么?

WebMvcTest 注释用于 Spring MVC 应用程序中的单元测试,在测试目标是专注于 Spring MVC 组件的情况下。

请看以下代码:

@WebMvcTest(value =ToTestController.class, secure = false)

在此,我们只想启动 ToTestController。在执行此单元测试之前,所有其他控制器和映射都不会启动。


49) 微服务中的 Eureka 是什么?

Eureka 或 Eureka Server 是一个保存有关客户端服务应用程序信息的应用程序。微服务必须注册到 Eureka 服务器,Eureka 服务器知道所有运行在每个端口和 IP 地址上的客户端应用程序。Eureka Server 也被称为 Netflix 服务发现服务器。它使用 Spring Cloud,并且不会给应用程序开发过程带来过重的负担。


50) DRY 的全称是什么?它在微服务架构中的用途是什么?

DRY 的全称是 Don't Repeat Yourself(不要重复自己)。它用于推广代码重用的概念。这使得开发和共享库变得容易,从而导致紧耦合。


51) 如何利用 Spring Cloud 来平衡服务器端负载?

我们可以使用 Netflix Zuul 来利用 Spring Cloud 平衡服务器端负载。它也被称为基于 JVM 的路由器。


52) 您对跨功能测试(Cross-functional testing)有什么理解?

跨功能测试是对非功能性需求的验证,即我们无法实现为标准功能的需求。


53) Netflix Hystrix 的用途是什么?

Hystrix 是一个容错和延迟库。它主要用于隔离访问点。它还确保所有第三方库和服务都受到限制。因此,应用程序可以高效运行,并避免分布式系统中发生的故障。


54) 您对微服务中的 Tasklet 有什么理解?

Tasklet 是一个具有执行方法的简单接口。我们可以使用它来执行单个任务,如运行查询、删除文件等。在 Spring Batch 中,Tasklet 是一个用于执行单个任务的接口,例如在任何步骤执行之前或之后清理或设置资源。