首页 > 编程语言 >Java面试系列-SpringCloud面试题20道,服务注册与发现,断路器,智能路由,熔断,追踪,网关,调用,限流,配置中心,Hystrix,Gateway,Eureka,Feign,Zuul

Java面试系列-SpringCloud面试题20道,服务注册与发现,断路器,智能路由,熔断,追踪,网关,调用,限流,配置中心,Hystrix,Gateway,Eureka,Feign,Zuul

时间:2024-11-07 10:47:38浏览次数:3  
标签:面试题 服务 工作 Spring 如何 限流 Java Cloud

文章目录

Gitee链接地址,建议收藏,后续我会对专栏进行整理,每篇文章进行校正和调整,然后统一存放在gitee仓库中

1. Spring Cloud是什么?

答案
Spring Cloud 是一个基于Spring Boot构建的微服务框架,提供了一系列工具和服务来帮助开发者快速构建和管理分布式系统。它包括服务注册与发现、配置管理、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态管理等模块。

2. Spring Cloud中的服务注册与发现是如何工作的?

答案

  • 服务注册:服务启动时向注册中心注册自己的信息,包括服务名称、IP地址和端口号等。
  • 服务发现:客户端通过注册中心获取服务提供者的地址信息,然后直接与服务提供者通信。
  • 注册中心:常见的注册中心有Eureka、Consul和Zookeeper等。

示例代码

// Eureka Client 配置
@EnableDiscoveryClient
@SpringBootApplication
public class ServiceApplication {
   
    public static void main(String[] args) {
   
        SpringApplication.run(ServiceApplication.class, args);
    }
}

3. Spring Cloud中的配置管理是如何工作的?

答案

  • 配置中心:Spring Cloud Config 提供了一个中心化的配置管理服务,可以将配置文件存储在Git或SVN等版本控制系统中。
  • 动态刷新:通过Spring Cloud Bus或Actuator的刷新端点,可以动态刷新配置。
  • 配置文件:配置文件可以是YAML或Properties格式,支持环境变量和占位符。

示例代码

# application.yml
spring:
  cloud:
    config:
      uri: http://localhost:8888
  application:
    name: my-service

4. Spring Cloud中的断路器(Hystrix)是如何工作的?

答案

  • 断路器:Hystrix是一个用于处理分布式系统的延迟和容错的库,通过断路器模式防止服务雪崩。
  • 工作原理:当调用远程服务失败达到一定阈值时,断路器会打开,后续请求直接返回失败结果,而不是继续调用失败的服务。
  • 降级处理:可以定义降级方法,当服务调用失败时执行降级逻辑。

示例代码

@HystrixCommand(fallbackMethod = "fallbackMethod")
public String callService() {
   
    return restTemplate.getForObject("http://service-provider/service", String.class);
}

public String fallbackMethod() {
   
    return "Fallback response";
}

5. Spring Cloud中的智能路由(Zuul)是如何工作的?

答案

  • 路由网关:Zuul是一个路由网关,可以将请求路由到不同的后端服务。
  • 过滤器:Zuul通过过滤器对请求进行预处理和后处理,支持鉴权、限流等功能。
  • 动态路由:可以根据配置动态路由请求到不同的服务。

示例代码

// Zuul配置
@EnableZuulProxy
@SpringBootApplication
public class GatewayApplication {
   
    public static void main(String[] args) {
   
        SpringApplication.run(GatewayApplication.class, args);
    }
}

# application.yml
zuul:
  routes:
    service-provider:
      path: /service/**
      serviceId: service-provider

6. Spring Cloud中的服务熔断(Resilience4j)是如何工作的?

答案

  • 熔断器:Resilience4j是一个轻量级的容错库,提供了熔断器、重试、速率限制等功能。
  • 工作原理:当调用远程服务失败达到一定阈值时,熔断器会打开,后续请求直接返回失败结果。
  • 配置:通过注解和配置文件可以方便地集成到Spring Boot应用中。

示例代码

@CircuitBreaker(name = "serviceCircuitBreaker", fallbackMethod = "fallbackMethod")
public String callService() {
   
    return restTemplate.getForObject("http://service-provider/service", String.class);
}

public String fallbackMethod() {
   
    return "Fallback response";
}

7. Spring Cloud中的服务追踪(Sleuth + Zipkin)是如何工作的?

答案

  • 服务追踪:Spring Cloud Sleuth和Zipkin结合使用,可以追踪分布式系统中的请求链路。
  • Sleuth:负责生成和传播跟踪信息,如traceId和spanId。
  • Zipkin:负责收集和展示跟踪信息,提供可视化界面。

示例代码

// 添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>

# application.yml
spring:
  zipkin:
    base-url: http://localhost:9411

8. Spring Cloud中的服务限流(RateLimiter)是如何工作的?

答案

  • 限流器:Resilience4j提供的RateLimiter可以限制请求的频率,防止过载。
  • 工作原理:通过令牌桶或漏桶算法限制请求的频率。
  • 配置ÿ

标签:面试题,服务,工作,Spring,如何,限流,Java,Cloud
From: https://blog.csdn.net/qq_41089021/article/details/143479704

相关文章

  • 程序员面试题目之栈的用法
    【题目】        实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。【要求】        1.pop、push、getMin操作的时间复杂度都是O(1)。        2.设计的栈类型可以使用现成的栈结构。【解答】......
  • Java面试系列-MySQL面试题20道,InnoDB,索引类型,事务隔离级别,锁机制,MVCC,主从复制,慢查询,分
    文章目录1.MySQL中的InnoDB和MyISAM存储引擎有什么区别?2.MySQL中的索引类型有哪些?3.MySQL中的索引是如何工作的?4.MySQL中的事务隔离级别有哪些?5.MySQL中的锁机制有哪些?6.MySQL中的MVCC(多版本并发控制)是如何工作的?7.MySQL中的主从复制是如何工作的?8.MySQL中的分区......
  • JavaScript Kruskal 最小生成树 (MST) 算法(Kruskal’s Minimum Spanning Tree (MST) A
             对于加权、连通、无向图,最小生成树(MST)或最小权重生成树是权重小于或等于其他所有生成树权重的生成树。Kruskal算法简介:        在这里,我们将讨论Kruskal算法来查找给定加权图的MST。         在Kruskal算法中,按升序对给定图的所......
  • 158java ssm springboot基于Hive的大数据高校学生考试分析可视化系统考试评估(源码+文
         文章目录系列文章目录前言一、详细视频演示二、项目部分实现截图三、技术栈后端框架springboot前端框架vue持久层框架MyBaitsPlus系统测试四、代码参考源码获取前言......
  • 【转型必看】Java到AI,程序员的逆袭秘籍,转行人工智能不再是梦!
    随着技术的不断进步,人工智能(AI)已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域,如Java,转向人工智能领域,今天小编和大家一起来探讨Java开发者是否可以转型到人工智能,转型的优势,薪资对比,以及转型所需的知识和学习路线等。01Java开发者能否转......
  • 156java ssm springboot基于hive的大数据安顺旅游景点数据分析可视化系统旅游门票(源码
        文章目录系列文章目录前言一、详细视频演示二、项目部分实现截图三、技术栈后端框架springboot前端框架vue持久层框架MyBaitsPlus系统测试四、代码参考源码获取前言......
  • Java中的序列化和反序列化是什么
    序列化是将对象转换为字节流的过程,这样对象可以通过网络传输、持久化存储或者缓存。Java提供了java.io.Serializable接口来支持序列化,只要类实现这个接口,就可以将该类的对象进行序列化。反序列化是将字节流重新转换为对象的过程,即从存储中读取数据并重新创建对象。其他应用......
  • JavaScript中的this到底是什么?
    写在前面在JavaScript中,this关键字是一个非常重要的概念,它指向当前执行上下文中的对象。理解this的工作原理对于编写高效、可维护的JavaScript代码至关重要。本文将深入探讨this关键字的用法和规则。什么是this?this是一个特殊的关键字,在不同的上下文中可以指向不同的对象......
  • JavaScript中的变量作用域
    写在前面在JavaScript中,变量作用域是指变量在代码中可见的范围。理解变量作用域对于编写高效、可维护的JavaScript代码至关重要。本文将深入探讨JavaScript中的变量作用域,包括全局作用域、函数作用域和块级作用域。全局作用域在JavaScript中,任何在函数或块之外声明的变量......
  • 服务器上mysqld,java的进程Out of Memory,被kernel kill 掉了
    /var/log/messages里面日志如下Aug1019:47:16VM-0-7-centoskernel:8936totalpagecachepagesAug1019:47:16VM-0-7-centoskernel:0pagesinswapcacheAug1019:47:16VM-0-7-centoskernel:Swapcachestats:add0,delete0,find0/0Aug1019:47:16VM-0......