背景
看了很多牛客面经,也想回馈大家。
楼主19年211本毕业,先校招去了一家三线游戏厂做客户端。年初因为工作室变动,又想到快两年经验,应该可以克服非科班的痛点,于是就开始准备换工作。
大约从三月初开始准备面试,四月清明节回来后开始面试一共有网易、紫龙、腾讯、莉莉丝和米哈游五家,五一回来确定去米哈游,中间面试过程确实给我一些启发。
下面就开始一一细说。
经历
网易
视频一面 4月6号 60min
- map和unordered_map;哪种占用内存更大;unordered_map扩容与删除。
- vector扩容;push_back平均时间复杂度。
- 有序的1到1000寻找缺失的一个数;无序情况怎么做。
- TopK;内存不够的情况;有满分的情况。
- 说说A*;cost函数怎么定义;NavMesh怎么寻路;其他寻路算法。
网易面试风格很明显,一直怼数据结构、算法知识。这种类型面试只能靠大家多花时间学习、积累。
楼主在这些问题的扩展知识上都答得不好,一面直接被挂了。后面其他部门打电话捞,楼主婉拒了。
紫龙
面试时了解到紫龙目前在上海也有六七百人了,但之前不清楚,投递他家的原因是听说面试通过率比较低,所以就投了想检验下自己。
电话一面 4月6号 30min
- vector;怎么插入;怎么扩容。
- map与unordered_map;什么时候用哪个。
- static关键字;修饰函数中一临时变量时,多久生成、多久销毁。
- 四个cast;dynamic_cast转换失败返回什么。
- c#值类型与引用类型;装箱与拆箱。
- c# GC。
- 二叉树遍历;递归怎么改成循环。
- 向量点乘与叉乘;举例使用时机。
- 变换矩阵为什么是4x4;一般是(0, 0, 0, 1)的最后一列\行什么作用。
- 一个顶点经历哪些空间与变换才会到屏幕上。
- BlinnPhong光照模型;n点乘l和n点乘h意义。
- shadowmap过程;shadowmap问题与解决方案;照向四面八方的点光源怎么生成shadowmap。
- 骨骼与蒙皮;蒙皮算法。
- 寻路算法;它们异同;说说A*。
问的问题种类比较多,但只要答上来了就直接下一题,所以时间比较短。话说这怎么看都像是照着题单提问的。。
语言方面我提到C#用在工作,C++自己平常看开源项目会用,所以都问了。
这次面试就涉及到了图形学相关,当然这是我主动写了。我本意想劝大家无论是客户端还是引擎都尽量学下图形学,但落笔时又找不出能让所有人信服的理由,所以希望大家看完后找到自己的答案吧。
关于第9和第12问的扩展问题,提示平时学图形学也要多想。比如平常光源说用一张纹理来存储,那么照向四面八方的点光源怎么处理呢?最原始用天空盒一样的cubemap就行。
现场二面 4月14日 80min
- i++线程安全吗。(local static线程安全,shared_ptr线程安全)
- const修饰函数什么作用。
- 字节对齐;数据传输时对齐到8个字节的数据怎么压缩回5个字节。
- float占用几个字节;64位中呢;float类型数据在while循环中一直加一,会溢出吗。
- 虚继承使用意义是什么。
- static修饰全局变量有什么意义。
- 什么情况使用map而不是unordered_map;hash函数定义;hash后的均匀分布。
- STL中sort是稳定的吗;什么样的排序算法称之为稳定的。
- dynamic_cast什么时候抛出异常。
- 树的广搜。
- Dijkstra寻路算法;A*什么时候退化为Dijkstra。(Dijkstra属于Greedy算法,负权边要用DP的Bellman Ford算法)
- Mipmap作用;详细的纹理映射流程,软光栅与硬件的不同。
- 由四个点围成一个矩形,如何判断第五个是否在矩形内。
- 欧拉角和Quaternion;欧拉角旋转原理。
- 变换矩阵为什么是4x4;在一个矩阵同时表述旋转、缩放和平移时,三个动作的先后顺序。
(括号中的问题是我主动和面试官探讨的。)
楼主是非科班,有几个问题上答得很差,比如float的溢出、hash函数定义、稳定排序定义。而12问Mipmap楼主说了“快速范围查询,加速采样”中的“加速”更是直接错了。
二面面试官是紫龙CTO,在面试过程中几乎对我耳提面命说了一些话。比如“高塔不立于浮沙之上”,楼主对这些话、这次面试印象深刻,也对自己薄弱的基础是否算真正的工程师感到愧疚。
现场HR面 4月14日 30min
二面完紧接就HR面。
总的来说紫龙工程师氛围很好,我觉得也值得面试。
腾讯
楼主在上海,投递的深圳,所以都是远程面试。
视频一面 4月8日 70min
- 3C部分(3C是Character, Control和Camera)。扩展聊了聊IK,更真实的动作系统,基于物理的动作,相机策略。
- 项目中的跑图算法。基础是Flocking群聚算法,项目中引入了视野和道路感知解决某些实际问题。(这是楼主的实际项目功能)
- 游戏软体。
- 运行时资源管理。
- ECS和帧同步。
- GC。
- 图形学和渲染管线,如渲染方程、PBR等。
- 碰撞检测。
- 骨骼与蒙皮。
视频二面 4月15日 30min
- 更完善的动画。
- ECS;为什么会有误差(float);Data Oriented和Object Oriented在项目上有什么区别。
- 跑图算法细节,随机性怎么产生的。
视频三面 4月21日 30min
- 相机运动策略;引入弹簧系统怎么运作;弹簧简谐运动怎么停下来。
- 质点弹簧系统;timestep大小有要求吗;timestep为什么是恒定的;基于力和基于位置哪种更适合游戏。
- AABB和多面体与AABB和三角形哪种碰撞检测更复杂;描述下AABB与三角形碰撞。
- 物理引擎;碰撞检测流程;BVH和KDTree优劣;KDTree和Octree比较。
- 物理引擎怎么优化;多线程相关;ECS将相同类型数据放在连续内存中,为什么对性能有提升。
- SIMD;向量运算优化;
- 反射了解吗;反射内存偏移怎么计算;Unreal怎么做的反射。
- std::move了解吗;move一个const变量会发生什么;将其传给构造函数,会调用const构造还是非const移动构造。
前两面问题都是围绕项目技术的,像ECS、碰撞检测这些,在工作中可能较少涉及,需要自己主动接触。
第三面应该是看楼主技能树点在了物理方面,所以专门让做这块的人来面试。
这也是楼主另一个体会:作为技术人员不能有短板,还需要有异于常人的点。希望大家也能找到自己的方向能够深挖。
视频HR面 4月26号 60min
最后结果显示楼主在HR面挂掉了,不过我觉得具体原因可能是其他方面吧。所以大家在谈福利、薪资要慎重,楼主是已经有其他offer所以比较激进。
莉莉丝
现场一二面 4月9日 60min
- 对于空间中多个点,最小AABB怎么生成;最小包围球怎么生成。
- 欧拉角和Quaternion;对于一个正向物体,欧拉角怎么偏转到(x,y,z)固定角度;欧拉角怎么转化到矩阵。
- string s; vector<string> v; v.emplace_back(std::move(s));</string>
- 跟随的人物转过墙角时,相机怎么运动。
- 纹理映射。
- 软体模拟。
- 物理引擎,碰撞相关。
这是一二面同一时段,前后两位面试官。投递的是引擎岗,面试中了解到是面向社区的自研引擎,所以就婉拒了。
面试体感很好,面试问题都会和楼主探讨。并且二面面试官人也很有礼,主动和我握手。
米哈游
电话一面 4月13日 50min
现场二面 4月15日 60min
现场HR面 4月15日 20min
全部评论
(8) 回帖