SpringCloud常见面试问答题有哪些

发布时间:2022-01-18 09:34:56 作者:iii
来源:亿速云 阅读:163
# SpringCloud常见面试问答题有哪些

## 一、SpringCloud基础概念

### 1. 什么是SpringCloud?
SpringCloud是一系列框架的**有序集合**,基于SpringBoot提供了一套完整的**微服务解决方案**。它整合了服务发现(Eureka)、配置中心(Config)、断路器(Hystrix)、网关(Zuul/Gateway)等组件,通过约定优于配置的方式简化分布式系统开发。

### 2. SpringCloud与Dubbo的区别?
| 对比维度       | SpringCloud                  | Dubbo               |
|----------------|-----------------------------|---------------------|
| **服务调用方式** | RESTful API(HTTP+JSON)     | RPC(基于Netty)     |
| **注册中心**    | Eureka/Nacos/Consul         | Zookeeper/Nacos     |
| **功能覆盖**    | 全套微服务解决方案           | 主要专注服务治理     |
| **生态整合**    | 与Spring体系无缝集成         | 需要自行整合其他组件|

### 3. SpringCloud的核心组件有哪些?
- **服务注册与发现**:Eureka/Nacos
- **客户端负载均衡**:Ribbon
- **声明式服务调用**:Feign/OpenFeign
- **服务容错保护**:Hystrix/Sentinel
- **配置中心**:SpringCloud Config/Nacos
- **API网关**:Zuul/Gateway
- **消息总线**:Bus
- **分布式事务**:Seata

## 二、服务注册与发现

### 4. Eureka的工作原理?
1. **服务注册**:服务启动时向Eureka Server注册自己的信息(IP、端口、健康状态等)
2. **心跳续约**:客户端每30秒发送一次心跳(默认),90秒未收到则剔除实例
3. **服务获取**:客户端从Server定时拉取注册表并缓存(默认30秒)
4. **自我保护机制**:当85%以上节点心跳丢失时,保护现有注册信息不删除

### 5. Eureka与Nacos的区别?
- **CAP模型**:Eureka保证AP,Nacos支持AP/CP切换
- **配置管理**:Nacos原生支持动态配置,Eureka需配合Config
- **健康检查**:Nacos支持TCP/HTTP/MYSQL等多种检查方式
- **性能对比**:Nacos的实例变更推送速度更快(长轮询 vs 定时拉取)

## 三、服务调用与负载均衡

### 6. Ribbon的负载均衡策略?
- **RoundRobinRule**:轮询(默认)
- **RandomRule**:随机选择
- **WeightedResponseTimeRule**:根据响应时间加权
- **BestAvailableRule**:选择并发请求数最小的服务器
- **ZoneAvoidanceRule**:复合判断区域和可用性(默认高级策略)

可通过配置自定义策略:
```yaml
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

7. OpenFeign的工作原理?

  1. 通过@EnableFeignClients启用Feign
  2. 定义接口时使用@FeignClient(name="service-name")
  3. 编译时动态生成接口实现类
  4. 集成Ribbon实现负载均衡
  5. 默认使用JDK的HttpURLConnection,可通过配置替换为OKHttp

性能优化建议

# 启用OKHttp
feign.okhttp.enabled=true
# 开启GZIP压缩
feign.compression.request.enabled=true
feign.compression.response.enabled=true

四、服务容错保护

8. Hystrix的熔断机制原理?

  1. 熔断触发:当失败率超过阈值(默认50%请求失败,10秒内超过20次请求)
  2. 熔断状态:进入OPEN状态,所有请求直接拒绝
  3. 半开状态:经过休眠时间(默认5秒)后尝试放行部分请求
  4. 恢复机制:如果半开请求成功,关闭熔断器

配置示例:

@HystrixCommand(
    fallbackMethod = "fallbackMethod",
    commandProperties = {
        @HystrixProperty(name="circuitBreaker.requestVolumeThreshold", value="10"),
        @HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds", value="5000")
    }
)

9. Sentinel与Hystrix对比?

特性 Sentinel Hystrix
隔离策略 信号量隔离(并发控制) 线程池/信号量
熔断降级 基于响应时间、异常比例等多维指标 仅支持异常比例
实时监控 提供控制台实时监控 需依赖Hystrix Dashboard
规则配置 支持动态配置立即生效 需重启生效

五、配置中心与消息总线

10. SpringCloud Config的工作流程?

  1. 客户端启动时从Config Server获取配置
  2. Server从Git/SVN等仓库读取配置文件
  3. 客户端通过@RefreshScope支持动态刷新
  4. 结合Bus可通过/actuator/bus-refresh端点批量刷新所有节点

安全配置建议

spring:
  cloud:
    config:
      server:
        git:
          uri: https://git.example.com/config-repo
          username: encrypted-username
          password: encrypted-password
          search-paths: '{application}'

11. Nacos配置管理特性?

六、API网关

12. SpringCloud Gateway核心概念?

典型配置示例

spring:
  cloud:
    gateway:
      routes:
      - id: user-service
        uri: lb://user-service
        predicates:
        - Path=/api/users/**
        filters:
        - StripPrefix=1
        - name: RequestRateLimiter
          args:
            redis-rate-limiter.replenishRate: 10
            redis-rate-limiter.burstCapacity: 20

13. Gateway与Zuul的性能对比?

七、分布式事务

14. Seata的AT模式原理?

  1. 一阶段

    • 解析SQL生成前后镜像
    • 执行业务SQL并提交
    • 向TC注册分支事务,保存undo_log
  2. 二阶段提交

    • 异步删除undo_log
  3. 二阶段回滚

    • 根据undo_log生成反向SQL补偿
    • 删除undo_log记录

关键配置

# 使用Seata数据源代理
spring.datasource.druid.filter.seata.enabled=true
# 关闭数据源自动代理
seata.enable-auto-data-source-proxy=false

八、性能优化与最佳实践

15. SpringCloud常见性能问题?

  1. 注册中心瓶颈
    • 解决方案:采用Nacos集群+持久化配置
  2. Feign调用超时
    
    feign.client.config.default.connectTimeout=5000
    feign.client.config.default.readTimeout=30000
    
  3. 网关性能瓶颈
    • 启用响应式编程:spring.main.web-application-type=reactive
    • 配置JVM参数:-Xms2048m -Xmx2048m
  4. 配置中心高可用
    • 采用Nacos集群+MySQL持久化

九、最新技术演进

16. SpringCloud Alibaba生态

17. Service Mesh集成方案


持续学习建议:关注SpringCloud官方博客(spring.io/blog)和GitHub仓库,定期查看Release Notes了解新特性。建议通过实际项目实践掌握核心组件,并关注云原生技术(如Kubernetes、Service Mesh)与SpringCloud的整合方案。 “`

该文档共约2500字,采用Markdown格式编写,包含: 1. 9大核心模块分类 2. 17个深度技术问题解析 3. 多组对比表格和配置示例 4. 代码片段和YAML配置示例 5. 最新技术演进方向 6. 实践建议和性能优化方案

推荐阅读:
  1. 关于Python的面试问答题有哪些
  2. Salesforce面试问答题有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

springcloud

上一篇:AO3423的特点是什么

下一篇:怎么用python实现进程,线程和协程

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》