Java 开发者常见面试题,初级 Java 面试题及答案

本文探讨了Java开发者在面试中常见的消息队列相关问题,包括使用消息队列的原因(解耦、异步、削峰)、潜在的缺点(系统可用性和复杂性的降低)、选型策略(如RabbitMQ适合中小型公司,RocketMQ和Kafka适用于大型公司)、确保高可用性的方法(如RocketMQ和Kafka的集群模式)、防止消息重复消费的策略(如幂等性设计和消费记录)、保障消费可靠性的措施(如RabbitMQ的confirm模式和Kafka的acks配置)以及维持消息顺序性的方案。
摘要由CSDN通过智能技术生成

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

分析:一个用消息队列的人,不知道为啥用,有点尴尬。没有复习这点,很容易被问蒙,然后就开始胡扯了。

回答:这个问题,咱只答三个最主要的应用场景(不可否认还有其他的,但是只答三个主要的),即以下六个字:解耦、异步、削峰

(1)解耦

传统模式:

?传统模式的缺点:

  • 系统间耦合性太强,如上图所示,系统 A 在代码中直接调用系统 B 和系统 C 的代码,如果将来 D 系统接入,系统 A 还需要修改代码,过于麻烦!

中间件模式:

中间件模式的的优点:

  • 将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统 A 不需要做任何修改。

(2)异步

传统模式:

?传统模式的缺点:

  • 一些非必要的业务逻辑以同步的方式运行,太耗费时间。

中间件模式:

中间件模式的的优点:

  • 将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度

(3)削峰

传统模式

传统模式的缺点:

  • 并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常

中间件模式:

中间件模式的的优点:

  • 系统 A 慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。

2、使用了消息队列会有什么缺点?

分析:一个使用了 MQ 的项目,如果连这个问题都没有考虑过,就把 MQ 引进去了,那就给自己的项目带来了风险。

我们引入一个技术,要对这个技术的弊端有充分的认识,才能做好预防。要记住,不要给公司挖坑!

回答:回答也很容易,从以下两个个角度来答

  • 系统可用性降低:

  • 你想啊,本来其他系统只要运行好好的,那你的系统就是正常的。

  • 现在你非要加个消息队列进去,那消息队列挂了,你的系统不是呵呵了。因此,系统可用性降低

  • 系统复杂性增加:

  • 要多考虑很多方面的问题,比如一致性问题、如何保证消息不被重复消费,如何保证保证消息可靠传输。

  • 因此,需要考虑的东西更多,系统复杂性增大。

但是,我们该用还是要用的。

3、消息队列如何选型?

先说一下,博主只会 ActiveMQ,RabbitMQ,RocketMQ,Kafka,对什么 ZeroMQ 等其他 MQ 没啥理解,因此只能基于这四种 MQ 给出回答。

分析:既然在项目中用了 MQ,肯定事先要对业界流行的 MQ 进行调研,如果连每种 MQ 的优缺点都没了解清楚ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值