springCloud(day10-面试篇)

目录

[1SpringCloud 有哪些常用组件?分别是什么作用?](#1SpringCloud 有哪些常用组件?分别是什么作用?)

[2 在nacos中,服务注册发现的基本流程是怎样的?](#2 在nacos中,服务注册发现的基本流程是怎样的?)

[3Eureka 和 Nacos 有哪些区别?](#3Eureka 和 Nacos 有哪些区别?)

[4Nacos 的分级存储模型是什么意思?](#4Nacos 的分级存储模型是什么意思?)

[5Ribbon 和 SpringCloudLoadBalancer 有什么差异](#5Ribbon 和 SpringCloudLoadBalancer 有什么差异)

[6 什么是服务雪崩,常见的解决方案有哪些?](#6 什么是服务雪崩,常见的解决方案有哪些?)

[7Hystix 和 Sentinel 有什么区别和联系?](#7Hystix 和 Sentinel 有什么区别和联系?)

[8 限流的常见算法有哪些?](#8 限流的常见算法有哪些?)

[9 什么是 CAP 理论和 BASE 思想?](#9 什么是 CAP 理论和 BASE 思想?)

[10 项目中碰到过分布式事务问题吗?怎么解决的?](#10 项目中碰到过分布式事务问题吗?怎么解决的?)

[11AT 模式如何解决脏读和脏写问题的?](#11AT 模式如何解决脏读和脏写问题的?)

[12TCC 模式与 AT 模式对比,有哪些优缺点](#12TCC 模式与 AT 模式对比,有哪些优缺点)

[13OpenFeign 是如何实现负载均衡的?](#13OpenFeign 是如何实现负载均衡的?)

[14RabbitMQ 是如何确保消息的可靠性的?](#14RabbitMQ 是如何确保消息的可靠性的?)

[15RabbitMQ 是如何解决消息堆积问题的?](#15RabbitMQ 是如何解决消息堆积问题的?)

末尾页


1SpringCloud 有哪些常用组件?分别是什么作用?

  • 1Nacos/Eureka:服务注册与发现,配置中心(config)
  • 2Ribbon / LoadBalancer:客户端负载均衡(旧ribbon+feign)
  • 3OpenFeign:声明式服务调用
  • 4Gateway(zuul):API 网关,路由转发、鉴权
  • 5Sentinel/Hystrix:熔断器,请求限流、熔断、降级,防止雪崩
  • 6Seata:分布式事务
  • 7elasticsearch:快速存储、搜索和分析大量数据

springcloud不是一个技术,而是一个全家桶,是一套解决分布式系统麻烦的解决方案

我们只需要把微服务当成一个大公司,理清里面的部分以及新老交替即可

1Gateway:API网关,负责路由转发和鉴权,以前使用的是zuul,不过它是阻塞式的,效率低

2nacos:注册和配置中心,负责服务注册发现和配置,以前使用的是eureka

3openfeign

2 在nacos中,服务注册发现的基本流程是怎样的?

  • 服务启动时,向注册中心注册自己(IP、端口、服务名)
  • 注册中心保存服务列表
  • 调用方从注册中心拉取服务列表并缓存
  • 调用方通过负载均衡选择一个实例发起调用
  • 服务通过心跳保持健康,故障自动剔除

3Eureka 和 Nacos 有哪些区别?

  • Eureka:AP 架构,只做服务发现,配置中心需要配合 Spring Cloud Config
  • Nacos :AP/CP 可切换,注册中心 + 配置中心二合一
  • Nacos 支持动态配置刷新,Eureka 不支持
  • Nacos 支持权重、动态上下线、灰度
  • Nacos 心跳机制更轻量,集群更稳定

4Nacos 的分级存储模型是什么意思?

全局级别,集群级别,服务级别和实例级别

5Ribbon 和 SpringCloudLoadBalancer 有什么差异

  • Ribbon 是 Netflix 的,已经停止维护
  • Spring Cloud LoadBalancer 是官方替代品,轻量、现代。
  • LoadBalancer 支持响应式编程(WebFlux),Ribbon 不支持。
  • 功能差不多,都是客户端负载均衡,现在默认用 LoadBalancer。

6 什么是服务雪崩,常见的解决方案有哪些?

服务雪崩:一个服务挂了 → 上游调用阻塞 → 线程耗尽 → 越来越多服务不可用 → 整个系统崩溃。

解决方案:

  • 熔断:故障时切断调用
  • 限流:控制请求量
  • 降级:返回兜底结果
  • 超时控制、线程隔离

7Hystix 和 Sentinel 有什么区别和联系?

  • 两者都是做熔断、限流、降级。
  • Hystrix 停更,基于线程池隔离,较重。
  • Sentinel 是阿里开源,还在维护,更轻量。
  • Sentinel 支持热点限流、系统保护、实时监控,功能更强。

8 限流的常见算法有哪些?

  • 固定窗口计数器:简单,但有临界突刺问题。
  • 滑动窗口:更平滑,解决突刺问题。
  • 漏桶算法:匀速处理请求,削峰填谷。
  • 令牌桶算法:允许突发流量,Sentinel、Nginx 常用。

9 什么是 CAP 理论和 BASE 思想?

CAP:分布式系统最多同时满足两个:

  • C 一致性、A 可用性、P 分区容错性分布式必须保证 P,所以只能选 CP 或 AP。

BASE:对 CAP 的妥协,追求最终一致性。

  • 基本可用、软状态、最终一致。

10 项目中碰到过分布式事务问题吗?怎么解决的?

项目里用 Seata AT 模式

  • 一阶段执行本地事务,记录 undo 日志,提交本地事务。
  • 二阶段根据全局事务结果,统一提交或自动回滚。优点:无侵入、开发简单,适合大多数业务场景

11AT 模式如何解决脏读和脏写问题的?

  • 更新数据时,Seata 会对数据行加全局锁
  • 其他事务想要修改必须等待锁释放。
  • 结合数据库本地行锁,保证并发安全。
  • 避免了一阶段提交后、回滚前的数据被其他事务篡改。

12TCC 模式与 AT 模式对比,有哪些优缺点

AT 模式

  • 优点:无侵入、自动回滚、开发简单
  • 缺点:依赖数据库,不适合非数据库操作

TCC 模式

  • 优点:不依赖数据库,灵活,支持跨中间件
  • 缺点:开发量大,要写 Try/Confirm/Cancel,处理幂等、悬挂等问题

13OpenFeign 是如何实现负载均衡的?

  • OpenFeign 集成了 LoadBalancer。
  • 发起调用时,从注册中心获取服务实例列表。
  • 根据负载均衡策略(轮询、随机等)选择一个实例。
  • 自动构造 HTTP 请求,完成远程调用。

14RabbitMQ 是如何确保消息的可靠性的?

  • 生产者用 confirm 机制,确保消息发到交换机。
  • 队列、消息都做持久化,宕机不丢失。
  • 消费者使用手动 ACK,处理完再确认。
  • 配合死信队列处理失败消息。

15RabbitMQ 是如何解决消息堆积问题的?

  • 增加消费者数量,提高消费速度。
  • 提高消费者并发线程数。
  • 业务异步化、批量处理消息。
  • 清理无用消息,临时扩容队列。

末尾页

相关推荐
yuki_uix2 小时前
只渲染「必要的部分」:从 DepartmentTree 和 VirtualList 看前端的两种裁剪哲学
前端·面试
鬼先生_sir2 小时前
Spring Cloud LoadBalancer 详解:从原理到生产实战(2026最新版)
spring cloud·负载均衡·loadbalancer
java1234_小锋2 小时前
Java高频面试题:Redis是单线程还是多线程?
java·redis·面试
工具罗某人2 小时前
docker实现redis-cluster模式集群部署
java·redis·docker
明天有专业课2 小时前
RAG-搞懂嵌入向量的生成
面试·aigc
刘~浪地球2 小时前
Redis 从入门到精通(十四):内存管理与淘汰策略
数据库·redis·缓存
哈里谢顿3 小时前
服务器部署应用全流程指南
面试
MonkeyKing3 小时前
iOS Runtime 深度解析
前端·面试
山栀shanzhi3 小时前
深入C++之:一个类有几张虚函数表?
c++·面试