2021最流行前端程序员面试题

1、介绍下Promise.all使用、原理实现及错误处理

例:leta=Promise.all([a1,a2,a3,a4]);

Promise.all方法接受一个数组作为参数,a1,a2,a3,a4都是Promise实例,如果不是,就会先调用Promise.resolve方法,将参数转为Promise实例,再进行处理。

2.Vue/React项目中key的作用

key就是一个优化,用来高效的渲染虚拟DOM。

vue和react都是采用diff算法来对比新旧虚拟节点,从而更新节点。在vue的diff函数中(建议先了解一下diff算法过程,此处不详解)。

在交叉对比中,当新节点跟旧节点头尾交叉对比没有结果时,会根据新节点的key去对比旧节点数组中的key,从而找到相应旧节点(这里对应的是一个key=index的map映射)。如果没找到就认为是一个新增节点。而如果没有key,那么就会采用遍历查找的方式去找到对应的旧节点。一种一个map映射,另一种是遍历查找。相比而言。map映射的速度更快。

3.什么是防抖和节流?有什么区别?如何实现?

你是否在日常开发中遇到一个问题,在滚动事件中需要做个复杂计算或者实现一个按钮的防二次点击操作。

防抖动和节流本质是不一样的。防抖动是将多次执行变为最后一次执行,节流是将多次执行变成每隔一段时间执行

这些需求都可以通过函数防抖动来实现。尤其是第一个需求,如果在频繁的事件回调中做复杂计算,很有可能导致页面卡顿,不如将多次计算合并为一次计算,只在一个精确点做操作

防抖和节流的作用都是防止函数多次调用。区别在于,假设一个用户一直触发这个函数,且每次触发函数的间隔小于wait,防抖的情况下只会调用一次,而节流的情况会每隔一定时间(参数wait)调用函数

对于按钮防点击来说的实现:如果函数是立即执行的,就立即调用,如果函数是延迟执行的,就缓存上下文和参数,放到延迟函数中去执行。一旦我开始一个定时器,只要我定时器还在,你每次点击我都重新计时。一旦你点累了,定时器时间到,定时器重置为null,就可以再次点击了。

对于延时执行函数来说的实现:清除定时器ID,如果是延迟调用就调用函数

4.什么是跨域?为什么浏览器要使用同源策略?你有几种方式可以解决跨域问题?

因为浏览器出于安全考虑,有同源策略。也就是说,如果协议、域名或者端口有一个不同就是跨域,Ajax请求会失败。

那么是出于什么安全考虑才会引入这种机制呢?其实主要是用来防止CSRF攻击的。简单点说,CSRF攻击是利用用户的登录态发起恶意请求。

也就是说,没有同源策略的情况下,A网站可以被任意其他来源的Ajax访问到内容。如果你当前A网站还存在登录态,那么对方就可以通过Ajax获得你的任何信息。当然跨域并不能完全阻止CSRF。

5.TCP三次握手

客服端发c起请求连接服务器端s确认,服务器端也发起连接确认客服端确认。

第一次握手:客服端发送一个请求连接,服务器端只能确认自己可以接受客服端发送的报文段

第二次握手:服务端向客服端发送一个链接,确认客服端收到自己发送的报文段

第三次握手:服务器端确认客服端收到了自己发送的报文段

好了,就给大家罗列这么多,内容虽然不多,但是重中之重,一定要掌握哦




转载请注明:http://www.aierlanlan.com/grrz/2592.html