Java面试题之消息队列

简介: MQ的题目在面试和笔试中很常见,所以得用心去准备一下,挑关键点进行解答即可,就在考察实现原理这块时,也不可能说百分之百的记住每一个步骤,大体的流程知道就可以了。

微信截图_20220531173728.png

一.题目介绍


1.题目来源


实际面试中遇到,形式的话有书面解答也有口述


2.题目


1)消息队列是什么?


2)你了解的消息队列有哪些?


3)消息队列在实际的开发中使用消息队列处理哪些业务,你使用消息队列遇到了哪些问题并且是如何解决的?


4)说说消息队列的实现原理


二.具体解答


1.消息队列是什么


消息队列就是一个使用队列来通信的组件。

这话有点笼统和拗口,简单来说消息队列就是在服务与服务之间传递消息的中转站,消息的发起方叫生产者,消息的接收方叫消费者,而我们可以利用这个中转站对其中的消息进行一系列的处理,在实际的业务场景中消息队列一般是起到系统解耦,流量削峰以及延时推送,


2.消息队列有哪些


这个就直接上图了,图文比较清楚,还有性能上的对比

微信截图_20220531195232.png


3.消息队列的运用


1)系统解耦

在实际的开发中,一个系统与另外一个系统之间的通信,一般是采用RPC也就是接口调用的方式(Dubbo),还有一种就是Http形式的调用, Spring Cloud Feign本质上也是基于Http形式的接口调用,那如果这个是应该微服务体系的架构,并且项目是前置项目那就需要去调用很多的接口,这样就容易出现一个情况,在注册中心挂掉以后,接口不可用的情况下,业务数据是没法从前置系统到达后面处理业务的各个系统的,就会出现数据丢失的情况,如果还是高峰并发期很可能影响到整个系统的正常运行,那可以怎么办呢?消息队列可以解决这个问题,使用消息队列后系统与系统之间传递的是消息而不用互相调用接口,实现系统解耦,另外就是可以避免一些老系统与新系统之间的版本问题。


2)流量削峰

先想这么一个问题,现在你手里的是一个电商项目,正在做活动,瞬时流量上千万,除了多线程和并发处理,你还能怎么优化这个系统?这种瞬时流量'冲击'过来的时候可能会使得这个微服务体系崩溃掉,有人说限流,限流确实能起到一部分作用,就像秒杀手机一样,让先进来的这部分让先购买,后面进来的排队,但是客户是没有耐心的,可能看着要排队就直接退出了,那针对这种场景,消息队列可以怎么去做?消息队列可以缓解前置系统传到后面系统的数据压力,把这种订单信息放消息队列里,后面的系统接收到消息以后陆续处理,可以很大程度上的缓解系统压力。


3)延时推送&消息必达

这是个老生常谈的问题了,需要实现短消息推送和订单超时取消时就可以使用消息队列去做,而所谓的消息必达指的是消息队列的ACK机制,但是消息真的就是必达吗?还有消息会丢失这种情况会发生。


4)问题及解决方案

消息丢失:ACK机制和死信队列

消息重复:目前MQ没法保证消息不重复,期待后续的更新,业务场景里可以使用幂等去保证消息不重复,比如不会同一个订单发送两条通知消息

处理消息堆积:有时候消息可能产生堆积,那就得需要定时查看控制台并及时处理


4.消息队列的实现原理


从生产者和消费者的角度:


生产者发送消息


1.生产者连接到 RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)


2.生产者声明一个交换器,并设置相关属性,比如交换机类型、是否持久化等


3.生产者声明一个队列并设置相关属性,比如是否排他、是否持久化、是否自动删除等


4.生产者通过路由键将交换器和队列绑定起来


5.生产者发送消息至 RabbitMQ Broker,其中包含路由键、交换器等信息


6.相应的交换器根据收到的路由键查找相匹配的队列


7.如果找到,则将从生产者发送过来的消息存入相应的队列中


8.如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者


9.关闭信道


10.关闭连接


消费者接收消息的过程


1.消费者连接到 RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)


2.消费者向 RabbitMQ Broker 请求消费相应队列中的消息,可能会设置相应的回调函数,以及做一些准备工作


3.等待 RabbitMQ Broker 回应并投递相应队列中的消息,消费者接收消息


4.消费者确认(ack)接收到的消息


5.RabbitMQ 从队列中删除相应已经被确认的消息


6.关闭信道


7.关闭连接


三.题后思考


MQ的题目在面试和笔试中很常见,所以得用心去准备一下,挑关键点进行解答即可,就在考察实现原理这块时,也不可能说百分之百的记住每一个步骤,大体的流程知道就可以了。

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
665 1
|
存储 安全 Java
常见 JAVA 集合面试题整理 自用版持续更新
这是一份详尽的Java集合面试题总结,涵盖ArrayList与LinkedList、HashMap与HashTable、HashSet与TreeSet的区别,以及ConcurrentHashMap的实现原理。内容从底层数据结构、性能特点到应用场景逐一剖析,并提供代码示例便于理解。此外,还介绍了如何遍历HashMap和HashTable。无论是初学者还是进阶开发者,都能从中受益。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
466 3
|
10月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
12月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
687 0
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
6413 50
|
12月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
502 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
10月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
352 5
|
NoSQL Java 微服务
2025 年最新 Java 面试从基础到微服务实战指南全解析
《Java面试实战指南:高并发与微服务架构解析》 本文针对Java开发者提供2025版面试技术要点,涵盖高并发电商系统设计、微服务架构实现及性能优化方案。核心内容包括:1)基于Spring Cloud和云原生技术的系统架构设计;2)JWT认证、Seata分布式事务等核心模块代码实现;3)数据库查询优化与高并发处理方案,响应时间从500ms优化至80ms;4)微服务调用可靠性保障方案。文章通过实战案例展现Java最新技术栈(Java 17/Spring Boot 3.2)的应用.
1020 9