Spring Cloud面试篇

面试篇-nacos面试题

1. springboot常见组件


注册中心组件:Eureka、Nacos
负载均衡组件:Ribbon
远程调用组件:OpenFeign
网关组件:Zuul、Gateway
服务保护组件:Hystrix、Sentinel
服务配置管理组件:SpringCloudConfig、Nacos


2. nacos注册表的结构


回答: 分级存储模型。下图是nacos服务的分级存储模型


        对上图的解释: 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的集合


3. nacos解决高并发


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


4. nacos并发读写冲突


Nacos如何避免并发读写冲突问题?
        回答: Nacos在更新实例列表时,会采用CopyOnWrite技术,首先将旧的实例列表拷贝一份,然后更新拷贝的实例列表,再用更新后的实例列表来覆盖旧的实例列表。这样在更新的过程中,就不会对读实例列表的请求产生影响,也不会出现脏读问题了


5. nacos与eureka的区别


接口方式:Nacos与Eureka都对外暴露了Rest风格的API接口,用来实现服务注册、发现等功能
实例类型:Nacos的实例有永久和临时实例之分;而Eureka只支持临时实例
健康检测:Nacos对临时实例采用心跳模式检测,对永久实例采用主动请求来检测;Eureka只支持心跳模式
服务发现:Nacos支持定时拉取和订阅推送两种模式;Eureka只支持定时拉取模式


面试篇-sentinel面试题


1. 线程隔离的方式


线程隔离有两种方式实现
●线程池隔离(Hystix默认采用)
●信号量隔离(Sentinel默认采用)

优点

缺点

场景

线程池隔离

支持主动超时,支持异步调用

线程的额外开销比较大

低扇出

信号量隔离

轻量级,无额外开销

不支持主动超时,不支持异步调用

高频调用,高扇出


2. 限流相关的算法


限流:对应用服务器的请求做限制,避免因过多请求而导致服务器过载甚至宕机。限流算法常见的包括三种
●计数器算法,又包括窗口计数器算法、滑动窗口计数器算法
●令牌桶算法(Token Bucket)
●漏桶算法(Leaky Bucket)
固定窗口计数器算法概念如下:
一、将时间划分为多个窗口(下图的蓝虚线),窗口时间跨度称为Interval,本例中为1000ms
二、每个窗口维护一个计数器,每有一次请求(下图的绿块)就将计数器加一,限流就是设置计数器阈值(下图的红虚线),本例为3秒
三、如果计数器超过了限流阈值,则超出阈值的请求都被丢弃(下图的橙块)
四、缺点: 紫色部分的情况,虽然两个窗口都能容纳3个请求,但是在那1秒你实际要应对6个请求,就会超出阈值设定的3秒,给服务器造成压力


滑动窗口计数器算法会将一个窗口划分为n个更小的区间,如下:
一、窗口时间跨度为1秒(下图的每两个绿虚线块),区间数量 n = 2 (每秒有两个小窗口,即有两个绿虚线块),则每个小区间时间跨度为500ms
二、限流阈值(下图的红虚线)依然为3,时间窗口(有两个小窗口,共表示1秒) 内请求(绿块)超过阈值时,超出的请求被限流
三、窗口会根据请求的当前时间来移动,窗口范围是从'当前请求时间 减 时间跨度' 之后的第一个时区开始,到所在时区结束
四、滑动窗口是通过把单个窗口细分为多个窗口,作用是尽可能避免固定窗口的问题
五、缺点: 只要是窗口就会存在请求超出阈值但被放行的结果。例如1250ms~2100ms,间隔了850毫秒,但是放行了4个请求,不符合1秒最多3个请求的阈值


令牌桶算法如下:
一、以固定的速率(相当于限流)生成令牌,存入令牌桶中,如果令牌桶满了以后,多余令牌丢弃
二、请求进入后,必须先尝试从桶中获取令牌,获取到令牌后才可以被处理
三、如果令牌桶中没有令牌,则请求等待或丢弃
四、桶里面放的是令牌


漏桶算法如下:
一、将每个请求视作"水滴"放入"漏桶"进行存储
二、"漏桶"以固定速率向外"漏"出请求来执行,如果"漏桶"空了则停止"漏水”
三、如果"漏桶"满了则多余的"水滴"会被直接丢弃
四、可以理解成请求在桶内排队等待。有利于应对突发请求
五、漏铜算法是用来优化令牌桶 算法的,漏铜算法的桶里面放的是请求


Sentinel在实现漏桶时,采用了排队等待模式:让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。并发的多个请求必须等待,预期的等待时长 =最近一次请求的预期等待时间 + 允许的间隔。如果请求预期的等待时间超出最大时长,则会被拒绝。例如:QPS = 5,意味着每200ms处理一个队列中的请求;timeout = 2000,意味着预期等待超过2000ms的请求会被拒绝并抛出异常。如下图


3. 限流算法的对比


注意: 固定窗口并没有在内

滑动时间窗口

令牌桶

漏桶

能否保证流量曲线平滑

不能,但窗口内区间越小,流量控制越平滑

基本能,在请求量持续高于令牌生成速度时,流量平滑。但请求量在令牌生成速率上下波动时,无法保证曲线平滑

能,所有请求进入桶内,以恒定速率放行,绝对平滑

能否应对突增流量

不能,徒增流量,只要高出限流阈值都会被拒绝

能,桶内积累的令牌可以应对突增流量

能,请求可以暂存在桶内

流量控制精确度

低,窗口区间越小,精度越高

4. Sentinel与Hystix的区别


【线程隔离的角度】
Hystix: 默认是基于线程池实现的线程隔离,每一个被隔离的业务都要创建一个独立的线程池,线程过多会带来额外的CPU开销,性能一般,但是隔离性更强。Sentinel: 是基于信号量(计数器)实现的线程隔离,不用创建线程池,性能较好,但是隔离性一般


5. sentinel与gateway的区别


【限流的角度】
限流算法常见的有三种实现:滑动时间窗口、令牌桶算法、漏桶算法。
Gateway: 采用了基于Redis实现的令牌桶算法
Sentinel: 相对复杂,默认限流模式是基于滑动时间窗口算法排队等待的限流模式则基于漏桶算法而热点参数限流则是基于令牌桶算法


完结撒花

文件下载-奶牛快传 Download |CowTransfer

该笔记对标的视频是BV1LQ4y127n4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2978637.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

大模型的研究新方向:混合专家模型(MoE)

大模型的发展已经到了一个瓶颈期,包括被业内所诟病的罔顾事实而产生的“幻觉”问题、深层次的逻辑理解能力、数学推理能力等,想要解决这些问题就不得不继续增加模型的复杂度。随着不同应用场景的实际需求,大模型的参数会变得越来越大,复杂性和规模不断的增加,尤其是在多模…

18.基础乐理-音阶是什么、有什么用

音阶&#xff1a; 将调式中的音&#xff0c;从以主音开始到以主音结束&#xff0c;由低到高&#xff08;叫做上行&#xff08;xing&#xff09;&#xff09;&#xff0c;或由高到低&#xff08;叫做下行&#xff08;xing&#xff09;&#xff09;&#xff0c;以阶梯状排列起来&…

Bingbong的回文路径

Here 利用回文串&#xff0c;从左往右与从右往左的hash值相同来判断从左往右&#xff0c;例&#xff1a;从右往左&#xff0c;例&#xff1a;由于在树上&#xff0c;考虑建两颗树&#xff0c;一颗根为最高位&#xff08;up&#xff09;&#xff0c;一棵根为最低位&#xff08;…

Rust 使用结构体组织相关联的数据

目录 结构体的定义和实例化 使用字段初始化简写语法使用结构体更新语法从其他实例创建实例使用没有命名字段的元组结构体来创建不同的类型没有任何字段的类单元结构体结构体示例程序 通过派生 trait 增加实用功能方法语法 定义方法带有更多参数的方法关联函数多个 impl 块本文有…

大厂常见算法50题-反转链表

专栏持续更新50道算法题&#xff0c;都是大厂高频算法题&#xff0c;建议关注。 文章目录 解法参考链接题目解法一 双指针解法二 递归解法三 妖魔化的双指针总结 解法参考链接 题目 解法一 双指针 定义两个指针&#xff1a; pre 和 cur。pre 在前 cur 在后。每次让 pre的 nex…

Day4 商品管理

Day4 商品管理 这里会总结构建项目过程中遇到的问题&#xff0c;以及一些个人思考&#xff01;&#xff01; 学习方法&#xff1a; 1 github源码 文档 官网 2 内容复现 &#xff0c;实际操作 项目源码同步更新到github 欢迎大家star~ 后期会更新并上传前端项目 编写品牌服务 …

在线预约订房酒店小程序源码系统 带完整的安装代码包以及=安装部署教程

传统的酒店预订方式往往依赖于电话、邮件或者到店咨询&#xff0c;这种方式不仅效率低下&#xff0c;而且容易造成信息不准确、沟通不畅等问题。随着智能手机的普及和移动互联网的发展&#xff0c;用户对于随时随地、方便快捷地进行酒店预订的需求日益增强。小编给大家分享一款…

[MySQL]运算符

1. 算术运算符 (1). 算术运算符 : , -, *, / 或 DIV, % 或MOD. (2). 例 : (3). 注 : DUAL是伪表.可以看到4/2结果为小数&#xff0c;并不会截断小数部分.(可能与其他语言不同&#xff0c;比如java中&#xff0c;两个操作数如果是整数&#xff0c;则计算得到的也是整数&…

羊大师:夏季羊奶的好处有哪些?

夏季羊奶的好处主要包括以下几点 1.增强免疫力&#xff1a;羊奶中的钙元素丰富&#xff0c;能有效为身体补充营养物质&#xff0c;增强自身的免疫能力。羊奶还富含上皮细胞生长因子&#xff08;EGF&#xff09;&#xff0c;对人体鼻腔、咽喉、血管、肠胃等黏膜有良好的修复作用…

Qt 跨平台开发的一丢丢总结

Qt 跨平台开发 文章目录 Qt 跨平台开发摘要第一 \ & /第二 神奇{不能换行显示第三 预处理宏 关键字&#xff1a; Qt、 win、 linux、 lib、 MSVC 摘要 最近一直在琢磨Qt跨平台开发的问题&#xff0c;缘由有以下几个&#xff0c; 首先第一个&#xff0c;我们目前开发…

几种比Serv-u更好满足企业的替代工具方案

很多目前企业面临的挑战是如何在保障数据安全的同时&#xff0c;提高文件传输的效率。传统的FTP服务器&#xff0c;如Serv-U&#xff0c;虽然长期服务于文件共享与传输&#xff0c;但在新兴需求面前显得力不从心。 于是企业开始寻求更先进的解决方案以应对跨地域、大容量的文件…

Vue 3中的ref和toRefs:响应式状态管理利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【图说】VMware Ubuntu22.04 详细安装教程

前言 无论是从事 Linux 开发工作&#xff0c;还是希望电脑运行双系统&#xff0c;VMware 虚拟机都是我们日常工作不可或缺的工具。本章将会重点介绍 VMware 安装流程&#xff0c;以及在 VMware 上如何运行、使用 Ubuntu22.04 系统。 一、VMware 下载安装 1.1 VMware 官网下载…

【Hello算法】 > 第 3 关 >栈与队列

数据结构 之 数组与链表 1 栈 / 栈的常见操作、实现、应用2 队列 /队列的常见操作、实现、应用3 双向队列4 Tips ———————————————————————————————————————————————————————————- ————————————————…

鼠标坐标传感器FCT3065

参考链接 如何优雅的DIY鼠标&#xff1f; | 技术文章 | 汇顶科技开发者社区 (goodix.com)https://developers.goodix.com/zh/bbs/blog_detail/bebdd04ccdfc4f7682ab27a8e77a14ad GitHub - VineetSukhthanker/FCT3065-XY_MouseSensor: Interface FCT3065-XY optical mouse sen…

面试算法准备:动态规划

这里写自定义目录标题 1 理论2 例题2.1 斐波那契数列&#xff08;什么是重叠子问题&#xff09;2.1.1 带备忘录的递归解法 2.2 零钱兑换&#xff08;讲解最优子结构&#xff09;2.3 最长递增子序列&#xff08;讲解如何求解状态转移方程&#xff09;2.4 俄罗斯套娃信封问题&…

Vue3、 Vue2 Diff算法比较

Vue2 Diff算法 源码位置:src/core/vdom/patch.ts 源码所在函数:updateChildren() 源码讲解: 有新旧两个节点数组:oldCh和newCh; 有下面几个变量: oldStartIdx 初始值=0 oldStartVnode 初始值=oldCh[0] oldEndIdx 初始值=oldCh.length - 1 oldEndVnode 初始值=oldCh[ol…

鸿蒙 harmonyos 线程 并发 总结 async promise Taskpool woker(三)多线程并发 Worker

Worker Worker是与主线程并行的独立线程。创建Worker的线程称之为宿主线程&#xff0c;Worker自身的线程称之为Worker线程。创建Worker传入的url文件在Worker线程中执行&#xff0c;可以处理耗时操作但不可以直接操作UI。 Worker主要作用是为应用程序提供一个多线程的运行环境…

CTFshow-PWN-栈溢出(pwn36)

存在后门函数&#xff0c;如何利用&#xff1f; 好好好&#xff0c;终于到了这种有后门函数的了 checksec 检查一下&#xff1a; 32 位程序&#xff0c;RELRO 保护部分开启 RWX: Has RWX segments 存在可读可写可执行的段 使用 ida32 看 main 函数 跟进 ctfshow 函数…

Scala 04 —— Scala Puzzle 拓展

Scala 04 —— Scala Puzzle 拓展 文章目录 Scala 04 —— Scala Puzzle 拓展一、占位符二、模式匹配的变量和常量模式三、继承 成员声明的位置结果初始化顺序分析BMember 类BConstructor 类 四、缺省初始值与重载五、Scala的集合操作和集合类型保持一致性第一部分代码解释第二…