三七互娱2018春招笔试题解
三七互娱前端笔试题只有一道简答题,一道编程题。
第一道题目大意为
有一个游戏叫做Flappy Bird,就是一只小鸟在飞,前面是无尽的沙漠,上下不断有钢管生成,你要躲避钢管。然后小明在玩这个游戏时候老是卡顿甚至崩溃,说出原因(3-5个)以及解决办法(3-5个)
(题外话:这种平台游戏大家应该都玩过,就是我们小时候常玩的直升机,按一下就往上飞一下,不按就掉下去了,碰到障碍物也游戏over)
参考答案:
原因可能是: 1.内存溢出问题。 2.资源过大问题。 3.资源加载问题。 4.canvas绘制频率问题 解决办法: 1.针对内存溢出问题,我们应该在钢管离开可视区域后,销毁钢管,让垃圾收集器回收钢管,因为不断生成的钢管不及时清理容易导致内存溢出游戏崩溃。 2.针对资源过大问题,我们应该选择图片文件大小更小的图片格式,比如使用webp、png格式的图片,因为绘制图片需要较大计算量。 3.针对资源加载问题,我们应该在可视区域之前就预加载好资源,如果在可视区域生成钢管的话,用户的体验就认为钢管是卡顿后才生成的,不流畅。 4.针对canvas绘制频率问题,我们应该需要知道大部分显示器刷新频率为60次/s,因此游戏的每一帧绘制间隔时间需要小于1000/60=16.7ms,才能让用户觉得不卡顿。 (注意因为这是单机游戏,所以回答与网络相关)
第二道为编程题,题目大意为
编写代码,满足以下条件:
(1)Hero("37er");执行结果为
Hi! This is 37er
(2)Hero("37er").kill(1).recover(30);执行结果为
Hi! This is 37er
Kill 1 bug
Recover 30 bloods
(3)Hero("37er").sleep(10).kill(2)执行结果为
#春招# Hi! This is 37er
//等待10s后
Kill 2 bugs //注意为bugs
(双斜线后的为提示信息,不需要打印)
参考代码:
function Hero(name){ let o=new Object(); o.name=name; o.time=0; console.log("Hi! This is "+o.name); o.kill=function(bugs) { if(bugs==1){ console.log("Kill "+(bugs)+" bug"); }else { setTimeout(function () { console.log("Kill " + (bugs) + " bugs"); }, 1000 * this.time); } return o; }; o.recover=function (bloods) { console.log("Recover "+(bloods)+" bloods"); return o; } o.sleep=function (sleepTime) { o.time=sleepTime; return o; } return o; }