"这篇文档汇总了Spring框架相关的高级和中级面试题目,涵盖了Spring MVC的主要组件以及Hystrix的容错机制。"
### Spring MVC 主要组件详解
Spring MVC 是 Spring 框架的一个模块,主要负责处理 Web 请求。其核心组件包括:
1. **前端控制器 DispatcherServlet**
DispatcherServlet 是 Spring MVC 的入口点,它负责接收 HTTP 请求,并将请求分发到合适的处理器。通过配置,它可以减少各个组件间的耦合。
2. **处理器映射器 HandlerMapping**
HandlerMapping 负责根据请求的 URL 或其他请求属性找到对应的处理器(Handler)。它提供了灵活的映射策略,比如基于注解的映射、基于配置的映射等。
3. **处理器适配器 HandlerAdapter**
HandlerAdapter 是一个中介角色,它使得 Spring MVC 可以支持多种类型的处理器。它负责调用处理器执行实际的业务逻辑,不论处理器是简单的 POJO 还是实现了特定接口的类。
4. **处理器 Handler**
Handler 即业务处理逻辑,通常由开发者编写,可以是简单的 Java 类,也可以是实现了特定接口的类,如 Controller。Handler 接收请求参数,处理业务,然后返回 Model 和 View。
5. **视图解析器 ViewResolver**
视图解析器的作用是将逻辑视图名称解析为实际的视图对象。例如,将 "success" 解析为 "/WEB-INF/jsp/success.jsp"。这允许开发者使用逻辑视图名,而不是硬编码具体的视图路径。
6. **视图 View**
View 是一个接口,它有多个实现,如 JSP、FreeMarker、PDF 等。View 负责渲染并返回给客户端响应内容。
### Hystrix 容错机制
Hystrix 是 Netflix 开源的一个延迟和容错库,它主要用于在分布式系统中实现服务降级和熔断,以防止服务雪崩效应。当调用远程服务或第三方库时,Hystrix 会创建一个命令(Command)执行上下文,这个上下文运行在单独的线程中,从而避免单个服务的故障影响整个系统。
1. **隔离**
Hystrix 使用线程池或信号量对服务调用进行隔离,每个服务有自己的执行上下文,限制并发量,防止过度消耗资源。
2. **短路保护**
当服务调用达到预设的失败率时,Hystrix 会开启短路保护,直接返回 fallback 结果,而不再尝试调用目标服务,从而快速失败,防止级联故障。
3. **熔断器模式**
类似于电路断路器,Hystrix 会监控服务调用的成功、失败、超时情况。当失败率达到阈值时,熔断器打开,所有请求都将直接返回 fallback 结果。一段时间后,熔断器会进入半开状态,允许少量请求通过,如果这些请求成功,熔断器关闭;否则再次打开。
4. **降级策略**
当服务不可用或者熔断时,Hystrix 提供 fallback 机制,可以是预定义的备选逻辑,或者是默认返回值,以保证系统的可用性。
这些机制结合使用,使得 Hystrix 成为了构建高可用微服务系统的重要工具,特别是在大型分布式系统中,能有效提高系统的稳定性和容错性。