先说一下自己啥情况。其实严格来说是本科二批,但是是一本的分数线的计算机科学专业。    秋招情况投递公司情况(由于tap4fun转正了,所以投得公司很少,按照时间顺序以下):    offer: tap4fun游戏服务器(实习转正),疯狂游戏 游戏服务器,bilibili 音视频服务器开发,网易互娱 游戏研发,字节跳动游戏服务器。       简历未过:猿辅导      笔试放弃:多益网络,西山居,叠纸。      笔试挂:完美世界游戏服务器,百度C++开发(由于两天面了两次面试而且还都没睡着,笔试时候直接睡着了)。      面试放弃:搜狐畅游,腾讯QQ音乐后端(因为拿了字节就不去面了)      一面挂:Funplus      二面挂:米哈游,吉比特。      题主是从4月份开始找的暑期实习开始的。因为平时上课没有那么认真听讲吧(其实可能也只是期末爆肝几天看完书,然后分数还算高)。所以对一些名词的概念都有些印象。这个很重要,必须要快速读一遍书才行,不然是看不懂书的。       最开始找的方向是C++服务器开发,所以先看了看C++ prime这本书。然后配合牛客上的那本面经,就一直刷。看到不会就弄懂看到不会就弄懂,一般是要完全弄懂背后原理直到无法深挖下去才行。后来发现就C++好像不大行,于是再刷题巩固了数据结构+算法,然后操作系统+计算机网络(只能说基础很重要做服务器这块)。    不过我是没有刷过leetcode的,因为以前是有在学校OJ上刷题的,所以这个就省了,但是我觉得如果就刷leetcode肯定是比刷OJ效率高很多的。代码能力肯定要加强才行,不过leetcode是应试的最好手段了吧。       然后就是找实习了。这段时间是最难的,因为刷题会发现10题9题不会。然后又本着一定要深挖原理的思想,就弄的一题答案可能就那么多,但是会让知识点膨胀到爆。       以下为面经部分:因为没录音,所以就凭着印象记下来的,有些时间久远点的就忘记很多了有记起来的时候会进行补充,但是应该对大伙还是有帮助。    以下为找实习的情况:     offer:tap4fun           挂了的:吉比特(三面),好未来(一面),广联达(笔试),米哈游(笔试),华大(简历挂),莉莉丝(简历挂),欢聚集团(简历挂),元戎(简历挂),拼多多(简历挂),西山居(笔试Ak,然后挂),虎牙直播(简历挂),网易雷火(笔试挂),远景(简历挂),斗鱼(简历挂)           放弃面试的(因为获得offer了,以为不能毁约):网易互娱游戏研发实习生,深信服。     吉比特游戏研发    一面过,二面hr面过,当我以为我稳了之后,开始和朋友吹b后,并且感叹找工作这么简单的时候,第二天短信通知恭喜你xxx通过了hr面,然后加面,然后据说一起加面的都挂了。    以下是面经:    https://www.nowcoder.com/discuss/410644?source_id=profile_create&channel=1009      好未来    笔试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、排行榜怎么实现。    7、、场景题。感觉不是纯背可以解决的,我觉得像是项目中遇到的问题,让我想方案,然后我思考了挺久,想出来了,小哥说我的做法是业内的做法,我很震惊。然后就又开始不停出这种东西,我就一直想。前前后后面了一个多小时。       过了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小时了,但是我觉得都是比较有新意的题,能和面试官很开心的讨论。 
点赞 48
评论 15
全部评论

相关推荐

03-28 19:11
铜陵学院 C++
有礼貌的山羊追赶太阳:太典了,连笔试都没有开始就因为HC满了而结束了,而且还卡你不让你再投其他部门的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务