成都晓多科技—社招一面(1小时)
1.个人介绍
2.项目介绍和工作内容
3.项目里面如何检测性能?性能优化手段有哪些?你在项目里面用到了哪些?详细说说
4.事件循环?为什么会有事件循环?同步异步,然后看一道事件循环相关的例题
5.Promise了解吗?promise.all ? 还知道promise一些方法吗?
6.for in和for of的区别?原型和原型链?为什么for in打印出来的属性没有原型和原型链上面的属性?
7.作用域和作用域链
8.react了解吗
9.什么是响应式?双向绑定?
10.深拷贝和浅拷贝?如何避免循环引用?
11.一道和nodeJS相关的输出结果题,就是nodeJS里面嵌套引用,最终输出什么结果,忘了题目。ES模块化了解吗?
12.网络安全
13.缓存
14.vue里面的$set(value)有什么用?为什么会出出现这个方法?
15.Vue和React中的虚拟Dom了解吗
16.你会在Vue的哪个生命周期发送请求?
17.如何知道原型链上的属性是否是可枚举的呢?如何把不可枚举的属性变成可枚举的呢?
手撕题目给了三题, 我选了比较简单的手撕深拷贝,另外两题,一题是缓存的没看懂题目,另一题是手撕Promise.all,深拷贝还算经典,只要把数据类型全部考虑进去就行,还要考虑上面面试题里面说的循环引用
function deepClone(obj, hash= new Map()){
//基础数据类型,直接返回拷贝对象
if(obj ===null || typeof obj !=='object'){
return obj
}
//避免重复引用
if(hash.has(obj)){
return hash.get(obj)
}
let newObj
//判断数组、日期、正则、对象类型
if(Array.isArray(obj)){
newObj = []
}else if(obj instanceof Date){
newObj = new Date(obj)
}else if(obj instanceof RegExp){
newObj = new RegExp(obj)
}else{
newObj = {}
}
//缓存克隆
hash.set(obj,newObj)
//递归循环克隆属性
for(let key of Object.keys(obj)){
//只取自身属性,不取原型链
if(obj.hasOwnProperty(key)){
newObj[key]=deepClone(obj[key], hash)
}
}
return newObj
}
let objA
objA = {name:'张三',arr:[1,{prop:'测试'}]}
let objB = deepClone(objA)
console.log(objA)
console.log(objB)
后面就是反问环节。还算可以,比较经典的面试题,牛油们共勉!