1、为什么使用protobuf
xml:解析性能差,需要编写大量的数据解析,数据兼容性问题
protobuf:
优点:
- 性能好/效率高,无论是在时间还是空间上
- 代码生成机制,省去了解析代码的编写
- 支持向后兼容和向前兼容
- 支持多种编程语言,官方发布的就只支持C++、Java和Python,开源社区有许多对其他语言支持的项目
缺点:
1、相对于XML,应用还不够广,需要对外开发接口给第三方系统调用时,暂时不考虑protobuf
2、二进制编码格式的可读性较差,而且还需要配合相应的proto文件才能阅读,虽然有TextFormat,但终究无法彻底解决此问题。例如通讯出现问题,在抓包并直接dump出来的log难以看懂,通讯双方都不承认自己有问题,都说是对方的错。
2、scheduleOnce和setTimeout的区别
在cocos中的
scheduleOnce是继承于Component,在切到后台的时候会随着游戏进程暂停,setTimeout是JS的语法,在切到后台后依然运行,回到前台后,时间可能已经运行结束
3、求以下运行结果
for (var i = 1; i <= 5; i++) {
setTimeout( function timer(){
console.log(i);
},i*1000);
}
上面代码的运行结果:运行时会以每秒一次的频率输出五次6.
setTimeout的延迟不是绝对精确的;
setTimeout的意思是传递一个函数,延迟一段时候把该函数添加到队列当中,并不是立即执行;
所以说如果当前正在运行的代码没有运行完,即使延迟的时间已经过完,该函数会等待到函数队列中前面所有的函数运行完毕之后才会运行;也就是说所有传递给setTimeout的回调方法都会在整个环境下的所有代码运行完毕之后执行;
4、js的数据类型有哪些
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。
引用数据类型:对象(Object)、数组(Array)、函数(Function)。
5、js中null和undefined有真么区别
null表示"没有对象",即该处不应该有值。
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
6、java中Map与数组的比较
1、数组特点高效、保存基本类型,集合带array的底层由数组实现,还有一部分由链表或者树
2、数组大小固定(巨大缺点,内存中一定连续),集合各种实现吧!
3、数组只能放一种类型,集合不考虑泛型可以存很多类型。
4、集合放原始类型其实是通过装箱拆箱来实现的,说白了以前原生类型只能用数组,现在集合也可以了。因为这个改进,所以现在基本上除了性能外,均推荐使用集合。
7、call、apply与bind的差别
call和apply改变了函数的this上下文后便执行该函数,而bind则是返回改变了上下文后的一个函数
call、apply的区别
他们俩之间的差别在于参数的区别,call和apply的第一个参数都是要改变上下文的对象,而call从第二个参数开始以参数列表的形式展现,apply则是把除了改变上下文对象的参数放在一个数组里面作为它的第二个参数。