2024Java高频面试题之MQ消息中间件,面试都问些什么?(附详细答案)

最近很多同学问我有没有java学习资料,我根据我从小白到架构师多年的学习经验整理出来了一份50W字面试解析文档、简历模板、学习路线图、java必看学习书籍 、 需要的小伙伴 可以关注我
公众号:" Tom聊架构 ", 回复暗号:" 578 "即可获取

一、MQ 简介

MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。

消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

二、面试常见问题

问题一:为什么使用消息队列?

面试官对于这个问题的期望回答可能是:"你们公司有什么业务场景,这个业务场景有什么技术挑战,如果不用MQ可能会很麻烦,但是再用了之后带来了很多好处。"

消息队列的常见使用场景有很多但是核心的有三个:解耦、异步、削峰

1、解耦

(1)场景描述

A系统发送一个数据到BCD三个系统,接口调用发送,这时候如果E系统也要这个数据,C系统现在不需要了,A系统又要发送第二种数据,而且A系统还要时时刻刻考虑BCDE四个系统如果挂了怎么办?要不要重发?要不要把消息存起来?

(2)使用了MQ之后的解耦场景

(3)面试技巧

你需要考虑,你负责的系统中是否有类似的场景,就是一个系统或者一个模块,调用了多个系统或者模块,相互之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的,如果想要通过MQ给它异步化解耦,你就需要去考虑在你的项目里是不是可以运用这个MQ去进行系统解耦 。

2、异步

(1)场景描述

系统A接受一个请求,需要在自己本地写库,还需要在系统BCD三个系统写库,自己本地写库需要3ms。BCD分别需要300ms、450ms、200ms。最终总耗时长:953ms,接近1s。给用户的体验感觉一点也不好。

(2)不用MQ的同步高延时请求场景

(3)使用MQ异步化之后的接口性能优化

3、削峰

(1)场景描述

每天0点到11点,系统A风平浪静,每秒并发请求数量100个。结果每到11点至13点,每秒并发请求数量就会暴增大1万条 。但是系统最大的处理能力就只能每秒钟处理1000个请求。

(2)没有用MQ的时候高峰期系统被打死的场景

(3)使用MQ来进行削峰的场景

问题二:消息队列的优点和缺点?

1、优点

特殊场景下解耦、异步、削峰。

2、缺点

(1)系统可用性降低

系统引入的外部依赖越多,越容易挂掉。本来你就是A系统调用BCD三个系统的接口就好了,ABCD四个系统运行起来没什么问题,但你偏加个MQ进来,万一MQ挂了,整套系统也就崩溃了。

(2)系统复杂性提高

硬生生加个MQ进来,无法保证消息没有重复消费、无法保证消息传递的顺序性,也很难处理消息丢失的情况。

(3)一致性问题

系统A处理完了直接返回成功了,人家都认为你这个请求成功了;但问题是,要是BCD三个系统中BD系统成功了,结果C系统写库失败了,那数据就不一致了。

所以消息队列是一种非常复杂的架构,引入它有很多好处,但是也得针对他带来的坏处做各种额外的技术方案和架构来规避掉。做好之后你会发现系统复杂度提升了一个数量积,但是关键时刻还是要用的。

问题三:kafka、activemq、rabbitmq、rocketmq都有什么优缺点?

三、2024最新Java高频面试题 (金三银四面试必备!!!)

视频链接如下🢃🢃🢃点击即可观看

https://gupaoedu-tom.blog.csdn.net/article/details/135596985?ydreferer=aHR0cHM6Ly9tcC5jc2RuLm5ldC9tcF9ibG9nL21hbmFnZS9hcnRpY2xlP3NwbT0xMDExLjIxMjQuMzAwMS41Mjk4

相关推荐
哈里谢顿2 小时前
1000台裸金属并发创建中的重难点问题分析
面试
哈里谢顿2 小时前
20260303面试总结(全栈)
面试
怒放吧德德3 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆5 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
over6977 小时前
从 LLM 到全栈 Agent:MCP 协议 × RAG 技术如何重构 AI 的“做事能力”
面试·llm·mcp
心之语歌7 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
SuperEugene8 小时前
Vue状态管理扫盲篇:如何设计一个合理的全局状态树 | 用户、权限、字典、布局配置
前端·vue.js·面试
华仔啊8 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang8 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang10 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计