清醇, 南京航空航天大学·2022届
APP 内打开
分享
20
68

【高能长文预警】游戏服务器开发——面经

先说一下自己啥情况。其实严格来说是本科二批,但是是一本的分数线的计算机科学专业。

秋招情况投递公司情况(由于tap4fun转正了,所以投得公司很少,按照时间顺序以下):

offer:tap4fun游戏服务器(实习转正),疯狂游戏 游戏服务器,bilibili 音视频服务器开发,网易互娱 游戏研发,字节跳动游戏服务器。

简历未过 :猿辅导

笔试放弃:多益网络,西山居,叠纸。

笔试挂:完美世界游戏服务器,百度C++开发(由于两天面了两次面试而且还都没睡着,笔试时候直接睡着了)。

面试放弃 :搜狐畅游,腾讯QQ音乐后端(因为拿了字节就不去面了)

一面挂:Funplus

二面挂 :米哈游,吉比特。

题主是从4月份开始找的暑期实习开始的。因为平时上课没有那么认真听讲吧(其实可能也只是期末爆肝几天看完书,然后分数还算高)。所以对一些名词的概念都有些印象。这个很重要,必须要快速读一遍书才行,不然是看不懂书的。

最开始找的方向是C++服务器开发,所以先看了看C++ prime这本书。然后配合牛客上的那本面经,就一直刷。看到不会就弄懂看到不会就弄懂,一般是要完全弄懂背后原理直到无法深挖下去才行。后来发现就C++好像不大行,于是再刷题巩固了数据结构+算法,然后操作系统+计算机网络(只能说基础很重要做服务器这块)。

不过我是没有刷过leetcode的,因为以前是有在学校OJ上刷题的,所以这个就省了,但是我觉得如果就刷leetcode肯定是比刷OJ效率高很多的。代码能力肯定要加强才行,不过leetcode是应试的最好手段了吧。

然后就是找实习了。这段时间是最难的,因为刷题会发现10题9题不会。然后又本着一定要深挖原理的思想,就弄的一题答案可能就那么多,但是会让知识点膨胀到爆。

以下为面经部分:因为没录音,所以就凭着印象记下来的,有些时间久远点的就忘记很多了有记起来的时候会进行补充,但是应该对大伙还是有帮助。

以下为找实习的情况:


offer:tap4fun

挂了的:吉比特(三面),好未来(一面),广联达(笔试),米哈游(笔试),华大(简历挂),莉莉丝(简历挂),欢聚集团(简历挂),元戎(简历挂),拼多多(简历挂),西山居(笔试Ak,然后挂),虎牙直播(简历挂),网易雷火(笔试挂),远景(简历挂),斗鱼(简历挂)

放弃面试的(因为获得offer了,以为不能毁约):网易互娱游戏研发实习生,深信服。

【好未来】

笔试ak了,一面挂,以下为面经:

1、Linux文本去重的命令。

2、Linux查看cpu占用率的命令。

3、Linux ps命令。

4、MySql 读写分离。

5、MySql索引建立了能干嘛。

6、MySql B+树介绍

7、MySql索引建立的原则

8、Redis了解吗?说一下有多少种类型(不会,不知道)。

9、C++ 友元是什么。

10、给了个项目场景,忘记了,后来一直展开这个。有点难,我没想法。

总体来说这家公司的面试我回答的很糟糕。MySql这个东西我本来就不大懂,所以就很难受的挂了。

Tap4Fun


也是我最后去实习的公司,是一家非常好的公司,网络上那些负面消息啥的起码我没遇到,公司965周六周日实习生比正式员工多很多,进公司第一天还请大伙吃了一顿大餐,我导师也是好人,身边小伙伴也都是很好,教我很多东西,hr也很专业,反正水平是有的一家公司,走的时候也请大伙吃饭,很看好将来的发展好吧。

这个面经就不准备给大伙看了,因为我觉得不太好,和吉比特一面难度差不多。

然后我就等着去实习了。其实期间还有网易互娱的面试和深信服的面试,因为我以为拿了offer就得去所以就放弃了。

实习期:

在Tap4Fun我是用Golang写了个游戏服务器,关键是必须要懂为什么要这样用,为什么用这个,这个方案有什么替代方案,其他方案优缺点,反正我是都了解了我才最终去用的。包括后来服务器基本完成后,我也是将Go语言各种特性学习了一遍,有gpm模型,go的gc方法,无缓冲管道有/无缓冲管道(如何实现管道),协程进程线程。然后就进行实习答辩,答辩完过了一天就通知,可以转正了,获得offer,把我开心坏了,我第一份正式offer就有这么高的工资,我直接躺下好吧,回家一直和朋友吹逼,我本来想就去这个公司的,因为这公司真的很好。

最后我们一组的大伙基本都去大厂了。有小米,米哈游啥的。

秋招:

我其实拿到offer后,就基本上不看面试题了,我听导师的话,看重构这本书,看游戏开发的方法,因为我是打算就去工作了。看了看服务器架构方法,非对称加密,对称加密,然后des,ras加密的流程,就多看书就好了。


我投简历就面笔试了,可能是因为简历上附带了游戏效果链接?

【FunPlus】


一面:

时间有点久远,问了我30分钟。

项目介绍

1、Golang gpm模型。

2、protobuf的各种实现。

3、实现压缩算法的方法。

4、protobuf和json和xml之间的比较。

5、为什么protobuf解析速度快。

6、grpc。

7、怎么实现rpc。

8、推荐让人用Go,你要怎么推荐。

9、算法题:有两段数字,两段各自有序。然后找一个数字。就比如说 4 5 6 1 2 3,找4。

我只能先写个On的,然后和他说我知道有二分法的方法,可以到Logn,但是就给我这些时间我写不出来。的确需要刷leetcode才行啊!!原题概率太大了。 然后就直到现在也没消息。

【疯狂游戏】

很好的一家公司,做小而精的游戏,我后来一直觉得我应该就去这了。而且好像还对我挺看重的?技术栈我也喜欢Golang,给的钱也多,我第一次感觉钱只是数字的时候。

笔试AK。

一面:

一个很友善的小哥。

1、项目介绍。

2、粘包。

3、CPU超线程。

4、MySql 为什么B+树。

5、MySql索引。

6、LRU是什么,怎么实现的LRU,到具体细节。

7、排行榜怎么实现。

8、场景题。感觉不是纯背可以解决的,我觉得像是项目中遇到的问题,让我想方案,然后我思考了挺久,想出来了,小哥说我的做法是业内的做法,我很震惊。然后就又开始不停出这种东西,我就一直想。前前后后面了一个多小时。


面了2分钟后,hr和我说过了,下一面是CTO面我。

二面:

非常博学的人,很强,广度高到离谱好吧。

硬件部分

1、CPU架构有哪些,你说说看。

2、4nm制成是指什么东西。

然后又是一个硬件的,我听都没听过,直接忘记。

编译原理

3、问我编译型语言和解释型语言的区别(正好研究过,狂说)。

4、C++编译器有哪些,区别在哪,只知道gcc和g++和他们的区别。

5、问了什么名词,蒙蔽。

6、蒙蔽。

计算机网络,自底向上。

物理层: 巴拉巴拉,一大堆。我没懂。我感觉那个时候口胡了很多,他有点不满意。

数据链路层: 很多东西,各种协议,实现的方法啥的。还有差错校验方法好像??

网络层: ICMP作用,遇到错误怎么解决,报文格式。

各种协议,蒙蔽。

传输层: TCP,UDP区别。

然后一堆协议。。。蒙蔽

应用层: HTTP,https各种字段,和区别。

cdn协议。

还有很多名词忘记了。

算法:

基本上数据结构这本书看完,而且读的比较好就行。比较吃平时有没有认真读书。


这个公司我记得太少了因为太多了而且一直处于震惊,但是还是答了一大部分把,最后过了。这二面很吃你在校有没有认真读书,而且读完会不会深入。我每次反正只能答出来一点。


然后过了3分钟hr就通知我过了。

然后hr面了。然后又几分钟后又通知我过了。

然后晚上笔试百度,我记忆中,我把选择还是填空做完后,然后第一题A了后就睡着了好像。很艹。

然后第二天早上ceo面,几分钟自我介绍完,就结束了,然后就过了。

然后谈薪。就结束了。


然后还没9月,我就拿到了这份offer,我得瑟了好久,因为钱实在很多,很震惊。就基本上宣布全面放弃投递简历了,而且也拒那些工资更低的公司了。所以就只投了一些8月份投得公司。


【吉比特】

这公司给挺多钱的,学长很多在里面,不过我感觉如果我拿了也会去疯狂游戏。

一面过,二面挂(和之前得总监一个人)

和实习时候面经差不多。这公司好像是有题库一样。不过把三面的问题有些推到一面问了,还要手撕代码了。一般是写个智能指针。acm获奖选手可以考虑,好像这个加分很多。

【米哈游】

选择题很难我感觉很少人能对,笔试A ,1.8题/2题。然后自认为应用题写了个比较好的方案。


一面电话面狂问基础以下不按顺序,我最后记得答了20题左右,但是一共也就40分钟:

1、多态

2、虚函数怎么实现

3、虚函数表在哪

4、虚函数怎么做替换的

5、纯虚函数作用

6、为什么析构函数用虚函数

7、构造函数用虚函数会咋样。

8、快排思想

9、算一下快排复杂度,计算过程。

10、堆排

11、算一下复杂度。

12、归并

13、算一下复杂度。

14、函数后加const

15、time_wait

16、tcp四次挥手过程

17、为什么三次握手


二面:

给你四道算法题。我做了3题半吧,因为有一题不是最优解吧,最后一题是问我gcd怎么实现的,我直接搓出来了,然后他问我怎么推的gcd,我说忘记怎么推导了。 过了两周原神手机上线那天挂了。

【网易互娱】

一面:

一面分为俩面试官搓代码的和问你题的。搓代码的还行,问我问题的面试官水平真滴不行,我只能说鱼龙混杂吧,很多次很想和他争论,而且不大听我说。会打断,体验巨差。

先让你搓代码,然后问你的节奏,1小时30分钟总共。以下不分顺序。

搓代码过了,然后一号面试官离开了房间,进来了二号面试官。

1、虚函数实现。

2、为什么析构函数一定要设置成虚函数。(我说了理由,然后说不一定要设置成虚函数,因为有些类在设计结构的时候不可能有子类了,这个时候不设置也行,然后就和我说怎么可能能确定啊?和我巴拉巴拉说了好多,我就说那编译器为啥不直接设置成虚函数咯?反正就这个时候开始了)

3、让我口述二叉搜索树,然后我说了遵循左边节点比根结点小,右边比根大,然后递归下去去构造树。但是遇到有序的时候会变成链。他就不知道什么是链,怎么变成链,我就解释有序都会偏向一侧,查找速度就是on了,就变成链表了,他就狂说反正也不听。就离谱,还说让我口述代码,我漏了一个就说,我们程序员要严谨。太离谱了。

4、然后问我计算机怎么表示小数,我说了IEEE标准+python方法+定点小数的实现。然后他说不对,是科学计数法。。。。太离谱了。

5、然后问我快排。我说了思想,还说了取中法和退化成冒泡,还有C++sort的实现方法。然后他就说你这个快排不太理解啊,我有点生气了,直接和他说我搓一个吧,然后2分钟后搓完给他看了。

6、二叉树前序后序中序遍历。我也懒得说,我直接说,我搓给你看就行了。然后搓完了。

剩下就不说了,这个面试官太艹了,我觉得和其他互娱得技术差太多了,这面经实在没用。如果有打分10分的话,我肯定给3分。

二面:

面试官直接迟到40分钟,我发邮件询问为啥啊,啥情况啊。然后和我说忘了我,然后过了一会到了。然后上来就是一个不好意思,看出来是交接的问题不是他的问题。而且应该是没准备题,所以问的很奇怪。 不过问的问题很有水平。都是项目中会遇到得问题。

1、大端小端。

2、粘包问题怎么解决的,具体实现。我这里说了Go 和C#的方法,以及C# windows上默认是小端。

3、自己写协议怎么设计,我答TLV格式的协议。

4、出了一个题问我,如果我写了一个函数,返回对象是一个指针,但是别人调用的时候忘记delete这个指针了,我要怎么做让别人不delete这个指针,还不会内存泄漏。我思考了一会说我可能go语言defer可以实现,然后说了思路。

5、然后让我在C++ 里面实现go语言的defer。(很难受,我答不出来,他循序渐进的给了好多提示很辜负面试官呀,最后我说我指定不行了,他说lamda表达式可以实现我才有点头绪,但是还是不行。)

6、然后出了一些协作开发时候会遇到的问题,比如说重复定义全局变量咋办,别人在这个文件里面定义了a,我也在这定义了a,我要怎么让这两个人语义都是清晰的。就比如说,我想让我文件里的变量,让别人用的时候是用我这个,别人在他的文件里面用的时候也是我这个变量。还有一种情况,我想让别人自己用自己的变量。我反正挺蒙的,而且还是只能用C写。我说static可以解决一种情况。或者写个文件,专门存全部人的全局变量。然后他说不够优雅,然后我就说可能没有更好的想法了。

7、如果C++ 类中有很多指针,在构造函数的时候对这些指针进行new初始化,但是new报错了,这对象肯定是不能用的,但是之前的对象已经申请了。我要怎么在new出现错误后,把之前已经申请的对象回收掉。我说开个标记数组,如果成了的话,就标记一下,如果遇到异常我就回退回去,把标记数组里面对象清空。然后就被否定了,说写的很丑,不行。


8、后面还问了CPU局部性原理+CPU流水预测这种基础了。感觉也就这个可能会重复了。

我问校招生到底要懂什么才行,然后后面推荐我看深入理解计算机系统,给了我很多建议,是一个很好的面试官。

过了一个月收到offer。


【BiliBili】


面试官人很好,面试体验很棒,据说如果进的话是我的leader?,我很想去这家公司。

一面电话面:

1、介绍项目(很久)。

2、redis了解多少。

3、跳表介绍一下。扩展说了做排行榜的时候用过,然后深入说了细节。

4、一些计算机网络的基础。TCP/UDP,然后TCP 头结构好像。忘记了。

5、time_wait做了啥。就离谱,我之前记得这个作用,然后当时忘记了,只能回答一个2msl的作用,然后说一下占用端口啥的,不然能说好多。

6、红黑树和avl树差别。

7、红黑树特性。

8、红黑树查找速度。

9、让我介绍一下我各个奖都做了什么。

10、反问:希望知道游戏服务器和音视频服务器的差别。因为我投成这岗位了,面试官可能也比较照顾我给我说了很多音视频开发的,还说如果实在不想做开发可以让算法的来面我一下,我就说就开发就行了。

二面:

1、自我介绍。

2、项目介绍流程,网络模型,消息结构,链接结构,工作池啥的。挺多

2、我的项目要是玩家掉线,要怎么重连,我解释了帧同步和状态同步的区别,以及各自的重连方法。

3、拆包封包流程,为什么要做这步,什么导致了粘包。

4、avl树是什么结构,让我说一下怎么插入,插入后怎么旋转。

5、旋转根据什么旋的。

6、close_wait是什么情况出现。

7、大量出现close_wait怎么办。

8、给建议,说服务器开发,底子要好,以后要改底层架构,需要基础扎实才行。

过了3-4天就接到hr电话说过了。

【字节跳动】


这也是我最后去的公司,感觉这里刚刚发展起来可能更有挑战性?我也不知道我会不会后悔,或者加班到死。我这里就简单的发一些比较不常见的题吧,毕竟是我之后去的公司。

一面:

1、MySql数据库扩表方案,三种,预留字段,写成kv的形式再进行,行转列。例如 uid,key,value的表。然后进行行转列即可。还有看服务器开发大佬们常用的方法,写个新表,写三个触发器,然后闲暇时间将原表的内容插入新表,然后改名字就好了。

之后都是常规题,手撕代码比较难,没做出来。

二面:

1、问了碰撞检测的方法。答了挺多种方法的,物理碰撞,对固定的物体进行预处理,做双线性插值判断是否碰撞,对活物做AOI,或者四叉树算法。

2、数据库优化注册流程。

3、卡帧怎么处理。

4、怎么断线重连的。

5、帧同步实现方法。

三面:

1、Go的GC怎么做到并发的。(答了三色标记,和STW,分为清除和标记期,然后判断在扫描期结束后,对新对象进行标灰色,之后再re_scan就好了。)

2、让你设计一个varint。emmm不大行。

其实还有挺多的,一共三面合起来面了快3小时了,但是我觉得都是比较有新意的题,能和面试官很开心的讨论。

发布时间:2020年11月27日
用户头像
我来说两句…
共 20 条评论
Andy 东北大学·2022届
最后去哪里啦~
2020年11月30日 回复
清醇, Andy: 去了宇宙条
2020年11月30日 回复
宝藏胶囊 重庆邮电大学·2022届
你似乎面了个假互娱,和别人一点都不一样的节奏
2020年11月30日 回复
清醇, 宝藏胶囊: 啊这 那大家都啥样子啊
2020年11月30日 回复
自在仙 江南大学·2022届
莫不是二仙桥大学?
2020年11月30日 回复
清醇, 自在仙: what?
2020年11月30日 回复
杨采依 同济大学·2022届
笔试有经验分享吗
2020年11月30日 回复
清醇, 杨采依: 有点想不来了
2020年11月30日 回复
FINanalystYAN 中国传媒大学·2022届
最后去了那
2020年11月30日 回复
清醇, FINanalystYAN: 宇宙条
2020年11月30日 回复
迟夏饮冰 天津大学·2022届
2020年11月30日 回复
名字取得好 中国矿业大学·2022届
马克
2020年11月30日 回复
霸气十足 中国人民大学·2022届
很强 楼主我跪了
2020年11月30日 回复
书架里的猫 曼彻斯特大学·2022届
这offer不少了
2020年11月30日 回复
土人先生 北京交通大学·2022届
学习了
2020年11月30日 回复
橡果 曼彻斯特大学·2022届
牛逼
2020年11月30日 回复
Christie 集美大学·2022届
厉害厉害
2020年11月30日 回复
平心 中南财经政法大学·2022届
大佬
2020年11月30日 回复
小吃吃吃次 澳门科技大学·2022届
顶顶
2020年11月30日 回复
做个钉子户 南京财经大学·2022届
tql
2020年11月30日 回复