• Vue 面试重点真题演练


    v-show 和 v-if 的区别?

    • v-show 通过 CSS display 控制显示和隐藏

    • v-if 组件真正的渲染和销毁,而不是显示和隐藏

    • 频繁切换显示状态用 v-show,否则用 v-if

    为何在 V-for 中使用 key?

    • 必须用 key,而且不能使用 index 和 random

    • diff 算法中通过 tag(标签名) 和 key 来判断,是否是 sameNode(oldkey,newkey)

    • 减少渲染次数,提升渲染性能

    描述 Vue 组件的生命周期(父子组件)

    • 单组件生命周期图

    • 父子组件生命周期关系

    父组件首先都是先 beforeXXXX 生命周期,等子组件(单组件)的生命周期完成,才执行下一阶段的生命周期函数

    Vue 组件如何通讯?(常见)

    • 父子组件 props 和 $emit

    • 自定义事件 event.$on(注册) event.$off(清除) event.$emit(接收)

    • Vuex

    描述组件渲染和更新的过程

    重点看懂这张图,从响应式、虚拟 DOM、diff 算法、模板编译入手

    双向数据绑定 v-model 的实现

    • input 元素的 value = this.name

    • 绑定 input 数据 this.name = $event.target.value

    • data 更新触发 re-render

    对 MVVM 的理解

    • 视图(View):用户界面
    • 模型(Model):数据保存
    • 视图模型(View Model):业务逻辑,双向数据绑定

    computed 有何特点?

    • 缓存,data 不变不会重新计算属性

    • 提高性能

    为何组件 data 必须是一个函数?

    因为组件本质是一个 class ,调用组件就是对组件的实例化,如果不是一个函数,那么多次调用组件就会共用同一 data,造成污染,return 一个函数就发生了闭包,使得每个组件的实例都是其私有的数据

    ajax 请求一个建议放在哪个生命周期?

    • mounted

    • JS 是单线程的,ajax 异步获取数据

    • 放在 mounted 之前没有用,只会让逻辑更混乱(学到了,实习我项目中都是放 created 中,尴尬)

    多个组件有相同的逻辑,如何抽离?

    • mixin 混入

    何时要使用异步组件?

    • 加载大组件时

    • 路由异步加载时

    何时使用 keep-alive?

    • 缓存组件,不需要重复渲染

    • 比如多个 tab 页的切换,(保存页面状态)

    • 优化性能

    何时需要使用 beforeDEstory?

    • 接触自定义事件 event.$off

    • 清除定时器

    • 解除 DOM 自定义事件

    什么是作用域插槽?

    将插槽中的数据传递给使用 slot 的组件中使用

    Vuex 中 actions 和 mutation 有何区别?

    • action 中处理异步,mutation 不可以,只能处理同步

    • mutation 做原子操作(只操作数据)

    • action 可以整合多个 mutation

    Vue-router 常用的路由模式

    • hash 默认 window.onhashchange

    • H5 history(需要服务端支持) history.pushState window.onpopstate

    如何配置 Vue-router 异步加载?

    const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue')

    请用 vnode 描述一个 DOM 结构

    格式参考这篇博客

    监听 data 变化的核心 API 是什么?

    • Object.defineProperty

    • 深度监听(对象) 递归到底 计算量大

    • 无法监听新增属性/删除属性(Vue.set Vue.delete)

    • 无法原生监听数组,需特殊处理,重写 push pop 等方法,实现监听

    • Vue 3.0 Proxy 可以原生支持监听数组变化

    请描述响应式原理?

    • 监听 data 变化过程

    • 组件渲染和更新的流程

    diff 算法的时间复杂度

    • O(n)

    • 在原O(n^3)上做了调整优化:只比较同级;tag 不相同,直接销毁重建;tag 和 key 相同就不再对比

    简述 diff 算法的过程

    • patch(elem,vnode) 和 pacth(vnoode,newVnode)

    • patchVnode、addVnodes、removerVnodes

    • updateChildren(key 的重要性)

    Vue 为何是异步渲染?$nextTick 有何用?

    • 异步渲染(以及合并 data 修改),汇总 data 修改,一次性更新,提高渲染性能

    • $nextTick 在 DOM 更新完之后触发回调,此时可以拿到更新后的 DOM 元素

    Vue 常见性能优化

    • 合理使用 v-show 和 v-if

    • 合理使用 computed

    • v-for 时加 key,避免和 v-if 同时使用

    • 自定义数据、DOM 事件要及时销毁(内存泄漏)

    • 合理使用异步组件

    • 合理使用 keep-alive

    • data 层级不要太深(深度监听计算量大)

    • 使用 SSR,提升首屏的加载速度

  • 相关阅读:
    企业nginx应用实例(功能拆分记录)
    Squid代理服务器的安装与配置
    关于mysql主从架构master宕机后,请求转移问题解决办法
    记一次innobackupex备份恢复数据库过程
    elasticsearch6.6及其插件安装记录(较详细)
    redis一主二从加哨兵
    nginx反向代理proxy_pass的问题
    spring程序打包war,直接通过-jar启动,并指定spring.profiles.active参数控制多环境配置
    Debian下配置防火墙iptables
    内连接和外连接
  • 原文地址:https://www.cnblogs.com/cqkjxxxx/p/13457247.html
Copyright © 2020-2023  润新知