当前位置: 首页 > Web前端 > vue.js

VUE面试题分享-优秀的程序员

时间:2023-03-31 16:58:41 vue.js

VUE面试题分享-优秀的程序员,现在前端面试会有很多VUE面试题,Vue框架部分小编整理了几个面试题比较高频,希望对正在面试的你有所帮助。也许这个问题会出现在下一次面试中。Web前端面试中关于VUE的面试题(含答案)1MVC、MVP、MVVM的理解MVC模式的意思,软件可以分为三个部分。视图(View):用户界面。控制器(Controller):业务逻辑。模型(Model):数据存储。各部分之间的通信如下。View向Controller发送指令,Controller完成业务逻辑后,要求Model改变状态,Model向View发送新数据,用户得到反馈,所有通信都是单向的(逆时针方向)。MVP模式将Controller重命名为Presenter,并改变通信方向。各个部分之间的通信是双向的(顺时针方向)。View和Model之间没有联系,都是通过Presenter传递的。View非常瘦,不部署任何业务逻辑。叫做“被动视图”(PassiveView),也就是没有主动性,而Presenter很厚,所有的逻辑都部署在那里。MVVM模式将Presenter更名为ViewModel,这与MVP模式基本完全相同。唯一的区别是它使用双向绑定(数据绑定):View中的更改会自动反映在ViewModel中,反之亦然。Angular和Ember都遵循这种模式。2如何理解Vue异步进行DOM更新?Vue异步执行DOM更新。只要观察到数据变化,Vue就会启动一个队列,并缓冲在同一个事件循环中发生的所有数据变化。如果同一个观察者被多次触发,它只会被推入队列一次。这种缓冲时的重复数据删除对于避免不必要的计算和DOM操作很重要。然后,在下一个事件循环节拍中,Vue刷新队列并执行实际的(去重)工作。Vue内部尝试使用原生的Promise.then和MessageChannel来实现异步队列。如果执行环境不支持,它将使用setTimeout(fn,0)代替。例如,当您设置vm.someData='newvalue'时,组件不会立即重新渲染。刷新队列时,当事件循环队列清空时,组件将在下一个滴答时更新。大多数时候我们不需要关心这个过程,但是如果你想在DOM状态更新后做一些事情,它可能会很棘手。虽然Vue.js通常鼓励开发人员以“数据驱动”的方式思考并避免直接接触DOM,但有时我们会这样做。要等待Vue在数据更改后完成更新DOM,请在数据更改后立即使用Vue.nextTick(callback)。这样回调函数就会在DOM更新完成后被调用。3如何跟踪变化深入响应式原理当你将一个普通的JavaScript对象传递给Vue实例的data选项时,Vue会遍历这个对象的所有属性,并使用Object.defineProperty将这些属性全部传递给getter/setter.Object.defineProperty是ES5中无法shimmed的特性,这也是Vue不支持IE8及以下浏览器的原因。这些getter/setter对用户是不可见的,但在内部它们允许Vue跟踪依赖关系,在访问和修改属性时通知更改。这里需要注意的问题是浏览器控制台打印数据对象时getter/setter的格式不同,所以可能需要安装vue-devtools以获得更友好的检查界面。每个组件实例都有一个对应的watcher实例对象,在组件渲染过程中会将该属性记录为一个依赖,然后在依赖的setter被调用时,会通知watcher重新计算,从而引起其关联的组件要被更新。观察者订阅可观察对象,当可观察对象发布事件时,观察者的行为是直接被调度的,所以这里观察者和可观察对象实际上是有依赖关系的。4谈谈对VirtualDOM算法的理解?它包括几个步骤:1.用JavaScript对象结构来表示DOM树的结构,然后用这棵树构建一个真正的DOM树并插入到文档中;2.当状态发生变化时,重建一棵新的对象树,然后将新树与旧树进行比较,记录两棵树的差异;3.将步骤2中记录的差异应用到步骤1中构建的真实DOM树中,视图将被更新。VirtualDOM本质上是JS和DOM之间的缓存。它可以比作CPU和硬盘。由于硬盘很慢,我们在它们之间添加了一个缓存;由于DOM太慢了,我们在他们的JS和DOM之间添加了一个缓存。CPU(JS)只对内存(VirtualDOM)进行操作,最后将变化写入硬盘(DOM)。