8个微服务面试题


微服务是许多现代应用程序中最重要的组件之一。绝大多数(75%)拥有超过 1,000 名员工的公司使用微服务。因此,作为一名软件开发人员,你为一家提出微服务面试问题的公司面试的机会非常高。
PaypalSquare等公司长期以来一直在使用微服务。如果您想确定每一个微服务面试问题,您需要预测各个方面的问题,包括:

  • 一般微服务架构面试题
  • Java微服务面试题
  • 微服务设计模式面试题

为什么公司越来越多地使用微服务
微服务不是采用单一的方法来设计系统架构,而是寻求加快速度。因此,它们消除了传统软件应用程序构建方式带来的许多相互依赖。通过使用微服务架构,Chris Richardson 声称应用程序交付可以变得更加快速和频繁。随着应用程序变得越来越复杂,微服务越来越重要。
微服务的重要部分在于它们每个都可以独立部署。这意味着如果你想测试某个微服务,你不需要关闭整个系统进行维护。它的效率要高得多。

Q1:请解释微服务架构
答:微服务架构是一种哲学,一种在组织中构建应用程序的方式。为了避免某个部分的错误导致整个应用程序出现问题,从微服务构建应用程序可以隔离任何错误,并使其更快地找到并修复它们。这使得应用程序的不同部分更加独立。
每个微服务都将负责您的应用程序所需的单个功能。随着企业越来越依赖这些应用程序,建议使用微服务。大多数公司如果还没有转向这种架构的话。

Q2:命名用于部署微服务架构的常用工具。
A:我能想到大约 10 种工具可以用来构建和管理微服务架构:

  • Mongo DB
  • Kubernetes
  • KAFKA
  • Elasticsearch
  • Jenkins
  • Jaeger
  • Fluent
  • Docker
  • Prometheus
  • Grafan

MongoDB
MongoDB是一个NoSQL数据库,它使你在创建数据库之初所做的决定受到的限制少得多。换句话说,它比SQL数据库更灵活。它也非常快,特别适合处理非常大量的数据。另一方面,MongoDB在连接表方面很困难,导致数据重复的问题。

Kubernetes
容器是随时可以运行的软件包,包含软件运行所需的一切。Kubernetes就像云中的一个操作系统,它协调所有这些容器,决定它们何时运行以及获得多少资源,以保持一切顺利运行。

Kafka
Kafka让你把你的代码建模为按顺序存储在日志中的事件流,而不是由数据库建模的对象。微服务与这种思考代码的方式是天生一对,每个服务都从Kafka日志中提取数据或将数据放进去。


Q3: 单片式架构、微服务架构和面向服务的架构之间的区别是什么?(SOA)
答:让我们认识到,这些风格中的每一种都是用来达到相同的目标--为应用服务。

单片式架构对程序架构采取了整体的方法。整个应用程序将作为一个整体存在,有各种相互依赖的节点。不过,也有下游的后果。如果应用程序的一个方面的功能出现问题,整个应用程序就会出现问题。这甚至使定期维护等活动成为一种挑战。

相比之下,微服务架构从几个服务中创建应用程序,这些服务以模块化的方式组合。你可以根据需要扩展这些服务,如果你发现它们不再为你的目的服务,你可以很容易地把它们取出来。

面向服务的架构(SOA)意味着跨程序和应用程序的服务可以相互沟通。虽然你可能采用微服务来帮助服务一个单一的应用程序,但面向服务的架构有更广泛的范围。你会在整个企业的背景下考虑SOA。

问题4:讨论Spring Boot及其与微服务的关系
Spring Boot是一个平台,允许你在Spring框架中创建独立的应用程序。这些Spring应用程序很有用,因为它们被设计成允许你从小型应用程序开始,并能轻松地扩展它们。这使得它非常适合创建微服务的开发者。

微服务的一个用例涉及流数据。你可以使用Spring Cloud Stream将你所有的微服务与你的实时数据连接起来。如果你有一个事件驱动的应用程序,那么这种类型的连接是至关重要的。

问题5:Spring Cloud解决的问题有哪些?
Spring Cloud解决了很多问题,从延迟和带宽问题到分布式系统的冗余问题。

网络问题
大型应用程序可能会遇到一系列的网络问题。像延迟开销和带宽问题会影响一般性能,从而降低每个人的速度。更不用说,还有安全方面的考虑。

负载平衡
当你使用分布式系统时,会出现大量的冗余,你会浪费大量的资源。你需要在网络链接、CPU等之间进行分配。就其本质而言,Spring Cloud通过允许你在云中管理数据库,消除了许多这些问题。

微服务设计模式面试问题
公司想知道你是否了解可能遇到的各种微服务设计模式。

问题6:什么是微服务的设计模式?
我们可以讨论七种一般类型的微服务设计模式。它们是

分解模式:决定用什么逻辑来把应用分解成各种功能,例如业务领域。
集成模式:如何让不同的微服务进行协作,以实现预期的目标。
数据库模式:如何为微服务设计数据库(每个微服务一个还是共享?)
通信模式:为微服务之间的通信选择最合适的通信类型(例如,同步、异步、事件驱动)。
跨领域关注模式:调用不同的服务,同时避免需要重新配置。
可观察性模式:保持对跨越多个服务的请求的跟踪。
部署模式:你将如何部署服务实例(每个主机一个? 每个主机多个? 每个容器一个?)

Q7: 什么是微服务中的Reactive扩展?
Rx Java设计模式允许你通过一次性调用多个微服务来收集结果。然后,反应式扩展接收所有这些响应并将其编译成一个响应。

这使得你可以很容易地编写纯粹的、不可变的函数。例如,Rx Java观测器允许你订阅一次性发生的事件。这一点很重要,因为今天的许多应用程序必须考虑到同时发生的事件,因为许多用户可能同时与应用程序进行交互。

问题8:说出Java设计模式的一些优点
设计模式的存在是有原因的。作为一个开发者,你不希望重复编写同样的东西。在多个项目中重复使用这些模式是很容易的。此外,你可以创建一个完整的模板,让你勾勒出系统架构。这将为你在以后的工作中节省大量的时间。

这些设计模式在过去几年中经过了相当多的测试,这使得大型企业有信心采用它们。因此,你可以依靠Java设计模式来提供强大的解决方案。更不用说,它们的简单性使得开发人员之间的沟通和处理文档变得更加容易。