面灵AI

米哈游后端开发面经汇编:游戏服务、内存与网络

时间
2026-09
来源
牛客网

《面试题目》

  1. 游戏项目如何完成构建,CI 与 CD 的流程是什么,Git 如何支持团队协作?
  2. Python 与 C++ 有什么区别,C++ 的关联容器如何使用?
  3. 数组与链表有什么区别?
  4. 怎样计算 n 的阶乘末尾有多少个零?
  5. 内存泄漏如何定位和解决?
  6. 如何设计支持百万连接的游戏服务端?
  7. 分布式消息怎样减少丢失并处理重复?
  8. 事务隔离级别有哪些,可重复读如何实现?
  9. Redis 的持久化方式有哪些,AOF 重写怎样减少文件体积?
  10. 一致性哈希解决什么问题,虚拟节点有什么作用?
  11. C++ 原子操作有哪些内存顺序,为什么要考虑重排?
  12. 协程与线程有什么区别,由谁调度?
  13. epoll 的 LT 与 ET 有什么区别,ET 模式下怎样正确读写?
  14. Reactor 与 Proactor 有什么区别?
  15. TCP 的 TIME_WAIT、流量控制与拥塞控制分别解决什么问题?
  16. UDP 上如何实现可靠传输,KCP 的基本思路是什么?
  17. std::move 与 std::forward 有什么区别?
  18. 虚函数表如何支持动态分派,多继承时需要考虑什么?
  19. weak_ptr 如何避免循环引用,怎样安全取得对象?
  20. 内存池如何设计,游戏服务为什么使用它?
  21. 如何避免同类线上问题复发,数据量继续增长时怎么扩展?
  22. RPC 与 HTTP 是什么关系,RPC 调用需要传递哪些上下文?
  23. Kafka 与 RocketMQ 如何选型,MySQL 复合条件如何设计索引?

《参考解析》

原帖汇总了多场后端面试,标注的面试日期从 2025 年 11 月到 2026 年 8 月;本页月份采用该汇编帖的发布月份。

阶乘末尾的零

一个零来自一对因子 2 和 5,阶乘中 2 更多,因此只数 5。答案是 floor(n/5)+floor(n/25)+floor(n/125) 等项之和。实现时反复令 n 除以 5 并累加商,能避免不断乘 5 造成的溢出。

ET 读写循环

边沿触发只通知状态变化,因此套接字要设成非阻塞;收到可读事件后反复读取,直到返回 EAGAIN,而不是只读一次就离开。写操作也要处理部分写入,把剩余字节保留到后续可写时继续发送。

weak_ptr

它不拥有对象,不延长对象生命周期。使用时调用 lock(),成功则得到一个在本次使用期间持有对象的 shared_ptr,失败则说明对象已无法获取。先检查 expired() 再单独访问对象会留下竞态窗口。

RPC 与 HTTP

RPC 描述远程调用的抽象,HTTP 是可承载调用的应用层协议,两者并不互斥。选型应对照接口契约、流式需求、超时传播和跨语言支持,而不是回答成微服务一定不能用 HTTP。