三七互娱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;
}



#春招#
全部评论
可以
点赞 回复 分享
发布于 2018-03-21 12:38
....又没给我笔试机会
点赞 回复 分享
发布于 2018-03-21 21:26
Hero("37er").kill(1).recover(30);执行结果为 Hi! This is 37er Kill 1 bug Recover 30 bloods 那Hero("37er").kill(2).recover(30)呢? 老兄,可以看看事件循环和事件队列, macroTask和microTask。
点赞 回复 分享
发布于 2018-03-21 21:36
收到面试通知了吗
点赞 回复 分享
发布于 2018-03-22 11:22

相关推荐

万得信息
|
校招
|
超多精选岗位
点赞 评论 收藏
分享
8 15 评论
分享
牛客网
牛客企业服务