• 面试笔试题总结20170510



    今天去面试,总结一下的笔试的题目

    第一题

    问:每3s读取input.txt的内容并打印到控制台中,分别用同步和于异步的方法

    答:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    const fs = require('fs');
    const path = require('path');

    let contentSync = fs.readFileSync(path.join(__dirname,'input.txt'),'utf8');
    setInterval(function(){console.log('同步打印的内容:',contentSync)},3000);

    //异步
    fs.readFile(path.join(__dirname,'input.txt'),'utf8',function(err,data){
    if(err) return err;
    setInterval(function(){console.log('异步打印的内容:',data)},3000);
    })

    会照成死循环,JS是单线程的

    第二题

    问:把用户在输入框输入的数字,进行从小到大的排序

    答:
    看到这个题,我的第一想法就是利用数组的sort方法进行排序

    1
    2
    3
    4
    5
    6
    7
    function (a,b){return a - b}
    //用户的输入
    var user_input = '34672268943';
    var user_input_arr = user_input.split('');
    console.log('user_input_arr sort before',user_input_arr);
    user_input_arr.sort(order);
    console.log('user_input_arr after',user_input_arr);

    但是面试官说,主要不是考察sort,是考察算法排序的

    1
    2


    第三题

    问: JavaScript中如何给数组去重

    答:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    var arr_original = [1,2,3,4,2,4,,6,8,9,'1'];
    var arr_unique = [];

    //方法一,利用 Set 新特性,没有重复的集合
    // NaN这货虽然有不全等的特性,在Set里面认为是相同的,所以只能有一个
    var set = 大专栏  面试笔试题总结20170510>new Set(arr_original);
    arr_unique = Array.from(set);
    console.log('arr_unique',arr_unique);

    //方法二,利用indexOf 方法
    var i = 0;
    for(;i<arr_original.length;i++){
    var value = arr_original[i];
    if(arr_unique.indexOf(value) == -1){
    arr_unique.push(value);
    }
    }
    //方法三,数组下标判断法,如果当前数组的第i项在当前数组中第一次出现的位置不是i,那么表示第i项是重复的,忽略掉。否则存入结果数组
    var i = 0;
    for(;i<arr_original.length;i++){
    var value = arr_original[i];
    if(arr_original.indexOf(value === i )){
    arr_unique.push(value);
    }
    }
    //方法四,利用数组的includes 方法,
    var i = 0;
    for(;i<arr_original.length;i++){
    var value = arr_original[i];
    if(!arr_unique.includes(value)){
    arr_unique.push(value);
    }
    }

    console.log('arr_unique',arr_unique);

    还有其他的去重的方法,在这就不一一列出来了
    去重时需注意
    var aa = [{},{},NaN,null,undefined,null,undefined]
    aa.indexOf({}) //-1; aa.includes({}) //false
    aa.indexOf(NaN) //-1; aa.includes(NaN) //true
    aa.indexOf(null) //3 ; aa.includes(null) //false
    aa.indexOf(undefined) //4;//aa.includes(undefined) //true
    有上面得出: indexOf能去重不包含 {}NaN
    includesSet能去重不包含 {}

    第四题

    问:应用服务器和游戏服务器有什么区别,对游戏服务器架构pomelo有什么理解?

    答:看到这个题,懵逼了,游戏服务器没有接触过,pomelo是什么鬼,只有回来查了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    一般的网站应用程序,是典型的Request-Response模式,通过tcp和服务器建立一次链接,而请求数据和影响数据通过http协议进行组装,
    当完成一次交互的时候,服务器端和客户端tcp链接就会释放,把服务器端socket资源留给新的客户端。
    通常web程序是比较好扩展的,通过硬件负载均衡和添加web服务器来实现,这一套方案业界都已经比较成熟了。

    网游比较特殊,最大的特点在于客户端和服务器端是要进行长连接的,客户端和服务器端基本上一直要保持连接,不是典型的Request-Response模式,
    Client会主动给Server发送数据,Server也可能主动往Client发送数据,生命周期比较长,一次发送的数据量比较小,但是数据交互发送比较频繁。
    由于要进行长连接,服务器端的socket就不能进行复用,单台服务器处理请求是会有限。
    用web的方案解决扩展问题,也不太适用。在web程序中,客户端之间的数据是没有交互的,所有的数据都是通过web服务器响应给客户端,
    但是网游服务器中,每个客户端的数据的变化,都要通过服务器端广播给其他客户端。
    所以客户端会有上限,这也就是为什么服务器要进行分区,一个区里面同时在线人数会有限制。

    详细区别参考知乎的答案

    1
    2
    3
    pomelo的理解

    一个网易开源的游戏服务段框架,与以往单进程的游戏框架不同, 它是高性能、高可伸缩、分布式多进程的游戏服务器框架,并且使用很简单。

    中文文档

  • 相关阅读:
    document.createElement在IE和Firefox下的差异
    css3:基础知识
    XMLTProcessor根据XSLT样式规则将节点转换为document对象
    Sql:查看数据库表和表结构的语句
    前端性能优化方法总结
    vue-resource 设置请求的参数以formData形式以及设置请求的过滤器
    vuex
    vue 随笔3
    vuex
    vue随笔2
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12251399.html
Copyright © 2020-2023  润新知