RabbitMQ工作流程是面试中的热门知识点,RabbitMQ是一个实现AMQP协议的消息中间件,用于分布式系统中实现消息队列的服务。工作流程可以分为生产者推送消息和消费者消费消息两个部分。生产者首先连接RabbitMQ的broker(消息服务器),创建连接connection,并开启信道channel。随后声明交换器exchange和队列queue,通过路由键将交换器和队列绑定起来。生产者将消息发送至消息队列,消息队列根据路由匹配将消息存储起来。如果队列找不到,则根据配置选择是丢弃消息还是回退给生产者。最后关闭信道和连接。消费者在消费消息时,也需要连接broker并开启信道,请求队列信息并接收消息。消费者确认消息后,RabbitMQ会删除已确认的消息,然后关闭信道和连接。 为了保证RabbitMQ消息的可靠性,可以从以下几个方面进行配置和设计。保证消息不丢失,可以通过开启confirm模式、开启消息持久化和关闭自动ack来实现。要保证消息不重复消费,通常的做法是使用Redis进行幂等性处理,或者在数据库层面根据主键查询是否存在数据,存在则更新,不存在则插入。为了保证消息的顺序性,可以将消息放入同一个交换机和队列,并确保队列只有一个消费者和消费者只有一个线程进行处理。消息重试机制通常在SpringBoot中默认配置为三次。 Redis存储方式包括多种数据类型,每种类型有其特定的使用场景。String类型用于存储字符串,适用于计数器和会话缓存等。Hash类型适用于存储对象,Set类型适用于存储不重复的集合数据,List类型类似于双向链表,可以用来存储关注列表、消息队列等,SortSet类型适用于有序集合,如排行榜等。Redis还有PUB/SUB发布订阅模式和事务功能。 JVM调优目标通常是为了使用较小的内存占用获得较高的吞吐量或较低的延迟。内存占用指的是程序运行所需的内存大小,而延迟是指由于垃圾收集而引起程序停顿的时间。JVM结构包括方法区、堆、栈、本地方法栈和寄存器等。堆主要用于存放new出来的对象,而栈用于存放基础类型的变量。方法区存放类变量和类型信息,本地方法栈用于存放本地方法,寄存器是最快的存储区域,由编译器分配。 在Spring框架中,依赖注入(DI)有多种方式,包括构造器注入、setter注入和接口注入。SpringBoot的启动顺序包括初始化模块、应用具体的启动方法和自动配置核心模块。自动配置核心模块通过@SpringBootApplication注解来实现,包括@EnableAutoConfiguration、@SpringBootConfiguration和@ComponentScan三个注解。 设计模式在Java后端开发中也经常被提及,常见的设计模式有工厂模式、单例模式、代理模式、模板方法模式、包装器模式、观察者模式和适配器模式等。工厂模式用于通过工厂创建bean,单例模式保证了Spring中bean的默认单例特性,代理模式用于实现AOP,模板方法模式如jdbcTemplate和hibernateTemplate用于数据库操作,包装器模式用于需要连接多个数据库的情况,观察者模式是Spring事件驱动的基础,适配器模式在SpringAOP中用于增强或者advice。 原子包是Java并发包中的一个工具,用于提供原子操作,保证操作的原子性和线程安全。关于数据类型的区分,如double、float和decimal的区别,以及char与varchar的区别,也是面试中的考察点。Decimal适用于需要精确计算的场景,其性能开销较大,char和varchar主要用于存储字符串,区别在于存储长度固定和可变。
剩余8页未读,继续阅读
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助