9377游戏后端开发面经

《面试题目》

  1. 自我介绍
  2. 是否有考研考公的打算?
  3. 怎么去选择服务器的?
  4. 怎么进行冗余存储,还有别的办法吗?
  5. 断点续传怎么做?
  6. 怎么获取文件分片或大小?
  7. 上传文件用到哪些系统调用?请求头格式?
  8. 怎么解决 OOM 问题?
  9. 下载很大的 Excel 怎么办?
  10. ThreadPool 如何优化接口时间?
  11. XXL-JOB 如何保证数据一致性?
  12. MySQL 和 Redis 如何保证数据一致性?
  13. 常用索引有哪些?
  14. InnoDB 数据结构 & 存储格式?

《参考解析》

  • 断点续传:核心逻辑是利用MD5作为文件唯一标识,将文件分片上传。后端通过记录已接收的切片编号,在断开重连后返回缺失列表,最后由后端执行顺序合并。
  • OOM 排查:首选使用 jmap dump 内存,通过 MAT 分析大对象。代码层面避免大集合常驻内存,使用线程池限制线程数,并确保流对象使用后在 finally 块中关闭。
  • 大 Excel 导出:禁止一次性全加载入内存,采用流式写入(如 EasyExcel 的流式 API)或分批异步导出方案,生成下载链接避免接口超时。
  • MySQL/Redis 一致性:推荐“先更新DB,后删除缓存”策略。为应对并发场景下的脏读,可配合延时双删或订阅 MySQL Binlog(如 Canal)通过消息队列实现最终一致性。
  • XXL-JOB 一致性:关键在于任务逻辑的“幂等性”设计,确保即使任务重复执行也不会产生脏数据。同时利用执行器的重试机制与分布式锁避免并发调度。
  • InnoDB 存储:使用 B+ 树作为索引结构,优势在于降低树高,提高查询效率。行格式推荐 Dynamic,支持高效存取变长字段。