Spring Cloud-面试题(49)

摘要:

1、通俗易懂,适合小白

2、仅做面试复习用,部分来源网络,博文免费,知识无价,侵权请联系!


1. 什么是Spring Cloud框架?子项目哪几大类?

Spring Cloud是一套分布式系统工具集,2023年核心模块:

  • 服务发现:Nacos(替代Eureka)、Consul
  • 配置中心:Nacos Config、阿里云ACM
  • 通信:OpenFeign(HTTP/3)、Spring Cloud gRPC
  • 流量治理:Sentinel(替代Hystrix)
  • 网关:Spring Cloud Gateway(WebFlux响应式)
  • 可观测性:Micrometer + Prometheus + SkyWalking

2. Spring Cloud框架有哪些优缺点?

优点

  • 深度集成Kubernetes(通过Spring Cloud Kubernetes)
  • 支持响应式编程(WebFlux+Reactive Feign)
  • 云厂商中立(阿里云/华为云/AWS适配)

缺点

  • Netflix组件迁移成本(需替换Hystrix/Ribbon/Zuul)
  • 学习曲线陡峭(需掌握K8s+云原生)

3. Spring Cloud断路器的作用是什么?

使用Sentinel实现熔断:

java 复制代码
@SentinelResource(
    value = "userService",
    blockHandler = "blockHandler",
    fallback = "fallback")
public User getUser(String id) {
    // 远程调用
}

当异常比例>50%时自动熔断,10秒后进入半开状态试探恢复。


4. 【真题】Spring Cloud核心组件有哪些?

组件 作用 替代旧组件
Nacos 服务发现+配置中心 Eureka
Sentinel 熔断降级+流量控制 Hystrix
Gateway 响应式API网关 Zuul
OpenTelemetry 分布式追踪 Sleuth

5. Spring Cloud如何实现服务的注册?

Nacos注册流程

  1. 服务启动时发送元数据到Nacos Server
  2. 定期发送心跳(默认5秒)
  3. 消费者通过DNS或HTTP API获取服务列表
yaml 复制代码
# application.yml
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: dev

6. 什么是Spring Cloud Config?

现代方案:使用Nacos Config实现:

  • 配置动态推送(长轮询)
  • 版本历史回滚
  • 加密配置(集成KMS)
java 复制代码
@RefreshScope // 支持配置热更新
@RestController
public class ConfigController {
    @Value("${app.timeout}")
    private String timeout;
}

7. Spring Cloud Eureka自我保护机制是什么?

Nacos替代方案:健康保护阈值

  • 当健康实例比例<0.3时:
    • 返回所有实例(包括不健康)
    • 避免网络抖动导致服务全不可用

8. 什么是服务熔断?什么是服务降级?

Sentinel实现

机制 配置示例 效果
熔断 DegradeRule.setCount(500) QPS>500时拒绝请求
降级 @SentinelResource(fallback) 返回本地缓存数据

9. Spring Boot和Spring Cloud之间有什么联系?

基础 基础 扩展 依赖 SpringBoot 自动配置 内嵌容器 SpringCloud 分布式能力


10. 【真题】Spring Cloud Feign和Dubbo区别

特性 OpenFeign 2023 Dubbo 3.x
协议 HTTP/3 + REST Triple协议(兼容gRPC)
性能 50ms延迟 1ms延迟
适用场景 跨语言调用 高性能Java内部调用

11. 什么是微服务?

2023年定义:

  • 独立部署的业务单元
  • 通过API或事件通信
  • 自治的技术栈选择
  • 典型示例:电商系统的订单、支付、库存服务

12. 微服务通信方式有哪几种?

现代通信矩阵

类型 协议 适用场景
同步 HTTP/3(OpenFeign) 外部调用
异步 Kafka/RocketMQ 事件驱动架构
高性能RPC gRPC/Triple 内部服务调用

13. 什么是微服务架构?

2023年特征

  • 服务网格(Service Mesh)集成
  • Serverless无服务化扩展
  • 云原生基础设施依赖(K8s+Istio)
  • 可观测性成为标配

14. 什么是Spring Cloud Netflix?

现状

  • 进入维护模式(2022年停止更新)
  • 推荐替代方案:
    • Eureka → Nacos
    • Hystrix → Sentinel
    • Zuul → Spring Cloud Gateway

15. 什么是Spring Cloud Bus?

现代用法

通过Nacos Config + WebSocket实现配置实时推送,替代传统的RabbitMQ/Kafka方案。


16. 什么是Spring Cloud Consul?

与Nacos对比

特性 Consul Nacos
配置中心 支持 更强(历史版本)
服务发现 多数据中心 更易用
协议 Raft Distro

17. 【真题】Spring Cloud Zuul如何实现请求修改转发?

Gateway替代方案

java 复制代码
public class AuthFilter implements GlobalFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        exchange.getRequest().mutate()
            .header("X-Auth", "token");
        return chain.filter(exchange);
    }
}

18. 什么是Spring Cloud Sleuth?

演进为OpenTelemetry

  • 分布式追踪(Trace)
  • 指标监控(Metrics)
  • 日志关联(Logging)
    集成方案:
java 复制代码
// 自动生成TraceID
@GetMapping("/api")
public String endpoint() {
    tracer.currentSpan().tag("user", "test");
    return "Hello";
}

19. Eureka和Zookeeper有哪些区别?

2023年选择

  • 新项目:直接使用Nacos
  • 旧系统迁移
    • Eureka → Nacos
    • Zookeeper → Nacos/Consul

20. Spring Cloud Zuul如何处理负载均衡?

Gateway + LoadBalancer方案

yaml 复制代码
spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/api/users/**

21. 什么是Spring Cloud Zookeeper?

现状

  • 已被Nacos取代
  • 仅用于遗留系统维护
  • 缺点:CP模型导致可用性低

22. 【真题】Spring Cloud Feign远程调用流程?

OpenFeign 2023流程

  1. 动态代理生成
  2. 负载均衡(Spring Cloud LoadBalancer)
  3. HTTP/3连接建立
  4. 流量控制(Sentinel)
  5. 结果解码

23. 什么是Spring Cloud OpenFeign?

最新特性

  • 支持响应式编程(Reactive Feign)
  • 内置重试机制(Resilience4j)
  • 集成Micrometer指标采集

24. 什么是Hystrix?如何实现容错机制?

Sentinel对比
40% 30% 20% 10% 功能对比 熔断降级 流量控制 系统自适应 热点防护


25. 微服务有哪些优缺点?

2023年新挑战

  • 优点:更好的云原生适配
  • 缺点:服务网格带来的复杂度

26. 什么是Spring Cloud Stream?

现代架构

事件驱动架构(EDA)实现:

java 复制代码
// 发布事件
streamBridge.send("order-out-0", OrderEvent);

// 订阅事件
@Bean
public Consumer<OrderEvent> handleOrder() {
    return event -> log.info("Received: {}", event);
}

27. Spring Cloud中为什么要使用Feign?

2023年价值

  • 声明式HTTP客户端
  • 内置负载均衡
  • 支持响应式编程
  • 与Spring生态深度集成

28. 什么是雪崩效应?

现代案例

某服务因慢SQL导致线程池耗尽,调用方因超时不断重试,最终整个集群不可用。


29. 雪崩效应常见场景?

2023年典型场景

  • 缓存击穿(Redis热点Key失效)
  • 慢查询连锁反应
  • 第三方API限流导致阻塞

30. 雪崩效应解决方案?

现代防御体系

  1. 前端:请求限流(Nginx/AWS WAF)
  2. 网关:熔断降级(Sentinel)
  3. 服务:线程池隔离(Virtual Thread)
  4. 存储:多级缓存(Caffeine+Redis)

31. Ribbon和Feign有什么区别?

2023版

组件 作用 现状
Spring Cloud LB 客户端负载均衡 官方默认
OpenFeign 声明式HTTP客户端 推荐使用
Ribbon 维护模式 不推荐新项目

32. 断路器有几种熔断状态?

Sentinel状态机

  1. CLOSED:正常请求
  2. OPEN:直接拒绝请求
  3. HALF-OPEN:试探性放行部分请求

33. 什么是Spring Cloud Ribbon?

替代方案

使用Spring Cloud LoadBalancer:

java 复制代码
@Bean
@LoadBalanced // 开启负载均衡
public WebClient.Builder webClientBuilder() {
    return WebClient.builder();
}

34. 什么是Spring Cloud Security?

2023方案

  • OAuth2.0:Spring Authorization Server
  • 认证:JWT + OIDC
  • 授权:RBAC模型

35. Ribbon和Nginx负载均衡区别?

现代对比

维度 Spring Cloud LB Nginx Plus
类型 客户端LB 服务端LB
动态调整 实时生效 需reload配置
协议支持 HTTP/gRPC HTTP/TCP/UDP

36. Zuul和Nginx有什么区别?

网关选型建议

  • 新项目:Spring Cloud Gateway
  • 边缘网关:Nginx + Lua脚本
  • Service Mesh:Istio Ingress

37. Zuul和Spring Cloud Gateway区别?

性能对比

测试场景 Zuul 2.x Gateway 提升幅度
100并发/RPS 12,000 35,000 291%
平均延迟(ms) 45 16 64%

38. 【真题】Spring Cloud服务发现原理?

Nacos实现

  1. 服务启动注册元数据
  2. 心跳维持健康状态(5秒)
  3. 客户端缓存服务列表
  4. 服务变更事件推送

39. OpenFeign和Feign有什么区别?

核心差异

  • Feign:仅基础HTTP客户端
  • OpenFeign
    • 集成Spring MVC注解
    • 支持响应式
    • 内置负载均衡

40. Load Balancer负载均衡是什么?

Spring Cloud LB特性

  • 健康检查过滤
  • 权重路由
  • 同Zone优先
java 复制代码
@Bean
public ReactorLoadBalancer<ServiceInstance> customLB() {
    return new SameZonePreferenceLoadBalancer();
}

41. 微服务技术栈有哪些?

2023全景图

  • 开发框架:Spring Cloud、Micronaut
  • 服务网格:Istio、Linkerd
  • Serverless:Knative、AWS Lambda

42. @LoadBalanced注解作用?

实现原理

java 复制代码
@Bean
@LoadBalanced // 关键点:注入LoadBalancerInterceptor
public RestTemplate restTemplate() {
    return new RestTemplate();
}

43. 什么是Spring Cloud Gateway?

核心功能

  • WebFlux非阻塞IO
  • 动态路由
  • 集成Circuit Breaker
yaml 复制代码
spring:
  cloud:
    gateway:
      routes:
        - id: auth
          uri: lb://auth-service
          predicates:
            - Path=/api/auth/**

44. 【真题】Feign远程调用流程实现?

详细时序
Client Feign LB Sentinel Service 1. 接口调用 2. 获取实例 3. 流控检查 通过 4. HTTP请求 5. 返回结果 Client Feign LB Sentinel Service


45. Zuul过滤器类型?

Gateway过滤器

  • Pre:认证/限流
  • Route:请求转发
  • Post:响应修改
  • Error:异常处理

46. Zuul如何处理认证授权?

现代方案

java 复制代码
public class AuthFilter implements GlobalFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String token = exchange.getRequest().getHeaders().getFirst("Authorization");
        if(!jwt.verify(token)) {
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }
}

47. 什么是Spring Cloud Task?

使用场景

  • 批处理作业
  • 定时任务
  • 短时数据处理
java 复制代码
@Bean
public CommandLineRunner taskRunner() {
    return args -> {
        // 一次性任务逻辑
    };
}

ps:Spring Cloud Task 详解

48. Spring Cloud主要解决什么问题?

2023年核心价值

  1. 服务治理:Nacos + K8s Service
  2. 配置管理:Nacos Config + 版本回溯
  3. 流量控制:Sentinel + Gateway
  4. 可观测性:Micrometer + OpenTelemetry

49. Zuul如何处理错误异常?

Gateway统一异常处理

java 复制代码
@Bean
public ErrorWebExceptionHandler customErrorHandler() {
    return (exchange, ex) -> {
        exchange.getResponse().writeWith(
            Mono.just(buffer(ex.getMessage()))
        );
        return Mono.empty();
    };
}
相关推荐
考虑考虑1 分钟前
JDK21中的Sequenced Collections(序列集合)
java·后端·java ee
蓝眸少年CY10 分钟前
(第三篇)spring cloud之Zookeeper注册中心
spring·spring cloud·zookeeper
一 乐40 分钟前
心理咨询|学生心理咨询评估系统|基于Springboot的学生心理咨询评估系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·学生心理咨询评估系统
anthem371 小时前
第三阶段_大模型应用开发-Day 4: RAG检索增强生成技术
后端
用户4099322502121 小时前
如何让Celery任务像VIP客户一样享受优先待遇?
后端·github·trae
dylan_QAQ1 小时前
【附录】Spring 环境配置 基础及应用
后端·spring
碎花里1 小时前
IOC控制反转深度解析
spring
码神本神2 小时前
(附源码)基于Spring Boot的4S店信息管理系统 的设计与实现
java·spring boot·后端
天天摸鱼的java工程师2 小时前
SpringBoot + Seata + MySQL + RabbitMQ:金融系统分布式交易对账与资金清算实战
java·后端·面试
anthem372 小时前
第三阶段_大模型应用开发-Day 3: 大模型推理优化与部署
后端