面试必备:SpringMVC并发安全与RabbitMQ实战解析
需积分: 11 24 浏览量
更新于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
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器