【Java 面试 八股文】Spring Cloud 篇

news2025/2/22 10:53:55

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. 如果有大数据量的任务同时都需要执行,怎么解决?

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

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

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

相关文章

Esxi8.0设置nvidia显卡直通安装最新驱动

ESXI8.0设置显卡直通 在某些情况下,我们需要多次切换操作系统,以测试软件是否适用于特定系统和环境,减少多次重装系统的麻烦 ESXI8.0安装包 通过网盘分享的文件:ESXi-8.0U2-22380479-USB-NVME-集成网卡镜像.iso 链接: https://…

LabVIEW袜品压力测试系统

开发了一种基于LabVIEW开发的袜品压力测试系统。该系统利用LabVIEW并结合灵敏的传感器和高精度的处理模块,实现了对袜品压力的精确测量和分析。系统不同于传统的服装压力测试方法,为研究和评价袜子的舒适性提供了新的测试手段。 ​ 项目背景 该系统的…

TestHubo基础教程-创建项目

TestHubo是一款国产开源一站式测试工具,涵盖功能测试、接口测试、性能测试,以及 Web 和 App 测试,可以满足不同类型项目的测试需求。本文将介绍如何快速创建第一个项目,以快速入门上手。 1、创建项目 在 TestHubo 中,…

深度求索—DeepSeek API的简单调用(Java)

DeepSeek简介 DeepSeek(深度求索)是由中国人工智能公司深度求索(DeepSeek Inc.)研发的大规模语言模型(LLM),专注于提供高效、智能的自然语言处理能力,支持多种场景下的文本生成、对…

企业使用统一终端管理(UEM)工具提高端点安全性

什么是统一终端管理(UEM) 统一终端管理(UEM)是一种从单个控制台管理和保护企业中所有端点的方法,包括智能手机、平板电脑、笔记本电脑、台式机和 IoT设备。UEM 解决方案为 IT 管理员提供了一个集中式平台,用于跨所有作系统和设备类型部署、配置、管理和…

爱彼(Audemars Piguet):瑞士制表艺术的巅峰之作(中英双语)

爱彼(Audemars Piguet):瑞士制表艺术的巅峰之作 在瑞士高级制表界,Audemars Piguet(爱彼) 以其大胆创新、卓越工艺和独立家族经营的传统,成为世界顶级腕表品牌之一。作为瑞士“三大制表品牌”之…

1134. 国王的魔镜

题目 AC代码 #include<bits/stdc.h> using namespace std; bool hw(char s[]) {bool rtrue;int i;for(i0;i<strlen(s)/2;i){if(s[i]!s[strlen(s)-i-1]){rfalse;break;}}return r; } int main() {char s[1005];gets(s);while(hw(s)true&&strlen(s)%20){s[strl…

浅说树形dp

文章目录 前言树形dp的转移方式树形dp的使用的场景小结 初步感知——简单的树形dp例题1例题2 深入分析——树形dp的经典模型最大独立集最小点覆盖最小支配集树上直径 前言 因为树的形式非常适合递归&#xff0c;他所带来的访问顺序也是非常符合拓扑排序的&#xff0c;故而在处…

使用Charles进行mock请求

在 Charles 中&#xff0c;“Compose”&#xff08;构建请求&#xff09;功能允许你手动创建和发送 HTTP 或 HTTPS 请求&#xff0c;方便进行 API 测试、调试等操作。以下是 Compose 功能的详细使用方式&#xff1a; 1. 打开 Compose 界面 启动 Charles 后&#xff0c;在菜单…

RAMinit 程序编译运行考古记录

本科的时候浅浅研究了DOSBox&#xff0c;今天看到网上挺多关于雷军代码的新闻&#xff0c;我把雷军代码在web上编译出来了&#xff0c;但是我是业余选手&#xff0c;所以做得比较差&#xff0c;不过大家感兴趣可以关注我的dosplay项目&#xff0c;旨在利用js-dos实现汇编语言在…

【Pico】使用Pico进行无线串流搜索不到电脑

使用Pico进行无线串流搜索不到电脑 官串方式&#xff1a;使用Pico互联连接电脑。 故障排查 以下来自官方文档 请按照以下步骡排除故障&#xff1a; 确认电脑和一体机连接了相同的路由器WiFi网络(相同网段) IP地址通常为192.168.XX&#xff0c;若两设备的IP地址前三段相同&…

Golang Model 字段自动化校验设计

背景 在我们日常开发中&#xff0c;不可避免的总要去进行各种参数校验&#xff0c;但是如果在某个场景中&#xff0c;要校验的字段非常多&#xff0c;并且在其中还有耦合关系&#xff0c;那么我们手写校验逻辑就变得非常的低效且难以维护。本篇文档就基于 DDD 领域模型设计的思…

移动端测试的挑战与解决方案:兼容性、网络问题及实战策略

引言 移动应用已成为用户触达服务的核心入口,但移动端测试面临设备多样性、网络波动、用户场景复杂等多重挑战。据Statista统计,2023年全球活跃移动设备超180亿台,操作系统(Android/iOS)版本碎片化率超30%,这对测试工程师提出了极高要求。本文深度解析移动端测试的核心痛…

Spring安装和使用(Eclipse环境)

一、Spring框架概述 1、 什么是Spring Spring是一个开源框架&#xff0c;Spring是于2003 年兴起的一个轻量级的Java 开发框架&#xff0c;由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复…

图论- Dijkstra算法

Dijkstra算法 前言概念BFS基础模版DijkstraDijkstra函数签名State类distTo 记录最短路径伪代码模版第一个问题解答第二个问题解答第三个问题解答 前言 学习这个算法之间,必须要对BFS遍历比较熟悉,它的本质就是一个特殊改造过的BFS算法. 概念 Dijkstra算法是一种计算图中单源…

CAS单点登录(第7版)9.属性

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 属性 属性定义 概述 属性定义 从身份验证或属性存储库源获取和解析 CAS 中属性的定义时&#xff0c;往往使用其名称进行定义和引用&#xff0c;而无需任何其他元数据或修饰。例如&#…

【电路笔记】-双向计数器

双向计数器 文章目录 双向计数器1、概述2、双向计数器双向计数器能够通过任何给定的计数序列向上或向下方向计数。 1、概述 双向计数器是同步向上/向下二进制计数器,能够在两个方向上向或从某个预设值以及零进行计数。 除了从零开始“向上”计数并增加或递增到某个预设值之外…

Python PyCharm DeepSeek接入

Python PyCharm DeepSeek接入 创建API key 首先进入DeepSeek官网&#xff0c;https://www.deepseek.com/ 点击左侧“API Keys”&#xff0c;创建API key&#xff0c;输出名称为“AI” 点击“创建"&#xff0c;将API key保存&#xff0c;复制在其它地方。 在PyCharm中下…

从ARM官方获取自己想要的gcc交叉编译工具链接(Arm GNU Toolchain),并在Ubuntu系统中进行配置

前言 本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145547974 的分支博文。 在本博文中我们完成gcc交叉编译工具gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz的下载、配置、测试。 下载自己想要的gcc交叉编译工具的源码 目标文件的名字及说…

【系统架构设计师】虚拟机体系结构风格

目录 1. 说明2. 解释器体系结构风格3. 规则系统体系结构风格4. 例题4.1 例题1 1. 说明 1.p263。2.虚拟机体系结构风格的基本思想是人为构建一个运行环境&#xff0c;在这个环境之上&#xff0c;可以解析与运行自定义的一些语言&#xff0c;这样来增加架构的灵活性。3.虚拟机体…