深圳市番趣互动娱乐有限公司(套题)
选择题 | 填空题 | 问答题 | 编程题 | 试题难度 |
---|---|---|---|---|
0 | 0 | 8 | 0 | 比较难 |
问答题
1、如何判断一个变量是Array类型?(不止一种)
考察js的基本功是否扎实
答:
1.使用es5提供的方法, Array.isArray(),true表示数组
2. 使用instanceof ,例如 :array instanceof Array。true表示数组
3.使用toString()方法调用call或apply方法,Object.prototype.toString.call(array)==="[object Array]"
2、解释一下DOM事件流的三个阶段。
前端面试,这种问题不是经常问,如果是面试中高级的岗位,会问。
答:事件流的三个阶段分别是 捕获、目标、冒泡
捕获:从Document节点开始,从上到下传播到目标节点为止。
目标:执行事件处理程序
冒泡:从目标节点逐步传播到根节点。
3、对下面的数组和对象进行深拷贝(深复制) let list=[1,2,3,4],obj={name:'小明',age:18};
考察对值类型和引用的理解
答:
方法1(直观的方法):
var list2=[],obj2={};
for(var i=0;i<list.length;i++){
list2.push(list[i]);
}
for(var key in obj){
obj2[key]=obj[key];
}
方法2(json转字符串,字符串转json)
var list2=JSON.stringify(list);
var obj2=JSON.stringify(obj);
var jsonList=JSON.parse(list2);
var jsonObj=JSON.parse(obj2);
方法3:
var list2=list.toString().split(",");
var obj2=Object.assign({},obj);
4、对以下数组进行去重 let ary=[1,2,3,3,4,4,4,5];
这种题目看似很简单,其实有陷阱。要考虑性能最佳。
方法(一)
let ary=[1,2,3,3,4,4,4,5];
var obj={};
var newArray=[];//判断是否重复
var len=ary.length;
for(var i=0;i<len;i++){
var key=ary[i];
if(!obj[key+""]){
newArray.push(key);
obj[key+""]=true;
}
}
思路:将数组中的元素变为对象的key,每次比较与对象的key做比较(查找key是非常快的),如果有就不加到新数组否则加上,这样就快速的做到了去重的目的。
方法(二)
let ary=[1,2,3,3,4,4,4,5];
var set=new Set([1,2,3,3,4,4,4,5])
使用es6提供的Set对象,效率是最高的。
5、Vue中计算属性、组件、数据监听等等分别是Vue生命周期什么时候挂上去。实现的原理是什么?
面试高级前端开发人员会问这样的题目
答:
都是在created这个阶段挂载上去的。从源码来看确切的说是在beforeCreate和ctreated之间创建的。从vue.js2.0源码上看,在这两个方法中间调用了initState()方法,这个方法就是用来创建这些对象信息的。
点评:这个不作为回答的内容,很多面试官总喜欢拿原理装高逼格,你可不要被他吓唬到咯,这道题你说你看了vue.js源码就是一个很有力的回击。不要去回答他的什么原理,因为这个问题本身就有问题,这里就是执行顺序的问题,哪有那么多原理。这种问题就等于1+1为什么等于2,你给我说说原理那么扯淡。你让他回答估计也是答非所问。
6、常见的http状态码有哪些?
200 已成功处理了请求。
304 请求的网页未修改过。
401 请求要求身份验证。
403 拒绝请求
404 找不到请求的网页。
500 服务器错误
7、一个页面半天加载不出来。你分析下原理?怎么优化?怎么解决?
考察是否有一定的项目开发经验,是否有考虑过性能的问题
答:遇到这种情况, 我一般会通过开发者工具,查看网络请求的情况,是不是因为请求的时间较长,如果接口请求时间长,基本上确定是后台的原因。
如果网络正常,我就会调试跟踪代码是不是有死循环,或是代码执行的次数比较多导致的。如果是代码问题就可以采用按需加载、分页加载、缓存、优化算法等方式来解决。