数据来源:真实面经整理 | 版本:final


一、公司画像 & 校招节奏

米哈游成立于,总部上海,是国内游戏行业技术含量最高的公司之一。核心产品《原神》累计收入超50亿美元,是全球最成功的开放世界手游;《崩坏:星穹铁道》《崩坏3rd》《绝区零》构成完整的产品矩阵。营收约270亿元,员工超1万人。

如果要用一句话描述米哈游的技术特点,那就是:C++是第一语言,游戏开发经验是硬门槛,对游戏的热情是加分项。游戏引擎、客户端渲染、物理模拟,全部用C++实现。这和其他互联网大厂以Java/Go为主的技术栈有本质区别——投米哈游客户端岗,你的C++必须真的扎实,不能靠背八股文过关。

文化层面,米哈游是一家地道的"宅文化"公司。面试官大概率是二次元爱好者,对游戏开发有真实热情。这意味着面试不只是技术考察,还有一个隐性标准:你是否真的热爱游戏、热爱这个行业。真诚比套路重要得多。

主要招聘方向:

方向 代表业务 技术侧重
客户端工程师(C++为主) 游戏引擎、渲染 C++,OpenGL/Vulkan,性能优化
服务端工程师(Go/Java) 游戏服务器、反外挂 Go/Java,网络编程,高并发
技术美术(TA) Shader、特效、渲染管线 HLSL/GLSL,渲染管线
算法工程师 动画物理、AI行为树 C++,机器学习,运动捕捉
前端工程师 官网、活动页面 Vue/React
测试开发 游戏QA Python自动化,性能测试

校招节奏(参考):

阶段 时间 行动建议
暑期实习 竞争极激烈,通过率约5%,有C++项目经验优先报名
正式网申 careers.mihoyo.com,简历突出C++项目和图形学背景
笔试 C++专项选择题 + 编程题(3道,C++实现),90-
技术面试 2-4轮技术面 + 1轮HR,游戏客户端岗轮数更多
Offer发放 留意邮件,及时确认

备考时间建议:提前3个月开始。C++深度和图形学基础不是一两周能补出来的,需要系统学习。游戏热情是软性加分,但没有也是硬减分——至少要玩过原神,能说出自己感兴趣的技术方向。


二、岗位 JD 解析:技术要求拆解

米哈游的JD写得中规中矩,但真实的考察重心和其他互联网公司有很大差别。从面经数据来看,有两个维度是米哈游独有的:C++深度考察和图形学/游戏开发专项考察。

客户端工程师(C++方向,核心岗位)

能力维度 JD要求 真实考察重心 备考权重
C++语言 精通C++ 头文件设计/智能指针/内存管理/性能优化,每轮必问 ⭐⭐⭐⭐⭐
图形学 了解图形渲染 渲染管线完整流程/光照模型/阴影技术,深度考察 ⭐⭐⭐⭐⭐
GDB调试 调试工具使用 米哈游特色考点:不带调试信息时如何调试 ⭐⭐⭐⭐
性能优化 游戏性能 DrawCall合批/LOD/cache-friendly数据结构 ⭐⭐⭐⭐
算法 数据结构与算法 Medium为主,要求C++实现,代码规范严格 ⭐⭐⭐⭐

服务端工程师(Go/Java方向)

能力维度 JD要求 真实考察重心 备考权重
网络协议 网络编程 KCP协议(UDP可靠传输)/帧同步vs状态同步 ⭐⭐⭐⭐⭐
高并发 并发处理 游戏世界的分区分线策略,多线程架构 ⭐⭐⭐⭐⭐
反外挂 游戏安全 服务端数据合法性验证,检测思路 ⭐⭐⭐⭐
数据库 MySQL/Redis 玩家数据Redis缓存+MySQL持久化 ⭐⭐⭐⭐
算法 数据结构与算法 Medium为主,链表/LRU高频 ⭐⭐⭐⭐

核心差异点:米哈游面试与其他大厂的不同

两个考点在米哈游出现频率远高于其他公司:

头文件循环包含问题:A.h包含B.h、B.h包含A.h,这在大型游戏项目中是高频问题。其他公司几乎不考,米哈游把它当成C++工程能力的基础考核。不只是知道问题,要能说清楚3种解决方案,还要能说出前向声明的限制。

GDB调试不带调试信息的程序:这道题能刷掉很多只会背八股的人。正常GDB调试要求-g编译选项,但生产环境往往是-O2优化后的二进制,符号表全被去掉了。米哈游的面试官真的在生产中处理过这类问题,所以他们会考。


三、LeetCode 高频题 Top 20(真实面经数据)

米哈游算法题整体难度:Medium为主,Hard出现概率高于普通互联网公司(接雨水、柱状图最大矩形都在面经中出现过)。最大的特点是必须用C++实现,Python不接受,代码规范严格检查。此外,计算几何类题目(矩形面积、直线上最多的点)出现概率高于其他大厂——这是游戏公司的特色。

第一梯队:必刷(每道至少做3遍)

排名 题目 题号 出现频率 考察方向 米哈游特色备注
1 手撕快速排序 无固定题号 ⭐⭐⭐⭐⭐ C++手写实现 必考,要求C++完整实现,不接受调用sort
2 反转链表 No.206 ⭐⭐⭐⭐⭐ 基础入场券 链表基础,不会直接淘汰
3 LRU缓存机制 No.146 ⭐⭐⭐⭐ 数据结构综合 高频,要求C++实现,会追问对象池优化
4 二叉树层序遍历 No.102 ⭐⭐⭐⭐ BFS基础 各种变形题,锯齿形遍历必会
5 合并K个排序链表 No.23 ⭐⭐⭐⭐ 中高频 优先队列,C++实现考察STL使用

第二梯队:高频(至少做2遍)

排名 题目 题号 出现频率 考察方向
6 数组中的第K个最大元素 No.215 ⭐⭐⭐⭐ 堆/快速选择
7 三数之和 No.15 ⭐⭐⭐⭐ 双指针
8 环形链表 No.141 ⭐⭐⭐⭐ 快慢指针
9 接雨水 No.42 ⭐⭐⭐⭐ 双指针/单调栈,Hard级
10 二叉树的最近公共祖先 No.236 ⭐⭐⭐ DFS递归
11 岛屿数量 No.200 ⭐⭐⭐ BFS/DFS
12 K个一组翻转链表 No.25 ⭐⭐⭐ 链表进阶
13 合并区间 No.56 ⭐⭐⭐ 排序+贪心
14 滑动窗口最大值 No.239 ⭐⭐⭐ 单调队列
15 柱状图中最大的矩形 No.84 ⭐⭐⭐ 单调栈,Hard级

第三梯队:中频,含游戏相关(至少做1遍)

排名 题目 题号 出现频率 考察方向
16 矩形面积 No.223 ⭐⭐ 计算几何,游戏公司特色
17 直线上最多的点 No.149 ⭐⭐ 计算几何,游戏公司特色
18 最长回文子串 No.5 ⭐⭐ 动态规划/中心扩展
19 全排列 No.46 ⭐⭐ 回溯
20 零钱兑换 No.322 ⭐⭐ DP基础

刷题规律总结

规律1:C++实现是硬要求。米哈游面试官会问"你能用C++写一遍吗?",不接受Python提交。刷题的时候就要用C++,熟悉STL容器的用法(unordered_map、priority_queue、list),边界处理和命名规范也要注意。

规律2:计算几何题更高频。矩形面积(No.223)和直线上最多的点(No.149)在普通互联网公司出现概率很低,但在游戏公司里这类计算几何基础是实际工作会用到的,米哈游面经里出现过多次。

规律3:Hard题比普通大厂多。接雨水(No.42)、柱状图最大矩形(No.84)都在米哈游面经里出现过,说明他们对算法能力的要求在游戏行业里属于高标准。第二梯队的Hard题至少要做一遍,不能只停留在Medium。

规律4:代码质量极其重要。命名规范(驼峰/下划线要统一)、边界处理(空指针、空数组、边界条件)、注释,都在米哈游的考察范围内。游戏行业对代码工程质量要求高,这是他们的行业习惯。


四、技术面试考点

C++专项(客户端核心,权重⭐⭐⭐⭐⭐)

头文件循环包含(米哈游特色考点)

这是米哈游客户端岗的经典考题,其他公司极少考,来了必须答上。

问题场景:A.h 里 #include "B.h",B.h 里 #include "A.h",编译报错。

解决方案1:前向声明(Forward Declaration)

// B.h 里不用 #include "A.h"
// 只需要加一行
class A;  // 告诉编译器A是个类,但不需要知道A的完整定义

class B {
    A* a;  // 可以用指针/引用,不能实例化
};

限制:前向声明只能用指针或引用,不能调用成员函数,不能实例化。

解决方案2:Include Guard

// 在每个头文件顶部加上
#ifndef A_H
#define A_H
// 文件内容
#endif
// 或者更简单的:#pragma once

这防止同一个文件被重复包含,但不能解决真正的循环依赖。

解决方案3:重新设计依赖关系(最根本的解法)——引入第三个头文件,让A和B都依赖它,而不是互相依赖。

高概率追问:"前向声明有什么限制?"——不能访问成员,不能实例化,不知道对象大小,只能用指针或引用。


GDB调试不带调试信息的程序(米哈游特色考点)

其他公司的GDB题通常假设程序是-g编译的(带符号信息)。米哈游考过一个更难的场景:线上程序是-O2优化编译的,符号表没了,怎么调试?

常用手段: - x/20i $rip:查看当前指令指针附近的20条汇编指令 - info registers:查看所有寄存器当前值 - info proc mappings:查看进程的内存映射(找到各段地址范围) - find命令:在内存区域中搜索特定值

高概率追问:"程序崩溃产生了core dump文件,怎么分析?"

gdb ./program core   # 用程序+core文件启动GDB
bt                   # 查看崩溃时的调用栈

内存管理

  • RAII(资源获取即初始化):把资源的生命周期绑定到对象,对象析构时自动释放资源,这是C++内存安全的核心思想
  • 智能指针:unique_ptr独占所有权(移动语义,零开销);shared_ptr共享所有权(引用计数,原子操作保证线程安全);weak_ptr打破循环引用
  • 游戏对象池:预分配一批对象,复用而不是频繁new/delete,减少内存碎片和GC压力。这是游戏开发中的常用模式,米哈游面试官可能直接问"怎么设计一个对象池"

右值引用与move语义: - std::move:把左值转换成右值引用,不做实际移动(只是类型转换),然后移动构造函数/移动赋值负责"搬家" - std::forward<T>(arg):完美转发,保持参数原有的值类别(左值保持左值,右值保持右值)

多线程: - 游戏的多线程架构:渲染线程和逻辑线程分离,防止互相阻塞 - std::mutex/std::atomic:互斥锁和原子操作的选择场景 - 无锁队列:游戏服务器高频使用,用原子操作实现线程安全的队列


图形学专项(客户端/TA方向,权重⭐⭐⭐⭐⭐)

图形学是米哈游客户端岗和技术美术岗的核心考点,普通互联网公司基本不考这些。

渲染管线(必考)

顶点数据 → 顶点着色器(坐标变换)→ 图元装配(三角形组装)→ 光栅化(三角形变成像素片元)→ 片元着色器(计算每个像素颜色)→ 深度/模板测试 → 帧缓冲输出

这条流程要能完整说清楚,每个阶段做什么、可编程还是固定、性能瓶颈在哪。

光照模型: - Blinn-Phong:经典模型,环境光+漫反射+高光。漫反射用dot(N, L),高光用半向量H = normalize(L+V) - PBR(物理渲染):基于微表面理论,金属度/粗糙度工作流,原神部分场景使用

阴影技术: - Shadow Map:把光源视角渲染一张深度图,主摄像机渲染时对比深度判断是否在阴影中 - PCF(百分比近似过滤):对Shadow Map周围多个采样点取平均,产生软边阴影效果 - 级联阴影(CSM):不同距离使用不同分辨率的Shadow Map,解决近处锯齿/远处覆盖不足的矛盾

原神的Toon Shading(米哈游特色): 原神的渲染风格(卡通渲染/二次元渲染)是米哈游的技术名片。核心是非真实感渲染(NPR): - 描边效果:背面法线外扩(Outline Pass) - 色块感:对漫反射结果做阶梯化处理(step/smoothstep) - 多平台适配:PC/手机/主机性能差异巨大,需要动态调整渲染质量

性能优化: - DrawCall合批(Batching):减少CPU向GPU提交渲染指令的次数,是移动端优化的核心 - LOD(细节层次):远处物体用低面数模型,近处用高面数模型 - 遮挡剔除(Occlusion Culling):不在视野内或被遮挡的物体不参与渲染


游戏服务器专项(服务端方向,权重⭐⭐⭐⭐)

游戏服务器和普通后端的差异,在于实时性和防作弊这两个独特需求。

帧同步 vs 状态同步: - 帧同步:服务端只转发操作指令,客户端各自计算,计算结果要完全一致(确定性计算)。带宽小,但对客户端一致性要求极高,任何随机数或浮点误差都会导致不同步 - 状态同步:服务端计算游戏逻辑,把结果(位置、血量等状态)发给客户端显示。结果可靠,但带宽和服务端压力更大

KCP协议(UDP可靠传输): - TCP在弱网下延迟高(重传+拥塞控制),对实时游戏体验影响大 - KCP是基于UDP的可靠传输层,可靠性接近TCP,延迟比TCP低30%-40%,代价是更高的带宽消耗 - 面试考法:"为什么游戏用UDP而不直接用TCP?"

反外挂: - 核心原则:服务端永远不相信客户端的数据,所有关键逻辑在服务端验证 - 检测思路:客户端发来的移动速度超过物理上限?伤害数值超过装备允许的上限?直接拒绝并标记

玩家数据存储: - Redis缓存热点数据(当前在线玩家的背包、属性、位置) - MySQL持久化冷数据(历史记录、交易记录) - 断线重连:玩家状态保存在服务端,重连时从Redis恢复


操作系统专项(通用,权重⭐⭐⭐⭐)

虚拟内存:游戏资源管理的核心,大型游戏资产(纹理、模型、动画)需要动态加载卸载,虚拟内存管理直接影响游戏内存占用

IO模型:epoll在游戏服务器中的应用——游戏服务器需要同时处理大量连接,epoll的事件驱动模型比select/poll效率高

多线程渲染架构: - 渲染线程和逻辑线程分离:逻辑线程计算游戏状态,渲染线程负责提交GPU命令,双缓冲避免互相等待 - 工作线程池:物理计算、AI寻路、资产加载,这些耗时操作放到工作线程异步处理

AI工具提升生产力(米哈游特色考察): 米哈游内部鼓励使用AI辅助开发,面试可能问: - 你用过哪些AI工具提高开发效率?(Claude Code、Copilot等) - 如何用AI辅助Shader代码开发? - AI生成内容在游戏中的应用(NPC对话、程序化地形、动画生成)

这个考点在其他公司几乎不会出现。如果你有相关实践,主动提出来是加分项。


五、面经规律总结

面试风格画像

米哈游面试有一个其他大厂没有的特点:面试官会把技术问题和游戏实际场景结合起来。问你渲染管线,可能紧接着问"原神的Toon Shading是怎么实现的";问你内存管理,可能接着问"游戏对象池的设计思路是什么"。面试官本人就是游戏开发者,他们问的问题是他们在工作中真正遇到的。

面试氛围偏技术讨论而非答题式审问,但追问会深到你答不上来为止。C++岗的面试轮数也更多——2-4轮技术面很常见,每轮关注的方向不完全相同,前几轮基础扎实,后几轮考设计能力和项目经验。

必须展示游戏热情。面试官几乎一定会问"你玩过原神吗?"或者"你对哪个技术方向最感兴趣?"。不需要伪装成狂热粉丝,但如果你完全不了解游戏行业、对游戏开发没有任何兴趣,很难通过。真诚地说出你对游戏技术的哪个方向感兴趣(渲染/服务器/工具链/物理引擎),比背诵套话有用得多。

高概率追问链

头文件循环包含追问链:

头文件循环包含怎么解决?
→ 追问:前向声明有什么限制?(不能访问成员,不能实例化,只能用指针/引用)
→ 追问:include guard 和 #pragma once 的区别?
  (include guard 是标准C++,#pragma once 是编译器扩展,但几乎所有主流编译器都支持)
→ 追问:如果两个类需要互相包含完整类型(不能用指针),怎么办?
  (重新设计依赖关系,引入第三个基类或接口)

GDB调试追问链:

不带调试信息的程序怎么调试?
→ 追问:core dump 文件怎么生成?(ulimit -c unlimited,程序崩溃后自动生成)
→ 追问:如何在生产环境收集崩溃信息?(信号处理器 + 打印调用栈)
→ 追问:有没有用过其他性能分析工具?(VTune、perf、Valgrind)

渲染管线追问链:

描述一下渲染管线的流程
→ 追问:原神的 Toon Shading 是怎么实现的?
  (描边用背面法线外扩,卡通感用阶梯化漫反射)
→ 追问:移动端如何优化 DrawCall?
  (静态合批/动态合批/GPU Instancing,减少状态切换)
→ 追问:Shadow Map 有什么问题?怎么改进?
  (阴影锯齿、自阴影,PCF/PCSS软阴影,CSM级联)

内存管理追问链:

游戏对象池的设计思路?
→ 追问:对象池怎么处理不同类型的对象?(模板/继承/类型擦除)
→ 追问:对象池的对象数量不够用怎么办?(动态扩容,预热策略)
→ 追问:C++17 的内存对齐(alignas)在什么场景下有用?
  (SIMD指令要求16字节对齐,cache line 对齐优化性能)

笔试特点

  • 题型:编程题3道(必须用C++实现)+ 计算机基础选择题(图形学/计算机基础)
  • 难度:Medium×2 + Hard×1,代码规范严格
  • 时间:90-
  • 客户端岗特色:笔试可能有Shader/图形学基础选择题(顶点着色器输出是什么、片元着色器的输入是什么),这在其他公司的笔试里几乎看不到
  • 策略:C++语法要提前熟练,写代码时注意命名规范,不要写"a、b、c"这种随意命名

不同岗位的差异

岗位 算法题权重 图形学权重 C++深度 备注
客户端(C++) ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ 头文件/GDB/渲染管线三合一
技术美术(TA) ⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐ Shader能力是核心
服务端(Go/Java) ⭐⭐⭐⭐ ⭐ ⭐⭐ 帧同步/KCP/反外挂是特色
算法工程师 ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐ 动画物理/行为树是特色
测试开发 ⭐⭐⭐ ⭐ ⭐⭐ Python自动化+性能测试

校招节奏

整体策略

米哈游备考有一个核心原则:C++深度和图形学基础必须提前投入,不能临时抱佛脚。这两个方向的知识点不是背几条八股文就能应付的,面试官自己就是游戏开发者,问的问题来自真实工作场景,背出来的答案他们一听就知道。

如果只有,优先级排序:C++专项(头文件/GDB/内存管理)> 渲染管线/图形学基础 > 游戏开发特色知识(KCP/帧同步/对象池)> 算法题(Hard题/图形学算法) > 操作系统网络。服务端方向的同学可以跳过大部分图形学,把这部分时间放到游戏服务器架构上。

详细计划

阶段 时间 重点任务 每日用时
Phase 1:C++深度 头文件循环包含3种解法(前向声明/include guard/重新设计依赖);GDB调试不带符号信息;智能指针原理(shared_ptr控制块+引用计数);右值引用和move语义;多线程(mutex/atomic)
Phase 2:图形学基础 渲染管线完整流程(每个阶段的输入输出);Blinn-Phong光照模型手算;Shadow Map原理+PCF+CSM;原神Toon Shading实现思路;DrawCall合批/LOD/遮挡剔除
Phase 3:游戏开发特色 帧同步vs状态同步(各自适用场景、优缺点);KCP协议(为什么比TCP延迟低);游戏对象池设计(预分配/循环利用/模板实现);反外挂原理(服务端验证)
Phase 4:操作系统+网络 多线程渲染架构(渲染线程+逻辑线程分离);epoll在游戏服务器的应用;虚拟内存和游戏资产管理;SIMD指令和内存对齐
Phase 5:算法专项 Hard题(接雨水No.42/柱状图最大矩形No.84);计算几何(矩形面积No.223/直线上最多的点No.149);链表全系列(用C++实现);LRU手写(C++,哈希表+双向链表);快速排序手写 2-
Phase 6:冲刺 玩原神,了解游戏体验/技术亮点;看最新米哈游面经;整理项目中C++和图形学相关的亮点;AI工具使用经验整理;模拟面试

最低备考标准(上场前必须达到)

  • [ ] C++头文件循环包含的3种解决方案能流畅讲清楚,知道前向声明的限制(不能实例化、不能调用成员)
  • [ ] GDB常用命令能说出来:x/20i $rip查汇编、info registers查寄存器、info proc mappings查内存映射、gdb ./program core分析core dump
  • [ ] 渲染管线的完整流程能描述(顶点着色器→图元装配→光栅化→片元着色器→深度测试→帧缓冲)
  • [ ] 游戏对象池的设计思路能解释(预分配对象数组、空闲列表管理、避免频繁new/delete、减少内存碎片)
  • [ ] 帧同步和状态同步的区别和适用场景能对比说明
  • [ ] 至少玩过原神,能说出一个自己感兴趣的技术方向(渲染/服务器/工具链/物理),能说出原神哪个技术细节让你印象深刻
  • [ ] 手撕快速排序(C++实现,带注释)能在内写完

各岗位备考调整

投客户端(C++方向):Phase 1 C++深度延长到(),Phase 2 图形学延长到(),这是你的核心战场,不能压缩。算法题Phase可以适当缩短,但Hard题至少要刷过一遍。

投服务端(Go/Java方向):Phase 2 图形学缩减为(只了解基础概念),省下来的时间全部投入游戏服务器架构(帧同步/KCP/分区分线策略),以及Go/Java的语言专项。

投技术美术(TA方向):Phase 2 图形学延长到(),重点补充HLSL/GLSL语法、PBR材质系统、原神Toon Shading细节。算法题要求相对低,可以只刷第一梯队。

一句话建议

米哈游面试最大的坑有两个:第一,只背八股文、没有C++真实项目经验,面试官追问几轮就露馅了;第二,不了解游戏、对游戏开发没有真实兴趣,这个很难伪装,面试官聊几句就感受得到。里,有一天专门去玩原神,感受一下这款游戏的技术细节,想想"这个特效是怎么实现的""这个场景为什么帧率没掉",带着技术视角去玩。这一天的投入,面试里可能比你再刷10道题更有价值。


📚 你可能还需要这些

同系列大厂备考攻略

正在准备多家游戏/互联网公司?其他大厂的备考攻略也整理好了: - 📌 腾讯校招备考攻略(客户端/服务端/游戏开发全方向) - 📌 字节跳动校招备考攻略(算法题难度最高,Hard题必刷) - 📌 哔哩哔哩校招备考攻略(B站特色:Go语言专项+弹幕系统设计)

C++深度备考资料

投C++方向的同学,这些也很实用: - 📌 大厂C++技术面试常考题(头文件/内存/多线程,25道高频题整理) - 📌 大厂笔试面试八股文——算法——数组常考题(10道含完整解析)

其他游戏/互联网公司

  • 📌 百度校招备考攻略(搜索广告方向的算法岗特色)
  • 📌 美团校招备考攻略(后端高并发+系统设计)

💡 关注我,少走弯路

我会持续分享: - ✅ 大厂高频题整理(按公司、岗位精准分类,米哈游/字节/腾讯/阿里均已覆盖) - ✅ 最新面经汇总(真实面经,第一时间更新) - ✅ C++/图形学备考资料(游戏公司方向专项整理) - ✅ 校招校招节奏提醒(不错过关键节点)

这篇文章花了不少时间整理,米哈游的面试信息在网上很分散,面经里的C++和图形学考点很多人没有系统整理过,如果对你有帮助: - 👍 点个"赞"和"在看",让更多备考米哈游的同学看到 - 💬 评论区说说你准备的方向(客户端/服务端/TA),我来聊聊各方向的备考重点 - 🔄 转发给正在准备游戏公司的朋友

有问题随时留言,我会尽量回复!


数据来源: - 真实面经整理(-届米哈游校招面经) - 米哈游官网招聘信息(careers.mihoyo.com) - 游戏开发技术社区整理