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

news2026/4/16 1:03:41
开场说明这是一场面向 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 强一致性原理允许短暂不一致通过补偿达到一致。 设计动机提升系统可用性。 边界条件对账周期内数据不一致。 落地建议根据业务容忍度选择金融类业务慎用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2515263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…