#探寻人工智能,人与AI全新序章#

很多Java程序员都有这样的经历:面试官看着简历,随口一句:“你们公司生产环境用的是什么消息中间件?”不少人立刻回答:“RabbitMQ。”结果面试官点点头,又接着问:“为什么不用Kafka?RocketMQ不好吗?ActiveMQ呢?”瞬间大脑一片空白。

其实,这道题真正考察的并不是你会不会MQ,而是你是否具备技术选型思维,今天,小米就给大家讲一个故事。

Java社招面试题:你们公司生产环境用的是什么消息中间件

前几天,一位准备跳槽的朋友阿杰找到了我,他说:"小米,我最近准备面试一家互联网公司,结果第一轮技术面就被问懵了。"

我笑着问:"问啥了?"

他说:"面试官问:你们公司生产环境使用什么消息中间件?为什么选择它?为什么不用Kafka?"

他说自己当时回答:"我们公司用RabbitMQ……然后就没有然后了……"

面试官继续问:"为什么?"

空气突然安静。

其实,这个问题,就像老板问:你为什么买SUV,而不是跑车?真正想知道的不是车名,而是为什么你的公司适合这辆车,而MQ,也是一样。

MQ,就像一家物流公司

我们把整个系统想象成一个大型物流园,一家电商公司每天都会发生很多事情,例如:

  • 用户下单
  • 扣减库存
  • 发优惠券
  • 发短信
  • 发物流通知
  • 积分增加
  • 数据统计

如果全部同步完成,就像老板要求快递员一个人送全国所有快递,结果自然就是累死。

于是,公司决定成立一家物流中转站,所有业务都先把"包裹"送到物流中心,物流中心再慢慢派送,这个物流中心,就是MQ(Message Queue,消息队列),它负责:

  • 解耦
  • 削峰
  • 异步
  • 流量缓冲

所以几乎所有互联网公司都会使用MQ,真正不同的是到底选择哪一家物流公司。

我们公司生产环境为什么选择 RabbitMQ?

如果我是候选人,我通常会这样回答:

我们公司目前生产环境主要使用 RabbitMQ,主要用于订单、短信通知、库存同步、日志异步处理等业务。 之所以选择 RabbitMQ,主要是因为我们属于典型的业务系统,对消息可靠性要求较高,而消息吞吐量并没有达到互联网超大规模场景,因此 RabbitMQ 比较适合我们的业务。

这一段回答其实已经包含了三个关键信息:

  • 使用什么MQ
  • 用在哪里
  • 为什么选择它

面试官一般都会继续往下问。

RabbitMQ 为什么这么受欢迎?

RabbitMQ可以理解成一家非常正规的快递公司,它最大的特点就是稳,它基于AMQP协议,拥有非常丰富的消息模型,例如:

  • Direct
  • Topic
  • Fanout
  • Headers

各种交换机几乎可以满足所有业务,例如订单创建:

打开网易新闻 查看精彩图片

一个订单,可以同时通知多个系统,这就是RabbitMQ最擅长的事情,除此之外,它还有:

  • 消息确认ACK
  • 持久化
  • 死信队列
  • 延迟队列(插件)
  • 优先级队列
  • 重试机制
  • Publisher Confirm

所以很多传统互联网企业、金融企业、企业管理系统都会优先选择RabbitMQ。

那为什么还有那么多人选择 Kafka?

这时候,我又给阿杰举了个例子。

  • RabbitMQ像什么?像顺丰,服务非常好,每个快递都会认真处理,但是速度不是最快。
  • Kafka像什么?像铁路货运,一次可以拉几百万吨货,速度极快,但是它不是为了每一件包裹都做到极致服务。

Kafka最大的特点就是吞吐量极高,很多公司每天都会产生:

  • 日志
  • 埋点
  • 用户行为
  • Click流
  • 大数据采集

一天几十亿条消息,RabbitMQ根本扛不住,Kafka却非常适合,所以像:

  • 日志平台
  • ELK
  • 大数据
  • 实时计算
  • Flink
  • Spark Streaming

几乎都会优先Kafka。

RocketMQ 又是什么定位?

如果RabbitMQ是顺丰,Kafka是铁路,那么RocketMQ更像京东物流,为什么?

它最初就是阿里巴巴为了双十一开发出来的,特点就是既要快,也要可靠,尤其在:

  • 订单
  • 交易
  • 支付
  • 库存
  • 延迟消息
  • 事务消息

方面,非常成熟,它支持:

  • 顺序消息
  • 延迟消息
  • 定时消息
  • 事务消息
  • 消息回查

所以国内很多互联网公司都会使用RocketMQ,尤其电商行业。

ActiveMQ 为什么越来越少见?

很多老Java程序员第一次接触MQ,基本都是 ActiveMQ,因为Spring整合简单,学习成本低,但是后来发现:

  • 高并发能力一般。
  • 集群能力一般。
  • 维护成本越来越高。

慢慢就被RabbitMQ和RocketMQ替代了,现在很多公司已经很少作为新项目首选。

不同消息中间件技术选型分析

打开网易新闻 查看精彩图片

面试中应该怎么回答才更专业?

如果面试官问:你们公司为什么选择RabbitMQ?建议不要只回答:因为大家都用。

而应该从技术选型角度分析,例如:

我们公司的业务属于典型的互联网业务系统,消息量每天大约几百万到几千万级,没有达到日志平台那种几十亿条消息的规模,因此并不需要Kafka那种超高吞吐能力。相比之下,我们更关注消息可靠性、灵活的路由能力以及完善的重试、死信和确认机制。RabbitMQ 在这些方面比较成熟,Spring Boot 集成也非常方便,因此最终选择了 RabbitMQ。

如果公司使用RocketMQ,也可以回答:

我们业务涉及订单、支付、库存等核心交易流程,需要保证消息的一致性,同时需要事务消息、顺序消息、延迟消息等能力,因此 RocketMQ 更符合我们的业务特点。

如果公司使用Kafka,则可以回答:

我们主要用于日志采集、用户行为分析和实时数据处理,系统每天会产生海量消息,对吞吐量和横向扩展能力要求非常高,因此采用 Kafka 作为消息平台。

这样的回答,能够体现你理解的是业务驱动技术选型,而不是简单记住了一个产品名称。

面试官真正想听到什么?

很多人认为这道题是在考MQ,其实不是,它真正考察的是:你是否理解不同技术的定位,以及是否能够根据业务场景做出合理的技术选型。

没有哪一种消息中间件能够适用于所有场景:

  • RabbitMQ 擅长可靠消息和灵活路由;
  • Kafka 擅长海量数据流和高吞吐;
  • RocketMQ 在交易型互联网业务中表现突出;
  • ActiveMQ 更常见于历史项目维护。

真正优秀的工程师,不会说"这个技术最好",而会说:我们的业务特点是什么,我们需要解决什么问题,因此选择了最合适的消息中间件。

这,才是这道社招面试题背后的核心考点。

如果面试中被问到"你们公司生产环境用的是什么消息中间件?",不要急着只报出一个名字,而是按照"使用什么 → 用在哪里 → 为什么选择 → 为什么不用其他MQ"的逻辑进行回答。

这样的回答不仅能够展示你对 RabbitMQ、Kafka、RocketMQ 等主流消息中间件的理解,更能体现你的系统设计能力和技术选型思维。在社招面试中,这类答案往往比单纯背诵概念更容易获得面试官认可。真正的技术人,不只是会用工具,更重要的是知道什么时候用、为什么用

好朋友们,我们下篇见~