2022年校招前端开发面经总结(高频),适合基础好的同学
在我的面试经历中问的不多,但也是重点,网上很多相关知识,我就直接引用了CSDN用户 的博客了
浏览器输入url到页面展示出来的全过程(含TCP三次握手四次挥手)
5、什么是跨域?影响了什么?怎么解决?
跨域:浏览器的同源策略对资源请求和响应做出的限制,所谓同源是指"协议+域名+端口"三者相同,如果缺少了同源策略,浏览器很容易受到XSS、CSRF等攻击。
同源策略限制内容有:
跨域解决方案
6、说一下事件循环(event-loop)
首先,JS是单线程的,在JS代码的执行过程中,会将同步代码放入执行栈中,将异步代码放入异步队列。执行栈中的同步代码依次执行,当执行栈为空时,轮询异步队列,异步队列中的由于类型不同,又分成宏任务队列和微任务队列,且微任务队列优先级高于宏任务队列,所以微任务队列里的任务的同步代码会先被放入执行栈中执行,再处理宏任务队列中的任务,每执行完一个宏任务,都会去执行微任务队列里的任务。如此轮询执行,直到所有队列为空。
下面放一个图帮助大家理解。
二、JS部分 1、JS中的数据类型有哪些? 2、说一下原型链是什么
首先,从构造函数new出来的一个实例对象,都有一个属性 指向 构造函数的属性,该构造函数的属性称为 原型对象,原型对象中具有 属性指向构造函数,同时具有一个属性指向 构造函数的 属性(因为该原型对象也是通过构造函数new出来的),的原型对象上的属性指向 null。从开头的构造函数new出来的实例对象,到最终的null,中间存在原型指向的链式结构,称为原型链。
下面放一个图帮助大家理解。
3、new关键字的实现过程
1、生成一个空对象
2、将该空对象的原型设置为构造函数的对象(也就是空对象的指向构造函数的属性)
3、让函数的this指向这个对象,执行构造函数的代码(为这个新对象添加属性)
4、判断函数的返回值类型,如果是基本数据类型,返回创建的对象。如果是引用数据类型,就返回这个引用类型的对象。
4、ES6有哪些新特性 5、说说你对闭包的理解
闭包是一个定义在函数内部的函数,它能够访问上层函数作用域中的变量,使其不被回收,这就是闭包。
闭包常见的应用场景有:节流、防抖、函数柯理化
节流和防抖函数可以写写,函数柯理化比较偏,有兴趣可以学学
6、说说你进行数据深拷贝的几种方式
function cloneDeep(obj){let newObj// 是对象,进行深拷贝if(typeof obj == 'object' || obj != null){// 判断一下obj是对象还是数组newObj = obj instanceof Object ? {} : []// 对源数据中的属性遍历,递归深拷贝for(let i in obj){newObj[i] = cloneDeep(obj[i])}}//不是对象,则直接赋值else{newObj = obj}return newObj
}
三、Vue部分 1、Vue生命周期
直接放图,大家看吧,最好背的滚瓜烂熟,一般问vue开头就是生命周期,把这个给面试官讲的仔仔细细,面试官大概不会为难你后面的vue的知识了,因为他会觉得你vue学的不错
2、Vue 组件间的传值的几种方式 3、Vue中key的作用
简单点说就是高效更新虚拟dom。具体是怎么做的呢,会的已经想起来了,不会的看视频吧。
尚硅谷vue课程 P30讲的就是key