---
name: game
description: 游戏开发出题：引擎架构与游戏循环、渲染管线、物理与碰撞、网络同步、性能与内存、工具链、客户端与服务端分工。岗位或简历出现游戏客户端、游戏服务端、引擎开发、Unity/Unreal、图形渲染、游戏工具开发时加载。
keywords: [游戏开发, game, 游戏客户端, 游戏服务端, 引擎, unity, unreal, cocos, 渲染, shader, 图形学, 帧同步, 状态同步, gameplay, ecs]
layer: domain
---

## 岗位职责与考察重点

游戏开发岗位分客户端（Gameplay、UI、表现）、引擎/渲染（管线、性能、工具）、服务端（同步、战斗、房间、状态存储）几条线。日常是在帧预算内实现玩法与表现、和策划美术协作、处理各种机型上的性能与内存问题、在弱网下保证体验一致。真实面试里最常被问的不是 API，而是"这个功能怎么在一帧里做完""这个卡顿怎么查""这个同步方案在弱网与作弊下怎么表现"。面试官最在意三件事：一是有没有帧预算与内存预算意识（知道自己项目每帧多少毫秒、GC 多久一次、Draw Call 多少），二是原理是否扎实到能解释引擎黑盒（渲染管线、物理步进、序列化、资源加载），三是有没有真实的性能优化与线上问题排查经历。

校招侧重基础：C++ / C# 语言功底、数据结构与算法、线性代数与基础图形学、游戏循环与 Update 顺序、能说清一个玩法的实现；社招侧重系统与优化：引擎架构与 ECS、渲染管线与 Shader 优化、内存与 GC 治理、同步方案选型与反作弊、资源与热更新方案、工具链建设。国内头部游戏公司的面试普遍会给"一个 Profiler 截图或一个卡顿现象"让候选人分析，以及"设计某个系统"（技能、背包、匹配、战斗同步）的开放题。

## 主题

### 游戏循环与引擎架构
- 阶梯：游戏循环里每帧做什么 → 固定步长与可变步长、Update/FixedUpdate/LateUpdate 顺序、组件模型与 ECS 的差异 → 帧率不稳导致物理抖动、逻辑与渲染耦合导致低端机玩法变化、脚本执行顺序引起的偶现 bug，怎么定位 → ECS 的收益（缓存友好、并行）与迁移代价，什么项目不需要 ECS
- 好题：你的角色移动在 30 帧和 60 帧机器上手感不同、跳跃高度也不一致。原因是什么？固定步长能解决吗？插值与外推怎么让渲染平滑？
- 危险信号：Update 里直接用固定值移动；不知道 deltaTime；把 ECS 当银弹
- 期望信号：逻辑固定步长 + 渲染插值；累积器模式与"死亡螺旋"防护；脚本顺序显式控制；对数据导向设计的理解与适用判断

### 渲染管线与 Draw Call
- 阶梯：一帧画面怎么画出来 → CPU 侧提交、GPU 管线各阶段、Draw Call 与 SetPass、合批（静态/动态/GPU Instancing/SRP Batcher）、前向与延迟 → 帧率低是 CPU 瓶颈还是 GPU 瓶颈怎么判断、overdraw 与填充率、带宽瓶颈在移动端的表现 → 画质与性能的取舍，自定义管线（URP/HDRP/自研）的维护成本
- 好题：一个场景在中端手机上 25 帧，Profiler 显示 CPU 主线程 15ms、渲染线程 30ms、GPU 35ms。瓶颈在哪？你按什么顺序优化（合批、LOD、遮挡剔除、分辨率、Shader 复杂度、overdraw）？各自怎么验证收益？
- 危险信号：只会说"减少 Draw Call"却不知道为什么贵；分不清 CPU 与 GPU 瓶颈；不知道移动端 TBDR 架构的特点
- 期望信号：用 Frame Debugger/RenderDoc 看提交；合批失败的原因排查（材质、缩放、光照）；移动端带宽与 overdraw 优先；动态分辨率与 LOD 策略

### Shader 与材质
- 阶梯：顶点与片元着色器各干什么 → 光照模型（Blinn-Phong、PBR）、法线贴图、Shader 变体与编译时间、纹理采样开销 → Shader 变体爆炸导致包体与加载慢、低端机 Shader 编译卡顿、特效在某些 GPU 上显示异常，怎么处理 → 效果与性能的平衡，美术自由度与变体治理的矛盾
- 好题：项目 Shader 变体超过十万，首次进入场景卡顿数秒。原因是什么？怎么裁剪变体、预热编译、分级管理？裁剪后怎么防止某台机器上材质变紫？
- 危险信号：只会连节点不会写代码；不知道变体是什么；不知道 half 与 float 的差异
- 期望信号：关键字分类与剔除；变体收集与预热；精度选择与移动端优化；对不同 GPU 特性（Adreno/Mali/Apple）的兼容意识

### 物理与碰撞
- 阶梯：碰撞检测怎么做 → 宽相与窄相、离散与连续检测、刚体积分、物理层与过滤 → 高速物体穿透、角色卡在缝隙、物理抖动或堆叠不稳定、物理耗时占比过高，怎么查 → 自研简化物理 vs 引擎物理、物理精度与性能的取舍，确定性物理的代价
- 好题：子弹以高速飞行时偶尔穿过薄墙，开启连续碰撞检测后性能下降明显。有哪些替代方案（射线检测、加厚碰撞体、子步进、分层开启 CCD）？各自的适用场景与代价？
- 危险信号：所有物体都开 CCD；不知道宽相；碰撞层全部互相检测
- 期望信号：空间划分与碰撞矩阵；射线/扫掠代替刚体；固定物理步长与子步；确定性需求下的定点数或自研简化物理

### 网络同步：帧同步与状态同步
- 阶梯：两种同步的基本差异 → 帧同步的确定性要求（浮点、随机、遍历顺序）、状态同步的权威服务器与客户端预测回滚 → 帧同步不同步（desync）怎么定位、状态同步在 200ms 延迟下手感差怎么优化、断线重连 → 按游戏类型选方案（MOBA/FPS/MMO/回合），反作弊与带宽的权衡
- 好题：帧同步游戏偶发不同步，一万局里出现几局。你怎么设计校验点与日志定位出是哪一帧哪个系统？常见的不确定来源有哪些？找到后怎么在不影响老版本的情况下修复？
- 危险信号：分不清两种同步谁需要确定性；不知道客户端预测与回滚；认为 TCP 就够了
- 期望信号：定点数或确定性浮点、逻辑与表现分离；哈希校验与回放对比；预测、和解、插值三件套；UDP 可靠层与延迟补偿

### 游戏服务端架构
- 阶梯：游戏服务端和 Web 服务端差在哪 → 长连接与会话、单线程逻辑与 Actor 模型、房间/战斗服/大厅服拆分、状态存储与落盘 → 战斗服 CPU 打满、玩家数据回档、跨服功能的一致性问题，怎么处理 → 有状态服务的扩缩容与容灾，开服与合服的架构约束
- 好题：设计一个 MOBA 的服务端：大厅、匹配、战斗、结算各放哪、战斗服怎么分配与回收、玩家掉线怎么处理、一台战斗服宕机影响多少局、怎么最小化？
- 危险信号：拿无状态 Web 架构套游戏；不知道单线程逻辑的原因；数据每次操作都写库
- 期望信号：单房间单线程/单 Actor 避免锁；内存态 + 定时落盘 + 关键操作即时落盘；匹配与战斗分离便于扩缩；断线保护与重连状态恢复

### 性能分析与优化
- 阶梯：卡顿和低帧率的区别 → Profiler 使用、主线程/渲染线程/GC 三类瓶颈、帧时间分解 → 偶发卡顿（spike）怎么抓、低端机与高端机瓶颈不同、真机与编辑器数据不一致，怎么处理 → 优化收益与代码复杂度的平衡，性能预算怎么分配到各系统
- 好题：玩家反馈战斗中偶尔卡 200ms，编辑器复现不了。你怎么在真机上抓到这次 spike（深度 Profiler、自定义采样、日志标记）？常见原因（GC、资源加载、Shader 编译、物理爆炸、大量实例化）各怎么验证？
- 危险信号：只看平均帧率；不区分 spike 与持续低帧；优化没有前后数据
- 期望信号：帧时间分布与 1% low；真机 Profiler 与自定义 marker；对象池、异步加载、预热；有量化的优化案例

### 内存管理与 GC
- 阶梯：游戏内存由什么组成 → 托管堆与 GC（Unity/C#）、原生内存与资源、纹理与网格的显存、内存碎片 → 内存持续增长、GC 频繁导致卡顿、低端机闪退（OOM），怎么查 → 内存预算与画质、对象池与代码复杂度的平衡，内存与加载时间的取舍
- 好题：游戏运行半小时后内存从 800MB 涨到 1.5GB 然后闪退。你怎么区分是托管泄漏、原生泄漏还是资源未释放（Memory Profiler、快照对比、引用链）？常见的泄漏源有哪些？
- 危险信号：Update 里 new 对象；不知道 Unity 资源引用与卸载的规则；闪退只会减纹理
- 期望信号：快照对比与引用链分析；事件订阅与静态引用的泄漏；资源引用计数与 UnloadUnusedAssets 时机；纹理压缩格式与 mipmap 策略

### 资源管理与热更新
- 阶梯：资源怎么打包与加载 → AssetBundle/Addressables 的依赖与引用计数、异步加载与预加载、包体拆分 → 更新后资源丢失或加载旧版本、依赖循环导致重复打包、首包过大，怎么处理 → 热更新（Lua/HybridCLR/C++ 补丁）方案的选择，审核政策与工程复杂度的权衡
- 好题：设计一个手游的资源与热更新方案：首包多大、哪些资源随包、怎么做版本比对与差异下载、下载中断怎么续传、更新失败怎么回滚、代码热更走哪条路径？
- 危险信号：所有资源放 Resources 目录；不知道引用计数；热更就是"下载新包"
- 期望信号：依赖分析与分组策略；版本清单与哈希校验；引用计数与卸载时机；代码热更方案的平台限制与性能代价

### Gameplay 系统设计
- 阶梯：技能/状态/Buff 怎么建模 → 数据驱动、组合优于继承、状态机与行为树、事件系统 → 技能效果互相叠加产生 bug、策划改配置导致崩溃、数值系统难以扩展，怎么重构 → 通用框架与玩法特化的边界，策划可配置性与程序可控性的平衡
- 好题：设计一个支持"眩晕时免疫其他控制、护盾吸收伤害但穿透伤害除外、Buff 可叠加与刷新"的战斗效果系统，怎么组织数据与执行顺序？策划新增一种效果时程序要改多少？
- 危险信号：技能全用继承树；效果顺序靠代码硬写；配置没有校验
- 期望信号：效果为数据 + 通用执行器；优先级与结算管线；标签系统（GameplayTag 思路）；配置校验工具与热重载

### 工具链与工作流
- 阶梯：为什么游戏团队需要大量工具 → 编辑器扩展、资源检查、自动化打包与 CI、配置表导出 → 打包时间过长、资源不规范导致性能退化、策划配置错误上线，怎么建立防线 → 工具投入与团队规模的关系，通用工具与项目定制的边界
- 好题：美术经常提交超规格贴图与未合批材质，导致真机性能退化。你怎么设计资源检查工具（提交前检查、CI 报告、自动修复），怎么让美术愿意用？
- 危险信号：没写过编辑器工具；打包靠手动点；资源规范只在文档里
- 期望信号：AssetPostprocessor 或导入管线检查；CI 打包与性能回归测试；配置表校验与可视化报错；工具的易用性设计

### 客户端与服务端分工
- 阶梯：哪些逻辑放客户端、哪些放服务端 → 权威服务器、客户端表现与逻辑分离、协议设计与序列化（Protobuf）→ 外挂修改本地数值、协议被重放、服务端校验成本过高，怎么平衡 → 反作弊的投入边界，单机与联网玩法的架构差异
- 好题：一个动作游戏的伤害判定放客户端还是服务端？放客户端有什么作弊风险、放服务端手感怎么保证？给出折中方案与对应的校验策略。
- 危险信号：所有逻辑放客户端；不知道协议序列化的开销；服务端校验就是"再算一遍"
- 期望信号：服务端权威 + 客户端预测；关键判定服务端校验、非关键抽查；协议版本与兼容；统计异常行为的反作弊思路

## 好题 / 坏题对比

- 坏：什么是 Draw Call？怎么减少？
- 好：中端机 25 帧，主线程 15ms、渲染线程 30ms、GPU 35ms，瓶颈在哪？你按什么顺序优化？合批失败你怎么查原因？每一步怎么验证收益、会牺牲什么画质？

- 坏：帧同步和状态同步有什么区别？
- 好：帧同步游戏万分之几的局不同步，你怎么设计校验点与日志定位到哪一帧哪个系统？常见不确定来源有哪些？找到后怎么在不影响老版本对局的前提下修复？

- 坏：Unity 的 GC 是怎么工作的？
- 好：游戏运行半小时内存从 800MB 涨到 1.5GB 闪退，你怎么区分托管泄漏、原生泄漏与资源未卸载？常见泄漏源有哪些？修完后怎么建立回归防线？

## 项目结合钩子

- 简历出现 Unity / Unreal 项目 → 追目标机型与帧率、每帧预算、Draw Call 与内存数字、最大的一次性能优化
- 简历出现渲染 / Shader → 追写过什么效果、变体怎么管、在哪些 GPU 上出过兼容问题、用 RenderDoc 查过什么
- 简历出现帧同步 / 状态同步 → 追为什么选这种、确定性怎么保证或预测回滚怎么做、desync 或延迟问题的排查经历
- 简历出现游戏服务端 → 追单服承载人数、战斗服线程模型、数据落盘策略、宕机处理、开合服经验
- 简历出现性能优化 X% → 追指标定义（帧率还是帧时间、平均还是 1% low）、在什么机型、用什么工具、优化了哪一层
- 简历出现热更新 / 资源管理 → 追首包大小、更新流程、失败回滚、代码热更方案与平台限制
- 简历出现技能系统 / 战斗系统 → 追数据结构、效果叠加规则、策划配置方式、最难修的一个战斗 bug
- 简历出现工具开发 → 追解决了什么重复劳动、使用人数、有没有减少过一类线上事故

## 出题原则

- 先问清角色（客户端/引擎/服务端）与项目类型（MOBA/FPS/MMO/休闲），再选主题深挖：不拿渲染管线考服务端，不拿房间架构考 Gameplay 客户端。
- 每个优化与架构问题必追数字：帧时间、Draw Call、内存、延迟、承载人数，说不出自己项目数字的当作没有真正负责过。
- 从 Profiler 截图或现场现象切入，要求给排查顺序与验证方法，只会说"减 Draw Call、用对象池"而不会定位的要追。
- 不考特定引擎版本的 API 差异与新特性名称，考的是帧预算意识、管线与同步原理、真机排查与取舍能力。
