当前位置: 首页 > article >正文

Java 大厂一面模拟:从活动发奖到消息幂等的分布式一致性拷问

开场说明这是一场面向 1-3 年 Java 后端候选人或校招高阶候选人的模拟大厂一面时长约 30 分钟。面试围绕一个典型的电商活动发奖业务场景展开串联缓存设计、消息可靠性、事务一致性及分布式协调等核心模块。问题设计兼顾广度与深度重点考察候选人对技术原理的理解、边界条件的把握以及线上落地能力。追问风格贴近真实大厂节奏强调“原理 → 边界 → 线上问题 → 取舍落地”的递进逻辑。本场面试覆盖以下五大模块Redis热点 Key 处理、缓存一致性、分布式锁MQ / 消息队列幂等消费、消息可靠性、延迟消息Spring / Spring Boot事务传播、AOP 代理、Bean 生命周期MySQL事务隔离、锁机制、binlog 与主从延迟分布式系统最终一致性、补偿机制、对账设计我们将从一个“春节红包雨活动”的真实业务场景切入逐步深入技术细节。主问题部分1. 你在项目中负责过哪些高并发活动系统比如发奖、发券这类参考回答我负责过公司春节期间的“红包雨”活动系统用户点击页面按钮即可领取随机金额红包每日限领 3 次。高峰期 QPS 达到 3000奖品包括现金券、积分、实物等。系统采用 Spring Boot Redis Kafka MySQL 架构通过多级缓存、异步发奖、消息幂等保障高可用与一致性。追问点预判面试官会关注你如何设计发奖流程、如何防重、如何保证不超发。2. 红包雨活动中你是怎么防止用户重复领取的参考回答我采用了“本地缓存 Redis 分布式锁 数据库唯一索引”三重防重机制。首先在 Controller 层用 Caffeine 做本地缓存缓存用户当日已领取次数TTL 1 分钟减少 Redis 压力然后在 Service 层用 Redisson 的RLock对用户 ID 加锁防止并发请求穿透最后在 MySQL 的user_reward_record表上对用户 ID 活动 ID 日期建立联合唯一索引作为最终防重屏障。追问点预判面试官会追问锁的粒度、锁超时、本地缓存与 Redis 不一致等问题。3. 你说用了 Redis 分布式锁如果锁超时了但业务还没执行完会发生什么你怎么解决参考回答这是一个经典问题。如果锁超时释放而发奖逻辑还在执行另一个线程可能重复进入导致重复发奖。我的解决方案是设置合理的锁超时时间如 10 秒并评估业务最大耗时使用 Redisson 的看门狗机制WatchDog自动续期锁默认每 10 秒续一次在业务逻辑中增加状态检查比如先查数据库是否已发奖避免重复执行。追问点预判面试官可能追问看门狗原理、续期失败场景、是否用 Lua 脚本保证原子性。4. 发奖逻辑是同步还是异步为什么参考回答采用异步发奖。用户点击后立即返回“领取成功”实际发奖通过 Kafka 消息异步处理。原因有三发奖涉及积分、券包、短信通知等多个子系统同步调用链太长影响用户体验异步可削峰填谷应对突发流量便于后续扩展比如增加风控审核、人工干预等流程。追问点预判面试官会追问消息丢失、重复消费、顺序性等问题。5. Kafka 消息如何保证不丢失、不重复参考回答不丢失生产者开启acksall确保消息写入所有 ISR 副本Broker 配置min.insync.replicas2消费者手动提交 offset处理完再提交。不重复消费者端实现幂等。我采用“消息 ID 业务唯一键”存入 MySQL消费前先查是否已处理。消息 ID 由 Snowflake 生成保证全局唯一。追问点预判面试官会追问 Snowflake 时钟回拨、幂等表设计、高并发下幂等性能。6. 幂等表在高并发下会不会成为性能瓶颈你怎么优化参考回答确实可能。我的优化策略包括幂等表按用户 ID 分表16 张分散写入压力使用 Redis 做一级幂等缓存缓存已处理的消息 IDTTL 7 天命中则直接返回幂等表只存必要字段msg_id, user_id, status, create_time并建联合索引定期归档历史数据避免单表过大。追问点预判面试官可能追问 Redis 缓存与 DB 不一致、分表策略、归档机制。7. 如果发奖过程中某个子系统比如积分系统挂了你怎么保证最终一致性参考回答我设计了一套“本地事务表 定时任务补偿”机制。发奖服务在本地事务中同时写入“发奖记录”和“待发送消息”两张表保证原子性。然后由定时任务扫描“待发送消息”表重试发送 Kafka 消息。如果积分系统恢复消息可重新消费如果长时间失败则触发告警人工介入。此外我们还做了对账系统每天凌晨比对发奖记录与积分变动发现不一致则自动补偿或告警。追问点预判面试官会追问本地事务表如何防重、定时任务频率、对账粒度。8. 对账系统是怎么设计的比对哪些数据参考回答对账系统基于 MySQL binlog Kafka 构建。我们使用 Canal 监听发奖记录表的变更发送到 Kafka由对账服务消费。对账服务每天凌晨执行以下比对发奖记录中“已发放”状态的记录数 vs 积分系统当日积分增加记录数按用户维度比对积分变动总额是否一致发现差异则生成对账异常单支持手动重试或自动补偿。追问点预判面试官可能追问 Canal 原理、对账延迟、补偿策略。追问部分追问 1你说用 Canal 监听 binlog如果 Canal 挂了或者延迟很高对账会不准你怎么监控和应对考察点分布式系统可观测性、故障恢复能力参考回答我们做了三层监控Canal 实例存活监控Prometheus Grafana挂了自动告警Kafka 消息堆积监控如果 lag 超过 10 万条触发告警对账服务自身记录“最后处理时间”如果超过 24 小时未更新说明卡住了。应对措施Canal 挂了自动重启K8s 托管延迟高时临时增加对账任务并行度极端情况下支持手动触发全量对账按天回溯。追问 2Redis 缓存用户领取次数如果 Redis 挂了本地缓存也失效会不会导致超发考察点缓存高可用、降级策略参考回答这是个关键风险点。我们的降级策略是Redis 挂了本地缓存失效但数据库唯一索引仍有效最多导致少量重复请求打到 DB由于有唯一索引重复插入会失败不会超发同时我们配置了 Redis 集群哨兵模式单点故障自动切换极端情况下可临时关闭活动入口避免雪崩。补充我们还在 Nginx 层做了限流单用户每秒最多 5 次请求进一步降低风险。追问 3你说用 Redisson 看门狗续期如果 GC 停顿导致续期失败锁被释放会怎样考察点JVM 与分布式系统交互、GC 影响参考回答Redisson 看门狗通过一个后台线程每 10 秒续一次锁默认 leaseTime30s。如果发生 Full GC线程暂停续期失败锁被释放。此时另一个线程可能获取锁并执行发奖。我们的应对在业务逻辑中增加“状态检查”执行前先查数据库是否已发奖发奖记录表有唯一索引重复插入会抛异常被捕获后忽略监控 GC 时间避免长时间停顿我们用的是 G1MaxGCPauseMillis200ms。面试点评本场面试主要考察候选人在高并发活动场景下的系统设计能力重点包括防重设计从本地缓存到分布式锁再到数据库唯一索引的多层防御消息可靠性Kafka 生产消费配置、幂等实现、补偿机制最终一致性本地事务表、定时补偿、对账系统边界与容错锁超时、缓存失效、GC 影响、主从延迟等极端场景应对。候选人容易卡壳的点看门狗续期原理不清楚幂等表设计未考虑分表与性能对账系统只提概念无具体实现细节忽略 GC 对分布式锁的影响。整体强度适中适合 1-3 年候选人既能展示广度也有深度追问空间。技术补丁包Redis 分布式锁Redisson原理基于 Lua 脚本实现原子加锁看门狗线程自动续期默认每 10 秒续一次leaseTime30s。 设计动机解决锁超时导致并发安全问题。 边界条件GC 停顿可能导致续期失败锁粒度应尽量细如 userId。 落地建议结合业务状态检查避免依赖锁作为唯一防重手段。消息幂等消费原理通过唯一消息 ID 业务键判断是否已处理。 设计动机防止网络重试或消费者重启导致重复消费。 边界条件幂等表可能成为热点Redis 缓存与 DB 不一致。 落地建议采用“Redis 缓存 DB 唯一索引”二级幂等分表分散压力。本地事务表 异步消息原理在本地事务中同时写入业务数据和待发送消息保证消息不丢失。 设计动机解决分布式事务难题实现最终一致性。 边界条件定时任务可能延迟消息重复发送。 落地建议消息表需有状态字段pending/sent/failed支持重试与告警。对账系统设计原理基于 binlog 监听 Kafka 定时比对发现数据不一致。 设计动机保障跨系统数据最终一致。 边界条件binlog 延迟对账任务性能瓶颈。 落地建议按天分片对账支持手动触发异常单需有处理流程。Canal 监听 binlog原理伪装成 MySQL 从库接收 binlog 事件并转发至 Kafka。 设计动机解耦数据变更与业务逻辑实现数据同步。 边界条件Canal 实例单点故障网络延迟导致 lag。 落地建议部署多个 Canal 实例监控 lag 与存活状态。缓存降级策略原理当 Redis 不可用时依赖数据库唯一索引兜底。 设计动机保障系统基本可用性。 边界条件数据库压力增大短暂不一致。 落地建议结合限流如 Nginx 层控制请求量。Kafka 消息可靠性原理生产者acksallBroker 多副本消费者手动提交 offset。 设计动机防止消息丢失。 边界条件ISR 副本不足时写入失败消费者处理慢导致 lag。 落地建议监控 ISR 数量与 lag合理设置副本数。GC 对分布式系统影响原理Full GC 导致线程暂停影响看门狗续期。 设计动机理解 JVM 与分布式组件的交互风险。 边界条件长时间 GC 停顿30s。 落地建议使用 G1 垃圾回收器控制 MaxGCPauseMillis业务层增加状态检查。数据库唯一索引防重原理利用唯一约束阻止重复插入。 设计动机作为最终防重屏障。 边界条件高并发下唯一索引可能成为热点。 落地建议合理设计索引字段如 user_id activity_id date避免全表扫描。多级缓存一致性原理本地缓存Caffeine 分布式缓存Redis DB。 设计动机提升读取性能降低 DB 压力。 边界条件缓存与 DB 不一致缓存雪崩。 落地建议本地缓存设置短 TTL如 1 分钟Redis 做主缓存DB 为数据源。定时任务补偿机制原理扫描未处理消息重试发送。 设计动机应对子系统临时故障。 边界条件任务执行频率与性能重复处理。 落地建议任务分片执行记录最后处理 ID避免全表扫描。Snowflake 消息 ID 生成原理基于时间戳 机器 ID 序列号生成全局唯一 ID。 设计动机保证消息唯一性。 边界条件时钟回拨导致 ID 重复。 落地建议使用开源实现如 Hutool或引入 Zookeeper 协调机器 ID。Redis 集群高可用原理哨兵模式或 Cluster 模式自动故障转移。 设计动机避免单点故障。 边界条件主从切换期间短暂不可用。 落地建议监控主从状态配置合理超时时间。Nginx 限流原理基于 IP 或用户 ID 限制请求频率。 设计动机防止恶意刷奖。 边界条件误杀正常用户。 落地建议结合业务场景设置合理阈值如 5 req/s。对账异常处理流程原理发现不一致后生成异常单支持自动补偿或人工处理。 设计动机保障资金安全。 边界条件自动补偿可能失败。 落地建议异常单需有状态流转待处理/已补偿/已关闭并通知相关人员。G1 垃圾回收器调优原理分代收集可预测停顿时间。 设计动机减少 Full GC 对业务影响。 边界条件Region 大小配置不当。 落地建议设置-XX:MaxGCPauseMillis200监控 GC 日志。消息表状态机设计原理定义消息状态pending/sent/failed/retrying。 设计动机支持重试与监控。 边界条件状态流转逻辑复杂。 落地建议使用状态模式避免 if-else 泛滥。分表策略原理按用户 ID 哈希分表。 设计动机分散写入压力。 边界条件跨分片查询困难。 落地建议分表数取 2 的幂如 16便于扩展。缓存穿透防护原理对不存在的数据也缓存空值。 设计动机防止恶意查询不存在 key。 边界条件空值缓存可能占用内存。 落地建议设置较短 TTL如 5 分钟。最终一致性 vs 强一致性原理允许短暂不一致通过补偿达到一致。 设计动机提升系统可用性。 边界条件对账周期内数据不一致。 落地建议根据业务容忍度选择金融类业务慎用。

相关文章:

Java 大厂一面模拟:从活动发奖到消息幂等的分布式一致性拷问

开场说明 这是一场面向 1-3 年 Java 后端候选人或校招高阶候选人的模拟大厂一面,时长约 30 分钟。面试围绕一个典型的电商活动发奖业务场景展开,串联缓存设计、消息可靠性、事务一致性及分布式协调等核心模块。问题设计兼顾广度与深度,重点考…...

机器学习概念及学习目标

机器学习是计算机科学和人工智能的一个子领域,它通过对大量数据进行 分析,自动构建数学模型,从而能够在未见过的数据上进行预测、分类、 决策或生成内容。该算法通过训练数据优化模型参数,使模型能够根据输 入数据生成合理的输出。…...

Jetson orin nano 中安装docker

检查当前系统是否已经安装了 Docker,以及当前安装的版本号。通常在安装前运行它是为了确认是否需要安装: docker --version使用 curl 工具从 Docker 官方网站下载“一键安装脚本”,-fsSL 是一些静默下载和处理重定向的参数,-o ge…...

微型循环氩气金属气雾化制粉设备性价比高服务商

在材料科学的星辰大海中,金属粉末制备是通往3D打印、粉末冶金等前沿领域的基石。然而,对于无数高校课题组和中小型研发企业而言,这块“基石”却重若千钧——动辄三层楼高、耗气如流水、价格动辄百万的传统高压气雾化设备,如同一道…...

新手必读:计算机视觉需要哪些数学基础?如何高效学习线性代数和概率论?

新手必读:计算机视觉需要哪些数学基础?如何高效学习线性代数和概率论? 标签:#计算机视觉、#线性代数、#人工智能、#深度学习、#自然语言处理、#神经网络、#机器学习### 一、痛点引入:为什么很多人怕CV数学?…...

续讲wireshark——ECU测试实践记录

作为高效的以太网报文捕捉,也是测试手里的几件神器之一,wireshark的主要功用就是捕获报文。但也不仅仅只是开始捕获,结束捕获,保存文件,上传钉钉。wireshark入门首先的就是熟悉它的语法。捕获那么多东西,你…...

React 19新特性实战:3种方案实现组件自动刷新优化

在前端应用迭代中,组件不必要的重复渲染一直是性能优化的核心痛点,尤其在数据密集型场景中,频繁刷新不仅会拖慢页面响应速度,还会增加用户设备的资源消耗。React 19针对这一问题推出了多项底层优化,同时提供了更精细化…...

从零构建pix2pix训练集:数据准备与预处理实战

1. 理解pix2pix的数据需求 pix2pix作为经典的图像到图像转换模型,对训练数据有着特殊的要求。我第一次接触这个模型时,最头疼的就是数据准备环节。与普通分类任务不同,pix2pix需要的是成对的图像数据——简单说就是每张输入图片都要有对应的目…...

Kuikly框架性能深度解析:原生级跨端体验如何实现?

Kuikly 是腾讯大前端Oteam基于 Kotlin Multiplatform 开发的跨端框架。其技术设计使其在包体积、渲染效率等核心性能指标上,展现出特定优势。 1. 包体积极致轻量Android平台:AOT模式下仅约300KB iOS平台:约1.2MB Web版本:仅463K…...

手眼标定实战:从千米误差到毫米精度的关键技巧

1. 手眼标定为什么会出现"千米误差"? 第一次做手眼标定的同学,看到结果时可能会吓一跳——明明相机就装在机械臂末端,计算结果却显示两者相距上千米。这种情况我遇到过不止一次,记得有次在汽车装配线上调试,…...

ConvNeXt 系列改进:ConvNeXt 用于视频行为识别:3D ConvNeXt 改进与 Kinetics 实验

引言:当 ConvNeXt 遇上视频 2022年,Facebook AI Research提出的ConvNeXt在计算机视觉领域投下了一颗重磅炸弹。它以纯卷积结构达到了87.8%的ImageNet Top-1精度,在COCO检测和ADE20K分割任务上甚至超越了当时风头正劲的Swin Transformer,证明了“卷积并未死去,只是需要被现…...

[具身智能-364]:LeRobot 不是通用机器人控制系统(如 ROS2 导航/规划栈),而是专注于“感知-决策-动作”端到端学习的 AI 框架。他们共同成为具身智能时代最重要的开源基础设施之一

LeRobot 与 ROS2 并非替代关系,而是“智能生成”与“可靠执行”的双轨架构。二者共同构成了下一代机器人从“实验室原型”走向“物理世界部署”的基石。以下从定位差异、架构协同、融合挑战、演进趋势四个维度进行系统阐述。🔍 一、核心定位与设计哲学&a…...

从SDR#到MATLAB:用RTL-SDR玩转无线信号分析,一份完整的软硬件环境搭建清单

从零构建无线信号分析实验室:RTL-SDR与MATLAB的深度整合指南 无线电波如同城市中看不见的暗流,承载着从广播到卫星通信的各种信息。RTL-SDR这款售价仅20美元左右的USB接收器,配合MATLAB强大的信号处理能力,可以成为探索这片无形领…...

ConvNeXt 系列改进:ConvNeXt 添加 MetaFormer 风格池化层,简化 Block 并保持性能

2026 年的计算机视觉领域呈现出一种有趣的“返璞归真”趋势——在 Vision Transformer 狂飙数年之后,卷积神经网络正以全新的姿态强势回归。根据 Meta AI 近年来发布的官方论文数据,ConvNeXt 已经证明了一个关键事实:不需要 Attention 机制,纯 CNN 依然可以达到甚至超越同级…...

OpenPose Unity插件:5分钟实现实时多人姿态估计

OpenPose Unity插件:5分钟实现实时多人姿态估计 【免费下载链接】openpose_unity_plugin OpenPoses Unity Plugin for Unity users 项目地址: https://gitcode.com/gh_mirrors/op/openpose_unity_plugin 你想为Unity项目添加智能动作识别功能吗?O…...

怎样排查Laravel中Scout全文搜索导致的数据同步报错_队列与底层状态

Scout同步失败主因是底层驱动非2xx响应被静默忽略:启用SCOUT_DEBUGtrue查日志,检查failed_jobs中Guzzle/MeiliSearch异常,精简toSearchableArray字段,避免413/409错误,并手动补同步批量操作数据。Scout 同步失败时队列…...

从LLM到可执行Agent:2026奇点大会指定框架的Tool Calling Pipeline全链路拆解,含4类超时熔断实战配置

第一章:2026奇点智能技术大会:AIAgent工具调用框架 2026奇点智能技术大会(https://ml-summit.org) AIAgent工具调用框架是本届大会发布的开源核心基础设施,旨在统一异构工具接入、语义化意图解析与可验证执行链路。该框架不依赖特定LLM后端&…...

终极Windows内存管理指南:Mem Reduct完整教程与实战配置

终极Windows内存管理指南:Mem Reduct完整教程与实战配置 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct …...

[具身智能-363]:Hugging Face LeRobot 详解:像训练语言模型一样训练机器人

LeRobot 是 Hugging Face 于 2024 年 5 月 正式开源的机器人学习框架,专注于模仿学习(Imitation Learning)与视觉-语言-动作基础模型(VLA)。它的核心目标是:降低机器人 AI 的开发门槛,提供从数据…...

如何配置用户的资源使用上限_MAX_QUERIES_PER_HOUR查询频率限制

MySQL 8.0 仅支持通过 CREATE/ALTER USER ... WITH MAX_QUERIES_PER_HOUR 设置频率限流,按自然小时统计语句总数,不区分类型、不看耗时,不可自定义窗口;GRANT ... WITH 已废弃且逻辑危险,应禁用。MySQL 8.0 怎么给用户…...

【我的Android进阶之旅】Android 7.0报异常:java.lang.SecurityException: COLUMN_LOCAL_FILENAME is deprecated;

之前开发的一个和第三方合作的apk,在之前公司的 Android 5.1 系统的手表上运行正常,今天在公司新开发的 Android 7.1系统的手表上运行的时候,使用 DownloadManager 下载之后,查询下载状态的时候,报了异常 java.lang.SecurityException: COLUMN_LOCAL_FILENAME is depreca…...

【我的Android进阶之旅】快速创建和根据不同的版本类型(Dev、Beta、Release)发布Android 开发库到Maven私服

文章目录 前言 一、准备好要上传的Android 开发库 二、编写上传Maven私服的脚本 2.1 maven_upload.gradle文件 2.2 maven_user.properties配置文件 2.3 maven_pom.properties配置文件 三、执行上传maven的gradle脚本文件 3.1 上传成功 3.2 上传失败 四、使用maven私服中的库文件…...

【我的Android进阶之旅】解决MediaPlayer播放音乐的时候报错: Should have subtitle controller already set

文章目录 一、错误描述 二、错误解决 解决方法一 解决方法二 一、错误描述 刚用MediaPlayer播放Music的时候,看到Log打印台总是会打印一条错误日志,MediaPlayer: Should have subtitle controller already set,虽然程序运行不会出问题,但是看起来红色的日志很显眼,因此决…...

【词汇专栏】 预训练 vs 微调:AI 界最常被混淆的一对概念

预训练 vs 微调:AI 界最常被混淆的一对概念 “我们对模型进行了微调” “这是基于预训练模型的” “我要训练一个专属 AI”……这几句话你一定经常听到,但它们到底有什么区别?谁更厉害?什么时候该用哪个? 一句话定义 …...

【我的Android进阶之旅】 解决bug: Expected file scheme in URI: content://downloads/my_downloads/12

文章目录 一、错误描述 二、错误分析 三、错误解决 四、参考文章 一、错误描述 今天测试MM用HTC手机测试某个模块的时候crash了,抓log后发现是使用DownloadManager下载apk安装包然后自动安装的时候,抛了异常:java.lang.IllegalArgumentException: Expected file scheme in …...

【具身智能新范式】NaVid:纯视觉VLM如何重塑机器人导航的“大脑”与“眼睛”

1. 当机器人学会"看视频":NaVid如何用纯视觉颠覆导航逻辑 记得小时候玩捉迷藏吗?蒙着眼睛数到十,然后靠着对房间布局的记忆和声音线索找人。传统机器人导航就像这个游戏的"青铜玩家"——必须依赖精确的地图(相…...

银行数据中心基础设施建设与运维管理【1.6】

3. 5 常见问题 1. 数据中心采用吊顶还是不吊顶方案的问题 数据中心装饰装修, 可以采用无吊顶板和安装吊顶板两种方案。 数据中心建筑内房间是否吊顶, 主要取决于该房间的应用功能或空调形式, 除 IT 机房、 ECC 及人员区域, 其他房间可不设置吊顶, 走廊区域是否吊顶取决…...

如何快速掌握Creality Print:3D打印新手的终极切片软件指南

如何快速掌握Creality Print:3D打印新手的终极切片软件指南 【免费下载链接】CrealityPrint 项目地址: https://gitcode.com/gh_mirrors/cr/CrealityPrint Creality Print是一款功能强大的开源3D打印切片软件,专为FDM(熔融沉积成型&a…...

人形机器人遥操作技术的核心优势与应用场景解析

1. 人形机器人遥操作技术为什么值得关注 第一次接触人形机器人遥操作技术是在三年前的一个医疗展会上。当时看到外科医生坐在控制台前,通过手柄和视觉反馈系统,精准操控一台人形机器人完成葡萄皮缝合演示。这个场景让我意识到,这项技术正在突…...

从接线到选型:深入解析两线制、三线制与四线制仪表的工程实践

1. 工业仪表的线制基础:从概念到应用场景 第一次接触工业仪表接线时,我被各种颜色的线缆绕得头晕眼花。记得有次在化工厂实习,老师傅指着压力变送器问我:"知道这两根红线为啥要绞在一起吗?"当时支支吾吾答不…...