微服务面试问题

一、什么是Spring Cloud?

在微服务中,SpringCloud是一个提供与外部系统集成的系统。它是一个敏捷的框架,可以短平快构建应用程序。与有限数量的数据处理相关联,它在微服务体系结构中起着非常重要的作用。

以下为 Spring Cloud 的核心特性:

1.版本化/分布式配置。
2.服务注册和发现。
3.服务和服务之间的调用。
4.路由。
5.断路器和负载平衡。
6.分布式消息传递。

二、什么是Spring Boot?

随着新功能的加入,Spring变得越来越复杂。无论何时启动新项目,都必须添加新的构建路径或Maven依赖项。简而言之,你需要从头开始做每件事。Spring Boot是一种帮助您避免所有代码配置的解决方案。

springboot自动配置的原理
在spring程序main方法中 注解@SpringBootApplication或者@EnableAutoConfiguration
  1. 在启动时扫描项目所依赖的每个starter中寻找包含spring.factories文件的JAR
    2.根据spring.factories配置加载AutoConfigure类
    3.根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context
如何重新加载Spring Boot上的更改,而无需重新启动服务器?

DevTools模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。

添加【修改代码】自动重启功能
添加开发者工具集=====spring-boot-devtools

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<optional>true</optional>
	</dependency>
</dependencies>
如何覆盖Spring Boot项目的默认属性?

这可以通过在application.properties文件中指定属性来完成。

例如,在Spring MVC应用程序中,您必须指定后缀和前缀。这可以通过在application.properties文件中输入下面提到的属性来完成。

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

Actuator在Spring Boot中的作用

它是最重要的功能之一,可帮助您访问在生产环境中运行的应用程序的当前状态。有多个指标可用于检查当前状态。它们还为RESTful Web服务提供端点,可以简单地用于检查不同的度量标准。

Spring Boot中的监视器是什么?

Spring boot actuator是spring启动框架中的重要功能之一。Spring boot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。
有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为HTTP URL访问的REST端点来检查状态。

什么是YAML?

YAML是一种人类可读的数据序列化语言。它通常用于配置文件。
与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据。

Spring Boot支持哪些嵌入式容器?

无论何时创建Java应用程序,都可以通过两种方法进行部署:

使用外部的应用程序容器。

将容器嵌入jar文件中。

Spring Boot包含Jetty,Tomcat和Undertow服务器,所有服务器都是嵌入式的。

Jetty - 用于大量项目,Eclipse Jetty可以嵌入到框架,应用程序服务器,工具和集群中。

Tomcat - Apache Tomcat是一个开源JavaServer Pages实现,可以很好地与嵌入式系统配合使用。

Undertow - 一个灵活而突出的Web服务器,它使用小型单一处理程序来开发Web服务器。

springboot常用的starter有哪些

spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持
spring-boot-starter-data-jpa 数据库支持
spring-boot-starter-data-redis redis数据库支持
spring-boot-starter-data-solr solr支持
mybatis-spring-boot-starter 第三方的mybatis集成starter

什么是Semantic监控?

它结合了对整个应用程序的监控以及自动化测试。语义监控的主要好处是找出对您的业务更有利可图的因素。

从业务角度来看,语义监控以及服务层监控可以监控微服务。一旦检测到问题,它们就可以实现更快的隔离和 错误分类,从而减少修复所需的主要时间。它对服务层和事务层进行分类,以确定受可用性或性能不佳影响的事务。

如何设置服务发现?

有多种方法可以设置服务发现。我将选择我认为效率最高的那个,Netflix的Eureka。这是一个简单的程序,不会对应用程序造成太大影响。此外,它支持多种类型的Web应用程序。

Eureka配置包括两个步骤 - 客户端配置和服务器配置。

使用属性文件可以轻松完成客户端配置。在clas spath中,Eureka搜索一个eureka-client.properties文件。它还搜索由特定于环境的属性文件中的环境引起的覆盖。

对于服务器配置,您必须首先配置客户端。完成后,服务器启动一个客户端,该客户端用于查找其他服务器。。默认情况下,Eureka服务器使用客户端配置来查找对等服务器。

为什么要选择微服务架构

这是一个非常常见的微服务面试问题,你应该准备好了!微服务架构提供了许多优点。这里有几个:

1.微服务可以轻松适应其他框架或技术。
2.单个进程的失败不会影响整个系统。
3.为大企业和小型团队提供支持。
4.可以在相对较短的时间内独立部署。

为什么在微服务中需要Reports报告和Dashboards仪表板?

报告和仪表板主要用于监视和维护微服务。有多种工具可以帮助实现此目的。报告 和仪表板可用于:

找出哪些微服务公开了哪些资源。

找出组件发生变化时受影响的服务。

提供一个简单的点,只要需要文档,就可以访问它。

部署的组件的版本。

为什么人们会犹豫使用微服务?

我见过许多开发者在这个问题上摸索。毕竟,在面试微服务架构师角色时,他们会被问到这个问题,所以承认它的缺点可能有点棘手。以下是一些很好的答案:

它们需要大量协作 - 微服务需要大量的合作。不同的微服务模块,可能分散在不同的团队,团队之间需要始终保持良好的同步。

他们需要建立繁重的架构 - 系统是分布式的,架构涉及很多。

他们需要过多的计划来处理操作开销 - 如果您计划使用微服务架构,则需要为操作开销做好准备。

需要熟练的专业人员,他们可以支持异构分布的微服务。

谈一下领域驱动设计

主要关注核心领域逻辑。基于领域的模型检测复杂设计。这涉及与公司层面领域方面的专家定期合作,以解决与领域相关的问题并改进应用程序的模型。在回答这个微服务面试问题时,您还需要提及DDD的核心基础知识。他们是:

DDD主要关注领域逻辑和领域本身。
复杂的设计完全基于领域的模型。
为了改进模型的设计并解决任何新出现的问题,DDD不断与公司领域方面的专家合作。

什么是耦合和凝聚力?

组件之间依赖关系强度的度量被认为是耦合。一个好的设计总是被认为具有高内聚力和低耦合性。

面试官经常会问起凝聚力。它也是另一个测量单位。更像是一个模块内部的元素保持结合的程度。

必须记住,设计微服务的一个重要关键是低耦合和高内聚的组合。当低耦合时,服务对其他服务的依赖很少。这样可以保持服务的完整性。在高内聚性中,将所有相关逻辑保存在服务中成为可能。否则,服务将尝试彼此通信,从而影响整体性能。

什么是Oauth?

开放授权协议,这允许通过在HTTP服务上启用客户端应用程序(例如第三方提供商Facebook,GitHub等)来访问资源所有者的资源。因此,您可以在不使用其凭据的情况下与另一个站点共享存储在一个站点上的资源。

OAuth允许像Facebook这样的第三方使用最终用户的帐户信息,同时保证其安全(不使用或暴露用户的密码)。它更像是代表用户的中介,同时为服务器提供访问所需信息的令牌。

springcloud如何实现服务的注册和发现

服务在发布时 指定对应的服务名(服务名包括了IP地址和端口) 将服务注册到注册中心(eureka或者zookeeper)
这一过程是springcloud自动实现 只需要在main方法添加@EnableDisscoveryClient 同一个服务修改端口就可以启动多个实例

调用方法:传递服务名称通过注册中心获取所有的可用实例 通过负载均衡策略调用(ribbon和feign)对应的服务

什么是服务熔断?什么是服务降级

当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫做熔断

服务降级则相对于整体应用完全可用状态而言的,因为部分不可用从保全大部分服务可用的这种服务状态成为服务降级

传统开发模式和微服务的区别

优点:
①开发简单,集中式管理
②基本不会重复开发
③功能都在本地,没有分布式的管理和调用消耗

缺点:
1、效率低:开发都在同一个项目改代码,相互等待,冲突不断
2、维护难:代码功功能耦合在一起,新人不知道何从下手
3、不灵活:构建时间长,任何小修改都要重构整个项目,耗时
4、稳定性差:一个微小的问题,都可能导致整个应用挂掉
5、扩展性不够:无法满足高并发下的业务需求

常见的系统架构遵循的三个标准和业务驱动力:
1、提高敏捷性:及时响应业务需求,促进企业发展
2、提升用户体验:提升用户体验,减少用户流失
3、降低成本:降低增加产品、客户或业务方案的成本

基于微服务架构的设计:
目的:有效的拆分应用,实现敏捷开发和部署

为什么我们需要微服务容器?

要管理基于微服务的应用程序,容器是最简单的选择。它帮助用户单独部署和开发。您还可以使用Docker将微服务封装到容器的镜像中。没有任何额外的依赖或工作,微服务可以使用这些元素。

访问RESTful微服务的方法是什么?

另一个经常被问到的微服务面试问题是如何访问RESTful微服务?你可以通过两种方法做到这一点:

使用负载平衡的REST模板。
使用多个微服务。

过渡到微服务时的常见错误

不仅在开发上,而且在方面流程也经常发生错误。一些常见错误是:

通常开发人员无法概述当前的挑战。
重写已经存在的程序。
职责、时间线和界限没有明确定义。
未能从一开始就实施和确定自动化的范围。

微服务设计的基础是什么?

这可能是最常见的微服务面试问题之一。在回答这个问题时,你需要记住以下内容:

1.定义范围。
2.结合低耦合和高内聚。
3.创建一个有唯一标识的服务,唯一标识将充当识别源,非常像数据库表中的唯一键。
4.创建正确的API并在集成过程中特别注意。
5.限制对数据的访问并将其限制到所需级别。
6.在请求和响应之间保持顺畅的流程。
7.自动化大多数流程,以减少时间复杂性。
8.将表的数量保持在最低水平,以减少空间复杂性。
9.不断监控架构,发现缺陷及时修复。
10每个微服务的数据存储应该分开。
11.对于每个微服务,都应该有一个独立的构建。
12.将微服务部署到容器中。
13.服务器应被视为无状态。

康威定律是什么?

康威定律指出,“设计系统的组织,其产生的设计等同于组织之内、组织之间的沟通结构。”

面试官可能会问反微服务面试问题,比如康威定律与微服务的关系。一些松散耦合的api形成了微服务的体系结构。这种结构非常适合小团队实现自治组件的方式。这种体系结构使组织在重组其工作流程时更加灵活。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值