Skip to content
文章目录

面试相关

基础

网络

vue

nextTick 在哪里使用?原理是?

作用: nextTick 用于将传入的回调函数延迟到下次 DOM 更新之后执行,主要用于获取最新的 DOM 数据

原理: nextTick 中的回调函数并非立刻执行,而是采用微任务队列的方式,统一执行

nextTick 是用来获取最新的 dom 数据的,为什么有时候能拿到有时不能拿到?

一般而言 nextTick 是基于微任务的,而如果对 dom 数据的修改是在宏任务中进行,然后再试图在 nextTick 中获取, 那肯定是不行的

比较绕的例子:nexttick 是怎么可以获取到更新后的 dom 的_记一个 nextTick 引发的 bug, 为啥 nextTick 能拿到更新后的 dom

哪些是宏任务:setTimeout, 网络请求的回调和 ajax 请求的取消

注意:

  • 纯 js 的 dom 更新是立刻执行,且能立刻获取到结果的
  • js 的事件函数是立刻执行的。看下面例子的控制台输出

vue 如何检测数组变化

  • vue2 对数组的操作方法进行劫持
  • vue3 是 proxy 方式,可以直接监听到数据变化

vue2 和 vue3 有哪些变化

  • 改用 proxy 代替Object.defineProperty, 可以直接监听数组变化,也可以直接监听到普通对象中新增的属性
  • hook 代替 mixin
  • 去除了原本的事件总线,需要使用插件实现
  • 支持多个 v-model
  • 多出了 composition api

ref 与 reactive 的区别

都是将变量转换为响应式数据。ref 用于普通的数据类型,reactive 用于对象数据类型。ref 内部实际也是将普通数据类型转换为对象数据类型,所以我们使用的时候才会需要写.value

v-model 原理

监听 prop 属性变量的修改事件,然后在修改事件的回调函数中完成 prop 属性变量的值修改

什么是 MVVM

MVVM 是一个软件架构设计模式, 源于 MVC,使用 VM 替换了 MVC 中 C 也就是控制器。VM 也即ViewModel. VM 的作用就是将视图与数据的变化关联起来,vue 实际就是起到 VM 的作用

父子组件生命周期函数执行顺序

加载渲染过程:

父组件 beforeCreate
父组件 created
父组件 beforeMount
子组件 beforeCreate
子组件 created
子组件 beforeMount
子组件 mounted
父组件 mounted

父组件 mounted 之后,不保证一定能拿到 dom 数据,dom 数据的获取要在 nextTick 中进行

更新过程:

父组件 beforeUpdate
子组件 beforeUpdate
子组件 updated
父组件 updated

销毁过程:

父组件 beforeDestroy
子组件 beforeDestroy
子组件 destroyed
父组件 destoryed

如何解决初始页闪屏问题

使用 css 让 vue 挂载的根节点初始为隐藏状态

如何优化首页加载或者说首页白屏问题

分析首页资源加载情况,以及打包产物,看首页是否加载了不需要的资源。然后优化打包结果。

第三方资源 CDN 化

给 vue 挂载的根元素加入 loading 效果

打包工具

为什么要使用异步组件

异步组件会单独打包成一个组件,且只有在用到的时候,才会加载,因此可以减少原本引入的资源文件的大小

滴滴前端一面常考 vue 面试题

六年前端面试报告

滴滴前端一面常考手写面试题整理