Java高频面试考点场景题14

RocketMQ 的固定级别延迟任务设计未使用复杂时间轮算法,却能通过朴素技术智慧扛住百亿级并发。

固定延迟级别:默认设 18 个固定延迟级别(1 秒到 2 小时),可通过配置修改;同一级别消息延迟时间一致,天然形成 FIFO 队列,无需排序。

系统 Topic 与队列:延迟消息存入内部 SCHEDULE_TOPIC_XXX 主题,该主题含 18 个队列对应 18 个级别;生产者发送延迟消息时,Broker 会将原 Topic 和 Queue 存入消息属性,替换为对应延迟级别的队列。

任务调度机制:启动 18 个后台任务对应不同级别,扫描队列头部消息判断是否到期;未到期则计算差值,用 Timer 机制提交精准定时任务,避免死循环轮询;队列空时设 100 毫秒短定时任务检查新消息。

核心优势:顺序 IO 保证写入高效,零排序开销提升效率,精准事件唤醒实现 CPU 零内耗。

视频提到下期将讲解 RocketMQ 基于时间轮的任意时间点延迟消息机制。

Redis 在 TB 级数据场景下会因内存成本与集群复杂度成为负担。

Redis 的局限性:视频指出 Redis 虽单机内存读写快,但几十 TB 数据下内存成本极高,且集群带来的网络延迟、分片与运维复杂度会成为痛点。

RocksDB 的核心优势:作为嵌入式 KV 存储引擎,RocksDB 将数据存在 SSD 硬盘,通过 LSM 树将随机写转为顺序写,结合多级合并机制(Level0 至 Level6 动态层级)与 IO 限流、多线程并发合并等优化,在 TB 级数据场景下实现高吞吐与低成本。

两者定位差异:Redis 适合几十 GB 数据的微秒级低延迟场景,RocksDB 则针对 TB 级海量数据与成本敏感需求,无网络开销且能压榨 SSD 性能。

视频通过对比两者的技术设计与适用场景,强调技术选型需结合数据规模与成本需求。

防止接口重复提交的核心考点是接口的幂等性设计。

数据库唯一索引:通过在数据库表中设置唯一索引,重复创建相同数据时会触发索引冲突异常,适用于创建类场景。

Redis 锁机制:请求到达后,用业务标识加用户 ID 生成唯一 key,通过 SETNX 命令尝试获取锁,成功则执行业务,否则拒绝执行。

请求 ID 校验:前端携带唯一请求 ID,后端接收后先查询缓存数据库,若 ID 已处理则直接返回结果,避免重复执行。

视频提到幂等性在订单、定时任务等业务场景中常见,且整理了包含该知识点的面试文档。

唯一索引在高并发场景下可能因锁竞争拖垮系统,且无法完全避免重复扣款问题。

问题场景:视频以 618 大促订单系统重复扣款事故为例,指出仅依赖 Redis 分布式锁和数据库唯一索引的幂等方案,在高并发下会出现锁等待超时,甚至导致系统瘫痪。

根因分析:唯一索引仅为兜底措施,未结合业务状态判断(如订单是否已支付),且高并发下数据库锁竞争会形成排队,同时分布式 ID 生成器若存在重复(如雪花算法时钟回拨),唯一索引无法拦截。

三层能力:视频提出能扛住大促流量的幂等设计需具备现场快照与根因定位、事前防御与压测设计、代码层防御性设计三层能力,强调业务状态机是第一道防线,唯一索引为最后一道防线。

视频通过真实事故案例,拆解幂等性设计在高并发场景下的失效陷阱及应对方案。

视频通过生活化类比拆解了 JVM 垃圾标记的底层逻辑,解决了 "循环引用" 问题的核心矛盾。

引用计数法缺陷:用 "借书计数" 类比引用计数法,指出其无法识别对象 A 与 B 互相引用的 "孤儿" 场景,计数器始终为 1 导致内存泄漏。

可达性分析原理:将对象比作风筝,GC Roots(根节点)比作地面 VIP 人物,JVM 通过检查对象是否能通过 GC Roots 的 "线" 被触及来判断存活,断开连接的 "断线风筝" 即为垃圾。

GC Roots 类型:明确四类核心根节点,包括当前执行方法的局部变量、类的静态变量和常量、底层本地代码引用的对象。

视频最后提出关于 "断线风筝是否立即销毁" 的思考题,引导观众进一步思考垃圾回收的后续流程。

相关推荐
AI人工智能+1 分钟前
银行回单识别系统通过融合计算机视觉、深度学习和自然语言处理技术,实现了财务凭证的智能化处理
人工智能·深度学习·ocr·银行回单识别
江屿风3 分钟前
【c++笔记】类和对象流食般投喂(下)
开发语言·c++·笔记
小新同学^O^3 分钟前
简单学习Spring原理
java·学习·spring
戴西软件1 小时前
戴西软件入选2026年安徽省制造业数智化转型服务商名单
java·大数据·服务器·前端·人工智能
爱棋笑谦1 小时前
springboot—数据源相关配置
java·spring boot·spring
踩着两条虫9 小时前
「AI + 低代码」的可视化设计器
开发语言·前端·低代码·设计模式·架构
JoneBB9 小时前
ABAP Webservice连接
运维·开发语言·数据库·学习
budingxiaomoli9 小时前
Spring IoC &DI
java·spring·ioc·di
Spider Cat 蜘蛛猫9 小时前
Springboot SSO系统设计文档
java·spring boot·后端
未若君雅裁9 小时前
MySQL高可用与扩展-主从复制读写分离分库分表
java·数据库·mysql