常见微服务面试题合集介绍:微服务架构是一种以离散模块的形式开发大规模应用程序的方法,这些模块彼此独立工作,但作为一个整体来考虑所考虑的整个业务应用程序。组织越来越多地采用此服务来开发企业解决方案。由于它在简单的模块化服务上运行,因此现在对云解决方案的需求不断增加。
微服务部署可以是基于云的或本地的。它的市场跨越医疗保健、银行、政府、制造、零售、IT 和电信、媒体和娱乐、制造等。其目标受众包括投资者和顾问、系统集成商、政府组织、IT 和技术解决方案提供商。仅举几例,该专业领域的杰出参与者包括 Cognizant、IBM、Microsoft、Salesforce 和 Software AG。预计到 2023 年,微服务架构市场将发生巨大的飞跃。
如果你正在寻找该领域的职业并准备面试,这里有一些你可以期待的快速微服务面试问题和答案。
常见微服务面试题有哪些
这里列出的问题和答案是从互联网上的许多资源中汇编而成的。这不应被视为微服务面试的终极指南。请获得该领域的深入知识,并查阅更多书籍和资源指南以连接这方面的问题。
问题:你对微服务的理解是什么?
微服务面试题分析:微服务或更恰当地说微服务架构是一种 SDLC 方法,基于这种方法,大型应用程序构建为小型功能模块的集合。这些功能模块可独立部署、可扩展、针对特定的业务目标,并通过标准协议相互通信。这些模块也可以使用不同的编程语言来实现,拥有它们的数据库,并部署在不同的软件环境中。这里的每个模块都是最小的和完整的。
问题:微服务的主要特点是什么?
答:微服务有以下主要特点:
- 多个可单独部署的组件。
- 基于业务能力的服务分配。
- 分散的数据管理。
- DevOps 实施。
- 技术独立。
- 隐藏组件复杂性以避免不必要的微服务依赖。
问题:微服务的主要组成部分是什么?
答:微服务架构的主要组件是:
- 容器、集群和编排
- IaC [基础设施即代码概念]
- 云基础设施
- API网关
- 企业服务总线
- 服务交付
问题:微服务架构如何工作?
微服务面试题分析:在微服务架构下,一个应用程序被简化为多个模块,这些模块独立执行单个精确的独立任务:
- 被分割成松散耦合的各种模块,每个模块执行不同的功能。
- 它可以或分布在云和数据中心之间。
- 将每个模块实现为独立的服务/流程,可以在不中断应用程序其余部分的情况下进行替换、更新或删除。
在微服务架构下,应用程序可以随着其需求而增长。
问题:常见微服务面试题有哪些 - 微服务设计的基本特征是什么?
回答:
- 服务围绕业务功能进行拆分和组织。
- 由不同的开发团队处理和拥有的独立模块。
- 去中心化框架。
- 由各自的开发团队维护各自的模块。
- 不同的数据库可以维护不同的模块。
- 微服务架构中的模块可以单独部署。可以在不中断整个架构的情况下更新、增强或删除它们。
- 实时监控应用程序。
问题:微服务部署的主要挑战是什么?
答:微服务中的挑战既可以是技术方面的,也可以是功能方面的。
从业务的角度来看,主要的挑战是:
- 需要大量投资
- 重型基础设施设置
- 管理运营开销的过度计划
- 人员选择和维护。
从技术角度来看——
- 应用程序中不同微服务之间的通信。
- 组件自动化
- 应用维护
- 配置管理
- 繁重的操作开销
- 部署挑战
- 测试和调试挑战
问题:微服务的优缺点是什么?
回答:
优点:
- 改进的可扩展性
- 误隔离
- 局部复杂性
- 提高敏捷性
- 简化调试和维护
- 开发人员与业务用户之间更好的通信。
- 较小的开发团队
- 更好的技术升级空间。
缺点:
- 整体复杂。
- 需要准确的预先规划
- 模块化依赖很难计算。
- 对第三方应用程序的控制较少
- 模块化的相互依赖性很难跟踪。
- 更多的恶意入侵机会。
- 完整的端到端测试很困难。
- 部署挑战。
问题:微服务部署有哪些不同的策略?
回答:
- 每个主机多服务实例:在单个/多个物理/虚拟主机上运行应用程序的单个或多个服务实例。
- 每个主机的服务实例:为每个主机运行一个服务实例。
- 每个容器的服务实例:在其各自的容器中运行每个服务实例。
- 无服务器部署:将服务打包为 ZIP 文件并将其上传到 Lambda 函数。Lambda 函数是一种无状态服务,可以自动运行足够的微服务来处理所有请求。
问题:列出单体架构、SOA 和微服务架构之间的差异,并分别举例说明。
回答:
在单体架构中,应用程序的所有软件组件都被紧密地组装和打包。 | SOA [Service Oriented Architecture] 是通过简单的数据传递或活动协调相互通信的服务的集合。 | 微服务架构是小型功能模块的集合。这些功能模块可独立部署、可扩展、针对特定的业务目标,并通过标准协议相互通信。 |
问题:什么是领域驱动设计?
答:领域驱动设计是一种基于面向对象分析设计概念和原则的架构风格。它通过将软件系统的相关组件连接成一个不断发展的系统来帮助开发一个复杂的系统。领域驱动设计基于三个核心原则:
- 专注于核心领域和领域逻辑。
- 基于域模型的复杂设计。
- 定期与领域专家合作以改进应用程序模型并解决任何新出现的与领域相关的问题。
问题:什么是Spring Boot?
答: Spring Boot 是一个开源的、基于 Java 的框架,它为开发人员提供了一个优秀的平台来开发独立和生产级的 Spring 应用程序。它易于理解,可提高生产力并缩短开发时间。它会根据应用程序添加的依赖项自动配置声明。
问题:如何覆盖 Spring Boot 项目的默认属性?
答:在 application.properties 中指定属性。
Spring MVC 应用程序需要指定后缀和前缀。这可以通过以下方式完成:
- 对于后缀 – spring.mvc.view.suffix: .jsp
- 对于前缀 – spring.mvc.view.prefix: /WEB-INF/
问:单体架构、SOA 架构和微服务架构有什么区别?
回答:
- 单体架构:在这种类型的架构中,应用程序的不同组件,如 UI、业务逻辑、数据访问层,被组合成一个单一的平台或程序。
- SOA(面向服务的体系结构):在这种体系结构中,各个组件松散耦合并执行离散功能。有两个主要角色——服务提供者和服务消费者。在 SOA 类型中,模块可以集成和重用,使其灵活可靠。
- 微服务架构:它是一种 SOA,其中构建并组合了一系列自主组件以构建应用程序。这些组件是使用 API 集成的。这种方法侧重于业务优先级和功能,并提供高敏捷性,即应用程序的每个组件都可以独立于其他组件构建。
问题:常见微服务面试题有哪些 - 内聚和耦合的区别?
答:耦合:是模块A和另一个模块B之间的关系。任何模块都可以与其他模块高耦合(高依赖)、松耦合和解耦。最好的耦合是通过接口实现的松散耦合。
内聚:是一个模块内两个或多个部分之间的关系。如果一个模块具有高内聚性,则意味着该模块可以独立地以最高效率执行某项任务,而无需与其他模块进行通信。高内聚性增强了模块的功能强度。
问题:提到Spring Cloud解决的问题?
答: Spring Cloud 可以解决以下问题:
- 分布式系统的网络问题、延迟开销、带宽问题、安全问题和其他问题
- 分布式系统中发生的冗余问题。
- 平衡网络链接、CPU、集群等资源之间的负载分配。
- 由于运营开销而导致的性能问题。
- 服务发现问题,以确保集群中服务之间的顺畅通信。
问题:什么是分布式事务?
微服务面试题分析:常见微服务面试题合集 - 分发事务有两个或多个网络主机参与。事务由负责开发和处理事务的事务管理器处理。如果事务涉及多个对等点,则每个对等点的事务管理器通过下级或上级关系相互通信。
同样,资源由资源管理器处理,资源管理器还与分布式事务协调器协调以实现事务原子性和隔离。
问题:解释端到端微服务测试?
答:它是一种测试技术,用于使用业务事务测试应用程序的整个流程。由于微服务架构中涉及多个组件,因此这些测试可以弥补单元或集成测试期间的差距。它还提供端到端的信心,确保适当配置网络参数并帮助微服务发展。
问题:什么是 Mike Cohn 的测试金字塔?
答:金字塔有助于最大限度地提高各个测试级别的自动化,即单元测试、服务级别测试、UI 测试。金字塔表明,虽然单元测试更快、更孤立,但最高级别的 UI 测试需要时间并专注于集成。
问题:如何在 Spring Boot 应用程序中实现 Spring Security?
回答:
- 在 pom.xml 文件中添加 spring-boot-starter-security。
- 创建一个 Spring 配置类,该类将覆盖所需的方法,同时扩展 WebSecurityConfigurerAdapter 以实现应用程序的安全性。
问题:你将如何配置 Spring Boot 应用程序登录?
答: Spring Boot 应用登录可以通过在应用中指定 logging.level 来配置。属性文件。它通常被预先配置为控制台输出。
问题:什么是Spring Cloud?
答:在搭建分布式系统的过程中,会遇到一些问题。它们是配置管理、服务发现、断路器和分布式会话。Spring Boot 是一组工具,可为此类常见问题提供解决方案。
问题:什么是执行器?
答案:执行器将生产就绪的功能引入到应用程序中。它主要用于公开有关正在运行的应用程序的健康状况、指标、信息、转储、环境等的操作信息。它使用 HTTP 端点或 JMX bean 与之交互。
问题:什么是容器?
答:容器是虚拟化操作系统中的隔离工作负载环境。它由一个应用程序以及运行它所需的所有功能和文件组成。每个盒子都是一个独立的环境,不与物理环境上的软件绑定,从而为应用程序的可移植性提供了解决方案。
问题:什么是耦合和内聚?
答:微服务架构中服务之间的依赖强度被称为耦合。内聚是指两个或多个服务之间的相关逻辑。微服务的整个概念基于部署和更新服务同时保持其他服务完整的能力。因此,松耦合和高内聚是微服务设计的关键。
问题:微服务架构中的 PACT 是什么?
答:消费者应用程序和提供者应用程序之间的契约称为 PACT。每个协议都是交互的集合。它是一个开源工具,可用于在微服务中实现消费者驱动的契约。
问题:什么是合约测试?
答:契约测试可确保微服务架构的显式和隐式契约按预期工作。契约测试有两个视角——消费者和提供者。消费者是使用微服务的【应用】实体,提供者是提供服务的【应用】实体。此类服务在预定义的规范下工作,合同测试可确保如此。
问题:什么是 OAuth?
答: OAuth 代表开放标准授权协议或框架,它描述了不相关的服务器和服务如何安全地允许对其资产进行身份验证访问,而无需共享初始相关的单一登录凭据。这也称为安全、第三方、用户代理、委托授权。
问题:你可以从康威定律中推导出/理解什么?
回答: Melvin Conway 在 1960 年代后期提出了这个想法。该定律意味着“设计系统的组织被限制生产设计,这些设计是这些组织的通信结构的副本。” 简单来说,设计软件的团队最终会按照他们的观点进行设计。
问题:端到端微服务测试的步骤是什么?
答:微服务应用程序的端到端测试可确保表单中的每个进程都正常运行。这验证了整个系统是否正常工作。由于微服务应用程序是使用动态编排的多个模块构建的,端到端测试涵盖了服务之间的所有差距。
端到端微服务测试的步骤是:
- 定义你对 e2e 测试的期望。
- 定义要测试的系统的范围。
- 在测试环境中执行身份验证。
- 选择一个可以解决大部分问题的测试框架。
- 测试异步流
- 自动化测试
问题:Mock 和 Stub 有什么区别?
答: Mock 通常是一个虚拟对象,其中最初设置了某些功能。它的行为主要取决于这些特征,然后对其进行测试。
Stub 是一个帮助运行测试的对象。它在一定条件下以固定方式起作用。这种硬编码行为有助于存根运行测试。
问题:我们可以从 Mike Cohn 的测试金字塔中得到什么?
答: Mike Cohn 的测试金字塔描述了软件开发所需的自动化测试类型。测试金字塔只是一个隐喻,它暗示了基于粒度的一组测试。这个金字塔告诉我们应该对金字塔的不同层级应用哪种测试。
Mike Cohn 的测试金字塔由三层组成,测试套件应该包括:
- 单元测试
- 服务测试
- 用户界面测试。
从科恩的金字塔推导出的两点是:
- 定义不同粒度的测试
- 你获得的级别越高,你应该进行的测试就越少。
问题:Docker 对微服务有什么帮助?
答:正如我们所知,微服务是独立的、单独的单元,只执行一项业务功能,以至于每个单元都可以被视为一个应用程序。应用程序开发环境和应用程序部署环境必然会在许多方面有所不同。这会导致部署问题。Docker 为应用程序运行提供静态背景,从而避免部署问题。事实上,它是一个容器化工具。它减少了开销并在同一台服务器上部署了数千个微服务。Docker 确保应用程序微服务将在它们自己的环境中运行,并且完全独立于它们的操作系统。
问题:什么是 Canary 发布?
回答:金丝雀发布是一种引入新软件版本的技术,通过将更新的版本推出给一小部分用户,然后再将其推出到整个基础设施并让所有人都可以使用。之所以称为这种技术,是因为它基于煤矿中的金丝雀释放,以在有毒气体达到危险水平时提醒矿工。
问题:双因素身份验证有哪些不同类型的凭据?
答:常见微服务面试题有哪些 - 双因素身份验证要求对帐户登录过程进行第二轮身份验证。输入用户名 - 密码是一种单因素身份验证。用户名 - 密码验证,然后说手机号码或密钥验证可以被视为双因素验证。
用于双因素身份验证的不同类型的凭据可以是:
- 你知道的东西 - PIN、密码或图案
- 你拥有的东西 - ID、ATM 号码、电话号码或 OTP
- 你是什么——你的生物识别技术。
问题:什么是客户证书?
答:客户端证书是客户端系统用来向远程服务器发出经过身份验证的请求的数字证书。它在许多相互认证设计中发挥着关键作用,为请求者的身份提供强有力的保证。
问题:什么是 CDC [消费者驱动的合同]?
回答:消费者驱动的合同是不断发展的服务的模式。在这里,每个消费者都在一个单独的合同中获取他们的提供者。然后与提供商共享所有这些合同,这有助于他们深入了解他们必须为每个客户履行的义务。
问题:什么是非确定性测试,你将如何消除它们?
回答: NDT 或非确定性测试是不可靠的测试。这样的测试有时会通过,有时会失败。当这些测试失败时,它们会重新运行以进行测试。可以通过以下方式消除测试中的非确定性:
- 隔离
- 异步
- 远程服务
- 隔离
- 时间
- 资源泄漏
问题:微服务中的响应式扩展是什么?
答: Reactive Extensions 是一种设计方法,通过该方法通过调用多个服务来收集结果以编译组合响应。也称为 Rx,这些调用可以是同步的或异步的。
问题:RESTful API 在微服务中的作用是什么?
答:常见微服务面试题合集 - 微服务基于这样一种概念,即它的所有组件服务都需要相互交互才能完成业务功能。这就要求每个微服务都有一个接口。RESTful API 为构建这些接口提供了一个逻辑模型。它基于 Web 的开放网络原则。因此,它是微服务最关键的推动者。
问题:微服务中的 Eureka 是什么?
微服务面试题分析: Eureka 也称为 Netflix 服务发现服务器。它使用 Spring Cloud,并且对应用程序开发过程不重。
问题:如何利用Spring Cloud平衡服务端负载?
答:服务端负载均衡可以通过Netflix Zuul来完成。它也被称为基于 JVM 的路由器。
问题:你认为什么时候适合使用 Netflix Hystrix?
答: Hystrix 是一个容错和延迟库。Hystrix 主要是对接入点进行隔离。它还确保所有 3rd 方库和服务都受到限制。因此,我们可以使用 Hystrix 来确保应用程序高效运行并避免分布式系统中发生的那种故障。
问题:什么是 Spring Batch 框架?
答: Spring Batch 是一个用于批处理的开源框架——执行一系列作业。Spring Batch 提供类和 API 来读/写资源、事务管理、作业处理统计、作业重启和分区技术来处理大容量数据。
问题:什么是Tasklet,什么是Chunk?
答: Tasklet 是一个简单的接口,只有一种方法可以执行。tasklet 可用于执行单个任务,如运行查询、删除文件等。在 Spring Batch 中,tasklet 是一个接口,可用于在任何步骤执行之前或之后执行清理或设置资源等独特任务。
Spring Batch 在其最常见的实现中使用“面向块的”处理风格。面向块的处理是指在事务边界内一次读取一个数据并创建将被写出的块。
问题:你将如何在微服务中部署异常处理?
答:如果在处理 HTTP 请求时发生异常,你需要在控制器或服务中捕获异常并手动返回相应的 ResponseEntity。以下是异常处理的一些经验法则。
- 为你编写的异常添加@ResponseStatus。
- 对于所有其他异常,在 @ControllerAdvice 类上实现 @ExceptionHandler 方法或使用 SimpleMappingExceptionResolver 的实例。
- 对于控制器特定的异常,将 @ExceptionHandler 方法添加到你的控制器。
需要注意的是,控制器上的@ExceptionHandler 方法总是在任何@ControllerAdvice 实例上的方法之前被选择。未定义 ControllerAdvices 的处理顺序。
问题:如何访问 RESTful 微服务?
答:考虑到微服务架构的概念,每个微服务都需要有一个接口。基于 Web 开放网络的原则,RESTful API 为在微服务架构的各个组件之间构建接口提供了最合乎逻辑的模型。可以通过两种方式访问 RESTful API:
- 使用负载平衡的 REST 模板。
- 我正在使用多个微服务。
问题:独立的微服务如何相互通信?
答:微服务之间可以通过以下方式进行通信:
- 用于传统请求-响应的 HTTP。
- 用于流式传输的 Websocket。
- 运行高级路由算法的代理或服务器程序。
对于消息代理,可以使用RabbitMQ、Nats、Kafka 等,每个都是为特定的消息语义构建的。另一种方法是使用像 Space Cloud 这样的后端即服务,它可以自动化整个后端。
问题:什么是语义监控?
答:语义监控或综合监控正在针对实时生产系统运行应用程序自动化测试的子集。这些结果受到监控,并在出现故障时生成警报。语义监控从业务事务的角度处理微服务监控。它的语义监控不是监控每个组件,而是确定事务对业务和用户的执行情况。它还检测故障服务层和相应的微服务实例,所有这些都在同一流程中。这种方法允许更快地分类并减少修复的时间。
问题:你们如何进行微服务的安全测试?
答:微服务应用程序是一组较小的、独立的、功能模块的集合,这些模块可以用不同的编程语言开发,具有不同的数据源,并运行在不同的操作系统上。这使得整个微服务的测试成为一项非常艰巨的任务。不同的部件/模块需要独立测试。为此,有三种常见的程序。
- 代码扫描:为了确保每一行代码都没有错误并且可以复制。
- 灵活性:安全协议应该根据系统的要求灵活。
- 适应性:安全协议应该能够适应恶意入侵。
问题:你对幂等性有什么理解,它是如何使用的?
答:幂等性是指即使最终结果保持不变,仍重复执行一项任务。它主要用作数据源或远程服务,当它多次接收指令时,它只处理一次指令。
问题:Reports 和 Dashboards 在微服务环境中有什么用途?
答:报告和仪表板通常用于监控系统。对于微服务,报告和仪表板有助于:
- 找出哪个微服务支持哪个资源。
- 找出在组件发生/发生更改时受到影响的服务。
- 为文档目的提供一个简单的访问点。
- 查看已部署组件的版本。
- 从组件中获取合规性。
问题:常见微服务面试题合集:可以考虑使用哪些工具来管理微服务架构?
答:可用于构建/管理微服务架构的主要工具有:
- MongoDB:它是一个基于文档的开源分布式数据库。这里的数据以 JSON 格式存储,不同的文档具有不同的结构。它还支持许多编程语言,如 C、C++、C#、PERL、PHP、Python、Java、Ruby、Scala 等。
- Elasticsearch:它是一个全文搜索引擎。
- KAFKA:这是一个事件队列系统。所有事务都通过事件队列处理,从而避免了不同服务之间像网络一样的随机交互。Kafka 使微服务架构变得健壮和干净。
- JENKINS:它是一种自动化工具,可实现持续集成和持续开发。它支持许多插件,并且可以轻松地与几乎所有工具集成。
- DOCKER:应用开发环境和应用部署环境肯定会有很多方面的差异。这会导致部署问题。Docker 为应用程序运行提供静态背景,从而避免部署问题。
- KUBERNETES:在一个应用程序中运行着数千个服务,Kubernetes 作为一个引擎来协调整个过程。
- JAEGER:它是一个开源的端到端分布式跟踪工具。Jaeger 监控分布式事务,帮助性能优化,并找到服务之间的依赖关系。它还给出了根本原因分析。
- FLUENT:在多服务架构中,所有不同的系统都通过不同的编程语言、不同的数据库进行管理,并在不同的操作系统中运行,登录和跟踪是一个重要的问题。Fluentd 提供了单个日志记录层并简化了这个问题。还可以收集日志并将其聚合到数据源上。
- PROMETHEUS:它是一个监控工具,有助于在部署应用程序时检查所有服务是否正常工作。它是一个时间序列数据存储。它从应用程序收集指标并以图形格式显示。
- grafana: Grafana 提供对不同可视化格式(如图形、图表、表格等)的分析和监控。
- NGINX:它充当反向代理。它充当单点入口,通过它进行所有 API 调用。
问题:如何从微服务中创建状态机?
微服务面试题分析:每个拥有其数据库的微服务都是一个可独立部署的程序。这使得我们可以创建状态机,通过它我们可以为特定的微服务指定不同的状态和事件。
问题:过渡到微服务时最常见的错误是什么?
回答:
- 未能概述主要挑战。
- 我正在重写已经存在的程序。
- 职责、时间线和边界的模糊定义。
- 未能识别和实施自动化。
问题:WebMVC 测试注解在哪里使用?
答: 常见微服务面试题有哪些?WebMvcTest Annotation 用于单元测试 Spring MVC 应用程序,其中测试目标是专注于 Spring MVC 组件。
例如:@WebMvcTest(value = ToTestController.class, secure = false)
在上面的示例中,目的是启动 ToTestController。执行此单元测试时,不会启动所有其他控制器和映射。
问题:举一个/几个微服务实现的例子。
答: Netflix、Paypal、Amazon、eBay、Twitter 和许多其他大型网站都是从单体架构开始发展成为微服务架构的。