零基础非科班秋招图形/引擎/游戏面经分享

这是一篇关于本人2022秋招(2023届)的经历的分享帖,曾经受益于许多前辈的面经分享,现在也希望自己也想分享出来,算是回馈给大家!有任何问题都可以私信或者评论~
更详细的有答案的面经放在知乎了,链接如下:

1.本人背景:

本人2023届211硕,机械生,非科班,本科纯纯机械设计制造相关方向,读研后才开始做计算机相关的内容,研究生方向是机器视觉,刚读研时候,计算机基础知识几乎为0,后续在学校课题组内用C++做过实时三维重建,图像融合等图像相关的项目,积累了一点并行开发、CUDA、MFC以及OpenGL的相关知识。通过参考许多前辈的帖子(部分链接放在文章结尾),从2021年春天正式决定想要走图形的方向,自学了一些图形学相关知识。有过两段实习经历,一段网易互娱暑期图形工程师的实习经历以及一段中央电视台的体育媒体工作的实习经历(纯爱好与技术无关)。

2.技术栈:

编程语言:C++

图形学学习内容:Games101 , Games202 , 部分Games104, unity shader入门精要, 软光追,GPU Gems3,LearnOpenGL

其他:CUDA, MFC, 数字图像处理基本知识, OpenCV

项目方面:在学校跟导师的图像相关项目、在网易实习时期间做了一些工作、自学的过程中自己尝试做了一个软光追渲染器以及用OpenGL实现了一些基本的简单算法。


3.找工作全经历:

(按进展程度顺序)

同花顺 视觉算法岗 简历挂

oppo提前批 图形学工程师 简历挂

鹰角网络提前批 图形渲染算法工程师 简历挂

小红书 图形图像算法工程师 简历挂

字节跳动提前批 渲染引擎研发工程师 简历挂

联想 图形工程师 简历挂

网易雷火提前批 引擎研发工程师 简历挂

网易互联网 渲染引擎开发工程师 简历挂

鹰角网络正式批 图形渲染工程师 简历挂

Garena 图形渲染工程师 简历挂

叠纸 引擎开发工程师 简历挂

完美世界 游戏引擎开发 简历挂

紫龙游戏黑杰克 游戏研发工程师 投递无回应(本人天地劫死忠玩家,很伤心,为投紫龙还特地花了好多时间做了一版天地劫皮肤简历)

网易雷火正式批 游戏研发工程师 笔试挂

酷家乐 图形渲染引擎工程师 一面挂

蚂蚁 技术美术 一面挂

字节跳动正式批 多媒体图形图像研发工程师 二面挂

Funplus 游戏引擎开发 二面挂

B站 游戏算法工程师 二面后面试官告诉我最近有新项目要上线,过一阵子再继续后面的流程,此后就再无消息

米哈游 游戏客户端 三面挂(痛,太痛了)

华为 媒体算法 泡池子

快手游戏 游戏图形学算法工程师 意向

海康威视 计算机图形工程师 offer

广联达 图形开发工程师 offer

搜狐畅游 引擎开发工程师 offer

vivo 图形驱动工程师 offer

(其中快手游戏,funplus和米哈游给我的面试体验最为专业,让人十分舒适,遇到不会或者不确定的问题,面试官会加以引导甚至会和你一起讨论)

4.个人反思及总结:

经历了秋招大大小小的笔试面试,一次次的简历挂,说没有挫败感是不可能的,从大环境的角度来看,身边的大佬依旧一往无前,但更多的像我这样的普通人,确实是感觉寒气十足。仅从今年我个人的情况来看,只靠力扣刷题,背C++八股,准备最基础的图形学理论知识,可能已经不足以底气十足地去面对图形引擎岗位了,更多的实践是必不可少的,实践是夯实自己的必要路径。这些失败确实让我看清自己很多不足之处,我总跟朋友调侃自己是个速成的理论大兵八股战士,积累和实践都远远不够,也的确如此。图形,引擎都是需要非常强动手能力的门类,我自身缺乏足够多的图形引擎项目、对商业引擎的了解深度太过浅薄以及非科班有可能是我一半公司都简历挂的主要原因,关于面试部分的失误我也会在后面面经分享中进行一点总结。

5.面经分享:

以下面经全部来自于我自己面试遇到的问题,出于很多公司保密问题,我不会标明公司,也不会完全一模一样,但表达的意思是大致相同的。

5.1 C++及常规计算机八股部分:

C++部分的学习,从我个人角度来说当初我最早入门时是看的B站的黑马程序员的从0到1学习C++的课程(该课程我认为短小精悍,常用的东西都提了怎么用,但没有深入去讲解,不过作为完全没有基础的新手学习C++的使用,我仍然十分推荐,不会一上来就把人给劝退了),之后主要来自平时项目锻炼以及侯捷的视频课程全家桶(面向对象高级开发,STL,泛型编程)。
C++十分博大精深,很多东西都需要慢慢在写代码过程中提升,面试常问问题也只是C++的冰山一角,但这些仍然十分重要。
1.内存分区有哪些? 堆栈有哪些区别?
2.编译的过程,静态链接库和动态链接库有什么区别?
3.new和malloc有什么区别?
4.delete和free有什么区别?
5.指针和引用的区别?
6.指针常量和常量指针,底层const和顶层const?
7.三种智能是什么?智能指针原理是什么?
8.C++的虚函数机制是怎样的?
9.构造函数和析构函数能不能为虚函数?
10.虚函数表存放在哪个内存区?
11.struct(int char)大小,加一个静态变量之后呢?加一个虚函数之后呢?
12.创建10个实例有几个虚函数表?
13.哪些不能是虚函数?
14.i++和++i的区别
15.左值和右值分别是什么?移动语义和完美转发是什么?
16.std::move实现原理?
17.常见容器都说一遍,插入查找算法复杂度
18.map和unordered_map区别,讲一下C++的map容器
19.红黑树你了解多少?
20.vector的扩容,哈希表扩容?
21.vector里加入10万数据,游戏中有对象的指针指向这些数据,这可能有什么问题?
22. vector如何快速删除内部对象。(要求O(1)时间复杂度)
23.刚刚我们聊过vector的扩容,那vector怎么减容?pop_back之后,vector会自动减容嘛?如果不会减容,那我们怎么释放不必要的内存呢?C++是否提供了我们什么接口呢?
24.链表遍历和数组遍历谁比较快?为什么?从CPU内存访问角度怎么理解?
25.给定一个链表的头节点和要删除的节点,如何O(1)复杂度搞定删除?
26.逻辑地址,物理地址,虚拟地址分别是什么?
27.线程和进程的区别?
28.多线程的锁有哪些?分别有什么区别呢?
29.进程间通讯的方式?
30.烟花随机绽放的游戏,内存上存在什么问题
31.OSI 七层协议模型
32.各种排序的平均/最坏复杂度。
33.介绍一下线段树
34.介绍一下工厂模式
35.TCP与UDP的区别
36.介绍对象池的实现思路,对象池回收时需要注意什么?

5.2图形学及游戏相关部分

图形学部分问了很多算法的实现,算法的细节都非常丰富,我在此不多做展开,只是简单叙述思路,想要仔细了解还是要阅读具体的资料或者自己动手去实现。在这里特别强调,与简历中项目相关的内容,就会针对性地问或者问的比较深。所以最好大家都得确保对自己项目的熟悉程度,再往简历上写。
1.介绍一下渲染管线,三维坐标如何变成屏幕坐标,有哪些变换?
2.ndc是什么,坐标范围?
3.延迟渲染管线和前向渲染管线有什么区别?各有什么优劣?
4.Shadowmap的了解嘛,介绍一下。除此之外还有有哪些阴影处理算法?
5.软阴影可以怎么做?
6.vssm需要额外存储什么数据?vssm算***有什么问题?漏光的原因是什么?
7.CSM是怎么做的?
8.IBL的实现细节,diffuse和specular部分分别是怎么做的?
9.反射探针是否了解?
10.多个光照探针之间如何进行blend?
11.IBL的specular部分的卷积,做了什么假设?这样假设会出现什么问题?
12.IBL一般会把图像存储在cubemap中,如果在一些移动端设备上,没有提供cubemap的相关api,这个时候该怎么处理?
13.如果使用柱状投影图,会有什么问题?
14.如果需要实时进行卷积操作,diffuse部分怎么做可以更快,更高效?
15.屏幕后处理LUT加滤镜是怎么做的?
16.OpenGL抖动阶段做了什么处理?
17.billboard有什么作用?原理是什么?
18.说一说蒙特卡洛的原理?
19.不用蒙特卡洛怎么表示积分?
20.大世界场景需要注意哪些问题?
21.城市场景有什么优化思路?
22.除了BVH以外还有哪些空间划分方式?BVH和八叉树各有什么适用范围?
23.BVH划分节点有哪些手段,各有什么优缺点?
24.射线和三角形求交,射线与球求交,怎么快速判断?
25.说一说PBR的原理?具体的法线分布函数有哪些?
26.如果我们要生成成千上万相同的对象,该怎么做?
27.讲一讲渲染方程的物理意义
28.路径追踪的思路,具体实现细节,打到diffuse物体怎么做处理
29.怎么理解重要性采样?
30.碰撞检测是怎么做的,高速物体碰撞检测出现子弹的隧穿怎么办?
31. 双重缓冲和垂直同步是否了解?
32. 移动端架构是否了解?是否有了解过TBR和TBDR?你怎么理解TBDR中的D?在TBDR上处理半透明物体怎么处理?
33.纹理压缩有了解吗?移动端的纹理压缩呢?
34.常规性能问题应该如何分析?有哪些优化方向和手段?
35.GPU Driven了解吗?
36.帧同步和状态同步了解吗?
37.z-fighting怎么处理? 动***面和远平面哪一个比较好?
38.欧拉角定义的旋转矩有什么问题,怎么处理?
39.讲一下四元数原理,四元数怎么实现旋转
40.抗锯齿算法知道哪些?
41.8倍的MSAA,缓冲区大小也要8倍吗?MSAA和延迟渲染不能共存只是带宽和显存的问题吗?
42.TAA存在哪些问题?如何解决拖影?
43.全局光照算法了解哪些?
44. RSM, LPV ,VXGI怎么处理的?
45.SSR怎么做的,ray marching是如何进行的?
46.如果要用在移动端 你觉得哪些GI算法优化之后是可行的?LPV,SSGI如果要用在移动端,需要进行哪些方面的优化?

5.3面试手撕题部分:

这部分我最深的感触是刷题在精不在多,如果你的准备时间有限,没有必要去花太多时间去做没做过的题目,尽可能多刷几遍剑指offer或者是LeetCode上的hot100题,刷透才能让自己举一反三,没有刷透,盲目去多做,遇到新题目还是得直奔题解,做过的题目也很容易还是不会做。最终面试手撕代码的主要问题也确实基本都出自剑指offer和LeetCode的热题。
以下全部为我自己面试时碰到过的原题:
以下全部为我自己面试时碰到过的原题:
重建满二叉树
LRU 力扣146题
奇数放前面,偶数放后面 剑指offer21题
贪心发糖问题 力扣135题
排序二维数组高效查找,要求用二分和Z字查找都写一遍 剑指offer04题
力扣热题 岛屿数量问题 力扣200题
岛屿问题进阶,如果要搭桥把所有岛屿连接起来,求出岛屿占据的最少像素数(bfs+连通域间最短距离+图论最短路径)
编辑距离 力扣72题
带括号的加减乘除
带去重的归并排序
三个点落在同一个半圆的概率
0-4随机数生成0-6随机数
找到二叉树中的最大子搜索二叉树
A*寻路
手写blinn-phong shader
手写旋转,平移,缩放矩阵
HLSL/GLSL写采样

5.4技术面遇到的开放性问题:

C++实际解决过哪些问题?
项目难点,如何解决,做多线程的时候遇到过哪些麻烦,怎么解决的?
对图形引擎/技术美术岗位的理解和看法?
图形学学习过程?
OpenGL学了多长时间?
怎么在游戏中优化cache访问?
unity了解程度,用过哪些功能?
你平时怎么debug的?
C#的了解嘛?
blender的了解嘛?是否会使用blender的脚本系统
懂不懂粒子系统和效果?
骨骼动画是否有了解?
用过哪些debug或者性能分析工具?
平时玩什么游戏?最近玩了什么游戏?喜欢什么类型的游戏?
原神的全局光照和屏幕后处理有了解吗?(不是米哈游问的,而且不止一家公司问了,我说玩过原神。。就会开始问)
战神4你觉得哪里好,你觉得奎爷那把斧子的技术难点在哪里?(因为我说最近一年玩过刚上pc的战神)
编译型语言和解释型语言有什么区别?
看过哪些印象深刻的技术博客吗?
说一件在技术上让你比较有成就感的事情,或者说是什么让你有成就感。
为什么想做游戏引擎?

6.写在最后:

图形/引擎/游戏研发是非常有意思的门类,我相信大家之所以走上这条道路绝大多数的人是因为热爱游戏。这几年优秀高质量的学习资料可以说井喷,games系列的课程几乎都拥有极高的质量,如果能学得足够透彻,一定会更加得心应手(虽然很多是像我一样的应届生仓促地学完就鸭子上架接受拷打了)。至于学历方面,在这一行业并不是很重要,实践能力和知识储备更为重要,我见过很多本科生,比我这个半道子入行的非科班研究生不知道强到哪里去了,不过要提醒的是,现在确实有不少公司的图形/引擎岗会卡本科生了,虽然我认为毫无必要,但这可能是优秀人才越来越饱和的必然结果吧,最后提醒大家也是提醒我自己,切勿眼高手低,切记脚踏实地。

我的整个秋招也算是一波三折,最终虽然略有遗憾,但也算是较为圆满地结束了,我这个水平,能拿offer已经非常知足。

祝大家在学习的过程中也能收获快乐,前程似锦!

如果有任何问题欢迎评论或私信!

最后在这里感谢一些对我帮助极大的帖子,感谢前辈们的无私分享!



有答案的版本放在知乎了,牛客这个只写了问题,没有答案~
#游戏开发##游戏引擎##校招##秋招##后端开发#
全部评论
感谢面经!我也投了媒体算法的渲染…已经开奖了嘛
5 回复 分享
发布于 2022-11-06 18:07 瑞士
谢谢分享
2 回复 分享
发布于 2022-11-08 23:50 湖南
大佬真的好强
1 回复 分享
发布于 2022-11-14 09:50 浙江
真卷,这已经算普通人了嘛
点赞 回复 分享
发布于 2022-11-08 14:53 陕西
老哥,达子给你多少
点赞 回复 分享
发布于 2022-11-09 06:01 四川
老哥做了一个软光追渲染器都能被简历挂吗 是做的不够深吗
点赞 回复 分享
发布于 2022-11-11 10:55 英国
也是今年校招,拿了联影,广联达等offer,B站跟你一样二面HR之后再无消息,funplus二面挂🤣
点赞 回复 分享
发布于 2022-11-14 00:38 上海
老哥方便私信一下在网易做了什么工作内容吗,想弥补一下简历上项目的空白
点赞 回复 分享
发布于 2022-11-14 21:36 北京
老哥最后去了哪呀
点赞 回复 分享
发布于 2022-11-25 15:14 浙江
问下兄弟,你这个学历都挂这么多简历,那什么样的简历可以过呢?
点赞 回复 分享
发布于 2023-02-25 16:23 湖北
老哥同西电校友可以加个好友具体聊聊吗
点赞 回复 分享
发布于 2023-03-01 17:11 广东
佬,我想请问下图形学的这些问题是知道原理就好还是需要自己手动实现呢
点赞 回复 分享
发布于 2023-06-14 16:37 吉林
感谢分享
点赞 回复 分享
发布于 03-20 20:28 山东

相关推荐

11-06 12:10
已编辑
中南大学 Unity3D客户端
图形开发时间线TimeLine:9.21投-10.17笔试-10.24一面-11.1二面-11.5hr面已经是还在流程的几家里唯一的大厂了,球球收了孩子叭,牛客许愿会灵吗,会的吧?总之,先发个一面面经涨涨人品,后续秋招结束会发总结篇,里面有鼠鼠为数不多的十来场面试的面经,以及一堆的笔经(总之就是非常惨)(83min)- 自我介绍- 平时怎么学习图形学?看过Unity,UE源码没有?- 说说C++的共享指针?- weak_ptr是怎么工作的?- shared_ptr是线程安全的吗?- 构造函数可以是虚函数吗?- 虚函数机制?- 虚函数表什么时候构建的?存在哪?- 虚函数表怎么构建的?内存空间连续吗?- 虚函数表除了虚函数地址还存了别的其他什么东西吗?- 如果一个基类函数不标明为virtual,子类重写了这个函数,那指向子类对象的基类指针调用该函数会发生什么?- 只有纯虚函数的类有虚函数表吗?- 子类不实现纯虚函数会怎么样?在什么时候会报错?会报什么错?- 说说vector的扩容机制?- 说说list的实现?- 如何高效的查找有序的list里的元素?- list二分查找的复杂度是多少?(O(n),我当时没想出来)- 如果考虑空间换时间,时间复杂度可以是多少?(这里脑子抽了,我说分别存储每一次list二分之后的结果,存储在vector里,然后二分的时候只需要比较尾节点,然后转移到对应的list里进行下一步查询, 事后感觉应该是想引导我说,把list用vector存一遍,然后在vector上做二分)- 说说优先队列的实现?- 堆是怎么实现的?插入数据的时间复杂度是多少?- 插入的逻辑是怎样的?- 你的渲染引擎是怎么考虑跨平台的?- 你写的shader是怎样在目标平台运作的?- shader里你是怎样采样贴图的?讲讲API的使用?- textureLod怎么用?- 如果不提供level,GPU怎么知道要采样哪一层的Mipmap呢?(通过贴图uv在屏幕上的变化率决定)- 你刚刚说的u对x,v对y的偏导里的x和y是什么坐标?- 除了这个坐标空间还有哪些坐标空间?- 三线性插值是怎么做的?- 讲讲OpenGL的一个渲染管线?- 顶点的裁剪坐标空间坐标怎么得到的?- 后续会被怎样处理?- NDC标准空间的xyz取值是多少?- 锯齿是怎么形成的?在哪个阶段生成的?- 有哪些抗锯齿手段?- MSAA和FXAA有什么区别?- MSAA的硬件实现是怎么做的?- FXAA怎么做的?- 实时阴影你怎么做的?- 点光源的阴影要怎么实现?- 只能是生成CubeMap吗?不能生成Texture2D吗?(傻了,忘记CubeMap可以展开在一个Texture2D上或者干脆用柱状投影图了,我说你非要搞那就整一个Texture2DArray)- 你实现BVH的目的是什么?- 视锥剔除有必要吗?不是裁剪阶段也会做剔除?- 平时渲染方面怎么Debug?- 如何优化shader的效率?- 为什么尽量不要写if/else语句?那什么时候能用呢?- 减少采样操作?怎么减少?哪些采样操作可以移到CPU做?- 如果必须要采样呢?怎样做优化?以PCSS为例?- 为什么尽量少做那些复杂的数学运算?反三角函数,矩阵的逆什么的?- 线程和协程的区别?(太久没看真忘了,支支吾吾嗯是说不出啊,早知道直接说不知道了)- 那线程和进程的区别呢?- 反问?  - 图形开发工程师隶属于什么部门?引擎部?中台?(统一校招,进去之后再细分,可能进项目组可能进中台)  - 这个职位入职的培训和游戏开发那边的培训有什么区别?(差不多也是miniGame,内容上可能区别比较大)  - 可以知道具体的工作室吗?(进去之后双选)  - 如果我想胜任图形开发工程师这个岗位,需要再巩固加强哪些方面?(被说计算机基础不牢固了,奶奶滴,我就那个协程没说好嘛!(ㄒoㄒ)) #网易# #网易互娱# #游戏开发# #许愿# #时间线# #一面#
查看55道真题和解析
点赞 评论 收藏
分享
111 815 评论
分享
牛客网
牛客企业服务