游戏研发面经汇总(C++语言,前部分贴上连接进行了解答)

作者:leottt

链接:https://www.nowcoder.com/discuss/46728?type=post&order=time&pos=&page=1

来源:牛客网

一面:

 

const 三种用法

const int

const int* / int const *

int * const

https://blog.csdn.net/fanx021/article/details/82937940

 

sizeof() strlen() str.length() size()

https://blog.csdn.net/z_qifa/article/details/77744482

sizeof 为对象的字节大小,strlen 要求参数为字符指针

length size 都是用来计算string对象长度,作用相同

sizeof是运算符,strlen是函数。

 

_beginthreadex()比较于 CreateThread()有更高的线程安全性,不会造成多个线程共用同一个全局变量的情况

const mutable static

https://www.cnblogs.com/yangguang-it/p/6547314.html

 

strcpy strncpy strlcpy的用法 以及源码实现。

 

class, struct, union 

https://blog.csdn.net/fadbgfnbxb/article/details/88788037

https://www.jianshu.com/p/ae75cd16000d

https://blog.51cto.com/cxdbk/1650006

https://blog.csdn.net/alidada_blog/article/details/83419757

 

TCP与UDP的区别, 场景, TCP如何实现可靠传

 

malloc 和new的区别 以及malloc的用法

https://www.cnblogs.com/ywliao/articles/8116622.html

https://blog.csdn.net/zlf19910726/article/details/79189689

1 申请内存所在位置

2 返回类型安全

3 内存分配失败是的返回值

4 构造函数和析构函数的调用

5 定义数组的大小(是否需要指定大小)

6  创建数组和删除数组空间的操作

7 new和malloc 是否可以相互调用

8 是否可以被重载

9 是否可以重新分配内存

10 客户处理内存分配不足

 

模板使用时候typename和class的区别

https://www.cnblogs.com/cthon/p/9201649.html

 

vector的push_back为什么要扩容2倍或者1.5倍

https://blog.csdn.net/bryant_xw/article/details/89524910

 

map\set\unorder_map\unorder_set的区别

https://blog.csdn.net/chen134225/article/details/83106569

 

https://blog.csdn.net/zjajgyy/article/details/65935473

 

说一下C++虚函数的实现

https://blog.csdn.net/tajon1226/article/details/81407190

https://blog.csdn.net/cherisegege/article/details/80469868

可以不修改父类 就让父类拥有子类的函数功能

 

基类的f()未被virtual 覆盖

 

基类的f()被virtual 覆盖

游戏研发面经汇总(C++语言,前部分贴上连接进行了解答)_第1张图片

 

游戏研发面经汇总(C++语言,前部分贴上连接进行了解答)_第2张图片

https://www.jianshu.com/p/3bc24c8cc329

 

C++智能指针了解么

https://www.cnblogs.com/KillerAery/p/9096558.html

 

如果要你设计,你会怎么设计智能指针

https://www.jianshu.com/p/02bb7e6aeb03

 

Java的是怎样解决循环引用的,那C++怎么解决呢

https://www.jianshu.com/p/d8578725f1bb

 

计算机图形学了解多少

说一下光栅化是什么以及这个阶段有什么流程

AVL树是什么?怎么判断两颗AVL树里含的数据是一样的(这里树的结构可能不一样的)?

https://blog.csdn.net/canot/article/details/78946450

中序遍历的非递归实现。

设计一个游戏排行榜的实现:1、获取前K名玩家的信息2、输入一个玩家id,能获取玩家当前的排名。

二面:

自我介绍

介绍一下自己最深刻的项目经历(说了一下自己在tx实习那边做的东西)

喜欢玩游戏么(从小学到大学玩的游戏都说了一遍= =)

设计一个洗牌算法,让牌尽可能的乱

给10w行数据,每行数据都是由的字段构成,是一个ip范围字段(ipstart<=ipend),这个范围对应一个唯一的地址location,每个ip范围字段不存在交集。问:输入一个ip地址,怎么得出它对应的地址locaiton

如果ip范围字段存在交集要怎么处理?

作者:相信梦想

链接:https://www.nowcoder.com/discuss/95256?type=post&order=time&pos=&page=1

来源:牛客网

 

一面:

virtual关键字

虚函数,这个我答的比较多,顺便说了一句构造函数不能为虚,扯多态的实现

然后就问为什么(虚函数表,实例对象的虚指针实现)

类里面还有什么函数不能为虚(半天没想起来,面试官提示static才转过弯)

https://blog.csdn.net/nie19940803/article/details/77427219

stl容器,实现方式,各种操作的复杂度

大数据处理为什么用vector不用list

一个vector当做无序容器储存上万数据,删除中间元素,怎么实现O(1)复杂度,开始没听到无序,想半天,后面提示无序后,直接swap pop_back

四种类型转换

编程思路题,下楼梯,一个小人从屏幕顶下楼梯(类似于真男人下一百层,只不过楼梯不变),只能在楼梯上左右移动,落在空中的时候不能动,掉落距离超过一定长度就摔死,空中掉落和左右移动都是1 m/s,问下到屏幕底所需的最短时间(用dfs,bfs实现),让写动态规划,写出状态方程就给过了

平时用的语言

tcp与udp的区别和各自的优势

 

二面:

类的成员函数中,const在三种位置的作用

定位new

介绍研究生的项目

遇到过的最困难的事

为什么想来网易

手写二叉树的前序遍历递归与非递归实现,问添加一个额外的操作,怎么封装(定义抽象基类,用子类实现)

给定一个地图,分割为多块,怎么把建筑物的高度压缩到0-1.0的高度

射击游戏,怎么判断开枪后命中的目标(子弹可穿透),目标如果有体积怎么检测

最后二面面试官人真的很好,就是说话声音有点模糊,两个题都复述了一次才听清楚

 

作者:HoldJohnh

链接:https://www.nowcoder.com/discuss/97989?type=post&order=time&pos=&page=1

来源:牛客网

 

笔试

初级游戏研发的笔试就三题 (找不到原题了)

  • 第一题是工资多少求交税多少 我一堆 if else 完成了 花了 20 分钟左右

  • 第二题是成员列表 类似QQ群的人员排序 在线 > 离线; 群主 > 管理员 > 普通人; 我用结构体保存数据 然后 sort 花了 30 分钟左右

  • 第三题是 PVP 的时间,我是把每段时间都转换为距离周一 0 点的秒数,一开始一直 0% 后来考虑到周日到周一的情况 改完直接 AC 花了 60 分钟左右

    这应该是我状态最好的一次笔试了,我还记得我写完从位置上跳起来的样子,然后不知所措的考虑要不要提交。。

一面

一面前有一道笔试题,不透露就不说了

一面的面试官很 nice 一见面就说我笔试成绩很不错 感觉这让我的第一印象很好。

  • 内联函数

  • 重写和重载 覆盖

  • 用 c 实现重载 (我很绝望啊。。。)

  • 创建派生类对象时 构造函数调用顺序

  • 虚函数的实现

  • 用 C 模拟虚函数 (绝望。。)

  • 虚函数可以内联吗

  • STL 容器和算法 (我刚看完 stl 源码 状态很好 一直是我在说)

  • vector push_back时间复杂度

  • socket 代码怎么写

  • 拥塞控制

  • 虚拟内存 物理内存

  • 操作系统啥的 (我不会呀。。)

 

二面

二面之前有段小插曲,我以为一面结束就可以跑路了,结果跑一半看的 0571 的未接电话,打回去是网易的 HR 让我回去二面,感谢小黄车,让我感受到速度与激情。

  • const 的用法和作用

  • dynamic_cast static_cast

  • java 的反射机制

  • 项目

  • 遇到的困难

  • 因为我之前在边锋游戏实习过一段时间,了解了一下实习做了什么,顺便问了 lua 和 cocos2d 的东西

    然后是俩题游戏设计 和这个老哥的二面几乎一模一样

  • 吃鸡地图高度转换成 [0,1.0]的数组 然后提需求修改 (手写代码)

  • 平面吃鸡判断击中谁 我使用数学思路来回答的 用向量啥的。

  • 手写二叉树遍历 提要求需求如何修改 我想法是传递函数指针

  • 设计模式会哪些呀

  • 聊人生 聊理想

感觉

网易俩面试官给我感觉都是人超级好的那种,面的过程中还比较顺利很说说笑笑的。

猪场的午餐是不错 居然有虾! 而且小姐姐也很漂亮 但这不是重点

早上接到 HR 小姐姐的电话 真的好高兴 也很兴奋 心里终于有底了

最后希望各位老哥能稳住

我非 211 985 非科班(电子) 本科生都有机会进网易

你们秋招一定也能拿到想要的 offer 的!

 

作者:宇宙第二菜鸡

链接:https://www.nowcoder.com/discuss/96710?type=post&order=time&pos=&page=1

来源:牛客网

 

现场笔试:(0.5h)题不难但处理条件很烦,没写完

一面:(1.5h)

面试官看了我的笔试答案没说啥,直接开始。

多态,虚表虚指针,虚基类以及内存分布

函数重载

构造函数和复制构造函数能否为虚,为什么

一个对象的内存分布,多个虚函数占多大空间

shared_ptr介绍原理,weak_ptr如何解决引用传递

右值引用

编译器如何处理模版

编译中的导出符号表和未决符号表

反汇编时符号表的状态

比较c++和java

介绍一下stl的list,查找list复杂度

unorder_map插入复杂度

stl迭代器重载

遍历vector的几种写法

数据库常用数据结构,b+树的好处

图的bfs和dfs

快排,复杂度,最坏情况以及设计算法解决

tcp和udp

如何用udp封装实现tcp

进程和线程

如何保证线程安全

互斥锁原理和使用

多级cache

虚拟内存和LRU

光栅化pipeline

光线追踪

法线贴图

ssao

写过什么shader

字符串匹配kmp

最长公共子串dp的状态转移方程

点在线段上投影,向量解法

 

二面:(50m)

自我介绍

项目介绍和问答占大部分时间,不细说了

最新gpu架构怎样实现实时光线追踪,不知道就猜一猜

擅长的语言排下序,比较c++和java...

给定两点初始状态和运动方程,求两点相遇的时间和最早相遇的时间(没做出来)

文件io类似括号匹配的问题,疯狂提示下才想到用栈解决,也没完全做出来

职业规划

有什么问题

 

作者:失去梦想的菜鸡

链接:https://www.nowcoder.com/discuss/107050?type=post&order=time&pos=&page=1

来源:牛客网

 

今天早晨收到了网易互娱的 Offer,发个面经回馈一下牛客。

 

先说一下整个经历,我是8月5号投的提前批,7号参加的笔试,20号收到电话说笔试通过,通知21号下午电话一面。一面完过了一个星期收到电话通知30号现场面,面试官说十天内(我不确定他说的是不是工作日)出结果,然后今天早上收的短信。

 

一面:

一面约的下午 5 点,时间一到面试官就打了电话过来,全程 44 min

  • 上来先让我自我介绍,问我学校都学了什么课程,问我的语言。我学校教的是 Java,自己学了 Python,所以面试都问的 Python。

  • Python 都用了哪些模块?用的是 Python 2 还是 Python 3?2 和 3 有什么区别?

  • range() 函数返回什么?

  • import 是如何加载的?如果想 import 一个下载的包要怎么做

  • 闭包是什么?闭包里的函数怎么传参?怎么把函数外的变量传到函数内

  • 线程是怎么切换的?进程是怎么切换的?

  • 一个线程挂了,其他的线程会怎么样?

  • 问我平时用什么数据结构多一些,说一下数组和队列的区别,如何用数组表示一个队列?

  • TOP-K 问题

  • TCP 和UDP 有什么区别?

  • UDP 包如何实现可靠?

  • 数据是怎么在 TCP 收发端传输的?

  • 问了一些网络编程相关的问题,记不清了

  • 讲一下了解的排序算法

  • 给一个英文句子,怎么把单词逆序

  • 如何判断交叉链表?怎么找到交叉点?

  • 图形学是否了解?简单讲一下坐标变换

  • 有什么问题?(问了一下网易的引擎)

二面:

二面到了广州现场先带到一个小房间,给了一张纸手写代码,题目似乎是 STL 里面的一个函数的实现,如果经常用的话应该都能写出来,反正我没用过,乱写了一下 hhh,写完之后就被带到了面试官的房间,二面的面试官是一个看起来就很厉害的大佬,面试全程笑眯眯的,面试体验非常好(除了题不会),全程  45 min 左右

  • 先自我介绍,问学校都学了什么,做过什么项目?

  • 我简历上写了两个游戏项目,让我简单介绍一下

  • 实习都做了什么?(我在一家创业公司实习,做游戏测试策划和部分开发,就简单讲了一下实习的经历,讲了测试时遇到的一个bug,还有开发的游戏)

  • 有没有学过图形学?都学了哪些?

  • 问了一个空间坐标系转换的问题,大概是给了一个三角形,怎么把这个三角形转移到相机的那个空间,名词我记不太住了,就是比较基本的图形学知识。

  • 我说我图形学学了一点关于碰撞检测的东西,问我如何判断一道光线是否与物体碰撞,怎么找到碰撞点?什么是八叉树?

  • 是否了解 C/C++?(不了解,但是会写一点代码。。)

  • 是否了解 STL?

  • print函数从执行到打印到屏幕上都经历了什么?

  • 堆和栈有什么区别?

  • 多线程了解吗?多线程可能会因为什么问题?举个例子说明。为什么加了锁就可以避免?加锁操作不会出问题吗?

  • 写一个 Python 的列表生成式,生成 0 到 100 的所有奇数

  • 给一个数组,如何把所有的 0 都移到数组最后?手写代码

  • 升学和就业是怎么考虑的?

  • 有什么问题?(问了一下会不会玩自己开发的游戏,玩的时候是什么感觉,还有关于图形学和 openGL 的学习方法)

 

 

作者:victorika

链接:https://www.nowcoder.com/discuss/94899?type=post&order=time&pos=&page=1

来源:牛客网

 

到现场先做一份代码测试,题目很简单,但是要保密。。。面试官只在乎你的思路不在乎你写出来了没有。

 

一面:

 

virtual关键字的作用

虚基类有什么用

static的作用

new和malloc的区别

如何突破private的限制

有一个头文件声明的全局变量,其他文件导入这个头文件,那么他们访问的是一个全局变量吗?

知道内存对齐吗?为什么要内存对齐

如何实现new的时候它肯定是以某字节对齐的

如何让一个指针new的时候不分配内存

四种类型转换

inline了解吗?有什么用?inline一定起作用吗?

系统堆栈的区别

C++11的新特性有哪些

move有什么用

模板的参数推导

红黑树

树的dfs和bfs手写代码,dfs非递归版

爬楼梯每次可以爬1 2或3步,问爬到第n层有几种方法

一个数字只有一个数字出现奇数次其他出现偶数次如何找这个数。

两个栈实现一个队列

三次握手和四次挥手,画图,为什么是三次握手

tcp和udp的区别

场景题,某个客户端作出了动作,服务端需要更新到所有的节点,使用udp好还是tcp好,为什么?

udp如何实现可靠了解吗?

http1.0,1.1和2.0

智能指针了解吗

手写shared_ptr

操作系统有几种锁

互斥锁和信号量的区别

进程和线程的区别

(大概只记得这么多了)

 

二面

 

二面是真的难受,面试官在一个问题上问为什么,答出来以后又挑细节继续问,我。。。直到你答不上来了才换题目真是难受,面试官还一脸严肃,搞得我好紧张。

 

C++内存模型,每个区放什么

extern "C"知道吗,干嘛用的(要说得很细。。。不然问死你)

一个4m的buffer,设计一个方案来分配内存和释放内存,分配的内存只有1k,2k和4k。

设计模式里的单例模式知道吗?手写一下(写完继续问,为什么构造函数要private,为什么要双重判断,等等等等一系列的问题,我真是佛了,我一开始写的pthread_once_t,他说你这样我不让你过,强行让我改另一个版本)

缓存是什么(这里引申了一堆的问题,就不一一说了,真的难受,感觉说越多问得越多)

虚拟内存和物理内存的区别(这个问题又是问得很细,真的头疼)

静态库和动态库的区别?(哎,这个同上,就一直问。。最后问到底层实现,我想打人了)

为什么想来做游戏研发?

C和C++与脚本语言的区别?

由于被虐得体无完肤,问题都基本记不得了,只记得大方向被人怼过的就这么多,每一个环节疯狂深入展开,非要把你问死的节奏是真的难受

 

 

这几天忐忑不安,今天终于等来电话,网易叫明天早上领offer,希望大家也能拿到自己想要的offer

 

 

作者:灵溪吴彦祖

链接:https://www.nowcoder.com/discuss/111003?type=post&order=time&pos=&page=1

来源:牛客网

 

下面讲过程,挑重点讲哈:

先笔试半小时,一题开放地址法插入哈希表,要求元素不能重复,表的长度调整当然也得考虑。

一面:

1.顺着笔试题问了哈希表怎么扩张、插入和删除。

2.让你自己设计智能指针你准备怎么做。

3.描述const、constexpr作用

4.n个数找前k个最大。

5.n个数里面删k个,求剩下的数里面能组成的最大数(当时不是很懂题意,应该是这样)。

6.树的后序遍历非递归版。

7.tcp&udp?

8.一个文件里某函数a()调用另一个函数b(),中间发生了什么描述下(汇编层面)?函数是怎么保存当前堆栈状态的?

9.最大递增子序列动态规划的状态方程,分析怎么得出来的?

10.C 11新增特性?move语义?非类型的模板写一个我看看?

 

一面就记得这些,反正很深的都答不上来,懵逼。

面试官:我看你还是做过游戏的,要不你转初级游戏研发上二面怼一怼?

好的。

 

二面:

1.笔试题哈希表扩张,怎么插入,怎么rehash的,细节呢?

2.聊了一些实习的公司的事,就当是缓和气氛?然后开虐?

3.设计一个timer(float dt, function<> callback)函数,传入时间和函数指针,到指定时间后调用函数(学过cocos的都知道,就是设计scheduleUpdate),我直接算执行每个回调需要的具体时刻,然后放最小堆了,不知道对不对。

4.设计完了?你确定?描述下?然后呢?怎么优化?

5.一个黑白颜色各占一半的转动的圆盘,可以在上方随意放检测下方颜色的传感器,最少放几个可以知道是顺时针还是逆时针转?

6.聊项目,聊cocos,为什么每个node需要visit()?干嘛用的?cocos内存管理?PoolManager干嘛用?

7.用过哪些设计模式?组合和继承区别?各自优缺点?(我就是扯引擎用到的那些)

8.字符串翻转。

9.为什么之前选择去棋牌公司实习?不是浪费时间嘛?不过你干的活倒也不是完全没含金量(一边看着我的简历),......

 

最后问问题环节,说我基础不是很好,cocos是懂一些,但是看的不够多,需要回去找原因继续研究。

总得下来面试官还是不错的,除了一直对着笔记本打字,应该是记录面试表现以及打分啥的,但是有时候你会有种被忽略的感觉(尤其是答不出来的时候)......

不用等结果就知道自己凉了,回去多补补来年秋招再战吧。

 

多说一句,凉了的同学千万别灰心,面试能暴露出你的很多问题,而发现问题是很幸运的。而且我上次投简历是笔试都没过,但是这次是在二面挂的,下次说不定就进了呢哈哈哈。年轻人有股劲就是拿来闯拿来学习的,有激情就释放到自己热爱的领域上,不然怎么会进步呢是吧。

 

操,我现在只想回去打几把炉石压压惊。

 

作者:旧习难改

链接:https://www.nowcoder.com/discuss/114820?type=post&order=time&pos=&page=1

来源:牛客网

 

开始做笔试题,由于牵涉到保密信息,在此不便透露题目。

做完笔试题稍作等待,便被人带到了12楼等待前一批人面试完成,其余4人先被带至指定房间面试。

面试我的那个面试官和我之前的面试的比较久。。。

等待n久之后,我前面的同学出来,我们聊了一下面试官性格(我只问了一句:“面试官是一个不苟言笑的技术宅吗?”,根据以往经验这种人是最难应付的,但是得到的回答是面试官是一个非常健谈和喜欢较真的人,什么问题都会一直问下去,直到自己不会)。

随后我被带到了面试官房间,自我介绍,介绍刚刚题目的思路,开始问技术。

1. C++虚函数,我开始向虚函数指针和虚表那块说,中间无意中说出了自己曾经看过虚函数表在elf文件中的位置,遂停止让我介绍虚表。

2. 开始问虚表在elf文件何处以及基本形式,答完之后开始问关于elf文件相关知识。

3. 怎么查看elf文件的头部信息。

4. 开始测汇编能力,问函数调用时会干什么(当时很懵B,随后提示一定会执行什么语句)。

5. 开始问gdb相关知识,大概问了几个调试命令。

 

小插曲,他吐槽了一下,你为什么报的是初级开发工程师(回到投递简历时研发工程师至少是研究生才能投递)。

 

6. 开始转战STL,问用过哪些,还有map那点破事。

7. 丢给我一组数让我建一棵红黑树,并询问是否记得红黑树创建规则,向其坦白自己记得不是太熟,他说没啥,就不浪费时间了遂放弃本题。

8. TCP/UDP那点破事,因为本人暑假实习做的是这个相关的,所以它让我用UDP实现可靠数据传输,我说了几点策略,但是不太满意,并反问道你暑假不是作的这个吗?遂向其解释,只是做了一个中间层,底层可靠数据保证是别人github上面的完整工程,并向其道歉,说让他失望了,但是回答的很爽快“没关系”。

9. linux那点破事,大概问了几个命令,最后一点是我没想到的,记录当前资源占用率的文件存放在哪(只是大三做***作系统实验的时候用过,隐约记得是proc,便随口答了)。

10. 问了一个趣味问题。

一面结束,它让我把之前写的代码交到hr处,到hr那里等待结果,但是我推托说下午学校有答辩(实际为百度三面),遂离开,在地铁站等待地铁时hr打来电话,一面通过,让回去二面,遂又解释了一番,于是那边回,如果答辩在5:30之前结束,可以联系他,并回来继续参加二面。

百度三面结束是4:40.于是再次乘坐地铁回到网易面试处继续二面,等待n久之后被带到面试官哪里,最担心的事发生了,面试我的面试官是一个面瘫技术宅。

1. 先介绍一下自己,介绍一下项目,并就项目问了几个问题。

2. 为什么不读研。

 

全程说了5分钟,他表情没有变过。。。

 

3. 开始问问题,地图中有一个圆圈,怎么样保证丢的补给可以均匀落到地图各处。

回答1.0,随机生成坐标点(x,y),首先判断是否在园内,在就投递。回应:可以但是需要判断较为麻烦,优化一下。

回答2.0,以圆心为原点,随即生成半径和角度(r ,sieta不知怎么打)。回应:不均匀,圆心处比较密。

回答3.0,以圆心为原点,随即生成半径平方和角度(r^2 ,sieta不知怎么打)。回应:可以,但是证明一下落点是随即的。

。。。想了n久没有想到证明方法,只得坦白刚刚只是直观感觉。

(面无表情,我们换一个问题)。

4. 怎么样均匀洗一副扑克牌。

回答1.0,使用随机数函数,每次生成一个数然后和剩余牌数取余,然后将该下标牌取出。(面无表情,记载)。。。

5. 排瓷砖,经典斐波那契数列问题。

6. 快速获得一个队列中的最大元素。

7. 有什么想问的。

 

二面结束,回到学校已将近7点,吃了点晚饭睡觉,今陪考研室友呆了一天图书馆。

晚上回来接到hr短信,说后续通知,10点左右hr小姐姐打来电话,告知明天8:30参加offer研讨会,不要迟到。

无意间听说自己的offer上面职位为“游戏研发工程师”,激动万分,遂向其确认,得知没有搞错。

于此本人秋招行程结束,不管百度那边是否发放offer,但留在猪场大概已是定局。

 

 

你可能感兴趣的:(学习路线)