前端—每天5道面试题(6)
每天背5道前端面试题,希望我可以在远方的终点见到你
1、谈谈JS 异步解决方案的发展历程以及优缺点。
1、回调函数(callback) 优点:解决了同步的问题(只要有一个任务耗时很长,后面的任务都必须排队 等着,会拖延整个程序的执行。) 缺点:回调地狱,不能用 try catch 捕获错误,不能 return 。
2、Promise 优点:解决了回调地狱的问题 缺点:无法取消 Promise ,错误需要通过回调函数来捕获 。
3、Generator 特点:可以控制函数的执行,可以配合 co 函数库使用。
4、Async/await 优点:代码清晰,不用像 Promise 写一大堆 then 链,处理了回调地狱的问题 缺点:await 将异步代码改造成同步代码,如果多个异步操作没有依赖性而使 用 await 会导致性能上的降低。
2、简单讲解一下 http2 的多路复用
HTTP2 采用二进制格式传输,取代了 HTTP1.x 的文本格式,二进制格式解析更 高效。 多路复用代替了 HTTP1.x 的序列和阻塞机制,所有的相同域名请求都通过同一 个 TCP 连接并发完成。 在 HTTP1.x 中,并发多个请求需要多个 TCP 连接,浏览器为了控制资源会有 6-8 个 TCP 连接都限制。
HTTP2 中 同域名下所有通信都在单个连接上完成,消除了因多个 TCP 连接而带来的延 时和内存消耗。 单个连接上可以并行交错的请求和响应,之间互不干扰。
3、如果 A 与 B 建立了正常连接后,从未相互发过数据,这个时候 B 突然机器重 启,问 A 此时处于 TCP 什么状态?如何消除服务器程序中的这个状态?
因为 B 会在重启之后进入 tcp 状态机的 listen 状态,只要当 a 重新发送一个数据 包(无论是 syn 包或者是应用数据),b 端应该会主动发送一个带 rst 位的重置 包来进行连接重置,所以 a 应该在 syn_sent 状态。
4、React 中 setState 什么时候是同步的,什么时候是 异步的?
1、由 React 控制的事件处理程序,以及生命周期函数调用 setState 不会同步更 新 state 。
2、React 控制之外的事件中调用 setState 是同步更新的。比如原生 js 绑定的事 件,setTimeout/setInterval 等。
5、聊聊 Vue 的双向数据绑定,Model 如何改变 View, View 又是如何改变 Model 的?
1、从 M 到 V 的映射(Data Binding),这样可以大量节省你人肉来 update View 的代码。
2、从 V 到 M 的事件监听(DOM Listeners),这样你的 Model 会随着 View 触发事件而改变。