成都晓多科技—社招一面(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)
后面就是反问环节。还算可以,比较经典的面试题,牛油们共勉!
#晓多科技##前端##社招##面经#