今天去面试,总结一下的笔试的题目
第一题
问:每3s读取input.txt
的内容并打印到控制台中,分别用同步和于异步的方法
答:
1234567891011 |
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
方法进行排序
1234567 |
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
,是考察算法排序的
12 |
|
第三题
问: JavaScript
中如何给数组去重
答:
1234567891011121314151617181920212223242526272829303132333435 |
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
的
includes
和Set
能去重不包含{}
的
第四题
问:应用服务器和游戏服务器有什么区别,对游戏服务器架构pomelo
有什么理解?
答:看到这个题,懵逼了,游戏服务器没有接触过,pomelo
是什么鬼,只有回来查了
12345678910 |
一般的网站应用程序,是典型的Request-Response模式,通过tcp和服务器建立一次链接,而请求数据和影响数据通过http协议进行组装,当完成一次交互的时候,服务器端和客户端tcp链接就会释放,把服务器端socket资源留给新的客户端。通常web程序是比较好扩展的,通过硬件负载均衡和添加web服务器来实现,这一套方案业界都已经比较成熟了。 网游比较特殊,最大的特点在于客户端和服务器端是要进行长连接的,客户端和服务器端基本上一直要保持连接,不是典型的Request-Response模式,Client会主动给Server发送数据,Server也可能主动往Client发送数据,生命周期比较长,一次发送的数据量比较小,但是数据交互发送比较频繁。由于要进行长连接,服务器端的socket就不能进行复用,单台服务器处理请求是会有限。用web的方案解决扩展问题,也不太适用。在web程序中,客户端之间的数据是没有交互的,所有的数据都是通过web服务器响应给客户端,但是网游服务器中,每个客户端的数据的变化,都要通过服务器端广播给其他客户端。所以客户端会有上限,这也就是为什么服务器要进行分区,一个区里面同时在线人数会有限制。 |
详细区别参考知乎的答案
123 |
pomelo的理解 一个网易开源的游戏服务段框架,与以往单进程的游戏框架不同, 它是高性能、高可伸缩、分布式多进程的游戏服务器框架,并且使用很简单。 |
原文地址:https://www.cnblogs.com/lijianming180/p/12251399.html
时间: 2024-10-05 08:51:06