最终面试包:概率索引、背诵卡与模拟题
这不是新的长答案,而是面试当天的导航页。先背“一页卡”,再按职位选择六个主项目中的三个。所有细节都回到对应专题,不在这里重复扩写。
一、按出现概率排序的问答索引
S 级:每轮几乎都会出现
| 问题 | 先答什么 | 深挖入口 |
|---|---|---|
| 自我介绍 | 四年相关经历;UGC、Gameplay、跨端;两次最高绩效 | 自我介绍 |
| 你在 UGC2.0 做了什么 | 页面协议、跨语言链路、制品与自动化三条主线 | UGC2.0 客户端基建 |
| UGC 客户端架构怎么拆 | 创作模型、编辑器、运行时、交付治理 | UGC 架构白板稿 |
| TS、C++、Lua 怎么通信 | 请求 transport、Lua 编排、反向状态通知、generation/revision | UGC2.0 客户端基建 |
| 四种 UGC 实现方案 | 绿洲、Roblox、UGC1.0/2.0 的端到端链路、扩展成本与故障模式 | 四种方案深挖 |
| 你最复杂/最有 ownership 的项目 | UGC2.0 页面基础设施 | 行为面 STAR |
| 为什么离职/看机会,下一步要什么 | 实时内容平台、复杂系统和技术 owner | 自我介绍 |
A 级:项目深挖高概率
| 问题 | 案例 | 深挖入口 |
|---|---|---|
| UGC1.0 做了什么 | 地图交付、编辑元件、AI 创作、ASTC、工具 | UGC1.0 编辑器 |
| 地图怎么保存和发布 | 冻结快照、Schema、多文件、打包、审核与版本 | 地图与发布 |
| AI 换色/参考图怎么做 | 异步任务、候选预览、可逆提交、安全和失败恢复 | AI 换色与 ASTC |
| Instance 与 Actor 什么关系 | 创作身份与 World 投影分离 | 对象模型 |
| 三 VM 为什么需要 | Edit/Client/Server 的权限、World 和生命周期隔离 | UGC2.0 客户端基建 |
| ArtifactBuilder 做什么 | 冻结输入、Processor、确定制品、多端安装 | UGC2.0 交付基建 |
| PVE 客户端怎么拆 | 进局、规则、引导、战斗交互、结算恢复 | PVE 架构 |
| 高密度同步怎么优化 | Relevancy、Priority、Frequency、Dormancy、状态/事件 | 高密度复制 |
| Gamelet 与 PixUI 什么关系,页面怎么加载 | 应用容器、页面运行时、PFBS、PAK、窗口与消息链 | Gamelet/PixUI 深挖 |
| PixUI 为什么能跑 React,页面怎样上屏 | JSX/Preact、H5ES DOM、Yoga、UE 绘制与输入回流 | PixUI 渲染深挖 |
| WebView/PixUI 怎样与宿主通信 | 平台注入、Gamelet API、PixUI Message、回调与事件 | 宿主通信深挖 |
| 为什么客户端做 Web | 嵌入式运行时、宿主协议、兼容和交付 | Web 工程 |
B 级:加分和换方向追问
| 问题 | 回答焦点 | 深挖入口 |
|---|---|---|
| SSR/BFF、Coding 三仓怎么治理 | 身份、环境、弱网退出、版本组合和不可变制品 | Web 跨端深挖 |
| 做过哪些工程工具 | Crash 分单、地图解析、自动化、AI 研发资产 | 工程效能 |
| PPO 关卡 AI 怎么训练 | 样本时序、MiniGame、状态动作奖励和公平评估 | 强化学习 AI |
| CAE 经历如何迁移 | 拓扑/几何、网格鲁棒性、大数据与 TransCFD | CAE 与研究 |
| C++/UE/网络/Lua 基础 | 生命周期、权威、Schema、性能和制品 | 技术基础 |
| 失败、冲突、事故、绩效、带人 | 一个问题只讲一个 STAR | 行为面 |
二、一页背诵卡
自我介绍:90 秒骨架
定位:近四年游戏客户端相关经历,UE/C++/Lua 为主,补 TS/PixUI/Python
主线1:UGC1.0,地图交付 + 编辑元件 + AI/ASTC + 长期治理
主线2:PVP/PVE,物品交互 + Ability + 新手/时间线 + 网络与恢复
主线3:Web/UGC2.0,页面协议 + TS/C++/Lua + 制品/多端/自动化
背景:CAE C++/几何网格 + PPO 游戏 AI + TransCFD
结果:连续两个考核周期最高绩效,数字只讲可证明口径
目标:高级客户端/UGC 基建,承担跨模块技术 owner六个主项目:每个只背五个词
| 项目 | 业务 | 边界 | 核心机制 | 难题 | 反思 |
|---|---|---|---|---|---|
| UGC1 地图交付 | 用户内容可保存发布 | 编辑快照 vs 线上版本 | Schema、Manifest、压缩上传、状态机 | 连续保存/弱网/旧图 | 发布面向不可变快照 |
| UGC1 AI 与编辑 | 降低创作门槛 | 页面不是状态权威 | 异步任务、事务、元件契约 | 模式泄漏/失败恢复 | 一套模型、能力裁剪 |
| UGC2 页面基建 | 多页面跨语言编辑器 | TS/C++/Lua 生命周期 | pageId、generation、revision、ACK | 迟到/乱序/重复消息 | 生命周期进入协议 |
| PVP/PVE | 多人玩法完整会话 | 客户端表现 vs 服务端权威 | 状态机、Ability、复制、恢复 | 引导竞态/高密度对象 | 状态与事件分离 |
| Web 跨端 | 高频页面与 Coding | Web 页面 vs 原生宿主 | JSB、SSR/BFF、能力检测、制品 | 502 退出/WebView/音视频 | 原生保留逃生通道 |
| PPO/CAE | 算法与工程底座 | 研究模型 vs 生产系统 | 同步采样、网格、Transformer | 样本错配/数值鲁棒 | 指标必须限定场景 |
十个行为题:一句话路由
| 问题 | 案例 | 必说判断 |
|---|---|---|
| Ownership | UGC2 页面基建 | 从需求到上线和维护闭环,不等于所有代码自己写 |
| 最复杂问题 | 旧页面消息覆盖新状态 | 按不变量拆成 generation/revision/seq |
| 最大失败 | UGC 面试表达失败 | 从功能名汇报改为目标、边界、证据 |
| 意见冲突 | Web 是否直连原生 | 把立场改写为约束并做最小验证 |
| 时间紧 | 多端制品 | 缩范围,不牺牲数据安全与回滚 |
| 线上事故 | PVE 引导竞态 | 集中幂等归约,不依赖事件顺序 |
| 推基建 | UI 自动化/页面协议 | 首个消费者、适配层、迁移节奏、删旧入口 |
| 最高绩效 | 两组可验证贡献 | 绩效是结果,不替代项目证据 |
| 技术债 | PixUI monorepo 迁移 | 绞杀式迁移,每个兼容层有删除条件 |
| 带人/标准 | 评审、拆解、工具化 | 明说没有正式人员管理职责 |
三、六张白板图与三分钟路线
1. UGC1 地图与发布
Editor Model
-> Freeze Snapshot
-> Validate / Serialize
-> Package + Manifest
-> Upload Artifacts
-> Review / Publish Version
-> Download / Verify / Run三分钟:业务目标 20 秒;数据层与版本 50 秒;发布状态机 60 秒;连续保存/弱网案例 30 秒;个人边界和反思 20 秒。
2. UGC1 编辑与 AI 创作
Input -> Operation State -> Command/Transaction -> Content Model
| |
Gizmo/Collision UI Projection
AI Task -> Candidates -> Reversible Preview -> Commit三分钟:简易/专家共用模型;元件是一条契约;AI 参考图/换色是异步资产管线;用状态泄漏案例收口。
3. UGC2 页面基础设施
TypeScript Page
<-> C++ Native Host / Transport
<-> Lua Domain Service
<-> Edit / Client / Server VM
Identity: pageId + generation
State: domain + revision
Request: seq + ACK + timeout三分钟:为什么三层;正反向调用;三个版本字段分别解决什么;销毁顺序;个人主线与团队架构边界。
4. PVP/PVE 玩法
Match/Session -> Load -> Rule State
├─ Guide / Task / Timeline
├─ Ability / Item / Interaction
├─ AI / 3C / Presentation
└─ Settle / Reconnect / Exit三分钟:完整生命周期;权威与表现;引导竞态;高密度复制;哪些是直接工作、哪些是源码补课。
5. Web 跨端
Apps -> Shared SDK / Protocol / UI
-> PixUI or WebView Host
-> JSB / Native Capability
-> PFBS / Bundle / CI Artifact
SSR/BFF -> Login / Aggregation / Error Fallback三分钟:为什么用 Web;宿主通信;弱网与兼容;Coding 三仓;不可变制品和回滚。
Gamelet/PixUI 被追问时,转到 Gamelet 与 PixUI 实现深挖:先区分 Gamelet、PixUI、PFBS、PAK,再讲构建、窗口加载、双向消息和对称销毁。继续追问 JSB 时,转到 WebView 与 PixUI 宿主通信:先区分平台注入、Gamelet API 和 PixUI Message,再讲 callbackId、事件、线程与生命周期。
6. PPO 与 CAE
PPO: State -> Policy -> Action -> Client Step -> Reward -> Buffer
CAE: CAD -> B-Rep -> Mesh -> Quality -> Solver
AI4CFD: NURBS Geometry -> Transformer Decoder -> Cp/Ux/Uy三分钟:先选 PPO 或 CAE,不要两者都展开;讲一个故障与验证;最后说明能力如何迁移到实时客户端。
四、四轮模拟面试题
这里是试卷,不是标准答案。每题首次作答限制 90 秒,白板题限制 5 分钟。回答后再对照专题,不要边看答案边说。
第一轮:客户端基础,45 分钟
unique_ptr、shared_ptr、弱引用分别解决什么?- UObject 何时可能仍非空但已经不该使用?
- GameInstanceSubsystem 和 WorldSubsystem 怎么选?
- 复制状态与可靠 RPC 有什么本质差异?
- 客户端预测如何避免副作用执行两次?
- Lua wrapper 与 UObject 谁拥有谁?
- 如何设计带版本迁移的保存协议?
- 一次卡顿怎样区分 CPU、GPU、I/O 与资源等待?
- WebView 与原生 UI 的选型边界是什么?
- 什么叫可回滚的确定制品?
合格标准:每题有原则、机制、失败场景和项目映射,避免只背定义。
第二轮:项目深挖,60 分钟
- 用 90 秒说明 UGC2.0 的三条个人主线。
- 画 TS -> C++ -> Lua 请求和 Lua -> TS 状态通知。
- 页面关闭重开时,如何拒绝旧回调?
- UGC1.0 元件为何不是一个 Actor?
- 连续保存为什么会失败,如何串行化和恢复?
- AI 换色怎样做到预览可逆?
- PVE 引导事件顺序问题如何定位?
- Replication Graph 开启后为什么带宽仍可能很高?
- 502 页面为什么是客户端架构问题?
- 指出三项你理解但不是历史 ownership 的模块。
合格标准:先讲个人边界,再讲系统;所有数字能说明口径。
第三轮:系统设计,60 分钟
题目:设计一个支持移动端、PC、多人试玩和脚本扩展的 UGC 客户端。
必须覆盖:
- 创作对象模型与稳定身份。
- 选择、属性、事务、撤销与历史。
- Edit/Client/Server 运行上下文。
- 脚本 API、权限、配额与网络权威。
- 保存、制品、发布、审核和版本。
- 海量对象的渲染、Tick、复制与加载预算。
- 弱网、崩溃、旧版本和坏内容的恢复。
- 自动化、指标、灰度与迁移路线。
合格标准:先问规模和约束;明确状态权威;至少讲两个失败时序;不靠框架名替代设计。
第四轮:行为面,45 分钟
- 为什么你是高级客户端,而不只是功能开发?
- 讲一次真正失败。
- 讲一次你不同意现有方案。
- 讲一次线上事故。
- 如何推动没有汇报关系的团队配合?
- 怎样证明最高绩效?
- 需求很急时砍什么、守什么?
- 技术债怎么进入计划而不是一直拖?
- 没有正式管理职责,如何证明带动能力?
- 为什么选择我们团队,你三年后希望负责什么?
合格标准:每题只讲一个 STAR;Action 占一半;结果不虚构;反思落实到后续行为。
五、卡壳记录表
每轮模拟后只记暴露出的缺口,不因为一个问题继续无限扩写。
| 日期/轮次 | 原问题 | 卡在哪里 | 缺口类型 | 只补什么 | 再答结果 |
|---|---|---|---|---|---|
| 示例 | TS/Lua/C++ 怎么通信 | 只说了正向调用 | 时序缺口 | 补反向通知、线程和销毁 | 待复测 |
缺口类型只允许五种:事实、结构、机制、证据、表达。若已有答案但 90 秒讲不完,问题是表达,不再新增技术内容。
六、面试当天使用顺序
- 面试前 30 分钟只读“一页背诵卡”和目标岗位对应的三张白板图。
- 自我介绍后主动把面试官引向最强主线:UGC2.0 页面基建或 UGC1.0 地图/AI。
- 回答先结论,再画边界,再讲一个失败;面试官没有追问就停止。
- 被问到团队模块时,先说“我能按架构回答,但历史 ownership 是……”。
- 不知道精确数字时说验证方法和缺口,不临场创造结果。
- 面试结束立即记录卡壳点,下一次只修最高频的三个。
七、当前未封口项
- Fate 定点数物理已有源码和提交证据,可作为算法与底层能力的补充案例,但不替代 UGC 主线;开源组件仍缺公开链接。
- CAE 数亿级算例缺硬件、峰值内存和基准报告,不主动报性能数字。
- 两次最高绩效缺具体考核周期与评价原文,不擅自绑定项目。
- 简历文字仍处于 hold,本轮没有同步最终面试稿;解除 hold 后再做一致性校验。
- 四轮模拟与卡壳复测必须由本人真实口述后才能标记完成。