25届游戏客户端春招总结
一、前言
有些后悔学的东西太杂太广了,没有早点选定一个方向深入学习,导致秋招没拿到梦想的offer。秋招之后,开始奋发图强(开始摆烂),也没怎么用心准备,没刷题也没看八股,忙着写毕业论文。春招本来只打算碰碰运气,投了想去的公司和一些产品做的比较好的游戏公司,也不局限于游戏,还投递了一些C++开发相关的岗位。总的来说,赚钱的游戏厂商就那么多,但是这些公司要求往往比较高,行业不太景气的情况下,很可能只有极少数人能够找到满意的工作。除了自身实力以外,运气还挺重要的,有时候offer就是在实力的基础上再加一些运气。如果没有拿到offer,也不用灰心,慢慢提升自己吧。
其实真心不建议不热爱做游戏的人搞游戏开发。还记得去年暑期面试的时候,面试官说做游戏和玩游戏是两码事,爱玩游戏不代表爱游戏开发。而且,游戏开发的薪资不算高,不过大公司给的比较大方一点。其他游戏中小厂的薪资普遍比互联网中小厂的薪资要少一点。还有一点就是,游戏开发加班会比较严重一点,人员流动也比较大。
二、投递概括
笔试挂
英雄互娱(说是岗位调整)、鹰角。
一面挂
波克城市、拓竹科技、元戎启行、Zoom。
二面挂
米哈游(对基础考察最深的,没有之一)。
OC
Unity中国、腾讯、B站游戏。
三、面经
有很多问题与秋招的面试题重合了,这里就不放上来了。不包含米哈游面试题
- 个人职业规划、打算往哪个方向深耕,这两个问题其实值得思考,很多面试官会看回答的契合度。
- 有没有想做的游戏类型,如果项目组开发的游戏不是你理想的游戏类型,你会怎么办。
- 如果你进入项目组之后做的东西和你职业发展不匹配,你会怎么办。
- 手撕单例模式,手撕对象池,手撕行为树。
- 行为树能不能和大模型有结合点。
- 用过哪些设计模式,优点是什么,举个例子看看。
- 遇到过内存泄露吗,如何排查内存泄漏。
- 移动端的性能优化有了解吗。
- GC了解过吗,什么时候触发GC,怎么缓解GC带来的性能下降问题。
- 1%Low帧知道是什么吗。
- 如何排查卡顿原因,可能出现卡顿的情况。
- 如何排查性能下降是不是因为drawcall数量过多。
- 游戏过程中,手机发热可能是什么原因。
- 了解外挂吗,有没有什么好的办法防止外挂呢。(DMA)
- 协程底层实现原理。
- 进程同步方式,临界区用过吗。
- 共享内存会出现什么问题。
- cache是什么。
- 讲讲cache的写回机制。
- 进程同步和线程同步有什么不同。
- 线程共享了进程的哪些资源,为什么能够共享,底层实现是什么。
- 内核态和用户态的区别。
- 互斥锁、读写锁、自旋锁的概念和区别。
- 什么情况下会出现死锁。
- 地址长度、虚拟内存和物理内存的关系。
- 如果一个程序需要8G的内存,而物理内存仅有1G,这个程序能够运行吗。
- std::vector的扩容机制,为什么不直接使用memcopy和memmove。
- 有哪些迭代器失效的情况。
- 模板、模板偏特化,如何实现std::vector<bool>。
- std::shared_ptr的引用计数存储在堆上还是栈上。
- 手撕std::shader_ptr。
- 如果修改.text段的数据,会发生什么。
- 移动构造函数最后会调用析构函数吗。
- C++const的作用,如果类的成员函数声明为const,有几种办法可以修改成员变量。
- dynamic_cast的底层实现原理。
- 两个对象的内存空间中值一样,能不能互相转换。
- 虚函数指针会有几个,考虑多继承情况下。
- 虚函数表存在哪个位置,虚函数表的生成时机。
- printf怎么实现任意多个参数,了解调用约定吗。
- 汇编层如何实现函数调用的。
- Phong和Blinn-Phong的区别。
- Early-Z和Z-Buffer以及遮挡剔除。
- 怎么绘制一个三角形。
- BVH树和kd树原理以及应用场景。
- 你会怎么实现类似虚幻引擎蓝图的功能。
- 有没有看过最近几年的GDC。