C# & Unity 客户端面试题
基础问题
C# 语言基础
- 值类型和引用类型的区别?举例说明
- 什么是装箱(Boxing)和拆箱(Unboxing)?如何避免?
- ref 和 out 关键字的区别?
- 委托(Delegate)和事件(Event)的关系?如何实现多播委托?
Unity 核心机制
- Unity 的生命周期方法执行顺序(如 Awake、Start、Update、LateUpdate 等)?
- 预制体(Prefab)的作用和实例化方式?
- 协程(Coroutine)的原理?如何用 yield return 控制执行流程?
- 如何实现对象池(Object Pooling)优化性能?
Unity 功能实现
- 如何实现角色移动?说明 Rigidbody 和 Transform 直接修改位置的区别。
- 碰撞(Collision)和触发(Trigger)的区别?相关事件方法有哪些?
- UGUI 的锚点(Anchor)和轴心(Pivot)如何影响 UI 布局?
高级问题
性能优化
- 如何定位 Unity 项目的内存泄漏?如何优化 GC(垃圾回收)?
- Draw Call 合并的原理?如何通过图集(Atlas)和批处理(Batching)优化渲染?
- 如何通过 Profiler 分析 CPU 和 GPU 瓶颈?
架构设计
- 如何实现基于事件驱动的游戏逻辑?举例说明观察者模式(Observer Pattern)的应用。
- 什么是 ECS 架构?与 MVC 的区别是什么?
- 如何设计一个可扩展的技能系统?
进阶技术
- Shader 编写:如何实现一个简单的顶点-片段着色器(Vertex-Fragment Shader)?
- 动画系统中,Animator Controller 的状态机如何优化?
- 如何通过 Addressables 或 AssetBundle 实现资源热更新?
C++ 游戏服务器面试题
基础问题
C++ 语言基础
- 指针和引用的区别?什么情况下会使用指针的指针?
- 虚函数(Virtual Function)和多态的实现原理?
- STL 中 vector 和 list 的底层实现及适用场景?
- 如何避免内存泄漏?智能指针(如 shared_ptr、unique_ptr)的使用场景?
网络编程
- TCP 和 UDP 协议的区别?游戏服务器中如何选择?
- 什么是粘包/拆包问题?如何解决?
- 同步 IO 和异步 IO 的区别?举例说明 Reactor 模式。
数据库与存储
- 如何设计玩家数据的数据库表结构?
- Redis 在游戏服务器中的作用?如何实现缓存和会话管理?
高级问题
高并发与分布式
- 如何设计一个支持万人同时在线的游戏服务器架构?
- 负载均衡的实现方式?如何动态扩容服务器?
- 如何保证分布式系统中的数据一致性(如 CAP 理论)?
协议与性能优化
- 如何设计高效的游戏通信协议?Protobuf 和 JSON 的优劣?
- 如何通过零拷贝(Zero-Copy)技术优化网络传输?
- 如何减少服务器逻辑帧的延迟?时间轮(Time Wheel)算法的应用场景?
容灾与安全
- 如何实现服务器的热更新(不停机更新)?
- 如何防御 DDoS 攻击和协议篡改?
- 反作弊系统的设计思路?如何检测外挂行为?
实战与设计题
客户端(Unity)
- 设计一个敌人 AI 系统,要求支持寻路、状态切换(巡逻/追击/攻击)。
- 实现一个技能系统,支持技能冷却、范围伤害和 Buff/Debuff 效果。
服务器(C++)
- 设计一个排行榜系统,支持实时更新和分页查询。
- 实现一个基于 TCP 的聊天服务器,支持多房间和消息广播。
附加考察点
- 项目经验:请描述你参与过的最复杂的游戏模块,并说明技术挑战和解决方案。
- 算法题:手写 LRU 缓存算法、二叉树遍历、快速排序等。
- 设计模式:举例说明工厂模式、状态模式在游戏开发中的应用。