【Java 面试 八股文】Spring Cloud 篇

Spring Cloud 篇

    • 1. Spring Cloud 5大组件有哪些?
    • 2. 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?
    • 3. 我看你之前也用过nacos,你能说下nacos与eureka的区别?
    • 4. 你们项目负载均衡如何实现的?
    • 5. Ribbon负载均衡策略有哪些 ?
    • 6. 如果想自定义负载均衡策略如何实现?
    • 7. 什么是服务雪崩,怎么解决这个问题?
    • 8. 你们的微服务是怎么监控的?
    • 9. 你们项目中有没有做过限流?怎么做的?
    • 10. 限流常见的算法有哪些?
    • 11. 什么是CAP理论?
    • 12. 为什么分布式系统中无法同时保证一致性和可用性?
    • 13. 什么是BASE理论?
    • 14. 你们采用哪种分布式事务解决方案?
    • 15. 分布式服务的接口幂等性如何设计?
    • 16. xxl-job路由策略有哪些?
    • 17. xxl-job任务执行失败怎么解决?
    • 18. 如果有大数据量的任务同时都需要执行,怎么解决?

1. Spring Cloud 5大组件有哪些?

候选人:
在早期,Spring Cloud的五大组件通常指的是:

  • Eureka:服务注册中心。
  • Ribbon:客户端负载均衡器。
  • Feign:声明式的服务调用。
  • Hystrix:服务熔断器。
  • Zuul/Gateway:API网关。

随着Spring Cloud Alibaba的兴起,我们项目中也融入了一些阿里巴巴的技术组件:

  • 服务注册与配置中心:Nacos。
  • 负载均衡:Ribbon。
  • 服务调用:Feign。
  • 服务保护:Sentinel。
  • API网关:Gateway。

2. 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?

候选人:
服务注册与发现主要包含三个核心功能:服务注册服务发现服务状态监控
我们项目中采用了Eureka作为服务注册中心,它是Spring Cloud体系中的一个关键组件。

  • 服务注册:服务提供者将自己的信息(如服务名称、IP、端口等)注册到Eureka。
  • 服务发现:消费者从Eureka获取服务列表信息,并利用负载均衡算法选择一个服务进行调用。
  • 服务监控:服务提供者定期向Eureka发送心跳以报告健康状态;如果Eureka在一定时间内未接收到心跳,将服务实例从注册中心剔除。

3. 我看你之前也用过nacos,你能说下nacos与eureka的区别?

候选人:
在使用Nacos作为注册中心的项目中,我注意到Nacos与Eureka的共同点和区别:

  • 共同点:两者都支持服务注册与发现,以及心跳检测作为健康检查机制。
  • 区别:
    1. Nacos支持服务端主动检测服务提供者状态,而Eureka依赖客户端心跳。
    2. Nacos区分临时实例和非临时实例,采用不同的健康检查策略。
    3. Nacos支持服务列表变更的消息推送,使服务更新更及时。
    4. Nacos集群默认采用AP模式,但在存在非临时实例时,会采用CP模式;而Eureka始终采用AP模式。

4. 你们项目负载均衡如何实现的?

候选人:
在服务调用过程中,我们使用Spring Cloud的Ribbon组件来实现客户端负载均衡。Feign客户端在底层已经集成了Ribbon,使得使用非常简便。

当发起远程调用时,Ribbon首先从注册中心获取服务地址列表,然后根据预设的路由策略选择一个服务实例进行调用,常用的策略是轮询。

5. Ribbon负载均衡策略有哪些 ?

候选人:
Ribbon提供了多种负载均衡策略,包括:

  • RoundRobinRule:简单的轮询策略。
  • WeightedResponseTimeRule:根据响应时间加权选择服务器。
  • RandomRule:随机选择服务器。
  • ZoneAvoidanceRule:区域感知的负载均衡,优先选择同一区域中可用的服务器。

6. 如果想自定义负载均衡策略如何实现?

候选人:
自定义Ribbon负载均衡策略有两种方式:

  1. 创建一个类实现IRule接口,这将定义全局的负载均衡策略。
  2. 在客户端配置文件中指定特定服务调用的负载均衡策略,这将仅对该服务生效。

7. 什么是服务雪崩,怎么解决这个问题?

候选人:
服务雪崩是指一个服务的失败导致整个链路的服务相继失败。我们通常通过服务降级和服务熔断来解决这个问题:

  • 服务降级:在请求量突增时,主动降低服务的级别,确保核心服务可用。
  • 服务熔断:当服务调用失败率达到一定阈值时,熔断机制会启动,防止系统过载。

8. 你们的微服务是怎么监控的?

候选人:
我们项目中采用了SkyWalking进行微服务监控:

  1. SkyWalking能够监控接口、服务和物理实例的状态,帮助我们识别和优化慢服务。
  2. 我们还设置了告警规则,一旦检测到异常,系统会通过短信或邮件通知相关负责人。

9. 你们项目中有没有做过限流?怎么做的?

候选人:
在我们的项目中,由于面临可能的突发流量,我们采用了限流策略:

  • 版本1:使用Nginx进行限流,通过漏桶算法控制请求处理速率,按照IP进行限流。
  • 版本2:使用Spring Cloud Gateway的RequestRateLimiter过滤器进行限流,采用令牌桶算法,可以基于IP或路径进行限流。

10. 限流常见的算法有哪些?

候选人:
常见的限流算法包括:

  • 漏桶算法:以固定速率处理请求,平滑突发流量。
  • 令牌桶算法:按照一定速率生成令牌,请求在获得令牌后才被处理,适用于请求量有波动的场景。

11. 什么是CAP理论?

候选人:
CAP理论是分布式系统设计的基础理论,包含一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)。在网络分区发生时,系统只能在一致性和可用性之间选择其一。

12. 为什么分布式系统中无法同时保证一致性和可用性?

候选人:
在分布式系统中,为了保证分区容错性,我们通常需要在一致性和可用性之间做出选择。如果系统优先保证一致性,可能需要牺牲可用性,反之亦然。

13. 什么是BASE理论?

候选人:
BASE理论是分布式系统设计中对CAP理论中AP方案的延伸,强调通过基本可用、软状态和最终一致性来实现系统设计。

14. 你们采用哪种分布式事务解决方案?

候选人:
我们项目中使用了Seata的AT模式来解决分布式事务问题。AT模式通过记录业务数据的变更日志来保证事务的最终一致性。
在这里插入图片描述

15. 分布式服务的接口幂等性如何设计?

候选人:
幂等: 多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致
我们通过Token和Redis来实现接口幂等性。用户操作时,系统生成一个Token并存储在Redis中,当用户提交操作时,系统会验证Token的存在性,并在验证通过后删除Token,确保每个Token只被处理一次。

16. xxl-job路由策略有哪些?

候选人:
xxl-job支持多种路由策略,包括轮询、故障转移和分片广播等。

17. xxl-job任务执行失败怎么解决?

候选人:
面对任务执行失败,我们可以:

  1. 选择故障转移路由策略,优先使用健康的实例执行任务。
  2. 设置任务重试次数。
  3. 通过日志记录和邮件告警通知相关负责人。

18. 如果有大数据量的任务同时都需要执行,怎么解决?

候选人:
我们可以通过部署多个实例并使用分片广播路由策略来分散任务负载。在任务执行代码中,根据分片信息和总数对任务进行分配。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【动态路由】系统Web URL资源整合系列(后端技术实现)【nodejs实现】

需求说明 软件功能需求:反向代理功能(描述:apollo、eureka控、apisix、sentinel、普米、kibana、timetask、grafana、hbase、skywalking-ui、pinpoint、cmak界面、kafka-map、nacos、gateway、elasticsearch、 oa-portal 业务应用等多个web资…

凸包算法—— cad c#二次开发

效果如下&#xff1a; 代码如下&#xff1a; using IfoxDemo; //[assembly: CommandClass(typeof(IFoxDemo.凸包class))]//只允许此类快捷键命令 namespace IFoxDemo {public class 凸包class{public static class 凸包助手{/// <summary>/// 计算点集的凸包并返回多段线…

【设计模式】【行为型模式】解释器模式(Interpreter)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…

进阶数据结构——离散化

目录 一、离散化的核心思想与本质二、离散化的应用场景三、离散化的实现步骤四、离散化的复杂度分析五、离散化的优化技巧六、常见误区与调试技巧七、代码模版&#xff08;c&#xff09;八、经典例题数列离散化寻找满足高度的最大山峦美丽值 九、总结与学习建议 一、离散化的核…

VNC远程控制Mac

前言 macOS系统自带有VNC远程桌面&#xff0c;我们可以在控制端上安装配置VNC客户端&#xff0c;以此来实现远程控制macOS。但通常需要在不同网络下进行远程控制&#xff0c;为此&#xff0c;我们可以在macOS被控端上使用cpolar做内网穿透&#xff0c;映射VNC默认端口5…

[0689].第04节:Kafka与第三方的集成 – Kafka集成SpringBoot

Kafka笔记大纲 SpringBoot 是一个在 JavaEE 开发中非常常用的组件。可以用于 Kafka 的生产者&#xff0c;也可以用于 SpringBoot 的消费者 一、SpringBoot 环境准备 1.1.创建一个 Spring Initializr 1.2.引入场景启动器&#xff1a; <?xml version"1.0" encod…

「软件设计模式」装饰者模式(Decorator)

深入解析装饰者模式&#xff1a;动态扩展功能的艺术&#xff08;C实现&#xff09; 一、模式思想与应用场景 1.1 模式定义 装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过将对象放入包含行为的特殊封装对象中&#xff0c;动态地…

简单几个步骤完成 Oracle 到金仓数据库(KingbaseES)的迁移目标

作为国产数据库的领军选手&#xff0c;金仓数据库&#xff08;KingbaseES&#xff09;凭借其成熟的技术架构和广泛的市场覆盖&#xff0c;在国内众多领域中扮演着至关重要的角色。无论是国家电网、金融行业&#xff0c;还是铁路、医疗等关键领域&#xff0c;金仓数据库都以其卓…

【Jenkins流水线搭建】

Jenkins流水线搭建 01、SpringBoot项目 - Jenkins基于Jar持续集成搭建文档基于手动方式发布项目基于dockerfile基于jenkins + dockerfile + jenkinsfile +pieline基于jenkins + jar方式的发布01、环境说明01、准备项目02、准备服务器03、安装git04、安装jdk1.805、安装maven依赖…

简单记录一下自己对springboot过程的理解

仅为个人简单理解&#xff0c;欢迎大家来一起讨论。 执行启动类main函数&#xff1b;读取依赖和配置文件&#xff1b;创建spring容器&#xff0c;并自动注入Bean&#xff1b;启动Tomcat。

使用 GPT-SoVITS 克隆声音,很详细

使用 GPT-SoVITS 克隆声音&#xff0c;很详细 一、前言二、下载三、启动四、克隆声音1、准备克隆音频2、分离人声伴奏3、音频分割4、语音降噪5、ASR工具6、语音文本校对标注工具7、训练模型8、微调训练9、推理 一、前言 最近对文本转语言很感兴趣&#xff0c;但对直接在网站上…

金融风控项目-业务基础

文章目录 一. 案例背景介绍二. 代码实现1. 加载数据2. 数据处理3. 查询 三. 业务解读 一. 案例背景介绍 通过对业务数据分析了解信贷业务状况 数据集说明 从开源数据改造而来&#xff0c;基本反映真实业务数据销售&#xff0c;客服可以忽略账单周期&#xff0c;放款日期账单金…

Django 创建表时 “__str__ ”方法的使用

在 Django 模型中&#xff0c;__str__ 方法是一个 Python 特殊方法&#xff08;也称为“魔术方法”&#xff09;&#xff0c;用于定义对象的字符串表示形式。它的作用是控制当对象被转换为字符串时&#xff0c;应该返回什么样的内容。 示例&#xff1a; 我在初学ModelForm时尝…

Spring Boot中如何自定义Starter

文章目录 Spring Boot中如何自定义Starter概念和作用1. 概念介绍2. 作用和优势2.1 简化依赖管理2.2 提供开箱即用的自动配置2.3 标准化和模块化开发2.4 提高开发效率2.5 提供灵活的配置覆盖3. 应用场景创建核心依赖1. 确定核心依赖的作用2. 创建 starter-core 模块2.1 依赖管理…

Python 面向对象的三大特征

前言&#xff1a;本篇讲解面向对象的三大特征&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff0c;还有比较细致的&#xff08;类属性类方法&#xff0c;静态方法&#xff09;&#xff0c;分步骤讲解&#xff0c;比较适合理清楚三大特征的思路 面向对象的…

Windows 11 安装 Docker

1.以管理员身份打开 Windows PowerShell 2.执行下面三行命令来启动WSL和虚拟机平台 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norest…

CRMEB PHP多门店版v3.1.1源码全开源+PC端+Uniapp前端+搭建教程

一.介绍 CRMEB多店版是一款为品牌连锁门店打造的私域电商解决方案&#xff0c;以三大运营模式为核心&#xff0c;助力品牌连锁门店轻松构建全渠道、一体化的私域电商生态&#xff0c;促进“线上电商”与“线下门店”销售运营融合&#xff0c;加速品牌数字化转型&#xff0c;为…

Notepad++ 中删除所有以 “pdf“ 结尾的行

Notepad 中删除所有以 “pdf” 结尾的行 操作步骤 1.打开文件&#xff1a; 在 Notepad 中打开你需要处理的文本文件。 2.打开查找和替换对话框&#xff1a; 按快捷键 Ctrl F&#xff0c;打开“查找和替换”对话框。 3.启用正则表达式模式&#xff1a; 在对话框的底部&#xf…

基于SSM+uniapp的鲜花销售小程序+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、商户功能模块&#xff1a;用户管理、商户管理、鲜花分类管理、鲜花管理、订单管理、收藏管理、购物车、充值、下单等技术选型&#xff1a;SSM&#xff0c;Vue&#xff08;后端管理web&#xff09;&#xff0c;uniapp等测试环境&#x…

项目版本号生成

需求 项目想要生成一个更新版本号&#xff0c;格式为v2.0.20250101。 其中v2.0为版本号&#xff0c;更新时进行配置&#xff1b;20250101为更新日期&#xff0c;版本更新时自动生成。 实现思路 创建一个配置文件version.properties&#xff0c;在其中配置版本号&#xff1b…