摘要:
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實現熔斷:
@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獲取服務列表
# application.yml
spring:cloud:nacos:discovery:server-addr: 127.0.0.1:8848namespace: dev
6. 什么是Spring Cloud Config?
現代方案:使用Nacos Config實現:
- 配置動態推送(長輪詢)
- 版本歷史回滾
- 加密配置(集成KMS)
@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之間有什么聯系?
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替代方案:
public class AuthFilter implements GlobalFilter {@Overridepublic 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)
集成方案:
// 自動生成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方案:
spring:cloud:gateway:routes:- id: user-serviceuri: lb://user-servicepredicates:- 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對比:
25. 微服務有哪些優缺點?
2023年新挑戰:
- 優點:更好的云原生適配
- 缺點:服務網格帶來的復雜度
26. 什么是Spring Cloud Stream?
現代架構:
事件驅動架構(EDA)實現:
// 發布事件
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:
@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優先
@Bean
public ReactorLoadBalancer<ServiceInstance> customLB() {return new SameZonePreferenceLoadBalancer();
}
41. 微服務技術棧有哪些?
2023全景圖:
- 開發框架:Spring Cloud、Micronaut
- 服務網格:Istio、Linkerd
- Serverless:Knative、AWS Lambda
42. @LoadBalanced注解作用?
實現原理:
@Bean
@LoadBalanced // 關鍵點:注入LoadBalancerInterceptor
public RestTemplate restTemplate() {return new RestTemplate();
}
43. 什么是Spring Cloud Gateway?
核心功能:
- WebFlux非阻塞IO
- 動態路由
- 集成Circuit Breaker
spring:cloud:gateway:routes:- id: authuri: lb://auth-servicepredicates:- Path=/api/auth/**
44. 【真題】Feign遠程調用流程實現?
詳細時序:
45. Zuul過濾器類型?
Gateway過濾器:
- Pre:認證/限流
- Route:請求轉發
- Post:響應修改
- Error:異常處理
46. Zuul如何處理認證授權?
現代方案:
public class AuthFilter implements GlobalFilter {@Overridepublic 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?
使用場景:
- 批處理作業
- 定時任務
- 短時數據處理
@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統一異常處理:
@Bean
public ErrorWebExceptionHandler customErrorHandler() {return (exchange, ex) -> {exchange.getResponse().writeWith(Mono.just(buffer(ex.getMessage())));return Mono.empty();};
}