2021 面试题

1、js 的事件循环机制(结合react的setState和vue的nextTick)

     

*微任务的优先级要高:

micro task事件:Promises(浏览器实现的原生Promise)MutationObserverprocess.nextTick

macro task事件:setTimeoutsetIntervalsetImmediateI/OUI 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

posted @ 2021-01-10 11:18  伟笑  阅读(15)  评论(0编辑  收藏  举报