面灵AI→

拼多多客户端开发二面面经

轮次
二面
结果
凉经
时间
2026-10
来源
牛客网

《面试题目》

  1. 自我介绍。
  2. 游戏开发主要使用什么编程语言?
  3. 游戏开发中什么情况、哪些部分用 C++ 写,哪些用 Lua 等脚本写?两类语言的优劣是什么?
  4. 你编写的 C++ 代码最终编译后以什么形式存在?二进制文件吗?游戏引擎的代码呢?
  5. 引擎中会有不同模块和组件吗?它们的加载方式是怎样的?C++ 编写的角色基类在哪个模块?被编译进可执行文件还是运行时加载?
  6. 如果想让角色模块用到时才加载到内存,该怎么设计?做成资源配置文件还是可执行库?可执行库怎么做到按需加载?
  7. 动态库的编译与动态链接的底层原理是什么?
  8. 引擎使用的网络通信协议是什么?基于 UDP 怎么实现 reliable 和 unreliable 传输?
  9. 引擎通信过程中需要加密吗?怎么加密?
  10. 加密相比不加密有哪些区别?
  11. TLS 加密为什么要握手?TLS 有哪些核心机制?
  12. TLS 怎么防止攻击者截取中间报文?攻击者伪造公钥、伪造证书怎么防范?服务器证书的工作机制是什么?
  13. 用代码形式讲解 C++ 的面向对象三大特性。
  14. 手撕:计算包含整数、加减号和括号的表达式字符串。

《参考解析》

语言选型:C++ 负责引擎底层、渲染、物理、网络和高频逻辑,性能可控、可直接操作内存;Lua 负责策划可配置的业务逻辑和热更新,开发快、改完不用重新编译。代价是跨语言调用有开销、调试链路更长,所以边界通常按“性能敏感放 C++、变化频繁放脚本”划。

编译与加载:C++ 源码先编译成目标文件,再链接成可执行文件或动态库(.so/.dll/.dylib);静态库在链接时被拷进产物,动态库在运行时由动态链接器加载并做符号重定位。按需加载可以把角色模块做成动态库,运行时 dlopen/LoadLibrary 加载、dlsym/GetProcAddress 取符号,用完卸载;也可以做资源包延迟加载,但代码模块的热加载要考虑 ABI 兼容、符号冲突和旧实例回收。

UDP 可靠传输:在应用层加序号、ACK、超时重传、去重和滑动窗口,关键消息用可靠通道,状态同步用不可靠通道并允许丢包;拥塞控制可以借鉴 TCP 或使用 QUIC。加密通常用 TLS/DTLS,或自定义的对称加密加密钥交换;TLS 握手用于协商版本、套件、验证证书并生成会话密钥,核心机制包括非对称加密交换密钥、对称加密传数据、MAC/AEAD 保证完整性。证书由 CA 签名,客户端用内置根证书验证链,防中间人;伪造公钥会导致证书验证失败。

C++ 三大特性:封装用类和访问控制隐藏实现;继承用基类/派生类复用接口;多态用虚函数和虚表在运行时动态绑定。手写时给出一个带虚函数的基类、派生类重写、基类指针调用即可。