SpringCloud面试题(49道含答案)
一、基础概念类
1. 什么是微服务架构?
答:微服务架构是一种将单体应用拆分为多个小型、独立、松耦合服务的架构风格。每个服务围绕业务能力构建,可独立开发、部署、扩展,通过轻量级通信(如 HTTP/REST)交互。
2. Spring Cloud 是什么?
答:Spring Cloud 是基于 Spring Boot 的微服务工具集,整合了服务注册发现、配置中心、负载均衡、熔断、网关等分布式系统组件,提供开箱即用的解决方案。
3. 为什么使用 Spring Cloud?
答:
- 简化分布式系统开发;
- 与 Spring Boot 无缝集成;
- 封装成熟组件(如 Eureka、Ribbon),屏蔽复杂配置;
- 支持快速构建高可用、可伸缩的微服务系统。
4. Spring Boot 和 Spring Cloud 的区别?
答:
- Spring Boot:用于快速开发单个微服务(关注“个体”);
- Spring Cloud:用于治理多个微服务之间的协作(关注“群体”),如服务发现、配置管理、熔断等;
- Spring Boot 可独立使用,Spring Cloud 必须依赖 Spring Boot。
5. Spring Cloud 有哪些核心组件?
答:Eureka(注册中心)、Config(配置中心)、Ribbon(负载均衡)、Feign/OpenFeign(声明式调用)、Hystrix(熔断)、Zuul/Gateway(网关)、Bus(消息总线)、Sleuth(链路追踪)等。
二、服务注册与发现(Eureka)
6. 什么是服务注册与发现?
答:服务启动时向注册中心注册自身信息;其他服务通过注册中心动态查找并调用目标服务,避免硬编码地址。
7. Eureka 是什么?
答:Netflix 开源的服务注册中心,Spring Cloud 封装后作为默认注册中心,支持服务注册、心跳续约、故障剔除。
8. Eureka 如何实现高可用?
答:部署多个 Eureka Server 节点,互相注册形成集群;客户端配置多个 Eureka 地址,任一节点宕机仍可正常工作。
9. 什么是 Eureka 的自我保护模式?
答:当短时间内大量服务失联(如网络分区),Eureka 进入自我保护模式,不再剔除服务实例,防止误删健康服务。网络恢复后自动退出。
10. DiscoveryClient 的作用?
答:用于在代码中根据服务名从注册中心获取服务实例列表,常用于手动调用或定制负载逻辑。
11. Eureka 和 ZooKeeper 的区别?
答:
| 维度 | Eureka | ZooKeeper |
|---|---|---|
| CAP | AP(可用性优先) | CP(强一致性) |
| 节点关系 | 对等 | 主从(需选举) |
| 故障容忍 | 网络分区仍可用 | 选举期间不可用 |
| 适用场景 | 云环境、高可用优先 | 强一致要求场景 |
三、负载均衡(Ribbon)
12. Ribbon 是什么?
答:Netflix 开源的客户端负载均衡器,集成于 Feign/RestTemplate,从注册中心获取服务列表并按策略(轮询、随机等)选择实例。
13. @LoadBalanced 注解的作用?
答:为 RestTemplate 或 WebClient 启用 Ribbon 负载均衡能力。
14. Ribbon 和 Nginx 的区别?
答:
- Ribbon:客户端负载均衡,与注册中心联动,感知服务上下线;
- Nginx:服务端反向代理,高性能但无法动态感知服务变化。
15. Ribbon 底层原理?
答:通过 DiscoveryClient 获取服务实例列表,使用 IRule 接口实现负载策略(如 RoundRobinRule),结合 HttpClient 发起请求。
四、服务调用(Feign / OpenFeign)
16. 什么是 Feign?
答:声明式 HTTP 客户端,通过定义接口 + 注解即可调用远程服务,无需手动构建 HTTP 请求。
17. Feign 和 RestTemplate 的区别?
答:
- RestTemplate 需手动拼接 URL、处理参数;
- Feign 通过接口抽象,代码更简洁,天然集成 Ribbon 和 Hystrix。
18. Feign 和 Ribbon 的关系?
答:Feign 内部集成了 Ribbon,自动实现负载均衡;也可集成 Hystrix 实现熔断降级。
五、熔断与容错(Hystrix)
19. 什么是服务雪崩?
答:一个服务故障导致调用链上其他服务因等待/超时而连锁崩溃的现象。
20. Hystrix 的作用?
答:提供熔断、降级、隔离机制,防止雪崩:
- 熔断:失败率超阈值时快速失败;
- 降级:返回兜底数据;
- 隔离:为服务分配独立线程池。
21. 服务降级如何实现?
答:重写 HystrixCommand.getFallback() 方法,或在 Feign 中指定 fallback 类。
22. Hystrix 当前状态?
答:已停止维护,推荐使用 Resilience4j 或 Sentinel 替代。
六、API 网关(Zuul / Gateway)
23. 什么是 API 网关?
答:微服务系统的统一入口,负责路由转发、鉴权、限流、日志、安全控制等。
24. Zuul 和 Gateway 的区别?
答:
| 特性 | Zuul 1.x | Spring Cloud Gateway |
|---|---|---|
| 模型 | Servlet 阻塞 | WebFlux 非阻塞 |
| 性能 | 较低 | 高 |
| 功能 | 基础路由+过滤 | 支持 Predicate + Filter 组合、限流、重试等 |
| 状态 | 维护中 | 官方推荐 |
25. ZuulFilter 常用方法?
答:
filterType():过滤器类型(pre/route/post/error);filterOrder():执行顺序;shouldFilter():是否执行;run():具体逻辑。
26. 网关如何集群?
答:前端用 Nginx 做负载均衡,后端部署多个 Zuul/Gateway 实例。
七、配置中心(Config)
27. Spring Cloud Config 是什么?
答:集中管理微服务配置的工具,Server 端读取 Git/SVN 配置,Client 端拉取配置。
28. 如何实现配置实时刷新?
答:
- 手动:调用
/actuator/refresh; - 自动:结合 Spring Cloud Bus + RabbitMQ/Kafka 广播刷新事件。
29. 分布式配置中心有哪些?
答:Spring Cloud Config、Apollo、Nacos、ZooKeeper(KV 存储)。
八、消息总线(Bus)
30. Spring Cloud Bus 是什么?
答:基于 MQ(如 RabbitMQ)的消息总线,用于广播配置变更或状态更新到所有微服务实例。
31. Bus 必须配合什么使用?
答:必须配合消息中间件(如 RabbitMQ、Kafka)和 Config 使用。
九、链路追踪(Sleuth)
32. Spring Cloud Sleuth 的作用?
答:为微服务调用链生成唯一 TraceID 和 SpanID,实现分布式链路追踪,便于排查性能瓶颈和故障。
33. 如何可视化链路?
答:集成 Zipkin 或 SkyWalking,收集 Sleuth 数据并展示调用拓扑。
十、其他组件
34. Spring Cloud Stream 是什么?
答:屏蔽 Kafka/RabbitMQ 差异的事件驱动框架,通过 @Input/@Output 声明消息通道。
35. Spring Cloud Task 是什么?
答:用于运行短生命周期任务(如批处理),支持任务调度与结果回收。
36. Spring Cloud Consul 的优势?
答:一站式服务治理工具,内置服务发现、健康检查、KV 存储、多数据中心,无需额外依赖 ZooKeeper。
十一、版本与兼容
37. Spring Cloud 和 Spring Boot 版本对应关系?
答:
| Spring Cloud | Spring Boot |
|---|---|
| Hoxton | 2.2.x |
| Greenwich | 2.1.x |
| Finchley | 2.0.x |
| Edgware | 1.5.x |
38. Spring Cloud 版本命名规则?
答:采用伦敦地铁站名(如 Angel → Brixton → ... → Hoxton),按字母顺序表示发布时间。
十二、综合对比
39. Spring Cloud 和 Dubbo 的区别?
答:
| 维度 | Spring Cloud | Dubbo |
|---|---|---|
| 协议 | REST(HTTP) | RPC(TCP) |
| 注册中心 | Eureka/Consul | ZooKeeper |
| 网关 | Zuul/Gateway | 无原生支持 |
| 生态 | Spring 全家桶 | 阿里系(Nacos/Sentinel) |
| 跨语言 | 支持 | Java 为主 |
40. 分布式系统面临哪些问题?
答:服务发现、负载均衡、网络延迟、安全、配置管理、容错、链路追踪、事务一致性等。
十三、实战与原理
41. 如何设计一套开放 API?
答:
- 内网 API:局域网调用,简单认证;
- 开放 API:遵循 OAuth2.0,考虑幂等性、限流、签名、HTTPS;
- 文档化(Swagger)。
42. 动态路由如何实现(Zuul)?
答:通过配置中心管理路由规则,Zuul 监听变更并刷新 RouteLocator。
43. 服务隔离有哪两种方式?
答:线程池隔离(默认)、信号量隔离(轻量,适用于高频调用)。
44. CAP 理论是什么?
答:分布式系统最多同时满足 一致性(C)、可用性(A)、分区容错性(P) 中的两个。Eureka 选 AP,ZooKeeper 选 CP。
45. 为什么 Tomcat 线程池会导致雪崩?
答:默认单线程池处理所有请求,某一接口高并发占满线程,其他请求阻塞,引发连锁故障。
十四、新趋势与替代方案
46. Zuul 是否已被淘汰?
答:Zuul 1.x 已维护,Zuul 2.x 未被 Spring Cloud 官方集成;推荐使用 Spring Cloud Gateway。
47. Hystrix 是否还能用?
答:可用,但不再更新;新项目建议用 Resilience4j(轻量、函数式)或 Sentinel(阿里开源,功能强)。
48. Nacos 能替代 Eureka + Config 吗?
答:可以。Nacos 同时支持服务注册发现和配置管理,是更现代的一体化方案。
49. Spring Cloud Alibaba 是什么?
答:阿里推出的 Spring Cloud 扩展,集成 Nacos(注册+配置)、Sentinel(熔断)、RocketMQ(消息)、Seata(分布式事务)等。
