微服务常见面试题解析、问题说明及参考话术,实用干货

这篇具有很好参考价值的文章主要介绍了微服务常见面试题解析、问题说明及参考话术,实用干货。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、SpringCloud常见组件有哪些?

1.1 问题说明

这个题目主要考察对SpringCloud的组件基本了解

1.2 难易程度

简单

1.3 参考话术

SpringCloud包含的组件很多,有很多功能是重复的。

其中最常用组件包括:

注册中心组件:Eureka、Nacos等

负载均衡组件:Ribbon

远程调用组件:OpenFeign

网关组件:Zuul、Gateway

服务保护组件:Hystrix、Sentinel

服务配置管理组件:SpringCloudConfig、Nacos

二、Nacos的服务注册表结构是怎样的?

2.1 问题解析

要了解Nacos的服务注册表结构,需要从两方面入手:

一是Nacos的分级存储模型

二是Nacos的服务端源码

微服务常见面试题解析、问题说明及参考话术,实用干货,Java,分布式,微服务,java,面试

2.2 问题说明

考察对Nacos数据分级结构的了解,以及Nacos源码的掌握情况

2.3 难易程度

一般

2.4 参考话术

Nacos采用了数据的分级存储模型。

最外层是Namespace,用来隔离环境。

然后是Group,用来对服务分组。

接下来就是服务(Service)了,一个服务包含多个实例,但是可能处于不同机房,因此Service下有多个集群(Cluster),Cluster下是不同的实例(Instance)。


对应到Java代码中,Nacos采用了一个多层的Map来表示。结构为Map<String, Map<String, Service>>,其中最外层Map的key就是namespaceId,值是一个Map。

内层Map的key是group拼接serviceName,值是Service对象。

Service对象内部又是一个Map,key是集群名称,值是Cluster对象。而Cluster对象内部维护了Instance的集合。

三、Nacos如何支撑数十万服务注册压力?

3.1 问题说明

考察对Nacos源码的掌握情况

3.2 难易程度

3.3 参考话术

Nacos内部接收到注册的请求时,不会立即写数据,而是将服务注册的任务放入一个阻塞队列就立即响应给客户端。然后利用线程池读取阻塞队列中的任务,异步来完成实例更新,从而提高并发写能力。

四、Nacos如何避免并发读写冲突问题?

4.1 问题说明

考察对Nacos源码的掌握情况

4.2 难易程度

4.3 参考话术

Nacos在更新实例列表时,会采用CopyOnWrite技术,首先将旧的实例列表拷贝一份,然后更新拷贝的实例列表,再用更新后的实例列表来覆盖旧的实例列表。

这样在更新的过程中,就不会对读实例列表的请求产生影响,也不会出现脏读问题了。

五、Nacos与Eureka的区别有哪些?

5.1 问题说明

考察对Nacos、Eureka的底层实现的掌握情况

5.2 难易程度

5.3 参考话术

Nacos与Eureka有相同点,也有不同之处,可以从以下几点来描述:

接口方式:Nacos与Eureka都对外暴露了Rest风格的API接口,用来实现服务注册、发现等功能

实例类型:Nacos的实例有永久和临时实例之分;而Eureka只支持临时实例

健康检测:Nacos对临时实例采用心跳模式检测,对永久实例采用主动请求来检测;Eureka只支持心跳模式

服务发现:Nacos支持定时拉取和订阅推送两种模式;Eureka只支持定时拉取模式

六、Sentinel的限流与Gateway的限流有什么差别?

6.1 问题说明

考察对线程隔离方案的掌握情况

6.2 难易程度

一般

6.3 参考话术

Hystix默认是基于线程池实现的线程隔离,每一个被隔离的业务都要创建一个独立的线程池,线程过多会带来额外的CPU开销,性能一般,但是隔离性更强。

Sentinel是基于信号量(计数器)实现的线程隔离,不用创建线程池,性能较好,但是隔离性一般。

七、Sentinel的线程隔离与Hystix的线程隔离有什么差别?

 7.1 问题解析

限流:对应用服务器的请求做限制,避免因过多请求而导致服务器过载甚至宕机。

限流算法常见的包括两种:

  1. 计数器算法,又包括窗口计数器算法、滑动窗口计数器算法
  2. 令牌桶算法(Token Bucket)
  3. 漏桶算法(Leaky Bucket)

 7.1.1 固定窗口计数器算法

  • 将时间划分为多个窗口,窗口时间跨度称为Interval,本例中为1000ms;
  • 每个窗口维护一个计数器,每有一次请求就将计数器加一,限流就是设置计数器阈值,本例为3
  • 如果计数器超过了限流阈值,则超出阈值的请求都被丢弃。

 微服务常见面试题解析、问题说明及参考话术,实用干货,Java,分布式,微服务,java,面试

 7.1.2 滑动窗口计数器算法

滑动窗口计数器算法会将一个窗口划分为n个更小的区间,例如

  • 窗口时间跨度Interval为1秒;区间数量 n = 2 ,则每个小区间时间跨度为500ms
  • 限流阈值依然为3,时间窗口(1秒)内请求超过阈值时,超出的请求被限流
  • 窗口会根据当前请求所在时间(currentTime)移动,窗口范围是从(currentTime-Interval)之后的第一个时区开始,到currentTime所在时区结束。

微服务常见面试题解析、问题说明及参考话术,实用干货,Java,分布式,微服务,java,面试

7.1.3 令牌桶算法

令牌桶算法说明:

  • 以固定的速率生成令牌,存入令牌桶中,如果令牌桶满了以后,多余令牌丢弃
  • 请求进入后,必须先尝试从桶中获取令牌,获取到令牌后才可以被处理
  • 如果令牌桶中没有令牌,则请求等待或丢弃

 微服务常见面试题解析、问题说明及参考话术,实用干货,Java,分布式,微服务,java,面试

 7.1.4 漏桶算法 

漏桶算法说明:

  • 将每个请求视作"水滴"放入"漏桶"进行存储;
  • "漏桶"以固定速率向外"漏"出请求来执行,如果"漏桶"空了则停止"漏水”;
  • 如果"漏桶"满了则多余的"水滴"会被直接丢弃,可以理解成请求在桶内排队等待

微服务常见面试题解析、问题说明及参考话术,实用干货,Java,分布式,微服务,java,面试

Sentinel在实现漏桶时,采用了排队等待模式:

让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。并发的多个请求必须等待,预期的等待时长 = 最近一次请求的预期等待时间 +  允许的间隔。

如果请求预期的等待时间超出最大时长,则会被拒绝。

例如:

QPS = 5,意味着每200ms处理一个队列中的请求;

timeout = 2000,意味着预期等待超过2000ms的请求会被拒绝并抛出异常

微服务常见面试题解析、问题说明及参考话术,实用干货,Java,分布式,微服务,java,面试

 7.1.5 限流算法对比

微服务常见面试题解析、问题说明及参考话术,实用干货,Java,分布式,微服务,java,面试

7.2 问题说明

考察对限流算法的掌握情况

7.3 难易程度

7.4 参考话术

限流算法常见的有三种实现:

滑动时间窗口、令牌桶算法、漏桶算法。

Gateway则采用了基于Redis实现的令牌桶算法。

而Sentinel内部却比较复杂:文章来源地址https://www.toymoban.com/news/detail-830368.html

  • 默认限流模式是基于滑动时间窗口算法
  • 排队等待的限流模式则基于漏桶算法
  • 而热点参数限流则是基于令牌桶算法

到了这里,关于微服务常见面试题解析、问题说明及参考话术,实用干货的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 后端面试话术集锦第五篇:rabbitmq面试话术

    这是后端面试集锦第五篇博文—— rabbitmq 面试话术❗❗❗ RabbitMQ 是 Erlang 语言开发的基于 AMQP 的一款消息中间件,核心思想是生产者不会将消息直接发送给队列,消息在发送给客户端时先发送给交换机,然后由交换机转发给对应的队列。 它对路由( Routing ),负载均衡( Load b

    2024年02月10日
    浏览(35)
  • 后端面试话术集锦第 十一 篇:mybatis面试话术

    这是后端面试集锦第十一篇博文—— mybatis 面试话术❗❗❗ Mybatis 是一个半 ORM (对象关系映射)的持久层框架,它内部封装了 JDBC ,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程,使用时直接编写原生态 sql 。 优点

    2024年02月10日
    浏览(28)
  • 后端面试话术集锦第 八 篇:redis面试话术

    这是后端面试集锦第八篇博文—— redis 面试话术❗❗❗ Redis 是一个非关系数据库,我们项目中主要用它来存储热点数据的,减轻数据库的压力,单线程纯内存操作,采用了非阻塞 IO 多路复用机制,就是单线程监听,我们项目中使用 springdata-redis 来操作 redis 。 我们项目中使

    2024年02月10日
    浏览(27)
  • 后端面试话术集锦第 十 篇:springMVC面试话术

    这是后端面试集锦第十篇博文—— springMVC 面试话术❗❗❗ springmvc 是一个视图层框架,通过 MVC 模型让我们很方便的接收和处理请求和响应。 我给你说说他里边的几个核心组件吧: 它的核心控制器是 DispatcherServlet ,他的作用是接收用户请求,然后给用户反馈结果。它相当于

    2024年02月10日
    浏览(27)
  • 后端面试话术集锦第 七 篇:nginx面试话术

    这是后端面试集锦第七篇博文—— nginx 面试话术❗❗❗ Nginx 是一个高性能的 HTTP 和反向代理服务器,具有反向代理和负载均衡以及动静分离等功能。 我先说说 Nginx 反向代理吧: 反向代理是指以代理服务器来接受用户的请求,然后将请求分发给内部网络上的服务器,并将从

    2024年02月10日
    浏览(30)
  • 后端面试话术集锦第四篇:ElasticSearch面试话术

    这是后端面试集锦第四篇博文—— ElasticSearch 面试话术❗❗❗ ​ Java 开发的 lucene 分布式全文搜索引擎,基于 restful Web 接口,它在检索领域相当优秀。 在我们项目中主要是负责检索商品信息。商品信息构成是比较复杂的,并且数据量巨大,至少会有几十万,如果使用 mysql 做

    2024年02月10日
    浏览(30)
  • 后端面试话术集锦第 十五 篇:java线程面试话术

    这是后端面试集锦第十五篇博文—— java 线程面试话术❗❗❗ 首先呢, Thread 类本质上是实现了 Runnable 接口,代表一个线程的实例。 所以, 我们可以编写一个类,继承Thread类,或者直接实现Runnable接口 。然后,再重写下~run方法就行了。启动线程的方式就是调用类里边的 s

    2024年02月10日
    浏览(21)
  • 后端面试话术集锦第三篇:spring cloud 面试话术

    这是后端面试集锦第三篇博文—— spring cloud 面试话术❗❗❗ Spring Cloud 是一系列框架的集合,它利用 Spring Boot 的开发便利性简化了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。 他的设计目的是为了简化 Spring 应用的搭建和开发过程。 该框架遵循

    2024年02月11日
    浏览(25)
  • 后端面试话术集锦第 九 篇:Activiti工作流面试话术

    这是后端面试集锦第九篇博文—— Activiti 工作流面试话术❗❗❗ 工作流这块儿,实际在工作中使用的时候, Activiti 用的居多,当然还有一些其他的工作流引擎。 在网上看了也大概看了一下,其他的像 JBPM 以及 workflow 等用的情况来讲不是很多。 所以说 Activiti 目前来讲用的比

    2024年02月10日
    浏览(28)
  • 前端面试话术集锦第一篇

    这是记录 前端面试的话术集锦第1篇博文——基础篇一 ,我会不断更新前端面试话术的博文。❗❗❗ 合理的 title 、 description 、 keywords ,搜索对着三项的权重逐个减⼩: title :值强调重点即可,重要出现不要超过 2 次,⽽且要靠前,不同⻚⾯ title 要有所不同 descript

    2024年02月11日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包