程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

爆了爆了,Spring Cloud面试题(springcloud面试宝典)

balukai 2025-03-19 10:34:00 文章精选 5 ℃

1. 什么是 Spring Cloud?它的主要目标是什么?

Spring Cloud 是用于构建分布式系统和微服务架构的工具集,提供云原生应用所需的基础设施支持。主要目标:简化分布式系统开发,解决服务发现、配置管理、熔断、负载均衡等问题,提升系统的弹性、容错性和可维护性。


2. Spring Cloud 和 Spring Boot 之间有什么关系?

  • Spring Boot:简化单体应用开发,提供自动配置和快速启动能力。
  • Spring Cloud:基于 Spring Boot,扩展为分布式系统工具链,依赖 Spring Boot 的约定大于配置原则。

3. 列举 Spring Cloud 中一些重要的组件及其功能

组件

功能

Eureka

服务注册与发现(已逐步被 Nacos 替代)

Spring Cloud Gateway

API 网关,支持动态路由、过滤、限流

OpenFeign

声明式 HTTP 客户端,整合负载均衡与熔断

Spring Cloud Config

集中式配置管理,支持 Git、数据库等存储

Spring Cloud LoadBalancer

客户端负载均衡(替代 Ribbon)

Resilience4j

熔断、限流、重试(替代 Hystrix)

Nacos

服务发现、动态配置管理(Spring Cloud Alibaba 组件)

Sentinel

流量控制、熔断降级(Spring Cloud Alibaba 组件)

Sleuth + Zipkin

分布式链路追踪


4. Eureka 的服务注册与发现机制是如何工作的?

  • 服务注册:服务启动时向 Eureka Server 发送注册请求(包含 IP、端口、健康状态)。
  • 心跳续约:客户端每 30 秒发送心跳,若 90 秒未收到心跳,Server 将其标记为下线。
  • 服务发现:消费者从 Eureka Server 拉取服务列表,通过客户端缓存实现本地负载均衡。

5. 什么是 Ribbon?它的主要作用是什么?

  • 旧方案:Ribbon 是客户端负载均衡器,支持轮询、随机等策略。
  • 现状:已被 Spring Cloud LoadBalancer 替代,新项目应优先使用后者。

6. Feign 是什么?如何使用 Feign 调用服务?

  • 定义:OpenFeign 是声明式 HTTP 客户端,通过接口注解简化服务调用。
  • 示例
@FeignClient(name = "user-service") 
public interface UserClient { 
  @GetMapping("/users/{id}") 
  User getUser(@PathVariable Long id);
}
  • 依赖:spring-cloud-starter-openfeign。

7. Spring Cloud 中的 Hystrix 是用来做什么的?

  • 旧方案:Hystrix 提供熔断、降级、资源隔离,防止雪崩效应。
  • 替代方案:官方推荐使用 Resilience4jSpring Cloud Circuit Breaker

8. 如何使用 Spring Cloud Gateway 配置路由?

  • YAML 配置
spring:
  cloud:
    gateway:
      routes:
        - id: user_route
          uri: lb://user-service
          predicates:
            - Path=/api/users/**
  • 动态路由:结合注册中心(如 Nacos)实现服务发现。

9. Zuul 和 Spring Cloud Gateway 有什么区别?

对比项

Zuul 1.x

Spring Cloud Gateway

架构

阻塞式(Servlet)

非阻塞式(WebFlux)

性能

低并发性能

高并发,支持响应式编程

官方支持

已停止维护

官方推荐

功能扩展

过滤器机制

支持自定义全局/局部过滤器、断言


10. Spring Cloud Config 的工作原理是什么?

  • 服务端:集中存储配置文件(Git/SVN/本地),通过 HTTP 接口暴露配置。
  • 客户端:启动时从 Config Server 拉取配置,支持 @RefreshScope 动态刷新(需调用 /actuator/refresh)。

11. 什么是服务熔断?Hystrix 如何实现熔断功能?

  • 熔断:当服务失败率超过阈值时,暂时阻断请求,避免级联故障。
  • Hystrix 实现:通过 @HystrixCommand 定义降级方法,监控请求失败率触发熔断。
  • 替代方案:使用 Resilience4j 的 @CircuitBreaker 注解。

12. Spring Cloud 中的服务治理有哪些策略?

  • 服务发现:Eureka、Nacos、Consul。
  • 负载均衡:Spring Cloud LoadBalancer、Ribbon(已弃用)。
  • 熔断限流:Resilience4j、Sentinel。
  • 配置管理:Spring Cloud Config、Nacos Config。
  • API 网关:Spring Cloud Gateway、Zuul(旧)。

13. 如何在 Spring Cloud 中实现微服务之间的安全调用?

  • OAuth2:使用 Spring Security OAuth2 实现服务间认证。
  • JWT:传递令牌验证权限。
  • HTTPS:启用 SSL/TLS 加密通信。

14. Nacos 和 Consul 有什么异同?

对比项

Nacos

Consul

服务发现

支持

支持

配置管理

内置

需单独启用

健康检查

主动探测 + 客户端心跳

主动探测

生态系统

Spring Cloud Alibaba 集成

HashiCorp 生态


15. 微服务启动失败如何解决?

  • 检查依赖:确认注册中心(如 Nacos)是否可用。
  • 配置验证:检查 bootstrap.yml 和配置中心数据。
  • 日志分析:通过 logging.level.root=DEBUG 输出详细日志。
  • 健康检查:确保 /actuator/health 返回 UP 状态。

16. 如何监控微服务?工具推荐

  • Spring Boot Actuator:暴露健康、指标、日志等端点。
  • Prometheus + Grafana:采集和可视化监控数据。
  • Sleuth + Zipkin:链路追踪。
  • ELK Stack:日志聚合分析。

17. 什么是 Spring Cloud Stream?它的主要目的是什么?

  • 定义:用于构建消息驱动的微服务,抽象消息中间件(如 Kafka、RabbitMQ)。
  • 核心概念:Binder(中间件适配)、Channel(输入/输出通道)。

18. 如何处理服务的版本管理?

  • 元数据路由:通过 Nacos 元数据标记服务版本,结合网关路由到指定版本。
  • 请求头过滤:在 Spring Cloud Gateway 中根据 Header 路由。

19. 如何实现动态配置管理?

  • Nacos Config:通过 @NacosValue 注解动态获取配置。
  • Spring Cloud Config:使用 @RefreshScope 注解刷新配置。

20. 如何做服务的健康检查?

  • 端点暴露:启用 /actuator/health。
  • 注册中心集成:Eureka/Nacos 定期调用健康端点,自动剔除异常实例。

21. 什么是 Spring Cloud Alibaba?

  • 定位:Spring Cloud 官方子项目,集成阿里云组件。
  • 核心组件:Nacos(服务发现/配置)、Sentinel(限流)、Seata(分布式事务)。

22. 如何实现限流?

  • Sentinel:通过 QPS/线程数规则控制流量。
  • Resilience4j:使用 RateLimiter 限制请求速率。

23. 负载均衡策略有哪些?

  • 默认策略:轮询(Round Robin)、随机(Random)。
  • 自定义策略:实现 ReactorLoadBalancer 接口,配置 @LoadBalancerClient。

24. Nacos 服务发现机制

  • 服务注册:客户端启动时向 Nacos Server 注册实例。
  • 健康检查:客户端定期发送心跳,Server 主动探测异常实例。

25. Dubbo 与 Spring Cloud 的区别

对比项

Dubbo

Spring Cloud

通信协议

RPC(如 Dubbo 协议)

RESTful HTTP/消息队列

服务治理

需整合其他组件

全家桶式解决方案

生态系统

主要面向 Java

支持多语言(通过 Sidecar)


26. 如何实现跨服务事务?

  • Seata:提供 AT(自动补偿)模式,通过全局事务 ID 协调分支事务。

27. OpenFeign 替代 Feign

  • 依赖变更:使用 spring-cloud-starter-openfeign。
  • 功能增强:原生支持负载均衡、熔断与 Spring MVC 注解。

28. 服务网格与 Spring Cloud

  • 服务网格:如 Istio,负责服务间通信、监控、安全(基础设施层)。
  • Spring Cloud:关注应用层逻辑(如业务代码集成)。

29. API 网关的认证与授权

  • OAuth2:集成 Spring Security OAuth2 资源服务器。
  • JWT 验证:在网关过滤器中解析 Token 并鉴权。

30. 如何实现可观察性(Observability)?

  • 指标(Metrics):Micrometer + Prometheus,监控 QPS、延迟、错误率。
  • 日志(Logging):ELK 统一收集。
  • 追踪(Tracing):Sleuth + Zipkin,分析请求链路。
最近发表
标签列表