在面经开始之前,想给刚学或者想学前端的几个建议
1.只要学习开始一定要做出——终身学习的准备 原因:互联网这个行业更迭很快,所以不会存在它去等你学习,一定要自己去主动学习
2.如果没有本科学历,最好谨慎选择 原因:大公司要学历,小公司要实力,初学如果这两个都不占就不建议去选择
3.不要,不要去招转培 原因:都会有一些隐藏条款,就不举例了
4.最好找一个人—————学的还不错的人,带你
5.学的时候要多练习,不要嫌麻烦 原因:工作可不是课程,会遇到很多问题,最好能够独立解决
面经开始
- flex怎样实现圣杯布局:
上下定高,中间自适应,不存在脱标
- 盒模型怎样计算:高度的计算
标准盒:内边距padding和边框border加上设置的宽高一起决定了盒子的大小。
IE盒:如果给盒子设置width和height,那么盒子的大小就是设置的宽高值,如果设置了内边距那么内容的大小实际上是盒子的大小减去内边框和边框大小之后的值
- 讲一下BFC:块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域
满足下列条件之一就可触发BFC:
- 根元素,即html
- float的值不为none(默认)
- overflow的值不为visible(默认)
- display的值为table-cell, table-caption, inline-block, flex, 或者 inline-flex 中的其中一个
- position的值为absolute或fixed
-
闭包:闭包的使用场景:创建私有变量、延长变量的生命周期
-
怎么避免内存泄漏:
-
全局变量中:严格模式、
-
被遗忘的定时器和回调函数:手动清除定时器
-
dom引用:refA= null
-
闭包:去除unuserd函数或者在replaceThing函数最后一行加上 originlThing = null.
-
js垃圾回收机制有几种:标记清除和引用计数
-
执行上下文:
三种类型:全局执行上下文、函数执行上下文、eval函数执行上下文
执行上下文的三个周期:创建阶段(确定this值、确定词法环境和变量环境) =》执行阶段(执行变量赋值、代码执行) =》回收阶段(等待虚拟机回收执行上下文)
- eventloop:js运行机制就是事件循环
执行顺序:从上到下一行行执行,先执行同步在执行异步
渲染流程:
先清空call stack中的同步代码、执行微任务队列中的微任务、尝试DOM渲染、触发Event Loop反复询问callbackQueue中是否有要执行的语句,有则放入call back继续执
- 宏任务和微任务:微任务的执行时机比宏任务早,微任务是由Es6语法规定的,宏任务由浏览器规定
10.简单介绍一下promise:
promise有两个阶段、三个状态
未决阶段——挂起pending 已决阶段——完成fulfilled,失败阶段rejected
挂起完成称之为resolve,挂起失败称为reject
- 说一下继承,:
被继承的类称为父类,继承的类成为子类
继承的基本方案原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承
通过Object.create来划分不同的继承方式
- 如何判断数据类型,有几种方法:
- typeof——alert(typeof 'dd') 返回的都是字符串形式
- instance of 一定是对象类型——其他类型会返回false
- 对象原型链判断方法: Object.prototype.toString.call()
- jQuery项目万能方法jQuery.type()
判断array和object:1. Array.isArray() 2.使用instanceof进行判断,A instanceof B即对象A是不是构造函数B构造出来的,是即返回true, 不是即返回false.
- call()、bind()、apply()三者的区别:
- 三者都可以改变函数的this对象指向。
- 三者第一个参数都是this要指向的对象,如果如果没有这个参数或参数为undefined或null,则默认指向全局window。
- 三者都可以传参,但是apply是数组,而call是参数列表,且apply和call是一次性传入参数,而bind可以分为多次传入。
- bind 是返回绑定this之后的函数,便于稍后调用;apply 、call 则是立即执行
- vue2和vue3 的区别:
响应式方面有很大提升,setup里没有this、去掉了filter
15 vue2,3监听数据的区别
vue中使用watch,vue3中使用watchEffect(立即执行)
当依赖项发生变化时回调函数运行都是异步的(微队列)
16 vue2,3 双向数据绑定的区别
vue2中使用v-model和.sync
vue3中当对自定义组件使用v-model指令时,绑定的属性名由原来的value变为modelValue,事件名由原来的input变为update:modelValue
去掉了.sync修饰符,它原本的功能由v-model的参数替代