当前位置:网站首页 > Java架构师 > 正文

程序员Java面试宝典,java架构师面试宝典和答案_程序员java面试宝典,java架构师面试宝典和答案哪个好

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的优缺点都没了解清楚,就拍脑袋依据喜好,用了某种MQ,还是给项目挖坑。

如果面试官问:"你为什么用这种MQ?。"你直接回答"领导决定的。"这种回答就很LOW了。

还是那句话,不要给公司挖坑。

我们可以看出,RabbitMQ版本发布比ActiveMq频繁很多。至于RocketMQ和kafka就不带大家看了,总之也比ActiveMQ活跃的多。详情,可自行查阅。

再来一个性能对比表

版权声明


相关文章:

  • 史上最全最详细的Java架构师成长路径图,程序员必备_java架构师成长丛书2024-10-30 16:27:34
  • Java架构师 JD汇总_java架构师指南2024-10-30 16:27:34
  • Java架构师:概述_java架构师百度百科2024-10-30 16:27:34
  • Java架构师技术架构路线_java架构师技术架构路线图2024-10-30 16:27:34
  • JAVA架构师学习路线图_java架构师教程2024-10-30 16:27:34
  • Java学习路线总结,搬砖工逆袭Java架构师_java搬砖问题2024-10-30 16:27:34
  • java架构师面试_Java架构师面试题,试了才知道行不行_java 架构师面试宝典2024-10-30 16:27:34
  • Java架构师技术架构路线_java架构师技术架构路线图2024-10-30 16:27:34
  • java架构师必须掌握的知识点有哪些呢2024-10-30 16:27:34
  • Java架构师 JD汇总_java架构师指南2024-10-30 16:27:34
  • 全屏图片