1. 谈一下你对 MVVM 原理的理解

2. 响应式数据的原理是什么?

3. Vue 中如何检测数组变化?

4. 为何 Vue 采用异步渲染?

5. nextTick 的实现原理?

6. Vue 中 Computed 的特点

7. Watch 中 deep: true 是如何实现的?

8. Vue 组件的生命周期

生命周期钩子 触发时机 常见用途
beforeCreate 实例初始化后,数据观测前 无(无法访问data、methods)
created 实例创建完成,数据观测完成 数据请求、初始化操作(无 DOM)
beforeMount 挂载开始前,render首次调用 预处理数据
mounted 实例挂载完成,vm.$el替换 DOM DOM 操作(如初始化插件)
beforeUpdate 数据更新后,虚拟 DOM 渲染前 进一步修改数据(不触发额外渲染)
updated 虚拟 DOM 渲染与打补丁后 依赖 DOM 的操作(避免在此修改数据)
beforeDestroy 实例销毁前 清理定时器、解绑事件($off)
destroyed 实例销毁后 最终资源释放

9. ajax 请求放在哪个生命周期中?

10. 何时需要使用 beforeDestroy?

11. Vue 中模板编译原理

12. v-if 和 v-show 的区别

维度 v-if v-show
渲染逻辑 条件不成立时,不生成 DOM 节点 始终生成 DOM,通过display样式控制显示 / 隐藏
性能消耗 切换时销毁 / 重建节点(初始渲染成本低,切换成本高) 仅切换样式(初始渲染成本高,切换成本低)
适用场景 条件少变(如权限判断) 条件频繁切换(如 tab 切换)

13. 为什么 v-for 和 v-if 不能连用?

14. 用 vnode 描述一个 DOM 结构

15. diff 算法的时间复杂度

16. Vue 中 diff 算法原理