面试必备:SpringMVC并发安全与RabbitMQ实战解析
需积分: 11 67 浏览量
更新于2024-08-05
收藏 4KB MD 举报
"面试常见问题汇总"
面试中常常会遇到各种技术问题,特别是在IT领域,面试官通常会测试候选人的基础知识、实践经验以及问题解决能力。以下是一些常见的面试问题及其详细解答,涵盖了SpringMVC、RabbitMQ、设计模式以及分布式事务。
### 一、SpringMVC:如何保证Controller的并发安全
在SpringMVC框架中,Controller默认是单例的,这意味着多个请求可能会共享同一个Controller实例。由于Java对象的实例变量在多线程环境下可能存在并发问题,因此Controller中的实例变量不是线程安全的。为了避免数据逻辑混乱,应避免在Controller中定义实例变量。如果确实需要,可以通过`@Scope("prototype")`注解将Controller设置为多例模式,这样每个请求都会创建一个新的Controller实例。
### 二、RabbitMQ的问题
#### 消息的可靠性
1. **持久化**:Exchange、queue和message都可以设置为持久化,确保即使Broker重启,消息也不会丢失。
2. **生产方确认Confirm**:生产者发送的消息会被RabbitMQ确认,确保消息已送达。
3. **消费方确认ACK**:手动确认机制可以在业务处理成功后签收消息,如果处理失败则拒绝签收,消息将重新投递。
4. **消费者限流机制**:通过`prefetch`属性限制消费端一次性拉取的消息数量,同时必须手动确认。
5. **TTL**:消息存活时间,超过设定时间未被消费则自动删除。
6. **死信队列DLX**:消息成为DeadMessage后,可以路由到死信交换机,进行后续处理。
7. **延迟队列**:适用于需要在特定时间后处理的消息,例如订单超时、短信通知等,可以使用TTL+DLX实现。
8. **消息追踪**:记录消息从生产到消费的完整路径,方便排查问题。
9. **消息的幂等性**:使用乐观锁等策略,确保相同消息多次处理结果一致。
### 三、设计模式
1. **单例模式**:确保类只有一个实例并提供全局访问点,有多种实现方式,如双重检查锁、饿汉、懒汉、静态内部类和枚举。其中,双重检查锁是线程安全的懒汉式实现。
### 四、分布式事务
分布式事务是解决跨数据库或服务间事务一致性的问题,常见的解决方案包括TCC(Try-Confirm-Cancel)、SEATA(分布式事务解决方案)和FAT(最终一致性事务)等。
以上只是面试中可能遇到的一些问题及基础解答,实际面试中还需要深入理解和应用这些知识,结合具体项目经验进行讨论。在准备面试时,理解并能灵活运用这些技术概念是非常关键的。
2023-08-10 上传
2021-10-30 上传
qq_31570853
- 粉丝: 0
- 资源: 2
最新资源
- 仿7881触屏版游戏交易平台手机wap游戏网站模板.rar_网站开发模板含源代码(css+html+js+图样).zip
- sugoifit-system:这是为小型企业建立业务管理系统的重要项目
- STC12_mcu_ucos_source,遗传算法源码c语言,c语言
- exp-compression-test-experiment-iiith:该实验属于基础工程力学和材料强度实验室的全名
- 用于 MATLAB 的视频适配器设备(网络摄像头)设置:用于 MATLAB 的视频适配器设备设置-matlab开发
- SnapperML:SnapperML是用于机器学习的框架。 它具有许多功能,包括通过docker实例的可伸缩性和可再现性
- Data-Structures-and-Algorithms-Python:理解和实践python中的数据结构和算法所需的所有基本资源和模板代码,很少有小项目来演示其实际应用
- 有用的参考书
- code-learn:框架源码学习笔记
- CPU控制的独立式键盘扫描实验_单片机C语言实例(纯C语言源代码).zip
- FDNPKG:FreeDOS一个启用网络的软件包管理器-开源
- arduinolearn,ios的c语言源码,c语言
- 华硕主板Intel 网卡(I225V 网卡)固件更新 版本1.5,解决老版本固件断网问题。
- 迷失财富:通过创建一个小游戏来学习C ++:迷失财富
- webBasic
- crawler:中大型爬行动物