快手Java后端一面面经

快手 · Java后端开发 · 一面 · 2026-04

面试题目

  1. 自我介绍
  2. AI项目背景与目的
  3. 系统限制:最大视频大小、解析输出格式
  4. 音频处理链路与大模型调用流程
  5. MD5+分布式锁内容去重方案
  6. Redis分片状态设计及分片大小设置依据
  7. 超卖问题的最终一致性保障
  8. Redis缓存击穿方案及选择逻辑过期原因
  9. 失败重试次数上限后的兜底策略
  10. 延迟队列处理超时订单,乐观锁解决支付冲突
  11. Redis持久化配置
  12. MQ消息积压或消费者消费不过的处理监控与方案
  13. 索引失效导致全表扫描的排查与解决
  14. 本地线程池核心参数评估与设置
  15. Lua脚本扣库存原子性与极端挂机场景分析
  16. MySQL隔离级别及乐观锁表现区别
  17. MinIO残余分片文件清理策略
  18. 服务宕机时前端用户感知处理
  19. HashMap在并发场景下的线程安全问题
  20. 查询“最近上传的10个视频”的Redis数据结构选型
  21. Redisson看门狗续期机制与锁释放
  22. MyBatis #与$占位符区别及防SQL注入
  23. 流量突增10倍后的瓶颈分析
  24. 算法题(未写出,仅讲思路)
  25. 心态与自我复盘

参考解析

  • Redis缓存击穿与逻辑过期:逻辑过期通过缓存设置一个过期时间字段,更新时由后台线程异步刷新,避免了互斥锁导致的线程阻塞,适合对实时性要求不高但要求高性能的场景。
  • 超卖与一致性:核心使用Lua脚本保证扣减原子性,配合Redis分布式锁或数据库乐观锁(版本号/CAS),最终一致性通过MQ实现补偿重试机制。
  • 索引失效排查:常见原因有隐式类型转换、非最左匹配原则、使用!=或NULL判断、计算列等。排查工具:使用EXPLAIN命令分析key和type字段。
  • MQ消息积压:增加消费者副本数,临时扩容分区;或者增加离线补偿逻辑,将积压消息转存至临时DB,待流量低峰时通过异步任务补齐。
  • #与$占位符:#进行预编译处理,能有效防SQL注入;$进行字符串拼接,直接替换,常用于表名或列名动态传入,务必注意过滤。