个人的实习面经

本贴最开始只是我的网易的面经,现在我会把春招里所有公司的面经都写在这里。
这算是我个人的综合面经贴。
//==========================================//
第一次电话面试,轻度社恐的本人还是有点紧张。。。
1.自我介绍(传统艺能,blablabla扯一大堆)
2.介绍一下项目
3.你项目里面有用到shadowmap,能说一下shadowmap怎么实现的吗(物体渲染到RT上,渲染时对RT采样,中间提到了PCF)
4.提到PCF,你还知道别的软阴影生成方法吗(希腊奶,我从来没想过这个问题)
5.能介绍一下Phone模型吗(环境光,lambert,高光)
6.你用到了pbr,你能介绍一下pbr跟Phone相比的区别吗(能量守恒,用金属度和粗糙度控制高光,IBL)
7.写过什么后处理算法(Sobel算子,Blooming,FXAA)
8.你知道什么AA方法(SSAA,MSAA,FXAA,TAA)
9.FXAA,TAA具体实现和比较(FXAA根据算子挑出画面中亮度变化明显的区域,对这些区域模糊。TAA抖动相机,在混合历史帧数据,实现在时域上对图像做滤波。
FXAA效率高效果差,TAA效果好对图形管线改动较大,有很多衍生问题)
10.介绍一下项目物理模拟的方案(我这个比较菜,直接说碰撞检测没有用空间数据结构优化,检测算法用了gjk,每次检测完直接更新)
11.确定屏幕坐标,光栅化三角形(重心坐标)
12.光栅化直线(找到差距最大的轴,沿着轴一个像素一个像素的步进)
13.问一点C++,重载和重写区别(常识)
14.虚函数怎么实现的(虚函数表)
15.口述快排(第一次口述快排,感觉说的乱七八糟的,要是能写代码该多好。。。)
16.快排稳定吗(第一次我以为是指时间复杂度就说最坏情况会到O(n2),后来提示了这个是指相同元素相对顺序会不会改变,结果还是回答一个稳定。。。正确是不稳定)
17.随机打乱数组(洗牌算法,感觉答得***不离十)
18.反问(阿巴阿巴阿巴)
感觉图形整体问的不难,算法我答的很垃圾,感觉要挂我就是把我算法挂了

//=======================================================================//
我错了,是一面让我膨胀了。
二面直接被橄榄。
面经我过一阵子看心情更一下吧。。。

//=======================================================================//
绝了,我还以为我凉透了,网易一周后又在hr面把我捞了。
这几天我还要面腾讯,等我腾讯面完了我再来更一下完整面经吧。
还是许愿hr面,还有未来的腾讯


我想做丁磊先生的狗

//=====================================================================//
半夜爬起来更面经。网易二面过去将近一个星期,本人的池沼记忆力并不支持我把面试的细节记得很清楚,面经可能和实际有出入。
1,介绍项目(甚至开头没有自我介绍),
2.细说pbr模型(仔细背了一遍CT模型,漫反射 ,法线分布函数,菲涅尔反射系数,几何系数,IBL,把方程里面每一项都讲了一遍)
3.仔细讲一下IBL(把漫反射预积分,高光部分的拆分化简,以及高光环境贴图的预处理 比较细致的将了一遍)
4.你漫反射环境贴图是什么格式的(CubeMap)
5.是CubeMap吗(威压)?(当时面试官问了这个问题两遍,本池沼琢磨了一会想到可能是会考球谐光照。于是我根据平常水知乎看到的一点零零散散的知识糊弄了一会)
6.你这个光照方程计算和实际的光追计算出来的结果你觉得会有什么不同(从这里开始我面试就相当被动了,这问题其实不难,但当时我听到这种奇怪的问法直接懵了)
7.你知道unity的light map吗,light map是怎么烘焙的(希腊奶)
8.你能说说unity的光照系统吗(unity2连直接把我问懵了。我只在大一做平台跳跃小游戏的时候在用过一点点unity啊啊啊啊)
9.你能介绍一下vulkan吗(我简历上写vulkan只是为了让内容多一点啊,我实际只用vulkan画过三角形。
面试的时候我就扯了一个vulkan的gpu同步除了fence还有信号量)
10.说一下opengl和dx12的区别(opengl是用了状态机模式,想要切换上下文需要手动调用状态切换的函数,
dx12由一个pso代表了整个渲染管线的状态,直接切换一次pso就可。opengl的自动托管如texture buffer这样的gpu资源,dx12开放了ID3D12Resource和ID3D12Heap接口代表gpu内存资源,需要程序员手动管理。opengl不支持gpu,cpu异步执行,dx12可以通过fence值协调cpu和gpu的异步执行)
11.说一下pso(pso 代表了整个渲染管线的状态,用户在切换状态的时候不需要繁琐的状态设置,秩序切换一次pso即可,效率较高)
12.pso的好处只有这些吗(后来在面试官提醒可以对同一状态的物体进行同一批次渲染,我的项目里面有类似的设计,于是我和面试官描述了一下我的项目的设计思路)
13.你知道memory order吗(希腊奶。我后来查了一下这是和多线程有关的概念,我现在写过的多线程程序一个手指头都数的过来)
14.你能说一下dx12的多线程渲染吗(这个真的懵了,全程阿巴阿巴阿巴,扯一些什么每个线程一个command list,向主线程里面的command queue提交命令啊什么的)
15.你觉得多线程这样设计提升了cpu性能还是gpu性能(猜了cpu)
16.问了一个PBR和HDR有关的问题(当时我震惊了,我一直以为PBR和HDR是两个毫不相关的东西。面试时直接不会,后来面试官提了一下可能是和颜色空间转换有关系)
17.你什么时候能来实习
18.反问
这可能是我这辈子面过的最难的面试,当时电话打完我满背上全是汗。。。
二面面经算是更完了,希望hr面能有好结果吧


//==============================================================================//
哈哈,我网易面试过了,现在是在审批offer,岗位是日常实习

今天面完腾讯next一面,再来更新一下面经
说实话腾讯的一面面试体验好的一匹,面试官和蔼可亲(其实面试官看起来挺年轻的,不过本池沼想不到更好的形容词了)。
面试过程问题多且杂,我只写得出来一部分问题。

1.你比较熟悉dx12,你能说一下dx12,vulkan这样的api出现取代opengl是为了解决什么问题吗
(主要是为了适应多线程工作,有了dx12可以用多个线程记录命令到command list,然后用主线程的command queue执行。
而渲染算法天然适合并行提交,这样做能更大限度利用cpu资源)
2.你能说说光栅化过程具体干了啥(在顶点着色器确定了屏幕坐标后,找到对应图元确定的像素范围,对范围内的每个像素调用像素着色器)
3.能说一下整个图形渲染管线吗(顶点装配器,顶点着色器,几何着色器,hull shader,tessellator,domain shader,光栅器,像素着色器,深度测试模板测试a混合测试)
4.virtual 关键字(virtual修饰函数展现多态,virtual在继承时修饰class可以避免菱形继承问题)
5.菱形继承问题
6.析构函数能加virtual吗(可,而且尽量加。这样我们在销毁父类对象时可以 确保被执行的是子类的析构函数)
7.构造函数能加virtual吗(不行,且没必要。在语义上构造函数不需要多态。在实现上,调用没有构造好的虚函数表会有风险)
8.inline函数能加virtual吗,static函数能加virtual吗(第一个我猜的,第二个我直接不会)
9.const 关键字(const关键字修饰对象表示对象不能修改,const 修饰成员函数相当于成员函数的this指针加上const限定符)
10.const int* 和 int * const指针(第一个表示了指针指向的内容的值不能变,指针能改变指向的内容,第二个表示指针指向的内容不能变,指针能改变指向内容的值)
11.深度测试发生在什么时候(像素着色器之后,在Early-Z中就是像素着色器之前)
12.Early-Z 会有什么问题,什么时候失效(这个我答得不好,我只说了在渲染半透明物体时会失效,不回答为什么)
13.谈谈你对pbr的理解,为什么需要pbr(pbr标准化了程序和美术的制作流程,提供了方便美术调整的参数)
14.你用过Deferred rendering 和 Forward rendering 你能说说它们各有什么优劣(延迟渲染把光源的渲染和物体的渲染解耦,对于有大量光照的场景会有很大的优化,
然而,延迟渲染需要使用GBuffer会增加内存负担)
15.在你是怎么渲染半透明物体的(先通过deferred rendering 渲染不透明物体。再通过forwar rendering渲染半透明物体)
16.说说我们为什么要用Compute Shader(利用gpu优势,对于大量重复性的工作gpu提供了像素级别的并行能力)
17.说说什么时候我们不能用Compute Shader(对于有大量逻辑判断的复杂代码,gpu运行时间会是所有逻辑路径的总和。当数据量不大,逻辑复杂的代码必须cpu完成。(其实还可以说内存回读的额外消耗的问题,当时我没想到))
18.吹水(平常喜欢玩游戏吗,有什么爱好)

//==============================================================================//
这次估计就是最后一更了。其实腾讯后面两面都还行,问题感觉开放式的更多,感觉面试是在问我一些东西的理解和看法。
最后吐槽一下,腾讯从hr到oc起码过了整整十多天,要不是之前我有offer了,这几天我肯定慌的一批。

嘛,反正最后腾讯,网易都过了。在国内游戏行业估计也没更好的去处了,我估计我的春招大概就到此为止了。

最后,我终于有机会放这张图了:


#实习##面经##腾讯##网易##C++工程师#
全部评论
楼楼是投的引擎岗吗,有没有被问到C++的问题呀0 .0
点赞 回复 分享
发布于 2021-11-09 21:49
楼主是怎么做到大三上学期就会这么多图形知识的😢
点赞 回复 分享
发布于 2021-09-09 20:49
楼主投的引擎岗?客户端问不了这么多图形学吧
点赞 回复 分享
发布于 2021-03-15 21:30
楼主,网易实习已经开始啦?
点赞 回复 分享
发布于 2021-02-26 23:34
楼主是实习么
点赞 回复 分享
发布于 2021-02-26 17:20

相关推荐

会员标识
09-02 21:49
已编辑
电子科技大学 算法工程师
纯八股一点项目没问,也是挺少见的,柠檬是个好公司,有点想要痛哭流涕当时oc了最后没去,感觉怪不好意思的,秋招应该也不会再投他们家了,发出来攒攒好运柠檬一面+二面4.2投递,4.12笔,4.24一面,4..28二面,一面1.逻辑右移和算术右移的区别?2.一般有符号整数的编码方式?3.补码的规则是什么?4.为什么采用补码去记有符号整数--这个确实没想起来,说了可以首尾成环,可以连续表示什么的……(搜了下其实主要是解决原码和反码的问题(无法统一加减法,零的歧义,溢出不好判断等问题)5.有符号整数,正数和负数的值域不同,为什么会这样?--我说有正数这里会有0的存在,(实际更好的回答,是说原本原码和反码有双0的歧义,补码没有歧义,原本表示-0的10000000在补码中被定义为-128)6.浮点数在计算机里是怎么存的(1+8+23,怎么组合忘了)7.描述一下快速排序8.快排的nlogn是怎么推出来的9.最差的情况下会退化成?10.稳定还是不稳定?为什么不稳定11.STL,挑一些容器说一下内部实现原理(说了vector,list,map,unordered_map)12.Vector怎么扩容13.什么情况下,即使不有序也不会考虑使用哈希表存储数据?--一时半会想不到,说了哈希表可能存在严重哈希冲突导致退化成O(n),还有就是哈希表内存可能占用更多(还有吗?)14.哈希表怎么知道哪几个元素发生冲突了?15.Const Static Inline 说一下使用场景16.C++多态如何实现?17.虚函数作用原理18.构造函数可以是虚的吗?析构呢?静态函数可以是虚的吗?手撕:获取二叉树最大深度的所有结点(用的层序遍历)二面:自我介绍略1.一上来直接让我定义单向链表的数据结构(结构体)2.创建一个ListNode,创建在哪个内存?说下开辟的内存大小3.关于这个内存对齐还有哪些方面能再具体讲一下吗?--主要补充了内存对齐优缺点,以及pragma_back调整内存对齐4.关于堆和栈的区别有哪些,能再讲一下吗?5.对于堆内存的管理手段,有哪些你知道的呢?说一下--除了new malloc这些,还说了两级分配器和内存池6.你刚说的这种做法有什么好处?--减少new/malloc调用开销,降低内存碎片7.你刚刚提到的内存碎片是怎么一回事?--说了内部碎片和外部碎片后面重点开始了8.用ListNode创建两个单向链表,两个单项链表有任意个公共节点 (0~无穷),画出有哪些组合(看图2)一开始的储备只有1,2,3,4,5,6,网上不少文章也是这样的,但面试官提示,有9种。后面磕磕绊绊临场把7,8,9考虑出来了9.假设已知只有两个链表的头结点,怎么确定具体是其中哪一种。临场的解决思路是,(仅供参考)首先要看是否有环(快慢指针),然后仍然要算结点数量,长度,(如果有环的话,需要找到入环位置,确定有效的结点数量)无环情况比较好区分,就是长度差先后走的那一套有环情况:1)如果两表循环能回到自己的头结点,可以得出 8。(8其实就是同一个环,不同头结点位置)2)然后5是2的变体,7是4的变体,9是1的变体,就看开始相交的位置和入环口的关系(9其实有两种情况,一种是两个都有环外部分,另一种是,一个为环,一个有环外部分)3)排除所有其他情况最后为6.10.中间顺便问了下怎么看是否有环,如何找入环位置等常规问题。前后这里口述扯了有20分钟,面试官有一定引导,也还算宽容手撕:给一个7x9的棋盘,选一个位置,围绕这个位置顺时针开始放数字,放30个数。其余置0。注意考虑边缘情况。我没找到原题,个人的思路大概就是螺旋数组II那道题的思路,大循环内4个小循环添数字。注意要加一点判断,如果超出了7x9的边界,那么就跳过,num就不会增加。(仅供参考)
查看30道真题和解析
点赞 评论 收藏
分享
1. Unity中`Update`、`FixedUpdate`、`LateUpdate`区别?实际开发中,比如处理角色移动和物理碰撞,你会分别把逻辑放在哪个函数里?能结合实习项目举例说明吗?2. 你提到用值类型减少GC以优化性能,那在“模拟农场”demo中,具体哪些数据被你封装成了值类型?这么做后,性能(如帧率)有哪些具体提升?3. 设计射击游戏网络同步时,你提到同步玩家状态和位置,但子弹运动是实时的,仅同步状态可能导致其他客户端子弹位置“跳变”。除了状态同步,有没有考虑过用“插值”或“预测”技术优化同步效果?4. 你在实习中接触过ET框架,了解它的核心架构(如Actor模型、消息机制)吗?在基于ET框架开发UI模块时,你是如何处理模块间通信的?比如技能面板和背包面板的数据交互。5. 你说对象池用于频繁创建的对象,那在实现对象池时,你是如何处理“对象回收时的状态重置”?比如子弹对象回收后,是否会清除它的碰撞状态、速度等参数,避免下次复用出错?6. 学习图形学渲染流程后,你有没有尝试在Unity中自定义Shader?比如为“模拟农场”的作物添加动态光照效果,具体是怎么实现的?7. 你提到DoTween通过扩展方法实现功能,那你自己有没有封装过Unity组件的扩展方法?比如给`Transform`加一个“平滑移动到目标位置”的扩展方法,核心逻辑是什么?8. 关于公司的Roblox引擎学习期,你之前用的是Unity,两者在开发逻辑(如场景管理、脚本编写)上有差异,你打算通过什么方式快速掌握Roblox Studio的开发技巧?9. 你在实习中主发现问题后,是先和美术确认资源正确性,还是先和策划确认需求?整个沟通和解决流程是怎样的?10. 你提到期末兼顾考试和找实习时会做时间管理,具体是怎么分配时间的?比如每天花多久刷算法、多久学Unity技术、多久复习课程,这种时间管理方法对入职后的工作有帮助吗?
查看10道真题和解析
点赞 评论 收藏
分享
评论
12
62
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务