前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >看完这篇,MQ面试大厂稳了!

看完这篇,MQ面试大厂稳了!

作者头像
测试小牛
发布2023-09-01 09:23:51
2950
发布2023-09-01 09:23:51
举报
文章被收录于专栏:测试小牛进阶测试小牛进阶

阅读本文大概需要 3.9分钟。

你好,我是测试小牛。

最近这年头,面试找工作不问点中间件相关知识好像说不过去,而面试考察最多的中间件就是缓存数据库Redis和消息中间件MQ。

关于Redis相关面试技能之前总结过,详情参考这篇文章:

看完这篇,中间件面试大厂稳了!

今天来聊聊MQ相关知识,以及面试常考点有哪些,废话不多说,直接怼干货!

首先,MQ 是 Message Queue(消息队列)的简称,主要用来在分布式系统中传递消息,消息的格式一般是json格式。

给大家举个例子,假设我们有一个简单的订单系统,订单系统需要将用户下单的消息发送到 MQ 中,消息内容包含订单 ID、用户 ID、下单时间等信息。则发送的消息可能长这样:

然后订单系统将上面的消息发送到MQ消息队列中去,然后等待其它系统进行接收消费消息即可,以上就是消息队列的一个简单过程,先建立一个直观认识,帮助大家去更好的理解MQ是什么东西。

一.项目中为什么使用MQ,它的用途,优缺点是什么?

优点:

  • 解耦性强 它可以将系统划分为消息的接收方和发送方,大大降低了系统的耦合度。
  • 异步处理 可以异步地接收和处理消息,从而避免了同步调用的繁琐和复杂的请求响应流程,提高了系统的性能和吞吐量。
  • 容错能力强 MQ能够通过消息队列的复制和备份机制,从而保证消息的可靠性和高可用性,大大降低系统意外故障的影响。
  • 削峰 消息队列可以缓存和储存消息数据,在高并发和突发流量的情况下,可以在短时间内平滑的处理数据,提高系统的稳定性和效率。

缺点:

  • 增加系统复杂度 MQ系统的引入将增加系统的复杂度和维护成本,在使用 MQ 时需要考虑其带来的额外开销和部署难度。
  • 消息处理顺序不确定 使用 MQ 的异步处理方式,导致消息的处理顺序不确定,需要特别设计发挥保证消息处理的顺序。
  • 系统单点故障 MQ 的单个节点故障有可能导致消息传递的失败,因此需要采用集群模式和冗余备份等机制来保证系统的高可用性。

二.消息队列的工作原理是什么?

当生产者产生一条消息后,消息会被发送到消息队列中,消费者对消息进行消费,从而实现生产者与消费者之间的消息通信。

三.说下常见的MQ有哪些,有什么区别?项目中如何选择哪个消息队列?

目前市场上公司用的最多的MQ有三种,分别是RabbitMQ,Kafka,RocketMQ。

RabbitMQ 使用的是 AMQP 协议和消息持久化的方式进行数据存储;Kafka 利用磁盘存储技术进行数据持久化,数据存储效率高,但不支持事务;RocketMQ 利用多级存储技术进行数据持久化,支持顺序写和随机读操作,数据存储可靠性高。

RabbitMQ 适用于高并发、高吞吐量的交换场景;Kafka 适用于日志收集和分析等场景;RocketMQ 适用于分布式架构和海量数据处理的场景。

四.详细介绍下目前使用相对更多的Kafka,以及它的优缺点?

Kafka 是由Apache Software Foundation 公司开发的,具有高可用、高性能、水平扩展能力强等特点,适用于大规模数据处理和实时数据采集等场景。

它的优点是能够支持每秒百万级别的消息处理,具有出色的吞吐量。支持TB级别的消息存储。消息可靠性高,不容易出现数据丢失和消息重复等问题。同时,Kafka也支持消息的备份和复制,可以提供更高的可靠性保障。

它的缺点是配置复杂,其集群部署和维护需要相应的技术背景和专业知识。一般需要有专业的运维人员进行管理,所需的经验要求比较高。

而且因为Kafka分布式集群机制和大数据存储特性使得它不太适合小规模的系统,因为这样会增加系统构建和维护的难度。

五.MQ如何避免消息重复消费?

消息去重:当消息生产者向消息队列系统发送消息时,使用全局唯一的 MessageID 或者业务主键作为消息的唯一标识,在消费者消费消息时,根据该消息唯一标识进行去重,避免重复消费。

消息锁定:当消息消费者处理一条消息时,首先将消息锁定,然后消费并完成处理逻辑,最后再将消息解锁。这样,其他消费者在消费该条消息时,发现其被锁定,就不会进行消费,从而避免消息的重复消费。

六.如何保证消息不丢失?

消息队列将接收到的消息持久化到磁盘中,以保证在消息队列异常或者重启的情况下,消息不会丢失。

七.说说你们项目中MQ一般怎么测试的,有哪些注意的点?

首先就是进行正向的业务逻辑测试,比如消息发送的字段以及接收的字段有无缺失等,以及对比是否相同。以及根据需求业务保证系统处理消息的正确性跟完整性。

其次进行反向的异常测试,在消息队列消费时,需要考虑各种异常情况,如消息重复消费、消息丢失、网络异常等,需要针对性地进行异常测试,验证系统对异常情况的处理能力。

除此之外,还需要考虑消息发失败重试的情况,在消息消费过程中,可能会出现因为异常等原因导致消费失败的情况,此时需要进行重试。

在重试测试中,需要模拟消费失败,验证消息队列系统对消息的重新处理能力以及对幂等性的支持。

最后,还需要考虑性能测试,在高并发访问的情况下系统正确处理消息的能力,是否会出现消息队列拥堵,宕机等情况。

以上,就是MQ面试经常考的相关知识点了。

因为今年行情不行,很多同学找工作投递了很多简历,连面试机会都没有,可以扫描下方二维码加我微信优化简历以及做面试辅导~添加备注简历即可!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试小牛进阶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档