2021 面试题
1、js 的事件循环机制(结合react的setState和vue的nextTick)
*微任务的优先级要高:
micro task事件:Promises(浏览器实现的原生Promise)、MutationObserver、process.nextTick
macro task事件:setTimeout、setInterval、setImmediate、I/O、UI rendering
macrotask按顺序执行,浏览器的ui绘制会插在每个macrotask之间
microtask按顺序执行,会在如下情况下执行:
每个callback之后,只要没有其他的JS在主执行栈中
每个macrotask结束时
在 Vue.js 里是数据驱动视图变化,由于 JS 执行是单线程的,在一个 tick 的过程中,它可能会多次修改数据,但 Vue.js 并不会傻到每修改一次数据就去驱动一次视图变化,它会把这些数据的修改全部 push 到一个队列里,然后内部调用 一次 nextTick 去更新视图,所以数据到 DOM 视图的变化是需要在下一个 tick 才能完成。这便是我们为什么需要vue.nextTick.
这样一个功能和事件循环非常相似,在每个 task 运行完以后,UI 都会重渲染,那么很容易想到在 microtask 中就完成数据更新,当前 task 结束就可以得到最新的 UI 了。反之如果新建一个 task 来做数据更新,那么渲染就会进行两次。
https://www.jianshu.com/p/7fe2cb3ea2e9?from=timeline
2、闭包和V8引擎垃圾回收机制
https://www.jianshu.com/p/17a974d4d0d7
3、原型、原型链,常见的继承方式,构造函数和class 的区别(https://zhuanlan.zhihu.com/p/42409367)
4、http 和websocket、跨域问题(websocket 不存在跨域问题)
5、小程序 的微信登陆授权、微信支付流程
6、Vue 和React的区别,自己实现一个 vuex 的思路,vue-router的实现原理
7、虚拟dom 的diff算法为什么采用深度优先(https://www.jianshu.com/p/bff70b786bb6)
8、常用的ES6方法,let const 是否存在变量提升,箭头函数的this 指向问题(箭头函数中的this指向的是定义时的this,而不是执行时的this),剖析 Promise的实现过程
9、最近使用的技术栈和项目,项目中封装了哪些组件和方法,遇到过什么问题
参考:https://www.cnblogs.com/chenwenhao/p/11258895.html#_label2