【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的共同点和区别:
- 共同点:两者都支持服务注册与发现,以及心跳检测作为健康检查机制。
- 区别:
- Nacos支持服务端主动检测服务提供者状态,而Eureka依赖客户端心跳。
- Nacos区分临时实例和非临时实例,采用不同的健康检查策略。
- Nacos支持服务列表变更的消息推送,使服务更新更及时。
- Nacos集群默认采用AP模式,但在存在非临时实例时,会采用CP模式;而Eureka始终采用AP模式。
4. 你们项目负载均衡如何实现的?
候选人:
在服务调用过程中,我们使用Spring Cloud的Ribbon组件来实现客户端负载均衡。Feign客户端在底层已经集成了Ribbon,使得使用非常简便。
当发起远程调用时,Ribbon首先从注册中心获取服务地址列表,然后根据预设的路由策略选择一个服务实例进行调用,常用的策略是轮询。
5. Ribbon负载均衡策略有哪些 ?
候选人:
Ribbon提供了多种负载均衡策略,包括:
- RoundRobinRule:简单的轮询策略。
- WeightedResponseTimeRule:根据响应时间加权选择服务器。
- RandomRule:随机选择服务器。
- ZoneAvoidanceRule:区域感知的负载均衡,优先选择同一区域中可用的服务器。
6. 如果想自定义负载均衡策略如何实现?
候选人:
自定义Ribbon负载均衡策略有两种方式:
- 创建一个类实现IRule接口,这将定义全局的负载均衡策略。
- 在客户端配置文件中指定特定服务调用的负载均衡策略,这将仅对该服务生效。
7. 什么是服务雪崩,怎么解决这个问题?
候选人:
服务雪崩是指一个服务的失败导致整个链路的服务相继失败。我们通常通过服务降级和服务熔断来解决这个问题:
- 服务降级:在请求量突增时,主动降低服务的级别,确保核心服务可用。
- 服务熔断:当服务调用失败率达到一定阈值时,熔断机制会启动,防止系统过载。
8. 你们的微服务是怎么监控的?
候选人:
我们项目中采用了SkyWalking进行微服务监控:
- SkyWalking能够监控接口、服务和物理实例的状态,帮助我们识别和优化慢服务。
- 我们还设置了告警规则,一旦检测到异常,系统会通过短信或邮件通知相关负责人。
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任务执行失败怎么解决?
候选人:
面对任务执行失败,我们可以:
- 选择故障转移路由策略,优先使用健康的实例执行任务。
- 设置任务重试次数。
- 通过日志记录和邮件告警通知相关负责人。
18. 如果有大数据量的任务同时都需要执行,怎么解决?
候选人:
我们可以通过部署多个实例并使用分片广播路由策略来分散任务负载。在任务执行代码中,根据分片信息和总数对任务进行分配。
相关文章:
【Java 面试 八股文】Spring Cloud 篇
Spring Cloud 篇 1. Spring Cloud 5大组件有哪些?2. 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?3. 我看你之前也用过nacos,你能说下nacos与eureka的区别?4. 你们项目负载均衡如何实现的?…...
Esxi8.0设置nvidia显卡直通安装最新驱动
ESXI8.0设置显卡直通 在某些情况下,我们需要多次切换操作系统,以测试软件是否适用于特定系统和环境,减少多次重装系统的麻烦 ESXI8.0安装包 通过网盘分享的文件:ESXi-8.0U2-22380479-USB-NVME-集成网卡镜像.iso 链接: https://…...
LabVIEW袜品压力测试系统
开发了一种基于LabVIEW开发的袜品压力测试系统。该系统利用LabVIEW并结合灵敏的传感器和高精度的处理模块,实现了对袜品压力的精确测量和分析。系统不同于传统的服装压力测试方法,为研究和评价袜子的舒适性提供了新的测试手段。 项目背景 该系统的…...
TestHubo基础教程-创建项目
TestHubo是一款国产开源一站式测试工具,涵盖功能测试、接口测试、性能测试,以及 Web 和 App 测试,可以满足不同类型项目的测试需求。本文将介绍如何快速创建第一个项目,以快速入门上手。 1、创建项目 在 TestHubo 中,…...
3.3 企业级AI Agent工程实践:从API设计到高可用架构的全栈开发指南
企业级AI Agent工程实践:从API设计到高可用架构的全栈开发指南 引言:AI Agent开发中的工程化挑战 据2024年DevOps状态报告,AI Agent项目的失败案例中**61%**源于工程实现缺陷。本文将基于GitHub Sentinel的实战案例,揭示如何构建支持百万级请求的工业级Agent系统,涵盖AP…...
解锁二进制数组:JS、TS、ArkTS 解析
二进制数组基础入门 在编程的世界里,二进制数组就像是一把隐藏的钥匙,虽然不常被提及,但却在许多关键领域发挥着至关重要的作用。从计算机的底层硬件到前端的高性能计算,二进制数组都有着广泛的应用。 在计算机科学中࿰…...
C# windowForms 的DataGridView控件的使用
C# Windows Forms DataGridView 控件使用详解 DataGridView 是 Windows Forms 中用于显示和编辑表格数据的核心控件。它支持高度自定义的列类型、数据绑定、事件处理和丰富的样式配置。以下是其详细使用方法。 目录 基础使用 数据绑定 列类型与自定义...
深度求索—DeepSeek API的简单调用(Java)
DeepSeek简介 DeepSeek(深度求索)是由中国人工智能公司深度求索(DeepSeek Inc.)研发的大规模语言模型(LLM),专注于提供高效、智能的自然语言处理能力,支持多种场景下的文本生成、对…...
企业使用统一终端管理(UEM)工具提高端点安全性
什么是统一终端管理(UEM) 统一终端管理(UEM)是一种从单个控制台管理和保护企业中所有端点的方法,包括智能手机、平板电脑、笔记本电脑、台式机和 IoT设备。UEM 解决方案为 IT 管理员提供了一个集中式平台,用于跨所有作系统和设备类型部署、配置、管理和…...
Vue.js 响应式原理与数据绑定
在 Vue.js 中,响应式系统是其核心特性之一,它使得数据的变化能够自动更新到 DOM 上,实现了数据和视图的双向绑定。下面详细介绍 Vue.js 响应式系统的原理以及它是如何实现数据绑定的。 原理概述 Vue.js 的响应式系统主要基于 JavaScript 的…...
爱彼(Audemars Piguet):瑞士制表艺术的巅峰之作(中英双语)
爱彼(Audemars Piguet):瑞士制表艺术的巅峰之作 在瑞士高级制表界,Audemars Piguet(爱彼) 以其大胆创新、卓越工艺和独立家族经营的传统,成为世界顶级腕表品牌之一。作为瑞士“三大制表品牌”之…...
深入理解Elasticsearch集群与分片:原理及配置方案
一、Elasticsearch集群是什么 想象一下,你有海量的数据,比如一个超大型图书馆的所有书籍信息,要是把这些数据都放在一台电脑里,不仅存不下,而且查询起来会超级慢。Elasticsearch集群就像是一个分布式的数据图书馆系统…...
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…...
【20250215】二叉树:144.二叉树的前序遍历
# 前序遍历-递归-LC144_二叉树的前序遍历 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right # class Solution: # def pre…...
浅说树形dp
文章目录 前言树形dp的转移方式树形dp的使用的场景小结 初步感知——简单的树形dp例题1例题2 深入分析——树形dp的经典模型最大独立集最小点覆盖最小支配集树上直径 前言 因为树的形式非常适合递归,他所带来的访问顺序也是非常符合拓扑排序的,故而在处…...
DeepSeek R1本地部署 DeepSeek Api接口调用 DeepSeek RAG知识库工作流详解
DeepSeek R1本地部署 DeepSeek Api接口调用 DeepSeek RAG知识库工作流详解全集: 第一部分:Windows本地部署DeepSeek R1 第二部分:Macos本地部署DeepSeek R1 第三部分:Linux本地部署DeepSeek R1 第四部分:DeepSeek …...
使用Charles进行mock请求
在 Charles 中,“Compose”(构建请求)功能允许你手动创建和发送 HTTP 或 HTTPS 请求,方便进行 API 测试、调试等操作。以下是 Compose 功能的详细使用方式: 1. 打开 Compose 界面 启动 Charles 后,在菜单…...
linu软件编程——IO
函数接口 fputc: man 3 fputc 原型:int fputc(int c, FILE *stream); 功能: 向stream流中写入 字符c 参数:c:要写入的字符的ASCII码值 stream:文件流指针 返回值:成功返回写入字符的ASCII码值 失败返回-1 fputc(ch, stdout) put…...
RAMinit 程序编译运行考古记录
本科的时候浅浅研究了DOSBox,今天看到网上挺多关于雷军代码的新闻,我把雷军代码在web上编译出来了,但是我是业余选手,所以做得比较差,不过大家感兴趣可以关注我的dosplay项目,旨在利用js-dos实现汇编语言在…...
2.【线性代数】——矩阵消元
二 矩阵消元 1. 消元法2. 单行或者单列的矩阵乘法2.1 单行矩阵乘法2.2 单列矩阵乘法 3. 用矩阵记录消元过程(初等矩阵) 【行的线性组合(数乘和加法)】3.1 row2-3row1的矩阵描述3.2 row3-2row2的矩阵描述3.3 矩阵乘法的性质 4. 用矩…...
Vue 3 30天精进之旅:Day 25 - PWA支持
一、引言 在前面的24天中,我们已经深入探讨了Vue 3的许多核心概念和高级特性。今天,我们将进入一个全新的领域——PWA(Progressive Web App)。PWA是一种现代Web应用程序的开发模式,它结合了Web和原生应用的优点&#…...
【Pico】使用Pico进行无线串流搜索不到电脑
使用Pico进行无线串流搜索不到电脑 官串方式:使用Pico互联连接电脑。 故障排查 以下来自官方文档 请按照以下步骡排除故障: 确认电脑和一体机连接了相同的路由器WiFi网络(相同网段) IP地址通常为192.168.XX,若两设备的IP地址前三段相同&…...
Golang Model 字段自动化校验设计
背景 在我们日常开发中,不可避免的总要去进行各种参数校验,但是如果在某个场景中,要校验的字段非常多,并且在其中还有耦合关系,那么我们手写校验逻辑就变得非常的低效且难以维护。本篇文档就基于 DDD 领域模型设计的思…...
移动端测试的挑战与解决方案:兼容性、网络问题及实战策略
引言 移动应用已成为用户触达服务的核心入口,但移动端测试面临设备多样性、网络波动、用户场景复杂等多重挑战。据Statista统计,2023年全球活跃移动设备超180亿台,操作系统(Android/iOS)版本碎片化率超30%,这对测试工程师提出了极高要求。本文深度解析移动端测试的核心痛…...
AI agent 未来好的趋势:AI医疗影像、智能客服、个性化推荐
AI agent 未来好的趋势:AI医疗影像、智能客服、个性化推荐 目录 AI agent 未来好的趋势:AI医疗影像、智能客服、个性化推荐比特币AI Agents稳定币扩容区块链AI基础设施AI驱动的软件应用AI赋能的行业应用AI医疗影像、智能客服、个性化推荐AI药物研发比特币 市场与机构化:2024…...
如何使用Three.js制作3D月球与星空效果
目录 1. 基本设置2. 创建星空效果3. 创建月球模型4. 添加中文3D文字5. 光照与相机配置6. 动画与控制7. 响应式布局8. 结语 在本文中,我们将一起学习如何利用Three.js实现一个3D月球与星空的效果,并添加一些有趣的元素,比如中文3D文字和互动功…...
Spring安装和使用(Eclipse环境)
一、Spring框架概述 1、 什么是Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复…...
网络安全-攻击流程-传输层
传输层攻击主要针对OSI模型的第四层,涉及TCP和UDP协议的安全漏洞。以下是常见攻击类型及其流程,以及防御措施: 1. SYN洪水攻击(TCP半连接攻击) 攻击流程: 目标选择:确定目标服务器的IP地址和开…...
图论- Dijkstra算法
Dijkstra算法 前言概念BFS基础模版DijkstraDijkstra函数签名State类distTo 记录最短路径伪代码模版第一个问题解答第二个问题解答第三个问题解答 前言 学习这个算法之间,必须要对BFS遍历比较熟悉,它的本质就是一个特殊改造过的BFS算法. 概念 Dijkstra算法是一种计算图中单源…...
CAS单点登录(第7版)9.属性
如有疑问,请看视频:CAS单点登录(第7版) 属性 属性定义 概述 属性定义 从身份验证或属性存储库源获取和解析 CAS 中属性的定义时,往往使用其名称进行定义和引用,而无需任何其他元数据或修饰。例如&#…...
