摘要:
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注册流程:
- 服务启动时发送元数据到Nacos Server
- 定期发送心跳(默认5秒)
- 消费者通过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流程:
- 动态代理生成
- 负载均衡(Spring Cloud LoadBalancer)
- HTTP/3连接建立
- 流量控制(Sentinel)
- 结果解码
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. 雪崩效应解决方案?
现代防御体系:
- 前端:请求限流(Nginx/AWS WAF)
- 网关:熔断降级(Sentinel)
- 服务:线程池隔离(Virtual Thread)
- 存储:多级缓存(Caffeine+Redis)
31. Ribbon和Feign有什么区别?
2023版:
组件 | 作用 | 现状 |
---|---|---|
Spring Cloud LB | 客户端负载均衡 | 官方默认 |
OpenFeign | 声明式HTTP客户端 | 推荐使用 |
Ribbon | 维护模式 | 不推荐新项目 |
32. 断路器有几种熔断状态?
Sentinel状态机:
- CLOSED:正常请求
- OPEN:直接拒绝请求
- 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实现:
- 服务启动注册元数据
- 心跳维持健康状态(5秒)
- 客户端缓存服务列表
- 服务变更事件推送
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年核心价值:
- 服务治理:Nacos + K8s Service
- 配置管理:Nacos Config + 版本回溯
- 流量控制:Sentinel + Gateway
- 可观测性:Micrometer + OpenTelemetry
49. Zuul如何处理错误异常?
Gateway统一异常处理:
java
@Bean
public ErrorWebExceptionHandler customErrorHandler() {
return (exchange, ex) -> {
exchange.getResponse().writeWith(
Mono.just(buffer(ex.getMessage()))
);
return Mono.empty();
};
}