admin 管理员组

文章数量: 1087139


2024年3月19日发(作者:dialogue完整视频)

Evaluation Only. Created with . Copyright 2002-2022 Aspose Pty Ltd.

在 GitHub / Gitee 编辑

:你好。

:你好。

(面试官在你的简历上面看到了,呦,有个亮点,你在项目里用过

MQ

,比如说你用过

ActiveMQ

:你在系统里用过消息队列吗?(面试官在随和的语气中展开了面试)

:用过的(此时感觉没啥)

:那你说一下你们在项目里是怎么用消息队列的?

:巴拉巴拉,“我们啥啥系统发送个啥啥消息到队列,别的系统来消费啥啥的。比如我

们有个订单系统,订单系统每次下一个新的订单的时候,就会发送一条消息到

ActiveMQ

面去,后台有个库存系统负责获取消息然后更新库存。”

(部分同学在这里会进入一个误区,就是你仅仅就是知道以及回答你们是怎么用这个消息队列

的,用这个消息队列来干了个什么事情?)

:那你们为什么使用消息队列啊?你的订单系统不发送消息到

MQ

,直接订单系统调

用库存系统一个接口,咔嚓一下,直接就调用成功,库存不也就更新了。

:额。。。(楞了一下,为什么?我没怎么仔细想过啊,老大让用就用了),硬着头皮

胡言乱语了几句。

(面试官此时听你楞了一下,然后听你胡言乱语了几句,开始心里觉得有点儿那什么了,怀疑

你之前就压根儿没思考过这问题)

:那你说说用消息队列都有什么优点和缺点?

(面试官此时心里想的是,你的

MQ

在项目里为啥要用,你没怎么考虑过,那我稍微简单点

儿,我问问你消息队列你之前有没有考虑过如果用的话,优点和缺点分别是啥?)

:这个。。。(确实平时没怎么考虑过这个问题啊。。。胡言乱语了)

(面试官此时心里已经更觉得你这哥儿们不行,平时都没什么思考)

Kafka

ActiveMQ

RabbitMQ

RocketMQ

都有什么区别?

(面试官问你这个问题,就是说,绕过比较虚的话题,直接看看你对各种

MQ

中间件是否了

Evaluation Only. Created with . Copyright 2002-2022 Aspose Pty Ltd.

解,是否做过功课,是否做过调研)

:我们就用过

ActiveMQ

,所以别的没用过。。。区别,也不太清楚。。。

(面试官此时更是觉得你这哥儿们平时就是瞎用,根本就没什么思考,觉得不行)

:那你们是如何保证消息队列的高可用啊?

:这个。。。我平时就是简单走 API 调用一下,不太清楚消息队列怎么部署的。。。

:如何保证消息不被重复消费啊?如何保证消费的时候是幂等的啊?

:啥?(

MQ

不就是写入&消费就可以了,哪来这么多问题)

:如何保证消息的可靠性传输啊?要是消息丢失了怎么办啊?

:我们没怎么丢过消息啊。。。

:那如何保证消息的顺序性?

:顺序性?什么意思?我为什么要保证消息的顺序性?它不是本来就有顺序吗?

:如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百

万消息持续积压几小时,说说怎么解决?

:不是,我这平时没遇到过这些问题啊,就是简单用用,知道

MQ

的一些功能。

:如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路。

:。。。。。我还是走吧。。。。

这其实是面试官的一种面试风格,就是说面试官的问题不是发散的,而是从一个小点慢慢铺

开。比如说面试官可能会跟你聊聊高并发话题,就这个话题里面跟你聊聊缓存、

MQ

等等东

西,。

其实上面是一个非常典型的关于消息队列的技术考察过程,好的面试官一定是从你做过的某一

个点切入,然后层层展开深入考察,一个接一个问,直到把这个技术点刨根问底,问到最底

层。

为什么使用消息队列?

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

Evaluation Only. Created with . Copyright 2002-2022 Aspose Pty Ltd.

Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?

其实面试官主要是想看看:

,你知不知道你们系统里为什么要用消息队列这个东西?

不少候选人,说自己项目里用了 Redis、MQ,但是其实他并不知道自己为什么要用这个东西。

其实说白了,就是为了用而用,或者是别人设计的架构,他从头到尾都没思考过。

没有对自己的架构问过为什么的人,一定是平时没有思考的人,面试官对这类候选人印象通常

很不好。因为面试官担心你进了团队之后只会木头木脑的干呆活儿,不会自己思考。

,你既然用了消息队列这个东西,你知不知道用了有什么好处&坏处?

你要是没考虑过这个,那你盲目弄个 MQ 进系统里,后面出了问题你是不是就自己溜了给公司

留坑?你要是没考虑过引入一个技术可能存在的弊端和风险,面试官把这类候选人招进来了,

基本可能就是挖坑型选手。就怕你干 1 年挖一堆坑,自己跳槽了,给公司留下无穷后患。

,既然你用了 MQ,可能是某一种 MQ,那么你当时做没做过调研?

你别傻乎乎的自己拍脑袋看个人喜好就瞎用了一个 MQ,比如 Kafka,甚至都从没调研过业界流

行的 MQ 到底有哪几种。每一个 MQ 的优点和缺点是什么。每一个 MQ

,但是

就是看用在哪个场景可以。

如果是一个不考虑技术选型的候选人招进了团队,leader 交给他一个任务,去设计个什么系

统,他在里面用一些技术,可能都没考虑过选型,最后选的技术可能并不一定合适,一样是留

坑。

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

景里用消息队列是什么?

面试官问你这个问题,是说,你们公司有个什么,这个业务场景有

个什么技术挑战,如果不用 MQ 可能会很麻烦,但是你现在用了 MQ 之后带给了你很多的好

处。

先说一下消息队列常见的使用场景吧,其实场景有很多,但是比较核心的有 3 个:

Evaluation Only. Created with . Copyright 2002-2022 Aspose Pty Ltd.

、。

看这么个场景。A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数

据呢?那如果 C 系统现在不需要了呢?A 系统负责人几乎崩溃......

在这个场景中,A 系统跟其它各种乱七八糟的系统严重耦合,A 系统产生一条比较关键的数

据,很多系统都需要 A 系统将这个数据发送过来。A 系统要时时刻刻考虑 BCDE 四个系统如果

挂了该咋办?要不要重发,要不要把消息存起来?头发都白了啊!

如果使用 MQ,A 系统产生一条数据,发送到 MQ 里面去,哪个系统需要数据自己去 MQ 里面消

费。如果新系统需要数据,直接从 MQ 里消费即可;如果某个系统不需要这条数据了,就取消

对 MQ 消息的消费即可。这样下来,A 系统压根儿不需要去考虑要给谁发送数据,不需要维护

这个代码,也不需要考虑人家是否调用成功、失败超时等情况。


本文标签: 消息 队列 系统 面试官 技术