友塔游戏开发笔试面试

因为经常有人来问我,工作体验之类的,但是因为自己也不太需要用牛客了,不怎么看信息,给我发私信我可能是很久之后才会看到消息,所以也不用私信我了。索性直接在这里更新一下吧。

首先结论是,能不去友塔就不去友塔。

游戏开发岗基本等于发版日加班熬夜,新人入职的那段时间也很大概率会通宵。平台开发、算法岗(舍友直言:上级啥也不会,啥也不干)之类的就还好,因为不用给游戏发版。游戏运营什么的有时需要跟开发一起发版本,所以也存在加班的情况。

能不能学到东西,我觉得能,为什么能,因为我觉得是自身写代码和开发的能力就不够,大学期间做的所谓的项目大作业实在是过于烂。所以在一个很低的起点来说,你肯定能学到“业界内一个很常规的需求的代码怎么写”这件事。换句话说,如果你能够去一个更好的公司,那么你肯定能学到更多且更好。

公司的氛围比较学生气,学生气就有好有坏了。
好的是你在组里会比较容易交到玩得来(大家确实都喜欢玩游戏),离职后都会私下拉个群的朋友。
坏的是很多人对待自己的工作会显得不够职业,没有一种职场氛围。

很多人会直接摆烂,比如你的上级,在你入职的那段时间是很有可能把一大堆活扔给你让你在几天内做完的,然后他就去玩手机了,也不管你能不能做完这个活。再比如你的上级的上级,基本上给人的感觉都是在摆烂混日子。看上去都是平时在那玩手机,然后谈谈绩效或者把你开掉的时候你可能会跟他说说话。你是真的能感觉到他们是每天不做事的。
那如果你很能干,那么你的活就会越来越多,你可能绩效很不错,年终奖拿的比别人多一些,但是最后你的身体也会受不了,想到跑路。
如果你不是很能干,但又不至于被开的那种,那么就不会给你分很重的活,那在熟悉了一段时间后,就会摆烂,形成一个自上而下的摆烂链。导致劣币驱逐良币的情况经常发生。
当然也有很多同学很能干,被分活也没有分得特别过分的,但是你为什么会觉得那个人就一定是你呢?

另外这类问题建议直接上知乎看看,早就被骂烂了。https://www.zhihu.com/question/287807491

————————————————————————————————————————————————————
已经签约了,打算分享一下吧,我面试被问到的问题可能比其他面经中问到的稍微简单了点。

笔试四道编程

第一题,给你一个拼图(二维矩阵),让你把拼图还原(数字与下标对应),最少需要多少次。

例子
输入如下二维矩阵
5  2  8
4  3  1
9  7  6
把这个矩阵还原为
1  2  3
4  5  6
7  8  9
最少需要多少次?
这道题其实直接换就可以了,思路跟《查找数组中重复的数字》是一样的。

只需要让矩阵的第k个数字变成k即可。    即要有一个 nums[i]==i的判断条件。
输入矩阵中,
第一个数是5,那么就把这个5跟矩阵的第五个数字交换,交换得到了3,不行。
继续跟矩阵中第三个数字交换,交换得到了8,还是不行。
继续跟矩阵中第八个数字交换,交换得到了7,还是不行...就这样一直换到矩阵的第一个数字为1,于是再去检查矩阵第二个数字是否为2...以此类推。

第二题,给一个只含有0和1的网格,并且给一个坐标值x,y(这个坐标可能在网格外),从某一个点出发,可以走八个方向(上下左右对角线),这八个方向的步数均为1,求出离这个坐标x,y步数最少的,三个1的坐标。
1  0  1
0  0  1
0  0  0
0  0  1
当时没写出来。
不过后来想明白了,当边长均相等时,找最短路径用广度优先遍历就好了。

第三题,给一个屏幕的长和宽,这个屏幕的中心坐标x和y,再输入数量为n的线段的两个端点坐标x和y。
问有多少个线段是出现在屏幕上。

这道题首先要用中心坐标和屏幕的长和宽,去计算出屏幕的上下左右四个边界。

然后定义一个线段的结构
struct line{
    int x;
    int y;
    bool isVisible;
}
先检查线段的任意一个端点是否在四个边界内,如果是,就标记isVisible=true。
这样就过了一半的测试用例了。。
然后再根据两个端点坐标,计算一下线段的方程。
得到线段的方程后,分别代入屏幕的左边界和右边界的x值,检查求出的y值是否在上下边界范围内。
不过这个方法唯一的缺陷是,没有考虑到上端点在上边界上面,下端点在下边界下面的竖直直线,不过我估计是没有写这个测试用例吧。

第四题,给一个环形DNA序列(字符串,注意环形),如 ACC 。给出n个基因片段,如 CCA,问基因片段是否能组成该DNA序列。
注意这里是环形,CCA可以组成ACC。
好像是没有很巧妙的方法,只能硬解,但是当时没写出来。
笔试完的第二天,收到电话约了星期二面试。

一面

一面先是问了我简历上的东西,我简历是做的springboot+mysql的web项目,所以问了我mysql常见的面试问题,索引原理,B树和B+树原理和区别,这些因为之前准备了所以就还行。
又问了非聚集索引,聚集索引,多版本控制,没有准备过,所以直接傻了。
然后又因为我有自己学mongodb,所以又问了mongodb的优点,以及与mysql的区别。
还问了mysql也能存储json格式的数据,那与mongodb相比有什么缺点呢。
这些问题其实我都没怎么搭上来,于是面试官问了一下我数据库是什么时候学的,我说前几周准备别的面试的时候。
之后就是开始问算法,首先是笔试中没有写出来的第二题和第四题。
第二题我先讲了一个自己想的深度遍历的算法,然后问了我广度遍历怎么做,当时有点懵,因为对这个没理解透,但还是讲了一下广度遍历大致思想。
第四题就说自己当时忘记用IDE了,想着硬解的,但是一直出错,就没问我了。
然后问了一个最大水域还是最大岛屿面积的问题,其实还是在问广度遍历和深度遍历。问了时间复杂度。
又问了一个全排列怎么实现,其实还是深度遍历中的回溯算法,问了时间复杂度,没答上来,被提醒了一下,回答了O(N!)
问了一下leetcode做了多少题,我说七八十,然后让我讲两个印象深刻的问题,我就讲了单调栈,还有链表的环和环的入口点,其实讲的也不太好就是了。。
两个有序数组的合并。

一面完等了两天,收到电话约了二面,想一想其实主要还是后面的算法问题把握住了。

二面

先问了C++的基本问题,比如子类构造时,构造函数的调用顺序,析构时析构函数的调用顺序。
虚函数是干嘛的。
map的基本原理,红黑树,讲一下红黑树的结构,时间复杂度。
然后开始问游戏开发相关的内容,自己简历上写了骑马与砍杀、DOTA2、全面战争系列之类的。
因为刚好遇上骑马与砍杀2的热度,所以问了我骑马与砍杀的设计难点,于是我就讲了骑砍是一个比较注重CPU运算的游戏,因为小兵AI要运算,所以要强调AI运算的效率。
又讲了骑砍的格斗系统,武器不同位置的碰撞判定问题。然后他问我要怎么解决AI运算和武器的碰撞,就说了距离自己远的小兵,把运算优先级降低,距离近的优先级提高。武器的碰撞判定可以用unity引擎中的设置各种刚体之类的讲了一下,面试官说还可以,然后还对我讲的东西做了一些指导。
又问了我DOTA2的设计难点,我当时没怎么想的到,他就提示了寻路逻辑。于是我就讲了讲怎么找最短路径,深度优先可以找,但是不太好,重点讲了一下广度遍历和迪杰斯特拉,并且强调了二者的区别和联系。
然后面试官又讲了一下DOTA2这种MOBA游戏会牵扯到网络问题,提到了帧同步,然后问我会不会,于是我就讲了一下帧同步。
后面又问我UI管理的设计,我想了一会说不会,于是面试官就开始教我这部分的内容,总体来说感觉二面的面试官人还蛮不错的。

二面结束之后一两个小时hr就打电话通知了第二天的hr面。

hr面

问了一些游戏经历问题、在校成绩问题,考研经历问题,离家会不会太远,父母支不支持的问题之类的。

现在已经签约了,对于别的大厂之类的笔试面试就不想参加了,毕竟知道自己的项目经历和编程水平自己心知肚明,打算先工作再从长计议吧。
#友塔##面经##友塔游戏#
全部评论
沙发,想问问楼主unity怎么学的?
点赞 回复 分享
发布于 2020-04-22 17:05
题主,这个第二题可以这样做吗?把网格中每个1和给出的xy的距离算出来,然后排序,最近的三个返回答案,这样行吗?
点赞 回复 分享
发布于 2020-04-22 19:42
老哥,能说下第一题为什么这种做法是交换次数最少的呢,我知道这种做法,就是不明白为啥这个是次数最少的解法,谢谢
点赞 回复 分享
发布于 2020-04-23 18:51
老哥,你hr面完后多久收到的offer?
点赞 回复 分享
发布于 2020-05-24 01:19
楼主,你当时一面也是电话面试吗?
点赞 回复 分享
发布于 2021-01-12 18:02

相关推荐

10 61 评论
分享
牛客网
牛客企业服务