首页 > 其他分享 >2024RabbitMQ面试题

2024RabbitMQ面试题

时间:2024-07-02 12:58:56浏览次数:3  
标签:面试题 2024RabbitMQ 队列 系统 BCD MQ 消息 写库

1、为什么使用消息队列?

        其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在 这个场景里用消息队列是什么?

        面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务场 景有个什么技术挑战,如果不用 MQ 可能会很麻烦,但是你现在用了 MQ 之后带给了你很 多的好处。消息队列的常见使用场景,其实场景有很多,但是比较核心的有 3 个:解耦、异 步、削峰。

解耦: A 系统发送个数据到 BCD 三个系统,接口调用发送,那如果 E 系统也要这个数据呢?那 如果 C 系统现在不需要了呢?现在 A 系统又要发送第二种数据了呢?而且 A 系统要时时刻 刻考虑 BCDE 四个系统如果挂了咋办?要不要重发?我要不要把消息存起来? 你需要去考虑一下你负责的系统中是否有类似的场景,就是一个系统或者一个模块,调 用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不 需要直接同步调用接口的,如果用 MQ 给他异步化解耦,也是可以的,你就需要去考虑在你 的项目里,是不是可以运用这个 MQ 去进行系统的解耦。

异步: A 系统接收一个请求,需要在自己本地写库,还需要在 BCD 三个系统写库,自己本地写 库要 30ms,BCD 三个系统分别写库要 300ms、450ms、200ms。最终请求总延时是 30 + 300 + 450 + 200 = 980ms,接近 1s,异步后,BCD 三个系统分别写库的时间,A 系统就不再考虑了。

削峰: 每天 0 点到 16 点,A 系统风平浪静,每秒并发请求数量就 100 个。结果每次一到 16 点 ~23 点,每秒并发请求数量突然会暴增到 1 万条。但是系统最大的处理能力就只能是每秒钟 处理 1000 个请求啊。怎么办?需要我们进行流量的削峰,让系统可以平缓的处理突增的请 求。

2、消息队列有什么优点和缺点?

优点上面已经说了,就是在特殊场景下有其对应的好处,解耦、异步、削峰。 缺点呢?

系统可用性降低 :系统引入的外部依赖越多,越容易挂掉,本来你就是 A 系统调用 BCD 三个系统的接口 就好了,ABCD 四个系统好好的,没啥问题,你偏加个 MQ 进来,万一 MQ 挂了怎么办?MQ 挂了,整套系统崩溃了,业务也就停顿了。 系统复杂性提高 硬生生加个 MQ 进来,怎么保证消息没有重复消费?怎么处理消息丢失的情况?怎么保 证消息传递的顺序性?

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

所以消息队列实际是一种非常复杂的架构,你引入它有很多好处,但是也得针对它带来 的坏处做各种额外的技术方案和架构来规避掉。

3、常见消息队列的比较

4、Kafka 的特性

1.消息持久化 2.高吞吐量 3.扩展性 4.多客户端支持 5. Kafka Streams

5、RabbitMQ 中的 vhost 起什么作用?

        虚拟消息服务器,vhost,本质上就是一个 mini 版的 mq 服务器,有自己的队列、交换 器和绑定,最重要的,自己的权限机制。Vhost 提供了逻辑上的分离,可以将众多客户端进 行区分,又可以避免队列和交换器的命名冲突。Vhost 必须在连接时指定,rabbitmq 包含缺 省 vhost:“/”,通过缺省用户和口令 guest 进行访问。

        rabbitmq 里创建用户,必须要被指派给至少一个 vhost,并且只能访问被指派内的队列、 交换器和绑定。Vhost 必须通过 rabbitmq

6、RabbitMQ 上的一个 queue 中存放的 message 是 否有数量限制?限制是多少

        默认情况下一般是无限制,因为限制取决于机器的内存,但是消息过多会导致处理效率 的下降。

        可以通过参数来限制, x-max-length :对队列中消息的条数进行限制 , x-max-length-bytes :对队列中消息的总量进行限制

7、说一说 Kafka 你熟悉的参数?

必选属性 创建生产者对象时有三个属性必须指定

标签:面试题,2024RabbitMQ,队列,系统,BCD,MQ,消息,写库
From: https://blog.csdn.net/pujungong/article/details/140094837

相关文章

  • 【面试题】网络UDP协议(第五篇)
    1.UDP如何实现可靠?UDP协议是面向无连接的、不可靠的传输层协议,可以通过在应用层添加一些机制来实现UDP的可靠传输。序列号和确认应答机制:为每个发送的数据包分配一个唯一的序列号,并且要求接收方发送确认应答来确认已经收到数据包。重传机制:在数据发出后,如果超过某个时间没......
  • 面试题-Spring家族与SpringIOC
    1.spring家族的介绍Spring简单图:2.IOC原理IOC就是原先代码里需要开发者实现对象的创建和关系依赖,反转交给SpringIOC容器管理对象的生命周期和对象之间的依赖关系。依赖注入的方式:Setter:实现特定属性的publicsetter方法来让IOC容器调用所依赖类型的对象Interfa......
  • 消息队列面试题----基础篇
    ##1、为什么要用MQ?MQ有哪些使用场景?###什么是消息队列消息队列是一种异步的通信方式,用于在分布式系统中管理消息传递。消息队列采用了生产者-消费者模型,生产者将消息发送到队列中,而消费者则从队列中接收消息。###为什么要使用消息队列其实就是问问你消息队列都有哪些使......
  • 大数据面试题之Spark(6)
              Spark输出文件的个数,如何合并小文件?Spark的driver是怎么驱动作业流程的?SparkSQL的劣势?介绍下SparkStreaming和StructedStreamingSpark为什么比Hadoop速度快?DAG划分Spark源码实现?SparkStreaming的双流join的过程,怎么做的?Spark的Bl......
  • 高级java每日一道面试题-2024年7月1日
    题目:请解释Java中的内存泄漏,并说明如何检测和避免内存泄漏。答案:内存泄漏指的是程序中不再使用的对象,由于某些原因没有被垃圾回收器回收,仍然占据着内存空间,导致可用内存逐渐减少,最终可能会导致程序性能下降甚至崩溃。常见的导致内存泄漏的原因包括:长生命周期的对象持......
  • Vue 常见面试题及答案
    本人详解作者:王文峰,参加过CSDN2020年度博客之星,《Java王大师王天师》公众号:JAVA开发王大师,专注于天道酬勤的Java开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯山峯转载说明:务必注明来源(注明:作者:王文峰哦)学习教程(传......
  • 【算法专题--栈】用队列实现栈 -- 高频面试题(图文详解,小白一看就懂!!)
    目录一、前言二、题目描述三、解题方法⭐两个队列实现栈......
  • LLM——10个大型语言模型(LLM)常见面试题以及答案解析
    今天我们来总结以下大型语言模型面试中常问的问题1、哪种技术有助于减轻基于提示的学习中的偏见?A.微调Fine-tuningB.数据增强DataaugmentationC.提示校准PromptcalibrationD.梯度裁剪Gradientclipping答案:C提示校准包括调整提示,尽量减少产生的输出中的偏差......
  • 大数据面试题之Spark(3)
    目录Spark的哪些算子会有shuffle过程?Spark有了RDD,为什么还要有Dataform和DataSet?Spark的RDD、DataFrame、DataSet、DataStream区别?Spark的Job、Stage、Task分别介绍下,如何划分?Application、job、Stage、task之间的关系Stage内部逻辑为什么要根据宽依赖划分Stage?......
  • 测试面试题
    冒烟测试是什么意思呀?冒烟测试(SmokeTesting)是一种初步的测试,主要是用来验证软件的基本功能是否正常运行。就像在买一个电器之前,先插电看它是否能启动一样,冒烟测试会检查软件最重要的功能是否工作正常,如果基本功能有问题,测试就不会继续深入。你们公司的项目流程是什么呀?每......