2021前端面试题总结(一)持续更新

互联网变化的太快了,几乎每一年就会有新的东西出来,随着vue3和TypeScript的日渐成熟。很多公司都在升级使用,如果你不学习,时间久了就等着被淘汰吧!

下面是真实几个我在面试过程真实遇到的面试题,后续会持续更新,保持饥饿才能持续进步,也不失为一种让自己进步的方式(看到问题后先思考,答案在两题之后):

1.严格模式下,箭头函数和普通函数,this指向?和非严格模式有什么区别?

2.let和const除了在块作用域上,还有其它区别么?

第1问答案:严格模式,有点像规范你代码,如果你有写错,通过运行之后提示报错让你修改。它的有点像TypeScirpt的类型系统,但后者是在你写代码时就提示,而不是等到运行后报错才提示。严格模式即在html中的script标签内,js语句执行前加上‘use strict’。

2.let修饰的变量后续可修改,而const修改控制台则会报错。

3.浏览器中强缓存和协商缓存区别?实现原理?

4.https和http三次握手四次挥手过程分别是怎样的?为什么握手是三次,挥手是四次?

第3问答案:

强制缓存:即向浏览器缓存查找请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程。这里细分有三种情况

一是、浏览器缓存查找不到和缓存标识失效,这时则向服务器发起请求(跟第一次发起请求一致)

二是、存在该缓存结果和缓存标识,但是结果已经失效,强制缓存失效,则使用协商缓存

三是、存在该缓存结果和缓存标识,且该结果没有还没有失效,强制缓存生效,直接返回该结果。

在http1.0中使用expires字段控制资源过期时间,http1.1之后进一步使用cache-control来控制,且优先级高于expires

协商缓存:就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程,分两种情况:

一是:协商缓存生效,返回304

二是:协商缓存成功,返回200和请求结果

第4问答案:

第一次握手:客户端发送syn(syn=x)包到服务器,并等待确认进入syn_sent

第二次握手:服务端确认syn包,确认成功后自己也发一个syn(ack=x+1)包,即变成syn+ack(ack=y)包,进入syn_recv状态

第三次握手:客户端接收到服务端的ack+syn包后,给服务器发ack包(ack=y+1),发送完毕后,进入establishied(tcp连接成功)状态,完成三次握手。

第一次挥手:

5.从输入url到浏览器出现页面,这一过程发生了什么?需要DNS域名解析?解析查询有用到哪几种方式?

6.重排和重绘的区别?(这个问题答案可以和浏览器渲染流程一起作答,引导面试官往这上面问,显得你基础知识扎实)

第6问答案:首先理解什么是重排和重绘,客户端获取到服务器资源后(包含js、html、css、png等),将其中的html解析渲染生成我们经常用到和听到的Dom tree,配合css生成CSS Dom tree两者组合生成render tree。此时浏览器已经知道各个节点的位置、层叠关系、样式,接着就开始绘制painting,最后展示display出来。当浏览器发现某个部分发生了点变化影响了布局(可以理解为js改变了dom,或者在vue-cli脚手架中更新了dom),需要倒回去重新渲染,内行称这个回退的过程叫 reflow。reflow 会从 <html> 这个 root frame 开始递归往下,依次计算所有的结点几何尺寸和位置。reflow 几乎是无法避免的。现在界面上流行的一些效果,比如树状目录的折叠、展开(实质上是元素的显 示与隐藏)等,都将引起浏览器的 reflow。鼠标滑过、点击……只要这些行为引起了页面上某些元素的占位面积、定位方式、边距等属性的变化,都会引起它内部、周围甚至整个页面的重新渲 染。通常我们都无法预估浏览器到底会 reflow 哪一部分的代码,它们都彼此相互影响着。repaint(重绘):改变某个元素的背景色、文字颜色、边框颜色等等不影响它周围或内部布局的属性时,屏幕的一部分要重画,但是元素的几何尺寸没有变。

注意:(1)display:none 的节点不会被加入Render Tree,而visibility: hidden 则会,所以,如果某个节点最开始是不显示的,设为display:none是更优的。

     (2)display:none 会触发 reflow,而 visibility:hidden 只会触发 repaint,因为没有发现位置变化。

(3)有些情况下,比如修改了元素的样式,浏览器并不会立刻reflow 或 repaint 一次,而是会把这样的操作积攒一批,然后做一次 reflow,这又叫异步 reflow 或增量异步 reflow。但是在有些情况下,比如resize 窗口,改变了页面默认的字体等。对于这些操作,浏览器会马上进行 reflow。

7.虚拟节点vnode更新过程?diff算法实现原理是怎样的?vnode节点比对方式哪几种?

8.computed和watch的区别?以及computed需要根据一个变量a计算另一个变量b,那怎样知道a的变化的?

第7问答案:vnode节点比对方式有深度优先遍历和广度优先遍历

9.宏任务和微任务的区别?有哪些是宏任务?哪些是微任务?

10.Promise和async await的区别?async await相对Promise好用在哪里?

11.垃圾回收过程?

12.vue2和vue3的区别?

13.谈谈你对this对象的理解?

14.javascript的数据类型?

15.webpack热更新原理?

16.js动画和css动画的区别?

17.websocket的实现与应用?

18.<link>和<import>的区别?

19.transition和animation的区别?

20.js的new 操作符做了哪些事情?

21.异步加载js的方法?

22.Ajax解决浏览器缓存问题

23.Babel原理?将ES6语法转ES5,对不兼容ES6的浏览器进行兼容

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容