25年10月我家云 Java开发 实习 二面
#JAVA##JAVA面经##JAVA内推#
1. 你项目中保证抽奖结果保存的核心技术方案是什么?
回答思路
- 抽奖核心痛点:高并发、超发、重复中奖、数据不一致。
- 方案必须包含:事务 + 分布式锁 + 幂等 + 库存控制。
- 结构:加锁 → 校验库存/资格 → 扣减库存 → 保存中奖记录 → 提交事务。
标准答案 核心方案:Redis 分布式锁 + 数据库事务 + 幂等控制。先通过分布式锁防止并发超抽,再在事务里校验资格、扣减奖品库存、写入中奖记录,保证抽奖结果原子性、不超发、不重复。
2. 项目中处理抽奖异步逻辑时,使用的具体异步框架是什么?
回答思路
- 异步场景:发奖、通知、记录日志、更新统计。
- 常用两种:Spring 异步 @Async + 自定义线程池 或 RabbitMQ/RocketMQ。
- 项目里一般说最标准、最稳的组合。
标准答案 使用 Spring @Async + 自定义线程池 处理轻量级异步;对可靠性要求高的发奖、通知逻辑,使用 RabbitMQ 异步消息 保证可靠执行。
3. 你是如何避免获奖数据重复插入的,核心解决思路是什么?
回答思路
- 重复插入本质:重复请求、重试、消息重投。
- 最稳方案:业务唯一键 + 数据库唯一索引 做天然幂等。
标准答案 核心思路:基于业务唯一标识建立数据库唯一索引(如 user_id + activity_id + prize_id),从存储层面保证同一用户同一活动同一奖品只能插入一条中奖记录,重复插入会直接报错,天然幂等。
4. 给几十万条数据的表新增字段时,如何避免锁表影响业务?
回答思路
- 大表 DDL 风险:MySQL 会锁表/阻塞DML。
- 核心:使用在线 DDL,不加锁不阻塞业务。
标准答案 使用 MySQL 在线 DDL(AL,在不锁表、不阻塞读写的情况下安全添加字段,避免影响线上业务。
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
【八股真解】精炼最新高频面经 文章被收录于专栏
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏
查看15道真题和解析