当前位置: 首页 > news >正文

Spring Cloud常见面试题

1.请说说你用过Spring Cloud哪些组件?这些组件分别有什么作用?

1、注册中心:Eureka、Nacos、Zookeeper、Consul;(服务注册)

2、负载均衡:Ribbon、LoadBalancer;(客户端的负载均衡)

3、服务调用:Feign、OpenFeign、Dubbo RPC;(优雅调用远程服务)

4、配置中心:Spring Cloud Config、Nacos;(统一管理服务配置)

5、熔断降级:Hystrix、Sentinel;(急骤请求,防止服务雪崩)

6、分布式事务:Seata (跨库跨服务的事务管理)

7、服务网关:Zuul 1.x、Zuul 2.x、Spring Cloud Gateway;(系统入口门面)

8、链路追踪:Skywalking、Zipkin;(监控服务状态、协助排查问题) 

2.谈谈你对Spring Cloud的理解? 

1、微服务开发需要解决各类问题,比如:负载均衡,服务的注册与发现,服务调用,服务路由,服务熔断等等一系列问题;

2、在没有Spring Cloud之前,我们需要自己寻找各种组件并进行集成来解决一系列微服务场景下的问题,有了Spring Cloud,它帮我们把微服务面临的各类技术问题全部打包好了,我们只需要开箱即用;

3、Spring Cloud最大的贡献是为开发人员提供了一整套集成好的微服务解决方案,不再需要开发人员自行集成各类组件解决不同问题,降低了微服务开发难度,Spring Cloud提供了统一标准,功不可没;

4、Spring Cloud在天下大乱,群雄并起中,实现了一统天下;

5、Spring Cloud的出现,也为Spring生态注入了更强大的生命力; 

3.什么是服务熔断?什么是服务降级?有什么区别? 

服务熔断,当服务A调用服务B时,如果此时服务B不可用,那么上游的服务A为了保证自己不受影响,就切断调用服务B,防止发生服务雪崩,直到B服务恢复;

提前做好一种兜底措施,比如返回假的数据,或者记录数据信息到数据库、redis、文件中,后续进行补救,直到B服务恢复;

服务降级,当系统负载过高时,对非核心的业务服务进行关闭,来保证核心业务的正常运行; 关闭某些不重要的服务,或者拒绝低优先级应用的服务请求,保证核心应用正常工作;

相同: 目的相同,都是为了保证服务的可用性,防止系统整体负载过大甚至崩溃; 表现相同,都是表现出服务暂时不可用的状态;

不同: 触发原因不同,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑; 

4.你之前的项目运行得好好的,为什么项目重构时要对系统进行拆分呢? 

1、项目随着业务功能的增加,功能模块增多,业务复杂度增大,代码量也增加,在多人团队中,各开发人员为了实现自己的功能,有时候经常需要修改另一个开发人员的代码,经常会出现代码的冲突;

2、一个地方的功能修改经常导致另外一个地方的功能出现异常;

3、每次一个小小的修改,都需要测试团队对很多功能进行测试,效率非常低,测试团队也充满抱怨;

4、每次新增新的需求,开发效率都比较低下,由于所有功能都在一个项目中,导致业务代码逻辑变得非常复杂,经常陷入牵一发动全身的状态,团队成员也不敢轻易修改代码,响应新需求的速度低;

5、由于所有功能在一个项目中,代码量极大,代码的可读性可维护性可扩展性都变得很差,也导致团队成员不稳;

6、出现一些更好的新技术,也不敢轻易升级技术,升级非常困难,升级可能产生各种问题,调试和测试会消耗大量的时间和精力,团队生成力极低;

7、项目迭代上线效率低,每次上线,全体成员,技术团队、测试团队、运维团队都需要加班加点,而且常常都是胆战心惊的; 

一个几百万行、几十万行代码的系统拆分成几百个、几十个服务,每个服务就只有1~2万行代码,每个服务由1~2人负责,每个人专注自己的服务维护;

1、不会出现代码冲突;

2、代码逻辑变简单了,代码变清晰了;

3、测试也变得容易了;

4、响应新需求的速度也提升了;

5、升级新技术也变容易了;

6、上线发布也变容易了;

5.Eureka和Nacos都可以做注册中心,它们有什么区别? 

注册中心:Eureka、Nacos、Zookeeper、Apollo、Consul;

相同点

1、都用于服务的注册和发现;

2、都支持服务的心跳健康检查;

3、都支持高可用; 

不同点

1、Nacos支持主动对微服务状态检测,Nacos临时实例采用心跳检测,永久实例采用主动检测;

2、Nacos临时实例心跳检测不正常会从注册中心删除,永久实例不会删除;

3、Nacos支持服务列表变更时的主动消息推送,服务列表更新会更及时;

4、Nacos集群支持两种模式,默认采用AP模式,当集群中存在非临时实例时,采用CP模式,而Eureka只能采用AP模式;

5、Nacos支持注册中心、配置中心,Eureka只支持注册中心;

6、Nacos具备服务优雅上下线和流量管理,而Eureka的后台页面仅供展示,需要使用api操作上下线且不具备流量管理功能;

7、Nacos社区活跃,Eureka已经闭源了;

6. ACID、BASE理论、CAP理论的关系? 

1.ACID 是传统数据库中常用的设计理念;

1、Atomicity (原子性)

保证1-6所有步骤要么都执行,要么都不执行,一旦在执行某一步骤的过程中发生异常,就需要执行回滚操作。比如执行到第五步时,B账户突然不可用(比如被冻结或其他原因不可用),那么之前的所有操作都应该回滚到执行事务之前的状态;

2、Consistency (一致性)

在转账之前,A和B的账户中共有1000+1000=2000元钱,在转账之后,A和B的账户中共有900+1100=2000元。即数据的状态在执行该事务操作之后从一个状态改变到了另外一个状态,并保证数据在业务意义上是正确的;

3、Isolation (隔离性)

隔离性是指当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行,也就是多个事务之间貌似是排队进行的。

4、Durability (持久性)

一旦转账成功(事务提交),两个账户中的金额就会发生真实变化(会把数据写入数据库持久化保存,也就是永久的保存),这就是持久性;

当然在实际应用场景中一个节点属于单点故障,所以需要增加多个副本(replica)一起来保证持久;如果做得更加完善,可以在不同地理位置的另一个数据中心做备份。

ACID它追求的是数据的强一致性模型。 

2.BASE理论支持的是大型分布式系统;

1、基本可用 (Basically Available)

基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性;

2、软状态 (Soft State)

软状态指允许系统中的数据存在中间状态,允许系统在不同节点的数据副本之间进行数据同步的过程存在延时;

3、最终一致性 (Eventually Consistent)

最终一致性强调的是所有的数据副本,在经过一段时间的同步之后,最终都能够达到一致的状态,而不需要实时保证系统数据的强一致;

BASE理论它是通过牺牲强一致性以获得高可用性。

3.CAP理论是支持分布式系统而提出的;

1、C 一致性(Consistency)

分布式系统中,所有节点的数据或状态在任何时刻都是一致的;

2、A 可用性(Availability)

分布式系统中,任何时刻都能够处理请求,都处于可用的状态;

3、P 分区容错性(Tolerance of network Partition)

分布式系统中,在遭遇网络故障时仍能继续正常工作;

分布式系统无法做到CAP,只能做到其中两项,要么CP,要么AP;

总结:

        ACID它追求的是数据的强一致性;

         CAP理论是分布式系统在一致性、可用性、分区容错性三个方面必须要做出的取舍,它针对的是互联互通并共享数据的分布式系统的读和写操作;

        BASE理论是对CAP理论的延伸和补充,它是通过牺牲强一致性以获得高可用性,虽然存在中间状态,但数据最终一致;

        ACID 和 CAP、BASE 代表了两种截然相反的设计哲学;

        在分布式系统设计中,根据不同场景的实际情况,可以把 ACID、CAP(AP、CP)、BASE 结合起来使用;

7.注册中心应该选择CP还是AP? 

CP:

如果选择CP(一致性),当我们向注册中心注册实例或删除实例时,都需要等待注册中心集群中的数据达到一致后才算注册或删除成功,在同步数据时,影响服务发现及服务调用;随着应用规模增大,应用实例频繁注册或删除,必将影响注册中心服务注册与发现的效率; AP:

如果选择AP(可用性),注册中心集群各节点不管数据是否同步一致了都可以提供服务,优先保证服务可用性,比如拉取到了一个已经下线了的服务节点,但是微服务框架一般都提供了服务容错和重试功能,也影响不大,对于注册中心而言不需要消耗时间和资源来实时地保证数据一致性,保证最终一致性即可,这样将减轻注册中心的压力,提升注册中心服务注册与发现的效率; 

8.什么是接口幂等性?哪些场景需要幂等性?如何设计来保证接口幂等性? 

幂等,英文idempotent [aɪ'dɛmpətənt]

幂等这个词源自数学,是数学中的一个概念,常见于抽象代数中,表达的是N次变换与1次变换的结果相同,在计算机的各个领域都借用了该概念;

幂等函数或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数;

简单来说就是如果方法调用一次和多次产生的效果是相同的,不会导致系统数据出错,那么它就具有幂等性; 

幂等性衍生到我们系统中, 它的语义是指函数/接口可以使用相同的参数重复执行, 不应该影响系统状态, 也不会对系统造成改变;

也就是任意多次执行所产生的影响均与一次执行所产生的影响相同;

如果用户对同一操作发起的一次请求或多次请求所产生的影响是一样的,不会因为多次调用(点击)而产生了副作用,那么这就是幂等的;

第一次请求的时候对资源产生了副作用,但是以后的多次请求都不会再对资源产生副作用,这里的副作用是指不会对结果产生破坏或者产生不可预料的结果; 即 幂等性 = 多次执行无副作用;

1、因网络波动,可能会引起重复请求;

2、用户重复操作,用户可能会无意的触发多次下单多次交易,甚至没有响应而有意触发多笔交易;

3、应用使用了失败或超时重试机制(如RPC重试、业务层重试等)

4、第三方平台的接口(如:支付成功回调接口),因为异常导致多次回调;

5、中间件/应用服务根据自身的特性,也有可能进行重试;

6、用户双击提交按钮;

7、用户页面重复刷新;

8、使用浏览器后退按钮重复之前的操作,导致重复提交表单;

9、使用浏览器历史记录重复提交表单;

10、浏览器重复的HTTP请求;

11、定时任务重复执行;

1、使用唯一索引防止幂等性问题

        此方案可以限制重复插入数据,当数据重复时,插入数据库会抛异常,保证不会出现脏数据,这也是一种简单粗暴的办法;

2、Token+Redis的幂等方案

        这种方式分成两个阶段:申请token阶段和业务操作阶段; 以支付为例: 第一阶段,在进入到提交订单页面之前,需要订单系统根据用户信息向支付系统发起一次申请token的请求,支付系统将token保存到Redis缓存中,为第二阶段支付使用; 第二阶段,订单系统拿着申请到的token发起支付请求,支付系统会检查Redis中是否存在该token,如果存在,表示第一次发起支付请求,开始支付逻辑处理,处理完逻辑后删除redis中的token; 当重复请求时候,检查缓存中token不存在,表示非法请求;

3、防重表实现幂等性 需要增加一个表,这个表叫做防重表(防止数据重复的表) 使用唯一主键去做防重表的唯一索引,比如使用订单号orderNo做为防重表的唯一索引,每次请求都根据订单号向去重表中插入一条数据,第一次请求查询订单支付状态,当然订单没有支付,然后进行支付操作,支付前先向防重表中插入该支付的订单号,插入成功说明可以支付,然后进行支付操作,支付操作执行完后更新订单状态为成功或失败或其他状态,然后再删除防重表中的数据,所以在支付的过程中,另一个请求如果也请求支付则因为防重表中唯一索引而插入失败,则返回操作失败,直到第一次的请求操作完成(成功或失败),可以看出防重表作用是加锁的功能;(基于数据库的分布式锁)

9.你在项目中是否遇到分布式事务问题,分布式事务怎么解决? 

常见的分布式解决方案:  

1、2PC;

2、3PC;  

3、TCC;  

4、本地消息异步确认;  

5、可靠消息最终一致性;  

6、最大努力通知;  

7、RocketMQ解决分布式事务;  

8、阿里巴巴的Seata解决分布式事务; 

10.分布式环境下如何进行服务的限流? 

计数器法

        它是限流算法中最简单粗暴,也最容易的一种算法,比如我们要求某一个接口1分钟内的请求不能超过60次,我们可以在开始时设置一个计数器,每次请求,该计数器+1;如果该计数器的值大于60并且与第一次请求的时间间隔在1分钟内,那么说明请求过多,如果该请求与第一次请求的时间间隔大于1分钟,并且该计数器的值还在限流范围内,那么重置该计数器; 

漏桶算法

        维基百科:https://en.wikipedia.org/wiki/Leaky_bucket   漏桶算法的思路,水(请求)先进入到漏桶里,漏桶以恒定的速度流出,当水流入速度过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。

        有一个固定容量的漏桶,按照常量固定速率流出水滴; 如果漏桶是空的,则不需流出水滴; 可以以任意速率流入水滴到漏桶; 如果流入水滴超出了桶的容量,则流入的水滴溢出了(也就是请求被丢弃),而漏桶容量是不变的。

令牌桶算法

        维基百科:https://en.wikipedia.org/wiki/Token_bucket 令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。

Guava框架提供了令牌桶算法实现(Google),可直接拿来使用,使用 Guava框架的RateLimiter类即可创建一个令牌桶限流器,比如设置每秒放置令牌数为5个,那么RateLimiter对象就可以保证1秒内不会放入超过5个令牌,并且以固定速率进行放置令牌,达到平滑输出的效果。

1、Nginx 限流; Nginx中使用ngx_http_limit_req_module模块来限制的访问频率,在nginx.conf配置文件中可以使用limit_req_zone命令及limit_req命令限制请求速率; limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s; limit_req_zone $server_name zone=perserver:10m rate=2r/s;

2、OpenResty 限流;

3、Sentinel 限流;

4、Redis+Lua 限流;

5、Spring Cloud Gateway 限流;

 

相关文章:

Spring Cloud常见面试题

1.请说说你用过Spring Cloud哪些组件?这些组件分别有什么作用? 1、注册中心:Eureka、Nacos、Zookeeper、Consul;(服务注册) 2、负载均衡:Ribbon、LoadBalancer;(客户端的…...

老古董Lisp实用主义入门教程(9): 小小先生学习Lisp表达式

小小先生 小小先生个子很小,胃口也很小,每次只能干一件事情,还是一件很小很小的事情。 好奇先生已经把explore-lisp代码库安装好,小小先生就只需要打开VS Code, 新建一个lisp为后缀的文件,就能够开始写Lisp代码。 c…...

基于YOLOV8+Pyqt5光伏太阳能电池板目标检测系统

基于YOLOV8Pyqt5光伏太阳能电池板目标检测系统 高质量太阳能光伏电池板可见光图像数据集,标签包含鸟粪,清洁,脏污,电气损坏,物理损坏,积雪覆盖六类。用于目标检测,缺陷检测,异物检测…...

【C++ 设计模式】单例模式的两种懒汉式和饿汉式

文章目录 1. 单例模式2. 单例模式简单示例3. 懒汉模式4. 饿汉模式5. 懒汉式和饿汉式的区别 1. 单例模式 🐧定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式是一种常用的软件设计模式,在它的核心结构中只包…...

计算机的错误计算(九十三)

摘要 探讨 log(y,x) 即以 x 为底 y 的对数的计算精度问题。 Log(y,x)运算是指 x 为底 y 的对数。 例1. 计算 log(123667.888, 0.999999999999999) . 不妨在Python中计算,则有: 若在 Excel 单元格中计算,则有几乎同样的输出: 然…...

基于SpringBoot+Vue的牙科就诊管理系统(带1w+文档)

基于SpringBootVue的牙科就诊管理系统(带1w文档) 基于SpringBootVue的牙科就诊管理系统(带1w文档) 伴随着互联网发展,现今信息类型愈来愈多,信息量也非常大,那也是信息时代的缩影。近些年,电子元器件信息科学合理发展的趋势变的越…...

微信小程序使用 ==== 粘性布局

目录 Chrome杀了个回马枪 position:sticky简介 你可能不知道的position:sticky 深入理解粘性定位的计算规则 粘性定位其他特征 代码实现 微信小程序在scroll-view中使用sticky Chrome杀了个回马枪 position:sticky早有耳闻也有所了解,后来,Chro…...

LineageOS刷机教程

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ LineageOS 是一个基于 Android 开源项目(AOSP)的开源操作系统,主要由社区开发者维护。它起源于 CyanogenMod 项目&#xff…...

Unity3D帧同步模式的网络游戏详解

帧同步概述 帧同步(Frame Synchronization)是指在网络游戏中,多个客户端在同一时刻执行相同的游戏逻辑,确保各个客户端的游戏状态保持一致。这种同步方式对于实现公平的多人游戏和减少网络延迟对游戏体验的影响至关重要。Unity3D…...

“树”据结构:并查集从入门到AC

“树”据结构:并查集 前言算法设计代码示例优化相关文章 前言 在一组数据中,数据被分为了不同的集合,那么其中的集合往往可以用树形来表示。而区分集合,与查找集合的元素,就会成为核心的问题。并查集主要就是解决这类…...

高级java每日一道面试题-2024年9月11日-数据库篇-事务回滚的常见原因有哪些?

如果有遗漏,评论区告诉我进行补充 面试官: 事务回滚的常见原因有哪些? 我回答: 在Java高级面试中,讨论事务回滚的常见原因是考察候选人对事务管理的理解深度。事务回滚意味着事务中的所有操作都会被撤销,回到事务开始前的状态。以下是事务…...

目标检测中的解耦和耦合、anchor-free和anchor-base

解耦和耦合 写在前面 在目标检测中,objectness(或 objectness score)指的是一个评分,用来表示某个预测框(bounding box)中是否包含一个目标物体。 具体来说,YOLO等目标检测算法需要在每个候选区…...

git rev-parse

git rev-parse 是 Git 中一个非常有用的命令,用于解析并返回与 Git 对象(如提交、分支、标签等)相关的信息。它可以帮助我们从给定的引用(ref)中解析出 SHA-1 哈希值、路径信息等。这个命令在编写 Git 脚本时尤其有用&…...

【Unity】在Unity 3D中使用Spine开发2D动画

文章目录 内容概括前言下载安装 Spine Pro导入Unity插件Spine动画导入Unity使用展现动画效果展现 内容概括 本文主要讲解 Spine Pro 免(破)费(解)版的安装,以及如何将动画导入到Unity中使用。 前言 通常要用 Spine …...

考试:软件工程(01)

软件开发生命周期 ◆软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标, 具体可分成问题定义、可行性研究、需求分析等。 ◆软件开发时期:就是软件的设计与实现,可分成概要设计…...

数据结构应用实例(三)——赫夫曼编码

Content: 一、问题描述二、算法思想三、代码实现四、小结 一、问题描述 对一篇英文文章,统计各字符(仅限于26个小写字母)出现的次数,并据此进行 Huffman 编码。 二、算法思想 首先,打开文本文件&#xff0…...

关于Spring Cloud Gateway中 Filters的理解

Spring Cloud Gateway中 Filters的理解 Filters Filters拦截器的作用是,对请求进行处理 可以进行流量染色 ⭐增加请求头 例子 spring:cloud:gateway:routes:- id: add_request_header_routeuri: http://localhost:8123predicates:- Path/api/**filters:- AddR…...

【实践】应用访问Redis突然超时怎么处理?

目录标题 问题描述分析过程查看监控数据系统监控指标JVM监控指标Redis监控指标分析应用异常单机异常规律集群异常规律统计超时的key 初步结论验证结论访问Redis链路slowlogRedis单节点info all定位redis节点定位异常keybigkeystcpdump定位大key影响 经验总结 问题描述 某产品线…...

Spring Cloud Alibaba核心组件Nacos/Seata/Sentinel

文章目录 Spring Cloud Alibaba介绍Spring Cloud 微服务体系Spring Cloud Alibaba 定位 注册配置中心--Nacos服务治理架构注册中心原理 Nacos介绍Nacos 的关键特性1.服务注册和发现2.动态配置服务3.实时健康监控4.动态DNS服务5.易于集成: Nacos入门示例服务注册与发…...

Ubuntu搭建FTP服务器

1. 首先,我们需要安装和配置xinetd,安装的具体命令如下: sudo apt-get install xinetd 2. 新建tftp工作目录,并添加读、写、执行权限(没有权限后面无法正常访问该文件夹),如下图所示。 3. 安装…...

Redis在单线程下删除大Key会发生什么?怎么删除大Key?

大Key的定义 大Key是指在缓存系统(如Redis)或分布式存储中,单个键(Key)对应的数据量非常大,通常存储的是大块数据结构,例如包含大量数据的哈希表、列表、集合或有序集合。这种大Key往往会对系统…...

《Exploit temporal cues in multi-camera 3D object detection》论文泛读

ReadPaperhttps://readpaper.com/pdf-annotate/note?pdfId4666749915775385601eId2491528568128599808 针对单帧数据含有的信息太少的问题,提出了一种新的方法,BEVDet4D,这种方法可以访问时间线索,并且取得了较好的表现&#xff…...

十四、centos7 yum报错:cannot find a valid baseurl for repo:base/7/x86_64的解决方案

🌻🌻目录🌻🌻 一、 centos7 yum报错:cannot find a valid baseurl for repo:base/7/x86_64二、分析错误三、解决方案3.1 检查网络连接3.2 检查DNS设置3.3 检查YUM仓库配置3.3.1 使用官方CentOS镜像配置3.3.2 使用阿里云…...

qt使用对数坐标的例子,qchart用QLogValueAxis坐标不出图解决

硬件:ThinkPad T15 系统:win10 专业版 qt版本:Qt 5.14.1 , QtCreator 4.11.1 软件界面放了一个QPushButton,一个QVBoxLayout,如下: 主要代码如下,我添加了两条曲线,…...

Python 爬虫入门 - 爬虫 requests 请求

在当今互联网时代,数据的获取变得尤为重要,而网络爬虫作为自动化获取数据的一种方式,受到了越来越多编程爱好者和数据分析人员的青睐。Python 语言以其简洁的语法和丰富的库,成为了实现网络爬虫的首选工具。其中,requests库是一个非常流行且强大的工具,用于发送 HTTP 请求…...

flink中startNewChain() 的详解

在 Apache Flink 中,startNewChain() 是一个与算子链(operator chaining)相关的方法。与 disableChaining() 类似,它允许开发者控制算子链的创建方式,但 startNewChain() 的作用是从当前算子开始创建一个新的算子链&am…...

uniapp 苹果安全域适配

一、使用原生占位(仅App端支持) //在manifest.json 文件中 app-plus 中配置 "safearea": { "background": "#FFFFFF", "bottom": { "offset": "auto" } } 二、不使用原生占位 //&…...

linux使用命令行编译qt.cpp

步骤&#xff1a; mkdir qttestcd qttestvim hello.cpp #include <QApplication> #include <QDialog> #include <QLabel> int main(int argc,char* argv[]) {QApplication a(argc,argv);QLabel label("aaa");label.resize(100,100);label.show()…...

Ubuntu 22.04 LTS 上安装 Docker

单台机器安装docker环境&#xff0c;是为了后面安装open-webui&#xff0c;环境安装比较简单&#xff0c;没有难点&#xff0c;但一定要按步骤走&#xff0c;否则还是会遇到一些问题的。 第 1 步&#xff1a;更新软件包并安装必要软件 运行以下命令&#xff0c;更新软件包索引…...

2024秋季云曦开学考

web ezezssrf 打开环境&#xff0c;代码审计 看起来有点多&#xff0c;要绕过五层 第一层&#xff1a;存在弱比较&#xff0c;使用数组或0e绕过 yunxi[]1&wlgf[]2 yunxis878926199a&wlgfs155964671a 第二层&#xff1a;存在强比较&#xff0c;此处使用string限制…...