25年10月我家云 Java开发 实习 一面

#JAVA##JAVA面经##JAVA内推#

先简单聊聊自己吧~学校专业、怎么接触编程的,还有为啥想做Java开发?

“我是XX大学计算机科学与技术专业大四学生。高中因信息学竞赛接触C++,大学用Java写第一个‘课程表查询系统’时被其严谨的面向对象设计和‘一次编写,到处运行’的特性吸引。选择Java开发,源于三点:一是企业级应用对稳定性的高要求(如金融、电商),二是Spring生态对工程化的极致追求(从Boot到Cloud),三是在校园项目中用Java解决真实问题的成就感——比如用线程池优化判题服务,让同学提交代码后秒级反馈。我享受用代码构建可靠系统的踏实感,也渴望在贵司这样的平台深耕后端技术。”

做过的项目里,哪个用SQL数据库最深入?

校园抽奖系统(Spring Boot + MySQL):

  • 表设计核心思路
    🔹 lottery_activity:活动基础信息(id, name, start_time, end_time, total_prizes)
    🔹 lottery_record:中奖记录(id, activity_id, user_id, prize_id, status, expire_time)
    关键设计
    user_id + activity_id 唯一索引(防重复中奖)
    status 字段(UNCLAIMED/CLAIMED/EXPIRED)支撑状态流转
    expire_time 索引(支撑半小时失效扫描)
    🔹 prize_pool:奖品池(id, activity_id, prize_name, stock)
  • 查询优化实例
    -- 查询用户未领取中奖记录(覆盖索引)
    SELECT id, prize_name, expire_time 
    FROM lottery_record r
    JOIN prize_pool p ON r.prize_id = p.id
    WHERE r.user_id = ? AND r.status = 'UNCLAIMED'
    ORDER BY r.create_time DESC;
    
    → 建联合索引(user_id, status, create_time),EXPLAIN显示Using index,耗时从120ms→8ms
  • 收获:数据库设计需‘业务驱动’——每个字段、索引都为解决具体问题而生。”

用户抽完奖马上关页面,中奖结果怎么保证不丢?

“三重保障机制:
1️⃣ 前端兜底:提交后立即存本地缓存(localStorage),页面关闭前发Beacon API保底上报
2️⃣ 后端可靠性

  • RabbitMQ Confirm模式 + 持久化队列
  • 消费者手动ACK(业务成功后才ack)
  • 失败消息入DLQ + 企业微信告警
    3️⃣ 数据校验
  • 定时任务扫描‘提交成功但无记录’的异常数据(对比MQ日志与DB)
  • 补偿脚本自动重发
    项目验证:压测10万次抽奖,数据丢失率=0。核心认知:用户无感知的可靠性,源于多层防御设计。”

抽奖后台用了异步吗?简单说说怎么设计的~

“是的,核心流程异步化:

flowchart LR
    A[用户点击抽奖] --> B{库存校验}
    B -- 通过 --> C[生成中奖记录<br>status=PROCESSING]
    C --> D[RabbitMQ发消息]
    D --> E[异步消费者]
    E --> F[扣减奖品库存]
    F --> G[更新记录status=UNCLAIMED]
    G --> H[WebSocket推送结果]
    B -- 失败 --> I[直接返回失败]

关键设计

  • 消息体含record_id,消费者幂等处理(查DB已存在则跳过)
  • 消费失败重试3次 → 入DLQ人工介入
  • 前端轮询/api/lottery/result?recordId=xxx兜底(防WebSocket断连)
    价值:接口响应P99从800ms→120ms,用户体验显著提升。”

会不会出现同一个人中奖记录被插多次?怎么防的?

“三重防护杜绝重复:
🔹 数据库层lottery_record表建唯一索引(user_id, activity_id),重复插入直接报DuplicateKeyException
🔹 应用层

  • 抽奖前查DB:SELECT COUNT(*) FROM lottery_record WHERE user_id=? AND activity_id=?
  • Redis分布式锁:SET lock:lottery:{userId}:{activityId} nx ex 10(防并发请求绕过DB查询)
    🔹 业务层
  • 前端按钮防重(点击后置灰3秒)
  • 接口层To

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务