Interview Notes

把高频面试题和自己的回答整理成一份能长期增补的清单。

这里适合收纳常问题、回答思路和补充说明。后面新增内容时,直接编辑 src/data/interview-notes.json,刷新页面就能看到更新。

6 本页题目
5 本页分类
26 本页回答要点
Q01

Unity 常见生命周期的执行顺序是什么?

Unity 基础 更新于 2026-04-20

这类题重点不是背全所有回调,而是把初始化、启用、首帧、逐帧更新和销毁这几个阶段讲清楚。

回答整理

  • 脚本实例创建后,通常会先进入 Awake,适合做引用缓存和基础初始化。
  • 对象被启用时会执行 OnEnable,常用于注册事件、打开监听和恢复状态。
  • Start 会在第一帧 Update 之前调用,适合放依赖其他对象已经初始化完成的逻辑。
  • 运行过程中每帧会执行 Update,物理相关逻辑通常放在 FixedUpdate,跟随或收尾逻辑可放 LateUpdate。
  • 对象禁用或销毁前会依次走 OnDisable 和 OnDestroy,适合做事件反注册和资源清理。
Q02

C# 里的 ref、out、in 分别有什么区别?

C# 语法 更新于 2026-04-20

回答时先说共同点都是按引用传递,再讲各自的读写约束和典型使用场景。

回答整理

  • ref 表示传入前变量必须已经初始化,方法内部既可以读也可以改,适合需要在原变量基础上继续修改的场景。
  • out 表示传入前不要求初始化,但方法内部必须完成赋值,常用于返回多个结果或者 TryParse 这类模式。
  • in 也是按引用传递,但更偏向只读语义,方法内部不能修改传入值,适合大结构体避免拷贝时使用。
  • 这三个关键字的核心差异在于调用前是否必须赋值,以及方法内部是否允许修改数据。
Q03

Unity 里协程和 Update 应该怎么选?

Unity 开发 更新于 2026-04-20

要突出两者的职责不同:Update 适合持续轮询,协程更适合步骤化、带等待的流程。

回答整理

  • Update 适合每帧都要判断或计算的逻辑,比如角色输入、摄像机跟随和持续状态检测。
  • 协程适合有明确步骤和等待时机的流程,比如延迟执行、分阶段播放演出、分批生成对象。
  • 协程并不是多线程,它依然运行在主线程,只是把流程拆成多个时间片继续执行。
  • 如果逻辑本质上是状态机或持续条件判断,优先考虑 Update;如果逻辑是顺序流程并且存在等待点,用协程会更清晰。
Q04

什么时候该用 Dictionary,什么时候该用 List?

基础能力 更新于 2026-04-20

这类题常会顺带问复杂度,最好把查找方式、数据规模和遍历需求一起说出来。

回答整理

  • 如果业务是通过 key 快速定位数据,例如根据 id 查配置、查缓存对象,优先使用 Dictionary。
  • 如果更关注顺序遍历、数据量不大,或者需要按索引访问,List 往往更简单直接。
  • Dictionary 的平均查找复杂度通常更优,但会带来额外哈希开销,也不适合频繁按顺序遍历展示的场景。
  • 最终选择的关键不是哪个更高级,而是当前场景更偏向随机查找还是顺序处理。
Q05

如果接口请求失败,你一般会怎么处理?

工程实践 更新于 2026-04-20

回答时可以按“定位问题、用户提示、重试策略、日志记录”四层来组织。

回答整理

  • 我会先区分失败类型,是网络超时、服务端返回错误码,还是前端参数拼装有问题。
  • 对用户侧要给出明确但不过度打扰的提示,比如请求失败、稍后重试,而不是直接静默失败。
  • 对可恢复的问题可以加有限次数的重试或降级方案,但要避免无上限重试把问题放大。
  • 同时记录必要日志,包括请求参数、返回码和关键上下文,方便后续复盘和排查。
  • 如果这个请求会影响核心流程,我还会补充兜底状态处理,避免界面卡死或数据状态不一致。
Q06

Unity 里射线、重叠检测和 Trigger 各适合什么场景?

Unity 开发 更新于 2026-04-20

这题常见于战斗、交互和检测系统,最好从触发时机和使用成本来区分。

回答整理

  • Raycast 适合沿着一个方向做精确检测,比如点击选中、枪线命中和前方障碍判断。
  • Overlap 系列接口适合做范围扫描,比如技能范围内找敌人、圆形或盒形区域检测。
  • Trigger 更适合事件驱动的进入、停留和离开区域判定,比如拾取范围、传送点和告警区。
  • 如果是主动查询某一刻的检测结果,用射线或重叠检测更直接;如果是持续监听区域状态,Trigger 会更省心。