9377游戏后端开发面经
《面试题目》
- 自我介绍
- 是否有考研考公的打算?
- 怎么去选择服务器的?
- 怎么进行冗余存储,还有别的办法吗?
- 断点续传怎么做?
- 怎么获取文件分片或大小?
- 上传文件用到哪些系统调用?请求头格式?
- 怎么解决 OOM 问题?
- 下载很大的 Excel 怎么办?
- ThreadPool 如何优化接口时间?
- XXL-JOB 如何保证数据一致性?
- MySQL 和 Redis 如何保证数据一致性?
- 常用索引有哪些?
- InnoDB 数据结构 & 存储格式?
《参考解析》
- 断点续传:核心逻辑是利用MD5作为文件唯一标识,将文件分片上传。后端通过记录已接收的切片编号,在断开重连后返回缺失列表,最后由后端执行顺序合并。
- OOM 排查:首选使用 jmap dump 内存,通过 MAT 分析大对象。代码层面避免大集合常驻内存,使用线程池限制线程数,并确保流对象使用后在 finally 块中关闭。
- 大 Excel 导出:禁止一次性全加载入内存,采用流式写入(如 EasyExcel 的流式 API)或分批异步导出方案,生成下载链接避免接口超时。
- MySQL/Redis 一致性:推荐“先更新DB,后删除缓存”策略。为应对并发场景下的脏读,可配合延时双删或订阅 MySQL Binlog(如 Canal)通过消息队列实现最终一致性。
- XXL-JOB 一致性:关键在于任务逻辑的“幂等性”设计,确保即使任务重复执行也不会产生脏数据。同时利用执行器的重试机制与分布式锁避免并发调度。
- InnoDB 存储:使用 B+ 树作为索引结构,优势在于降低树高,提高查询效率。行格式推荐 Dynamic,支持高效存取变长字段。