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

相关推荐
侧耳倾听1113 分钟前
java集合相关的api-总结
java·开发语言
贺函不是涵15 分钟前
【沉浸式求职学习day43】【Java面试题精选3】
java·开发语言·学习
xiaobin8899921 分钟前
matlab官方免费下载安装超详细教程2025最新matlab安装教程(MATLAB R2024b)
java·开发语言·其他·matlab
计算机毕设定制辅导-无忧学长24 分钟前
Spring Boot 与 RabbitMQ 的深度集成实践(二)
spring boot·rabbitmq·java-rabbitmq
Takoony25 分钟前
正则表达式r前缀使用指南
开发语言·正则表达式·r语言
搏博31 分钟前
WPS中代码段的识别方法及JS宏实现
开发语言·javascript·wps
vortex536 分钟前
Bash fork 炸弹 —— :(){ :|:& };:
运维·服务器·开发语言·网络安全·bash
小伍_Five41 分钟前
spark数据处理练习题详解【下】
java·大数据·spark·scala
Pacify_The_North1 小时前
【进程控制二】进程替换和bash解释器
linux·c语言·开发语言·算法·ubuntu·centos·bash
xiaohanbao091 小时前
day29 python深入探索类装饰器
开发语言·python·学习·机器学习·pandas