主题
面试速答(先看这里)
**一句话结论:**Spring 的事件和 MQ 区别,各自有什么好处?
60秒标准回答:
2年985硕,直播业务,JAVA技术,redis,kafka
直播什么业务,哪部分复杂一点?点赞 & 连麦事件、 spring 消费事件,顺序消息
Spring 的事件和 MQ 区别,各自有什么好处? Spring 的事件默认是异步的吗?如何实现异步?
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**2年985硕,直播业务,JAVA技术,redis,kafka,
- **要点2:**为什么用事件驱动的方案?
- **要点3:**如何能避免丢消息问题?
- **要点4:**如果避免并发操作连多?
- **要点5:**如果避免并发操作连多?
**记忆锚点:**Spring → starter → bean → redis → Kafka → TTL
易错提醒:
- 异步通信、非阻塞, Kafka 如果消费失败了怎么办?
- 如何能避免丢消息问题?
加分表达:
- eventid、state、body、eventType,failReason、times、lastExTime 如果用了消息表了,有序如何保证?
- 发送到同一分区、单线程消费、 如果发生了重平衡,有序还能保障吗?
追问准备:
- 2年985硕,直播业务,JAVA技术,redis,kafka, 直播什么业务,哪部分复杂一点?
- 点赞 & 连麦事件、 spring 消费事件,顺序消息, Spring 的事件和 MQ 区别,各自有什么好处?
- Spring 的事件默认是异步的吗?
- 为什么用事件驱动的方案?
面试者背景
> 2年985硕,直播业务,JAVA技术,redis,kafka, > > 直播什么业务,哪部分复杂一点?点赞**&连麦事件、spring消费事件,顺序消息, > > **Spring的事件和MQ区别,各自有什么好处?Spring的事件默认是异步的吗?如何实现异步?** > > 为什么用事件驱动的方案?好处是啥?异步通信、非阻塞, > > **Kafka如果消费失败了怎么办?应用挂了怎么办?** > > 如何能避免丢消息问题?落表,如何设计这张消息表?eventid、state、body、eventType,failReason、times、lastExTime > > **如果用了消息表了,有序如何保证?消息表如何设计索引?事件id唯一索引、状态索引,** > > 状态区分度不高加索引有用吗?event执行会用什么设计模式? > > 策略模式好处是啥,公共的逻辑如何处理?模板方法模式。 > > **点赞是每一次都会发个事件吗?靠kafka消息合并、** > > 连麦有什么特别的难点吗?消息的严格有序是如何保障的?发送到同一分区、单线程消费、 > > 如果发生了重平衡,有序还能保障吗?重平衡会带来什么问题?stw、消息堆积、重复消费、 > > **Kafka的渐进式重平衡知道吗?** > > 你们的连麦支持同时连麦?如何支持优先连麦?最多同时可以连多少人? > > **如果避免并发操作连多?redis记录连麦人数?为啥用redis可以解决并发问题?单线程** > > 工作中有封装过一些公共的组件吗?SimpleDateFormat做日期转换? > > **SDF的线程安全问题知道吗。如何解决?** > > **日志框架用的哪个?log4j,同步日志还是异步日志?你自己配置过log4j的配置文件吗?** > > **看过哪些源码么?Spring、Spring的bean的初始化过程,实例化和初始化区别,** > > **Bean实例化的入口的方法和类名知道么。** > > 有什么情况会导致一个bean无法被初始化么?构造器注入&循环依赖,@Lazy > > **Spring之前用的哪个版本?SpringBoot 3.0知道么?AOT编译,定义starter**,** > > 定义一个starter需要做什么?在starter里面如何做个开关控制bean的实例化? > > Spring的事务机制了解么?编程式&声明式,你觉得声明式事务有啥缺点。 > > 声明式事务,事务失效了,可能有哪些情况?private调用、this调用为啥不生效?AOP、final、rollbackFor、数据库不支持、多线程会导致事务失效吗?为什么? > > **Threadlocal**在哪些框架有应用?Spring、Mybatis有吗?全链路追踪框架 > > 如何在线程池之间传递ThreadLocal?ITL、TTL,TTL的原理知道么? > > **有最近看过哪些框架、技术的新版本么?**JDK 新版本有啥新特性?虚拟线程。用了虚拟线程后还有必要用线程池吗?守护线程、 > > 堆上还有很大内存,但是还是有频繁的fullgc,可能是什么原因?system.gc被调用、CMS搞不定了要用G1?
题目解析
> Spring的事件和MQ****区别,各自有什么好处?Spring的事件默认是异步的吗?如何实现异步? > > 为什么用事件驱动的方案?好处是啥?异步通信、非阻塞,
📄 ✅Spring Event和MQ有什么区别?各自适用场景是什么?
打开文档:✅Spring Event和MQ有什么区别?各自适用场景是什么?
📄 ✅在Spring中如何使用Spring Event做事件驱动
打开文档:✅在Spring中如何使用Spring Event做事件驱动
> Kafka****如果消费失败了怎么办?应用挂了怎么办? > > 如何能避免丢消息问题?落表,如何设计这张消息表?eventid、state、body、eventType,failReason、times、lastExTime > > 如果用了消息表了,有序如何保证?消息表如何设计索引?事件id唯一索引、状态索引,
打开文档:✅为了避免丢消息问题需要落表,如何设计这张消息表?
> 状态区分度不高加索引有用吗?event执行会用什么设计模式?
> 策略模式好处是啥,公共的逻辑如何处理?模板方法模式。 > > 点赞是每一次都会发个事件吗?靠kafka消息合并、
> 连麦有什么特别的难点吗?消息的严格有序是如何保障的?发送到同一分区、单线程消费、 > > 如果发生了重平衡,有序还能保障吗?重平衡会带来什么问题?stw、消息堆积、重复消费、 > > Kafka的渐进式重平衡知道吗?
> 你们的连麦支持同时连麦?如何支持优先连麦?最多同时可以连多少人? > > 如果避免并发操作连多?redis记录连麦人数?为啥用redis可以解决并发问题?单线程
> 工作中有封装过一些公共的组件吗?SimpleDateFormat做日期转换? > > SDF的线程安全问题知道吗。如何解决?
📄 ✅SimpleDateFormat是线程安全的吗?使用时应该注意什么?
打开文档:✅SimpleDateFormat是线程安全的吗?使用时应该注意什么?
> 看过哪些源码么?Spring、Spring的bean的初始化过程,实例化和初始化区别, > > Bean****实例化的入口的方法和类名知道么。 > > 有什么情况会导致一个bean无法被初始化么?构造器注入&循环依赖,@Lazy
> Spring之前用的哪个版本?SpringBoot 3.0知道么?AOT编译,定义starter**,** > > 定义一个starter需要做什么?在starter里面如何做个开关控制bean的实例化?
📄 ✅Spring 6.0和SpringBoot 3.0有什么新特性?
打开文档:✅Spring 6.0和SpringBoot 3.0有什么新特性?
> **Spring的事务机制了解么?编程式&**声明式,你觉得声明式事务有啥缺点。 > > 声明式事务,事务失效了,可能有哪些情况?private调用、this调用为啥不生效?AOP、final、rollbackFor、数据库不支持、多线程会导致事务失效吗?为什么?
> Threadlocal****在哪些框架有应用?Spring、Mybatis有吗?全链路追踪框架 > > 如何在线程池之间传递ThreadLocal?ITL、TTL,TTL的原理知道么?
📄 ✅有了InheritableThreadLocal为啥还需要TransmittableThreadLocal?
打开文档:✅有了InheritableThreadLocal为啥还需要TransmittableThreadLocal?
> **有最近看过哪些框架、技术的新版本么?**JDK 新版本有啥新特性?虚拟线程。用了虚拟线程后还有必要用线程池吗?守护线程、 > > 堆上还有很大内存,但是还是有频繁的fullgc,可能是什么原因?system.gc被调用、CMS搞不定了要用G1?