# 游戏开发面试题积累：C#/Unity 与 C++ 服务器

> 发布时间: 2026-08-02 18:26

# C# & Unity 客户端面试题

## 基础问题

### C# 语言基础

1. 值类型和引用类型的区别？举例说明
2. 什么是装箱（Boxing）和拆箱（Unboxing）？如何避免？
3. ref 和 out 关键字的区别？
4. 委托（Delegate）和事件（Event）的关系？如何实现多播委托？

### Unity 核心机制

1. Unity 的生命周期方法执行顺序（如 Awake、Start、Update、LateUpdate 等）？
2. 预制体（Prefab）的作用和实例化方式？
3. 协程（Coroutine）的原理？如何用 yield return 控制执行流程？
4. 如何实现对象池（Object Pooling）优化性能？

### Unity 功能实现

1. 如何实现角色移动？说明 Rigidbody 和 Transform 直接修改位置的区别。
2. 碰撞（Collision）和触发（Trigger）的区别？相关事件方法有哪些？
3. UGUI 的锚点（Anchor）和轴心（Pivot）如何影响 UI 布局？

## 高级问题

### 性能优化

1. 如何定位 Unity 项目的内存泄漏？如何优化 GC（垃圾回收）？
2. Draw Call 合并的原理？如何通过图集（Atlas）和批处理（Batching）优化渲染？
3. 如何通过 Profiler 分析 CPU 和 GPU 瓶颈？

### 架构设计

1. 如何实现基于事件驱动的游戏逻辑？举例说明观察者模式（Observer Pattern）的应用。
2. 什么是 ECS 架构？与 MVC 的区别是什么？
3. 如何设计一个可扩展的技能系统？

### 进阶技术

1. Shader 编写：如何实现一个简单的顶点-片段着色器（Vertex-Fragment Shader）？
2. 动画系统中，Animator Controller 的状态机如何优化？
3. 如何通过 Addressables 或 AssetBundle 实现资源热更新？

---

# C++ 游戏服务器面试题

## 基础问题

### C++ 语言基础

1. 指针和引用的区别？什么情况下会使用指针的指针？
2. 虚函数（Virtual Function）和多态的实现原理？
3. STL 中 vector 和 list 的底层实现及适用场景？
4. 如何避免内存泄漏？智能指针（如 shared_ptr、unique_ptr）的使用场景？

### 网络编程

1. TCP 和 UDP 协议的区别？游戏服务器中如何选择？
2. 什么是粘包/拆包问题？如何解决？
3. 同步 IO 和异步 IO 的区别？举例说明 Reactor 模式。

### 数据库与存储

1. 如何设计玩家数据的数据库表结构？
2. Redis 在游戏服务器中的作用？如何实现缓存和会话管理？

## 高级问题

### 高并发与分布式

1. 如何设计一个支持万人同时在线的游戏服务器架构？
2. 负载均衡的实现方式？如何动态扩容服务器？
3. 如何保证分布式系统中的数据一致性（如 CAP 理论）？

### 协议与性能优化

1. 如何设计高效的游戏通信协议？Protobuf 和 JSON 的优劣？
2. 如何通过零拷贝（Zero-Copy）技术优化网络传输？
3. 如何减少服务器逻辑帧的延迟？时间轮（Time Wheel）算法的应用场景？

### 容灾与安全

1. 如何实现服务器的热更新（不停机更新）？
2. 如何防御 DDoS 攻击和协议篡改？
3. 反作弊系统的设计思路？如何检测外挂行为？

---

# 实战与设计题

## 客户端（Unity）

1. 设计一个敌人 AI 系统，要求支持寻路、状态切换（巡逻/追击/攻击）。
2. 实现一个技能系统，支持技能冷却、范围伤害和 Buff/Debuff 效果。

## 服务器（C++）

1. 设计一个排行榜系统，支持实时更新和分页查询。
2. 实现一个基于 TCP 的聊天服务器，支持多房间和消息广播。

---

# 附加考察点

1. 项目经验：请描述你参与过的最复杂的游戏模块，并说明技术挑战和解决方案。
2. 算法题：手写 LRU 缓存算法、二叉树遍历、快速排序等。
3. 设计模式：举例说明工厂模式、状态模式在游戏开发中的应用。