去年秋招面经分享,以及一些想对在校生说的话
前言
我知道这个点,大家都是忙着找这个面经,忙着补那个基础知识点,忙着投简历,忙着和面试官斗智斗勇。。。废话不多说,先把我去年秋招前期记录的一些面经笔经分享给大家(至于为什么只有前期,因为秋招后期心态不好,很多面试不想记录了2333)。楼主的背景在以往的帖子里有,可以移步看看。
笔经面经(游戏客户端/引擎、技术美术渲染向)
4399
1.笔试
记不太清了,应该是选择+问答的形式,问答是接近文本框答题的形式,不过能支持C++编译运行
问答2题
- 如果把硬币按第一行一个,第二行两个,第三行三个......依次类推的方式排列,给定硬币总数,返回这些硬币能够排列的行数
- 给了一些二次元渲染的背景介绍,和几个提示,要求用hlsl或者glsl完善FragmentShader的内容
2.面试(30min)
距离笔试过去了快三个月才来的一面,讲道理不是很想面了,尤其是了解广州四大天坑的背景后,面试官人倒是挺好的,面试体验还不错
- 自我介绍
- 渲染管线
- 深入了解过哪款具体引擎吗?
- 你的渲染引擎做了哪些效果?
- 讲讲延迟渲染和前向渲染的区别?
- 局部坐标怎么转换成世界坐标的?
- Model矩阵怎么计算的?如果我要先位移再旋转,最后缩放,怎么体现在Model矩阵上?
- SSR是怎么做的?SSR怎么做优化?
- 有用过抓帧工具吗?
- 为什么想做游戏引擎这方面的工作?
- 未来职业规划?
- 反问进去都是做小游戏吗?具体使用哪些引擎?(大部分是基于maya的微信小游戏,也有在研UE项目)
网龙游戏
1.笔试(15单选5简答3编程60min)
单选、简答都是很基础的C++问题15-20分钟差不多就够了
3编程更简单:
- 给定硬币价值数组,凑成指定金额需要的最少硬币数(硬币无限,力扣dp原题322零钱兑换)
- 输入长度为3的字符串例“cba”,输出按ASCII码排序的字符串”a b c"(这是能出的?)
- 给定A,B,n,求f(n) = (A * f(n-1) + B* f(n-2)) mod 7,其中f(1) = 1, f(2) = 1(注意Int上限,拆开来mod,dp秒了)
2.一面(30min)
面试官巨严肃和正式,没开摄像头,高考宣读式开场,问问题,有点像审判犯人一样(ㄒoㄒ)
- 自我介绍
- 详细讲讲介绍中提到的那些项目
- 投屏展示自己的实时渲染引擎项目(我嗯讲了15min,后面就全问项目相关了)
- 说下延迟渲染流程
- 你说最后渲染占据屏幕的两个三角形就可以,那我能只渲染一个吗,一个三角形怎么操作(???给我问懵逼了)
- 模板缓冲是什么,你是怎么用的?(举了个实际应用的例子)
- 问了个windows UI相关的,没太听懂,说没接触过
- 讲下CSM(本来懂的,但是猪脑过载了,不知所云了有点)
- 超时了(打断胡言乱语),最后问一个,如何判断着色点是否在阴影中?
3.二面(56min)
这个面试官就人不错了,很认真的在听我说什么,然后根据我说的东西问问题,但是忘记录音了捏,回来整理的时候已经忘得差不多了
事后自己发现有几个图形学的知识点没记清,搁那瞎说了(比如别人问SSGI怎么实现的,我猛说SSR和SSAO,事实上这不是同一个概念哈,然后别人问BVH怎么实现的,我SAH原理又讲错了,麻了),预感要挂
果然挂了捏
三七互娱
1.笔试(11单选2简答1编程)
逆天笔试,单选题正常考察C++、C#、Unity、网络协议什么的,简答是编程题但只说思路,编程是依托构式
简答:
- 玩家第一次进入boss区域需要播放动画,给定五个封印柱的坐标和玩家坐标,如何判断是否播放动画(投影到二维平面,然后用判断点是否在三角形里的思路就行)
- 楼有N层,电梯只能停一次,还有一个在每层楼下的人数数组,问怎么确定电梯在哪层停使得所有的人下电梯后移动的层数最少(懒得想了,就这场景,直接遍历不是又快又好)
编程:就给个txt文本框,还禁用了复制粘贴
- 给定一个长为M的文本,以及长为N的模式串,找出文本中符合模式串的字串,并返回它的起始下标(原题就这样一句话,没有对模式串的任何解释,那楼主只能按自己理解瞎jb写了)
巨人网络
1.笔试(20单选+2编程)
这笔试你就写吧,你将会收获毫无意义的一个小时抓狂的编码经验
单选考C++、计算机基础、图形学基础
编程
- 三数之和(原题秒了)
- 手撕解释器(万字长文的题目,有兴趣可以去牛客搜搜看看大伙的乐子,要模拟接近20个指令还要处理goto逻辑,算你牛逼,这分是吃不了一点)
2.一面(30min)
牛客面试出问题了,直接打电话来面试
面试官很急,估计是人太多,一个问题十秒没回答出来就准备下一个了,不过会给大致告诉你答案,最后也会给你一个大致的评价,就还行
- 不用自我介绍,上来就是说实习项目
- 给定节点和边以及权值,问给定起点终点,怎样获取最短的连通距离(犹豫了一下,脑子里回顾了一遍笛卡斯特拉、贝尔曼和弗洛伊德算法,面试官着急,叫我从BFS或者DFS开始讲,最后想清楚后详细描述了弗洛伊德算法)
- 讲讲单例模式以及它的使用场景
- 讲讲观察者模式以及使用场景
- 那如果有个大数据量排行榜需要实时更新的场景,客户端和服务端应该怎样设计基于观察者模式的程序框架?
- 讲讲lambda表达式的使用和结构,thread编程用过吗,讲讲lambda表达式在这里怎么用的?
- thread的join和detach有什么区别?join方法会阻塞当前线程吗?
- 如何删除vector< int >中指定的数,用什么标准库API?(讲了双指针原理,但面试官其实想问API的使用,但我脑子一抽忘了)
- 反问什么时候出一面结果(当天)进去是先做什么岗?后续能转引擎吗 ?(先都是UI、Gameplay,引擎岗位置很少)
莉莉丝
1.笔试(2单选2简答1编程)
又一个逆天简单的笔试
单选:
- 判断程序是内存泄露还是直接运行报错
- 多线程下变量可能的输出值
简答:
- 如何判断系统大小端
- 如何用最少的小白鼠试出47瓶药剂里的唯一毒药
编程:LRU最久未使用缓存
Funplus
1.笔试(14单选7不定项3填空2简答1编程)
题目有点多,就记录几个我还记得的
填空
- 如果按线性探测法解决哈希冲突,给定哈希函数,哈希表的地址为0-9,插入给定数组后,问某个元素最后存放的地址
简答
- 为什么要用齐次矩阵?
- 写出右手坐标系下旋转z轴30度的二维矩阵,以及缩放物体0.5倍的矩阵。
编程
- 给定一个用户名和密码,需要用户名和秘密满足一系列的要求,返回用户名和密码是否符合要求
剑心互娱
1.笔试(3编程)
个人觉得剑心的笔试一直都是中上偏难
- 给定一个地图二维数组,0表示空地,1表示炸弹,点击炸弹会引爆,并且其周围一圈的炸弹都会被引爆,问至少需要点击几次炸弹才能引爆所有炸弹(深搜只干了90%,会爆栈,广搜直接超时)
- 给定两个数组,分别表示天平两边的砝码,砝码重量在1~10g之间,现在给你无数个1~10g的备用砝码,问至少替换天平上的砝码多少次能使天平两边平衡(一次只能换一个砝码)?(贪心,AK)
- 给定一个自然数n,问[0,n]区间内有多少个二进制回文数,要求复杂度低于O(n)。(尝试了提前计算拥有1-64位二进制位时至多会出现dp[i]个二进制回文数,然后计算n的二进制位数bitNum,以dp[bitNum-1]作为初始值结果,遍历[2^(bitNum-1)+1,n],如果是则初始值+1,虽然复杂度是低于O(n)的, 不过仍然超时了,0%)
途游游戏
1.笔试(30不定项3编程)
这公司考点跟其他游戏公司不同,有些生疏了中等题都没做出来
- 给定一个数组,每次只能从前或后取数据,取过的数不能再取,问给定k次取数的机会,取出的数总和最大是多少?(前缀和就能做,当时脑子一抽用回溯去写了直接超时)
- 力扣原题424. 替换后的最长重复字符
- 力扣原题480. 滑动窗口中位数(不会)
麦吉太文
1.笔试(20单选5多选2编程)
单选两个不会的
- 总和为1000的连续自然数组合有多少种?
- 十个路灯,熄灭三个省电,边缘两个路灯不能熄灭,并且熄灭的路灯不能两两相邻,有多少种熄法?
多选(还记得的)
- 下列哪些排序的复杂度是Nlog(N):快排、堆排、冒泡、插入
- 哪些HTTP请求方式是合法的:SET、PUT、HEAD、POST
编程题
- 要将一条街上的房屋粉刷成R、G、B三种颜色,现给定一行str,例如“1 100 100,100 1 100,100 100 1”,表示这一排有三个房屋,第一个房屋粉刷成R、G、B颜色分别需要1,100,100元,相邻的房屋颜色不能一样,问粉刷完这一排房屋最少需要花多少钱(处理输入有点点麻烦,涉及到stringstream的用法,处理完后就是普通的DP题,dp数组表示粉刷下标为i的房屋为j颜色时所需要的最少资金,dp[i] [j] = min(dp[i-1] [k], dp[i-1] [l]) + costs[i] [j];, AK)
- 给定五个变量:needToTrain--需要锻炼的时长,minPulse--最低心率,maxPulse--最高心率,trainChange--锻炼后心率提升量, restChange--休息后心率下降量,每次休息和运动都是1分钟,休息不能使心率下降到最低心率以下。问要想不突破最高心率,并达到需要锻炼的时长,最少需要多长时间,如果永远无法完成,返回-1。(贪心,能运动就运动,实在运动不了再休息,AK)
西山居
1.笔试(7单选4填空2问答2编程)
隔了一天才回来写的,其他的都忘了,就记得单选和填空都问了std::atomic变量的特性和用法,我是一点不会啊,直接爽吃零分
编程
- 给定4个vector,分别代表点P,三角形ABC三点的空间坐标,完成函数--返回点P到平面ABC的投影是否在三角形内部(这个没数学库和公式你就写吧,一写一个不吱声,后面写不出来恼羞成怒了直接return true骗点分)
- 实现一个简易计算机,支持加减乘除和括号运算,括号优先级最高,乘除次之,加减最后,输入为类似“(1 + 2) * 3”,存在空格、数字、操作符的字符串,输出double结果(考察基本功咯,当时是用栈和递归写的,AK)
Garena
1.笔试(20不定项3编程)
编程
- 游戏人物会受到buff的影响,现给定n个buff的持续时间区间,问游戏人物总共受buff影响的时长(合并区间,贪心,AK)
- 给定一个int值n,返回比n小的,与n的数字组合相同的,最大的正整数,例如(1243,返回1234),如果没有这样的数(以0为开头的结果也算是非法答案),返回0(转换成字符串,然后用标准库的prev_permutation处理一下,再转成数字返回就行了,AK)
- 给定N组两个有序链表,返回N组链表合并并反转的链表结果(题目大意很简单,由于是ACM模式,你甚至可以直接将输入放到vector里然后用merge函数合并vector然后reverse输出就行,不过由于他详细描述了对链表的操作,所以还是依照题意写了ListNode结构体和mergeList、reverseList、printList之类的函数,AK)
腾讯IEG天美工作室群
无笔试
1.一面(67min)
- 无自我介绍,上来就是说实习项目
- 项目是否上线使用
- 介绍OpenGL渲染管线
- 你的渲染引擎如何支持延迟渲染和前向渲染?
- 两者的优缺点?(发散又讲了Forward+管线)
- 如果我硬要用延迟渲染,并且要求场景中物体的光照模型不同,你怎么解决?(在GBuffer里再加个Model ID贴图?具体怎么实现我也不知道)
- 你的实时阴影怎么做的?(CSM+PCF/PCSS/VSSM)
- CSM是什么,你怎么实现的?(详细讲了CSM的实现过程)
- 为什么要用CSM?(节省shadowmap开销)
- 讲讲PBR?(把微表面模型、能量守恒、菲涅尔效应、线性空间计算、色调映射讲了个遍,讲到后面思路突然断了,面试官忙说够了够了)
- 计算完像素颜色后,还需要做哪些处理?(色调映射和gamma变换)
- 为什么需要做gamma变换?(人眼对颜色的变化感知不是线性的)
- 你怎么实现BVH的?(分层BVH结构)
- 除了BVH你还了解什么空间划分加速结构?(kdTree、八叉树)
- 你的简易标准库项目是以什么目的写的?是因为有额外的逻辑需求吗?(主要是为了学习,也是为了引擎项目能用自己的更轻量的标准库实现)
- 引擎里用自己的标准库时有没有遇到什么问题?(没有,在投入引擎之前已经用别人写好的测试用例测试过了)
- 了解游戏引擎的基本框架么?(Games104前言水平)
- 了解哪些脚本语言?你的引擎项目有考虑后续加入对脚本语言的支持么?(C#、python、matlab,只是用过,理解不深,暂时不考虑加脚本功能)
- C++虚函数怎么实现的?
- 深度搜索和广度搜索有什么区别?(两个常规八股了)
- 反问引擎岗与客户端岗的日常工作内容有什么区别,能举实际例子吗?(一边注重于游戏内实际功能的实现,一边注重于底层架构如动画、渲染、物理系统的实现以及跨平台优化)引擎岗的新人如何培养?(先熟悉边缘模块,由简到难地分配任务,成长取决于个人的学习能力和积极性)
2.二面(97min)
- 自我介绍
- 实习项目情况问询
- C++内存管理
- STL的细碎内存的申请和释放如何管理?(我做项目的时候偷懒没实现那个二级内存池,直接用的operator new,然后按照自己的理解说了下二级内存池的实现,大致说对了,不过还是被说为什么不去多了解底层)
- 多线程了解过吗?(了解过,但理解不是很深)
- 线程同步怎么做?(就会锁和条件变量)
- 同步锁和互斥锁有什么区别?应用场景分别是?
- 除了你的这个渲染引擎,你还有其他的渲染实践吗?(???问的啥?我都写小引擎了,有什么实践一般不都该写这里面吗?)
- 你的实时阴影怎么做的?
- 用CSM的话你怎么判断着色点是否在阴影里?
- 为什么用bias?你怎么确定这个bias?用不好的话会造成什么问题?
- 有没有注意过物体移动时你的阴影边缘的抖动现象?(没有诶。。说着我打开了共享演示了下项目,真有抖动)
- 你觉得为什么会发生这种现象?(阴影贴图精度有限?bias取的不合理?)
- 那如果不加那个bias,阴影贴图精度无限,还会有抖动现象吗?(墨迹半天,没答出来)
- 了解哪些全局光照技术?(SSGI、DDGI,但是只实现了SSR和SSAO来模拟全局光照的效果)
- 说说SSGI?(类似光线追踪,从屏幕每个像素发射一根射线到场景中,利用RayMatching模拟光线追踪,为了节省性能,一般降分辨率计算,生成有噪点的图,通过一些滤波操作后再升分辨率整合到最后的渲染结果里)
- 为什么会有噪点?(因为是采用蒙特卡洛方法的随机反射,可能会采样到很亮的地方但是pdf又很小,或者采样到很暗的地方pdf又很大的情况)
- 那你怎么知道光线交点的颜色?(事先存储的GBuffer里有存屏幕上每个像素点里的漫反射、法线、世界坐标等信息,然后RayMatching找到交点的uv坐标,直接查GBuffer就行)
- 了解UE的lumen技术吗?(不太了解,只听说过,看过一些介绍lumen的博客)
- 了解引擎的分层架构吗?(了解一点,Game104导读水平)
- 了解引擎的对象系统吗?(不了解)
- 手写shared_ptr,并完成功能测试(脑子有点空白,不过还是30分钟”秒了“)
- 反问具体是天美的哪个工作室?(J5,做格斗类游戏的)日常研发主要是针对哪个引擎?(UE、Unity都有)新人一般进去是被分配做渲染/物理/几何/动画?(渲染比较多一些,具体做什么还是要看能力适配)这轮结束如果通过是三面还是hr面?(三面)
3.三面(65min)
面试官人很温和,技术细节方面没有再仔细追问,更多的是基础的考察
- 自我介绍
- 问实习项目
- 平时怎么学图形学的内容?
- 共享屏幕演示渲染引擎(聊了聊画面构成,包括阴影、环境光,因为最近在做BVH,就往那边聊)
- BVH怎么做到实时更新的?(第一,只局部更新树,第二,包围盒用顶点变换重新计算,而不是由变换后的三角形包围盒一路往上合成)
- 视锥剔除怎么做的?为什么要用到BVH?
- 除了视锥剔除还用BVH做了什么?
- 元素相同的一个排好序的vector和一个map,做查找的话,哪个更快?为什么?
- 你提到缓存结构,缓存是怎么工作的?为什么需要缓存结构?
- 如何才算命中缓存或者说你是怎么查询缓存里是否有这个地址的?
- 你用页表的话我缓存本来就小,那不浪费空间吗?(多级页表+快表?)
- 你简历上提到你的vector尾部插入要比标准库快,为什么?
- 你怎么实现这个插入操作的?
- 实现一个二分查找,自行测试,15min(5min秒了)
- 为什么没在EA转正?
- 说说你的研究方向?这个分形岩石力学是什么?(详细聊了我的土木研究方向,笑死)
- 反问
叠纸游戏
1.笔试(25单选2编程)
单选考了数据库、计算机网络、计组、数据结构和C++
编程
- 给定一串包含元音字母和辅音字母的字符串str,要求你用str中的字符组合出一个最长的辅音字符不能相邻的新字符串。(签到题,记录下元音和辅音字符的个数就能返回答案的,AK)
- 给定一个行为n列为m的地图,角色从地图左上角出发前往右下角的目的地,拥有一定初始血量h,地图中值为'*'的地方代表墙壁,不能走,'.'代表可走的路,'1'-'9'代表需要战斗并损失的血量,返回最短路径距离。(最短距离基本都用BFS哈,用unordered_set记录一下到达过的状态--位置和血量的哈希值,然后分情况讨论每一步能不能丢进队列里就行了,AK)
2.一面(45min)
面试官看起来有点像刚子(艹,尴尬的),纯游戏客户端Gamepaly那边的应该是,不太熟渲染这块,然后主要问了C++基础这边,问的几个场景题我都懵的一批,不会的都说没关系(那你转手给我挂了),反问的问题也都不知道,感觉是被迫来面我的,KPI,纯KPI
- 自我介绍
- 实习项目介绍
- TCP和UDP的区别?
- UDP如何做可以更可靠?(不会)
- 假如背包栏有个粒子特效的物体,但我不希望它的特效出现在背包栏外面,渲染上应该怎么实现?
- 为什么材质错误的时候,引擎里会显示为粉色?
- 你的简易STL项目在标准库之上做了什么优化吗?
- 那你了解红黑树吗?讲讲红黑树的原理?
- 那你觉得什么场景用红黑树会比较好?
- unordered_map又是怎么实现的?哈希表是什么?
- 为什么析构函数有时候需要设置成虚函数?
- 那构造函数能设置成虚函数吗?为什么?
- 两个有序数组如何合并?
- 说说Unity脚本的生命周期函数?
- 镜头跟随着玩家移动到某个位置消灭了敌人,这个过程你觉得三个Update相关函数里分别需要承担哪些工作?
- 了解Assetbundle吗?(不熟)
- 说说C++的智能指针?
- 什么时候用shared_ptr?什么时候用unique_ptr?
- shared_ptr交叉引用会出现什么问题?
- 如果有一个任务系统,是从剧情策划那边收到的开发需求,如何与策划交流分配这个需求来保证做的完善些?(老实说完全听不懂在说什么啊xd)
- 反问面试流程安排?(不知道)进去之后怎么培养?具体干什么是双选吗?(不知道)
诗悦网络
1.笔试
忘记记录了,一点想不起来了
2.HR面(30min)
跟聊天差不多,很多问题忘了,就列一些还有印象的
- 自我介绍
- 为什么选择游戏行业
- 介绍实习项目,从中学到了什么?
- 觉得个人做项目和与团队一起做项目有什么区别?
- 介绍一下引擎项目?
- 最近在持续更新指的是?
- 怎么看待游戏行业项目上线前的加班?
- 期望薪资?
3.一面(30min)
第一次打开会议面试官在那等我的,艹,我提前十分钟进的,然后就提前开始了
- 自我介绍
- 为什么转来游戏行业
- C++内存管理怎么做的?(预判了后面一系列的问题,包括malloc,虚函数表什么的,一并带着说了)
- 介绍红黑树?(说了特性,平衡规则,左旋右旋操作)
- 介绍四叉树?(直接引申到八叉树,顺便讲了下BVH的构建)
- 说说渲染管线(这里提一嘴,如果你说了解图形学,那几乎每个技术面都会问这个问题,最好有自己的理解并且拓展开去讲,可以讲很长时间,或者至少要把八股背得滚瓜烂熟)
- 前向渲染和延迟渲染的区别?(说的越全越好,尤其是延迟渲染的优缺点)
- 你的实时阴影怎么做的?(老生常谈了,基本详细说完CSM面试官就觉得够了,如果让继续讲,后面PCF/PCSS/VSSM又能狠拖一段时间)
- 反问主要是做哪款引擎开发(Unity)公司如何培养引擎新人(基础培训+一对一带教)进去后是做渲染/物理/动画?直接分配还是看个人选择(主要渲染,自己选择)
4.二面(35min)
已经轻车熟路,回答问题还带点预判,导致后面面试官好像有点不知道问什么
- 自我介绍
- 怎样理解对象和类这些概念?
- string和string相加,怎么实现底层逻辑的?(我说了解一点Java的实现,他说没事就说C++的就行,那vetor< char >的相加,有啥好说的,就拿个新的vector< char >存相加结果呗)
- 视锥剔除怎么做的?部分在视锥范围内的物体怎么处理?(层次BVH,相交的Model不剔除,渲染Model时再查询Mesh层级的BVH剔除Mesh)
- 前向渲染和延迟渲染的区别?(居然不问渲染管线就开始问这个,那我只好渲染管线起手)
- 半透明物体和非透明物体在一起怎么渲染?(排序Or非排序技术)
- 怎么优化透明物体、非透明物体的渲染?(PreZ+EarlyZ)
- 透明度测试和透明度混合有什么区别?(一个是用来判断是否丢弃片元的,一个是用来混合片元颜色的)
- 你的实时阴影怎么做的?(讲了CSM就不让说了)
- 平时爱玩什么游戏?(能开黑的)LOL走什么位置?(野王,大师段位,骄傲地说)
- 用Unity做过游戏对吗?(想共享屏幕演示来着,不让,说时间不够)
- 了解过合批技术吗?(静态合批+动态合批+实例化)
- 为什么要减少DrawCall?(CPU和GPU通信慢,重新设置渲染状态耗时)
- 延迟渲染手机支持不好为什么?(带宽高带来的高耗电和高发热问题)
- 你说的TBR和TBDR架构是怎么解决这个问题的?(OnChip芯片 + Tilling + 懒渲染)
- 反问公司引擎部介绍?引擎部加班多还是客户端那边加班多?(两边都笑了,说是客户端赶进度的时候加班多,引擎部算中台,一般准时下班)
字节跳动智能创作(渲染引擎工程师)
1.一面(76min)
中途才开始录的,前面忘了
- 左值引用和右值引用的区别?
- 右值引用在模板编程里还有什么作用?
- 转发参数时如果不用forward有什么后果?
- 多线程同步怎么做?
- 进程通信怎么做?
- vector你怎么实现的?
- 你说扩容时源元素挪到新的内存区域时,如果有移动构造函数会优先调用,这是怎么实现的?
- push_back和emplace_back的区别?
- unordered_set你怎么实现的?
- 如何解决哈希冲突?
- 哈希表如何扩容?
- map怎么实现的?红黑树是什么?
- 了解过拓扑排序吗?BFS和DFS?
- BFS和DFS怎么保证遍历过的节点不再遍历?
- 讲讲PBR你怎么实现的?
- 物体的金属度怎么影响最终的颜色?
- 粗糙度呢?
- mipmap是用来干什么的?
- 三线性插值怎么做的?
- 手撕 给定一个数组,返回第k个最大值,自行处理输入输出和设置测试用例(选择快速排序秒了)
- 你的算法时间复杂度是多少?
- 现在要求我给定一个类名,你返回一个对应类的对象给我,你怎么设计类和机制?(写了个简单工厂模式)
- 你这样那我要是有很多类呢?(抽象工厂模式?但是好像也不能解决给类名字符串返回类啊,放弃了。后来想了想,好像可以用一个unordered_map存string和用于获取对象的functional,然后每有一个这样的类我就往里存一对键值就能解决这问题了,操了)
- 反问跟游戏引擎渲染工作的区别?(更像游戏客户端工具开发)工作室规模?(桌面端几十人)base哪里?(北京、深圳或上海,我寻思才几十人还分多个地方啊?)
波克城市
1.笔试(7问答)
纯文本框答题,禁用ctrl c v,恶心的一
- 回答几个sizeof的结果
- 线程和进程的区别,进程和程序的区别?
- C#里String和StringBuilder的区别?
- Unity脚本的重要回调函数有哪些?
- 编程题,给定两个由0和1组成的字符串,返回二进制相加的结果字符串。
- 编程题,热题一百,有效的括号
- 编程题,给定数组,实现空间复杂度尽可能小的排序算法
网易互娱
1.笔试(3编程)
就三道大编程
- 给定数字n代表商品种数,k代表当天的销量限额,数组a代表商品的进货价,数组b代表商品的出售价,数组c代表商品的个数,问当天的最高利润是多少?(贪心,ak)
- 有这样的数字矩阵,尺寸为n×m,矩阵初始时,从左上角往右下角按遍历顺序值依次为1-m*n,给定k,x,y分别代表操作的类别,操作的参数:操作1,交换x行和y行;操作2,第x行向左移动y个位置(轮转数组);操作3,查询第x行y列的矩阵元素值。输出每次操作3的结果。(直接模拟矩阵会爆内存,所以只能记录矩阵第一列的值,根据第一列的值来查询结果,ak)
- 给定n个功法,功法由左界能力值L,右界能力值R,修炼时间T,能力增幅D描述,现在能力从0开始,达到功法的能力值范围内会自动激活该功法,修炼时间结束时若该功法还是激活状态则会获得其能力增幅,功法的激活状态是实时的,如果当前能力值超出功法能力值范围,则会使该功法失效,问最终无功法可练时(每个功法只能修炼一次)能力值是多少。(构造功法的struct——由上述四个数据和功法结束时间ET组成,按照左界排序功法数组,用一个优先队列——以结束时间排序的小顶堆,先遍历功法数组将初始能激活的功法加入优先队列中,当优先队列不为空,取出堆顶功法获取其能力值,并调整当前时间到其结束时间,继续取出结束时间相同的功法获取能力值,继续遍历功法数组,将能激活的功法都加入优先队列,如此往复直到优先队列为空退出循环,感觉思路没问题,但死活只能过20%)
2.一面(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ㄒ))
3.二面(67min)
- 自我介绍
- 自己写的渲染引擎,有做openGL以外的API实现吗?(做了抽象,支持但还没做其他API的实现)
- 材质是如何实现的?(PBR材质,包含几个固定的贴图类型)
- 如果某个物体它需要额外的材质呢,比如一些自发光的地方的贴图,你怎么处理?(在延迟管线的基础上做单独的前向渲染?)
- 实习项目介绍?
- 虚函数怎么实现的?(后面纯八股的就不写回答了)
- 如果同时继承了两个有虚函数的父类,子类对象的内存模型是怎样的?
- C++的几种cast?
- dynamic_cast怎么实现的?
- type_info存在哪?虚函数表里吗?
- 说说lambda表达式?值传递和引用传递有什么区别?
- 值传递的话,这个临时变量存在哪?(函数栈空间?)
- 函数调用时实际上会执行哪些步骤?
- 调用inline函数呢?
- 静态成员变量的生命周期是怎样的?
- 两个进程是否能共享同一个静态变量?(不能,不同进程有不同的内存空间)
- 那如果是父进程和子进程的关系呢?(还是不能,子进程只是复制父进程的内存空间,并不共享)
- 如果父进程修改了这个静态变量然后创造子进程,子进程那边访问静态变量是修改前还是修改后的值呢?(修改后的)
- 两个单链表寻找交点,说思路(力扣160,相交链表)
- 说说基础的渲染管线
- 模板测试没通过的话会怎么样?(首先模板缓冲区的值会根据你设置的glStencilFunc和glStencilOp来决定,可以是不变,可以是被替换成指定值,其次没通过模板测试的片元会被直接丢弃)
- 如果一个三角形有一个顶点不在这个裁剪空间范围内,会发生什么事情?
- 延迟渲染和前向渲染有什么区别?(着色和深度测试的先后,透明物体的处理,MSAA的支持,多光照模型的支持)
- 移动端实现了一些比如hsr的技术,会在渲染前做一遍类似Pre-z的操作,其实最后也是只渲染了顶层的片元,用了这些技术后,前向渲染和延迟渲染还有什么区别吗?(还提了在光源剔除方面处理手段不同)
- 为什么延迟渲染不支持硬件AA,就是MSAA?
- 说说你对PBR光照模型的理解?
- 金属度如何影响片元的颜色?(F项,以及漫反射/镜面反射系数项)
- 给定法线和入射光线,如何计算反射光线的方向?
- 如何判断点在三角形内?
- 反问还有后序技术面吗?(无,就两轮技术面)技术美术技术向和图形开发的工作有什么区别?(前者可能更注重美术效果的实现,后者更关注GPU的底层优化,可能会和硬件层打交道)如果要更好的胜任这份工作,有什么书籍或者是渠道提升自己?(建议直接啃Unreal源码)
4.HR面(20min)
- 自我介绍
- 为什么确定了图形渲染方向的岗位?
- 实习项目中,最有成就感的事情是什么?
- 实习过程中最大的卡点是什么,怎么解决的?
- 实习工作结束后有什么样的收获?
- 你觉得你比起和你同届的同学,有什么优势?
- 你目前还有哪些在流程中的公司?
- 你觉得你是怎样的性格?
- 反问
一些非常有用的面经链接
https://zhuanlan.zhihu.com/p/417640759
https://zhuanlan.zhihu.com/p/430541328
https://zhuanlan.zhihu.com/p/499548836
https://zhuanlan.zhihu.com/p/157355850
https://zhuanlan.zhihu.com/p/577501864
https://www.nowcoder.com/discuss/590687392735014912?sourceSSR=search
https://www.nowcoder.com/discuss/554625545242169344?sourceSSR=search
https://www.nowcoder.com/discuss/353159115046330368
https://www.nowcoder.com/discuss/543596390270640128
https://www.nowcoder.com/discuss/418816282630385664?sourceSSR=search
https://www.nowcoder.com/discuss/353158849718853632?sourceSSR=users
https://www.nowcoder.com/discuss/549035786960683008
一些非常有深度但说人话的技术博客
https://zhuanlan.zhihu.com/p/316138540
https://www.jianshu.com/p/ffb7f9c13c3d
***************************************************************
https://blog.csdn.net/runmasterdd/article/details/139223804
太多了不一一列了,知乎是个好地方自己想学什么就多搜搜吧!
写在后面
先说结论吧,最后是春招签了心心念念的米忽悠。刚刚拿到offer的时候,是思绪万千的,是有很多话想分享的。但自那之后,忙碌毕业,忙碌搬家,忙碌入职,忙碌MP,直到现在都没能真正闲下来哪怕一天,这个时候剩下来的也只有最想说的几句话了。(或许以后兴起了会回来记录一下自己当初的心路历程,但大概率鸽
送给应届生
- 简历非常重要,不要写废话,尽量一页以内,实习经历少时,学历>实习>项目,经历多时实习>>学历>项目
- 笔试编程题部分力扣400题+跑不掉的,少了自觉补,记得复习408,笔试和面试都会有用
- 秋招是一个运气>>实力的游戏,不要总是怀疑自己,沉下心准备,面试时要自信
- 不要在面试经验少于十场的时候投递最想去的公司,大概率会寄
- 及时复盘每场面试,尝试去总结并掌握面试技巧和套路,受挫后才会慢慢变强
- 行百里者半九十,时刻都要拿出全力以赴的心态,绷住,把求职当作长跑,毅力比什么都重要
- 加油!
送给非应届生
- 如果你的人生目标不是科研也不是机关,尽早规划职业生涯,越早越好,早到你看到这句话的时候开始
- 如果你想不清以后想要做什么,那你大概率在到真的要做出选择的时候还是想不明白,请你花一周、一个月,或者更长的时间做这个事情
- 做好决定后,就把自己离校之前的时间分块利用起来,大阶段+小阶段细分的方式定好自己未来的学习内容和方向
- 照着面经去学知识点是最快的,但如果不做总结和分类,串联起来会花很长时间
- 想尽办法实习,或者写项目,不要说下次一定,放走一次机会,你简历上就少几行亮点
- 要想同辈脱颖而出,就得有危机感,
单独送给转码的朋友
- 逃离动力和向往动力一定要有一个,如果都没有,劝你趁早放弃
- 过程一定是艰苦的,是孤独的,是没有方向的,自律和坚定目标才是通向终点唯一的门票
- 默默努力,然后惊艳所有人吧!
最后的碎碎念
我知道有人要说,光说要做什么,不做什么,不说怎么做,纯**废话。相信我,人教人是教不会的,只有在看到我这些话后,自己有搞明白“怎么做”这份主动性后,才能真正吸收一些有用的东西。当然要是实在不知道怎么做,可以在评论区问问(私聊大概率不回),我会提供一些我自己的经验,仅供参考。
哦哦最后的最后,记得看我的内推帖子(内推码L6564),我在老米等你们!!!!
#米哈游##游戏引擎##游戏客户端开发工程师##游戏客户端##秋招#