米哈游后端开发面经汇编:游戏服务、内存与网络
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 游戏项目如何完成构建,CI 与 CD 的流程是什么,Git 如何支持团队协作?
- Python 与 C++ 有什么区别,C++ 的关联容器如何使用?
- 数组与链表有什么区别?
- 怎样计算 n 的阶乘末尾有多少个零?
- 内存泄漏如何定位和解决?
- 如何设计支持百万连接的游戏服务端?
- 分布式消息怎样减少丢失并处理重复?
- 事务隔离级别有哪些,可重复读如何实现?
- Redis 的持久化方式有哪些,AOF 重写怎样减少文件体积?
- 一致性哈希解决什么问题,虚拟节点有什么作用?
- C++ 原子操作有哪些内存顺序,为什么要考虑重排?
- 协程与线程有什么区别,由谁调度?
- epoll 的 LT 与 ET 有什么区别,ET 模式下怎样正确读写?
- Reactor 与 Proactor 有什么区别?
- TCP 的 TIME_WAIT、流量控制与拥塞控制分别解决什么问题?
- UDP 上如何实现可靠传输,KCP 的基本思路是什么?
- std::move 与 std::forward 有什么区别?
- 虚函数表如何支持动态分派,多继承时需要考虑什么?
- weak_ptr 如何避免循环引用,怎样安全取得对象?
- 内存池如何设计,游戏服务为什么使用它?
- 如何避免同类线上问题复发,数据量继续增长时怎么扩展?
- RPC 与 HTTP 是什么关系,RPC 调用需要传递哪些上下文?
- 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。