当前位置: 首页 > news >正文

vue2 面试题带答案,万字总结

1. 什么是 vue

Vue 是一套用于构建用户界面的渐进式框架。Vue.js 的主要特点:渐进式框架、声明式渲染、组件化、响应式数据绑定等;

2、MVC 和 MVVM 区别
  • MVC 是模型(model)-视图(view)-控制器(controller),控制器负责视图和模型的交互。

  • MVVM,是模型(model)-视图(view)-viewModel,viewModel 双向绑定。

  • MVVM 与 MVC 区别:MVVM 实现了 View 和 Model 的同步。MVC 需要通过控制器中间控制。

3. Vue 的响应式原理?

Vue 的响应式系统利用了 Object.defineProperty() 方法来把对象的属性转成 getter 和 setter。通过这些 getter/setter,Vue 可以追踪数据的变化,并在数据变化时更新视图。

4. Vue 2 的生命周期
  • new Vue() 构造函数生成 vue 实例;
  • beforeCreate:事件和生命周期钩子初始化;
  • created:实例已经创建完成,data 初始化(props => methods =>data => computed => watch);数据请求在这里,速度快,loading 少。
  • beforeMount:编译模板到 render 函数,生成虚拟 dom;
  • mounted:渲染真实 DOM;
  • beforeUpdate:数据有更新,且新生成的虚拟 DOM 没有挂载(渲染)到页面上;
  • updated:虚拟 dom 以最小开支重新渲染 dom;
  • activated:对于<keep-alive>包裹的组件,当组件被激活时调用。
  • deactivated:对于<keep-alive>包裹的组件,当组件被停用时调用。
  • beforeDestroy:在 Vue 实例销毁之前调用。清除定时器、取消网络请求、移除事件监听器等,以确保在组件销毁时不会产生内存泄漏等问题。
  • destroyed:vue 实例中的数据不可用了。执行一些最终的清理工作,如释放内存、销毁第三方插件。
5. 父子组件生命周期执行顺序
  • 1、加载过程:父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate -> 子 created -> 子 beforeMount -> 子 mounted -> 父 mounted
  • 2、更新过程:父 beforeUpdate -> 子 beforeUpdate -> 子 updated -> 父 updated
  • 3、销毁过程:父 beforeDestroy -> 子 beforeDestroy -> 子 destroyed -> 父 destroyed
6. vue 组件传值
  • props 和 this.$emit(“”)

  • inheritAttrs,Son 页面 props 没有的数据会默认绑定到根元素上面

  • a t t r s , attrs, attrslisteners 将 parent 的属性和方法向下传递

  • provide/inject 祖先组件向其所有子孙后代注入一个依赖

  • EventBus 不支持响应式:this. E v e n t B u s . EventBus. EventBus.emit(a,…),this. E v e n t B u s . EventBus. EventBus.on(a,…)

  • this. p a r e n t 父组件 , t h i s . parent父组件,this. parent父组件,this.children 子组件

  • vm. r o o t : 组件树的根实例 , 如果没有父实例 , v m . root:组件树的根实例,如果没有父实例,vm. root:组件树的根实例,如果没有父实例,vm.root 指向自己.

  • vm.$refs

  • vuex

7、为什么组件的 data 必须是个函数?

如果是对象,多个组件共用了一份 data,一变都变;函数返回对象的独立的拷贝,数据独立;

8. 什么是 Vue 的单向数据流?

数据总是从父组件传到子组件,子组件不能修改父组件传过来的数据,有利于数据维护。

9. v-model 双向绑定原理
  • 当输入的值发生变化时,会触发 input 事件,修改当前 value 值,从而实现了从 view 到 model 的更新。
  • 反之,当 Vue 实例中的数据属性发生变化时,v-model 也会自动更新输入元素的值,实现了从 model 到 view 的更新。
10. 什么是计算属性(computed)和侦听属性(watch)?
  • 计算属性:基于已有的数据,按需计算一个新值,如果依赖的值没有变化,则不再重新计算。
  • 侦听属性:用于观察数据变动,可以在数据变化时执行异步或开销较大的操作。
11. Vue 2 中 computed 属性和 methods 方法有什么区别?
  • 计算属性:是基于其依赖进行缓存的,只有当依赖发生变化时才会重新计算。更适合展示用的数据转换。
  • 方法:每次调用都会执行函数内的代码,不会被缓存,每次调用都会重新执行。
12. key 的作用?

key 的设置有助于 diff 算法更高效地识别哪些元素发生了变化。如果每个元素都有唯一的 key,Vue 可以快速确定哪些元素需要移动、添加或删除,从而减少不必要的 DOM 操作。

13. Vue 的 v-if 和 v-show 有什么区别?
  • v-if:条件渲染,只有条件为真时,才会在 DOM 中创建或销毁元素。
  • v-show:不进行 DOM 的创建与销毁,而是通过 CSS 的 display 属性来控制元素的可见性,所有情况都会被渲染到 DOM 中。
14. Vue 的指令(Directive)是什么?有哪些常用的指令?
  • v-bind:动态绑定属性。
  • v-model:表单元素的双向数据绑定。
  • v-for:列表渲染。
  • v-ifv-elsev-show:条件渲染。
  • v-once:只渲染一次,数据变化也不在重新渲染
15. 修饰符

v-model 修饰符

  • .lazy 将文本框的数据绑定事件改为 change
  • .trim 去掉文本框内两边的空格
  • .number 限制文本框输入的字符为数字

事件修饰符

  • .stop 防止事件冒泡
  • .prevent 取消默认事件
  • .capture 捕获事件
  • .self 设置事件触发源是本身
  • .once 设置只能执行一次的事件
  • .passive 告诉浏览器你不想阻止事件的默认行为

键盘修饰符

  • .enter 回车键
  • .tab Tab 键
  • .delete
  • .esc
  • .space
  • .up 键盘上键
  • .down 键盘下键
  • .left 键盘左键
  • .right 键盘右键

鼠标修饰符

  • .left
  • .right
  • .middle

修饰键

  • .ctrl
  • .alt
  • .shift
  • .meta
16. 如何在 Vue 组件中使用插槽(slot)?
  • 默认插槽:直接在子组件模板中定义插槽,父组件可以在对应位置插入内容。
  • 具名插槽:通过 slot 属性定义具名插槽,父组件使用 v-slot 绑定具名插槽。
  • 作用域插槽:通过 slot-scope 属性访问子组件的数据,父组件可以基于子组件的数据动态生成内容。
17. 什么是动态组件?

动态组件就是在组件之间切换的时候,保持这些组件的状态,以避免反复重新渲染导致的性能问题。

<keep-alive><component v-bind:is="currentTabComponent"></component>
</keep-alive>
  • include 和 exclude 属性, include 表示只有名称匹配的组件会被缓存,exclude 表示任何名称匹配的组件都不会被缓存 ,其中 exclude 的优先级比 include 高;
  • 两个钩子函数 activated 和 deactivated ,当组件被激活时,触发钩子函数 activated,当组件被移除时,触发钩子函数 deactivated。
18. 什么是异步组件

只在需要的时候才加载一个模块。

  • 异步组件和 webpack 的 code-splitting 功能一起配合使用
  • 工厂函数中返回一个 Promise
  • 局部注册:返回 Promise 的函数
//异步组件和 webpack 的 code-splitting 功能一起配合使用
Vue.component('async-webpack-example', function (resolve) {// 这个特殊的 `require` 语法将会告诉 webpackrequire(['./my-async-component'], resolve)
})//工厂函数中返回一个 Promise
Vue.component('async-webpack-example',// 这个动态导入会返回一个 `Promise` 对象。() => import('./my-async-component')
)//当使用局部注册的时候,你也可以直接提供一个返回 Promise 的函数:components: {'my-component': () => import('./my-async-component')}
19.组件循环引用问题
  • 递归组件:确保递归调用条件(例如使用 v-if)。
  • 组件之间的循环引用:1 共享的逻辑或数据提升到父组件,2 用动态导入(import())来延迟加载模块
20.Vue 如何检测数组变化

考虑性能原因数组没有用 defineProperty 对数组的每一项进行拦截,而是选择对 7 种数组(push,shift,pop,splice,unshift,sort,reverse)方法进行重写.数组的索引和长度不会监听。

21. 如何确保数组的修改是响应式的?
  • Vue.set 向响应式对象中添加一个 property
  • 替换整个数组
22. nextTick 你用过吗?

nextTick 是用于获取更新后的 DOM。

Vue 在更新 DOM 时是异步执行的。只要侦听到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中。如果同一个 watcher 被多次触发,只会被推入到队列中一次。

23. Vue 事件绑定?

原生事件是通过 addEventListener 绑定的, Vue 组件使用$on ,如果要在 vue 组件上使用原生事件,需要加.native 修饰符。vue 的事件是基于发布订阅模式的,实例方法:

  • vm.$on( event, callback ):注册自定义事件。
  • vm.$emit( eventName, […args] ):执行事件
  • vm.$off( [event, callback] ):移除自定义事件监听器。
  • vm.$once( event, callback ):监听一个自定义事件,但是只触发一次。一旦触发之后,监听器就会被移除。

vue-router

vue-router 是 Vue.js 官方的路由管理器。通过不同的 URL 路径来加载不同的组件,实现页面的切换效果。

24.vue-router 路由模式有几种?
  • hash: 使用 url 的 # 值来作路由, hashchange 事件来监听 hash 值的变化
  • history : 依赖 HTML5 History API ,主要有 history.pushState()history.replaceState()方法,window.onpopstate = (event) => {}事件。
25.路由传参
  • url 传参: this.$route.query.id
  • post 传参: this.$route.params.id
26.说说 vue-router 完整的导航解析流程是什么?
  • 1.导航被触发;
  • 2.在失活的组件里调用 beforeRouteLeave 守卫;
  • 3.调用全局 beforeEach 守卫;
  • 4.在复用组件里调用 beforeRouteUpdate 守卫;
  • 5.调用路由配置里的 beforeEnter 守卫;
  • 6.解析异步路由组件;
  • 7.在被激活的组件里调用 beforeRouteEnter 守卫;
  • 8.调用全局 beforeResolve 守卫;
  • 9.导航被确认;
  • 10.调用全局的 afterEach 钩子;
  • 11.DOM 更新;
  • 12.用创建好的实例调用 beforeRouteEnter 守卫中传给 next 的回调函数。
27.vue-router 如何响应路由参数的变化?
  • 1、使用 watch 监听
  • 2、向 router-view 组件中添加 key <router-view :key="$route.fullPath"></router-view>
28.怎么实现动态加载路由?

vue-router 的 addRoutes 方法

29.怎么实现路由懒加载?

箭头函数的方法 component:()=>import('组件路径')

Vuex

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

30. vuex 执行流程
  • 组件触发 Actions。
  • Actions 执行异步操作后调用 Mutations 修改 State。
  • State 变化触发组件重新渲染。

vue2 性能优化

  • 使用异步组件,减少初始加载的体积
  • 使用路由懒加载,减少初始加载的体积
  • 尽量使用计算属性而不是常规方法
  • 正确使用 v-if 和 v-show
  • 使用 key 优化列表渲染
  • 声明式事件处理,减少不必要的渲染
  • 使用 v-once
  • 选择合适的生命周期钩子处理数据
  • 尽量减少 watch 使用,使用计算属性来替代
  • 使用 Object.freeze()冻结对象
  • 使用 keep-alive 缓存组件
  • 事件,定时器等闭包优化

点个关注:谢谢!

相关文章:

vue2 面试题带答案,万字总结

1. 什么是 vue Vue 是一套用于构建用户界面的渐进式框架。Vue.js 的主要特点&#xff1a;渐进式框架、声明式渲染、组件化、响应式数据绑定等&#xff1b; 2、MVC 和 MVVM 区别 MVC 是模型(model)&#xff0d;视图(view)&#xff0d;控制器(controller)&#xff0c;控制器负责…...

git的常用用法(最简精华版)

一、工作区域&#xff08;工作区&#xff0c;暂存区&#xff0c;本地仓库&#xff09; 1、工作区 当前正在使用的文件 2、暂存区 已使用add命令提交的工作区的文件&#xff0c;会保存到暂存区 3、本地仓库 已使用commit命令提交的暂存区的文件&#xff0c;会保存到本地仓库。…...

哥德巴赫猜想渐行渐远

我现在的工作&#xff0c;表明经典分析可能出了问题&#xff0c;如此则连Vinogradov的三素数定理都不成立了&#xff0c;更别说基于L-函数方程的陈氏定理“12”了。事实上即使L-函数方程成立&#xff0c;由于我指出Siegel定理不成立&#xff0c;陈景润和张益唐的工作就不成立。…...

Spring Boot应用开发实战:构建高效、可维护的Web应用

Spring Boot应用开发实战:构建高效、可维护的Web应用 在当今快速迭代的软件开发环境中,Spring Boot凭借其“约定优于配置”的理念,迅速成为Java开发者构建微服务及Web应用的首选框架。它不仅简化了Spring应用的初始搭建以及开发过程,还通过自动配置、嵌入式服务器等特性,…...

keep-alive多级页面缓存实现

文章目录 keep-alive多级页面缓存实现只适用于页面是否缓存状态不变的情况对于上面的问题提供一种解决方案 keep-alive多级页面缓存实现 只适用于页面是否缓存状态不变的情况 网上有一种很普遍的教程&#xff0c;不使用keep-alive的include属性&#xff0c;而是通过在路由表中…...

ks 小程序sig3

前言 搞了app版的快手之后 &#xff08;被风控麻了&#xff09; 于是试下vx小程序版的 抓包调试 小程序抓包问题 网上很多教程&#xff0c; github也有开源的工具代码 自行搜索 因为我们需要调试代码&#xff0c;所以就用了下开源的工具 &#xff08;可以用chrome的F12功能&a…...

图论之构造完全图

题目 2398: 信息学奥赛一本通T1489-构造完全图 时间限制: 2s 内存限制: 192MB 提交: 16 解决: 9 题目描述 对于完全图 G&#xff0c;若有且仅有一棵最小生成树为 T&#xff0c;则称完全图 G 是树 T 扩展出的。 给你一棵树 T&#xff0c;找出 T 能扩展出的边权和最小的完全图 G…...

RDD触发算子:一些常用的触发算子(count、foreach、saveAsTextFile、first)

文章目录 1、count算子功能语法 2、foreach算子功能语法 3、saveAsTextFile算子功能语法 4、first算子功能语法举例 1、count算子 功能 统计RDD集合中元素的个数&#xff0c;返回一个int值 语法 def count(self) -> int2、foreach算子 功能 对RDD中每个元素调用一次参数中…...

搭建RAGFlow

RAGFlow 是一款基于深度文档理解构建的开源 RAG&#xff08;Retrieval-Augmented Generation&#xff09;引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程&#xff0c;结合大语言模型&#xff08;LLM&#xff09;针对用户各类不同的复杂格式数据提供可靠…...

css中的box-sizing,记录

border-box&#xff1a;最终高度为height&#xff0c;默认包含padding border等属性 content-box&#xff1a;box-sizing默认值&#xff0c;最终大小为heightpaddingborder 等...

使用useCallback引发对闭包的理解

一、先简单介绍一下闭包: 闭包是 JavaScript 中的重要概念&#xff0c;它指的是一个函数可以“记住”并访问其词法作用域&#xff0c;即使在这个函数的外部被执行。简单来说&#xff0c;闭包是由函数及其相关的环境组合而成的。 闭包的特性 函数内部可以访问外部变量: 闭包…...

gvim添加至右键、永久修改配置、放大缩小快捷键、ctrl + c ctrl +v 直接复制粘贴、右键和还原以前版本(V)冲突

一、将 vim 添加至右键 进入安装目录找到 vim91\install.exe 管理员权限执行 Install will do for you:1 Install .bat files to use Vim at the command line:2 Overwrite C:\Windows\vim.bat3 Overwrite C:\Windows\gvim.bat4 Overwrite C:\Windows\evim.bat…...

腾讯云-COS

COS 对象存储 是一种可扩展的云端数据存储服务。它适用于存储任意类型的文件&#xff0c;并且可以针对这些文件进行访问控制。 CORS 跨域资源共享 是一种机制&#xff0c;它使用额外的HTTP头来告诉浏览器允许一个域上的Web应用请求另一个域上的资源。当需要从一个域名下的网页向…...

蓝桥杯每日真题 - 第16天

题目&#xff1a;&#xff08;卡牌&#xff09; 题目描述&#xff08;13届 C&C B组C题&#xff09; 解题思路&#xff1a; 题目分析&#xff1a; 有 n 种卡牌&#xff0c;每种卡牌的现有数量为 a[i]&#xff0c;所需的最大数量为 b[i]&#xff0c;还有 m 张空白卡牌。 每…...

基因组之全局互作热图可视化

引言 PlotHiC 是一个专为 Hi-C 数据可视化分析而设计的 Python 包。Hi-C 技术是一种能够检测染色体三维结构的实验方法&#xff0c;它能揭示 DNA 在细胞核内的三维组织结构。为了更好地展示和解释这些复杂的数据&#xff0c;PlotHiC[1] 可以帮助用户方便地绘制Hi-C 数据的热图。…...

基于Lora通讯加STM32空气质量检测WIFI通讯

目录 目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着环境污染问题的日益严重&#xff0c;空气质量的监测与管理已经…...

STM32 极速入门第一天基础拓展 驱动i2c屏幕 ( 使用PlatformIO开发STM32单片机 )

输入输出模式解析 输出模式 在输出模式下&#xff0c;通常不需要设置上下拉电阻. 输出电平由 LL_GPIO_SetOutputPin 和 LL_GPIO_ResetOutputPin 函数直 接控制。 输入模式 在输入模式下&#xff0c;设置上下拉电阻是非常重要的. 输入引脚悬空时可能会导致不确定的电平&#xf…...

【WPF】Prism学习(五)

Prism Commands 1.错误处理&#xff08;Error Handling&#xff09; Prism 9 为所有的命令&#xff08;包含AsyncDelegateCommand&#xff09;提供了更好的错误处理。 避免用try/catch包装每一个方法根据不同遇到的异常类型来提供特定的逻辑处理可以在多个命令之间共享错误处…...

RabbitMQ的基本概念和入门

RabbitMQ 的基本概念和入门 RabbitMQ 是一款流行的开源消息队列中间件&#xff0c;实现了高级消息队列协议&#xff08;AMQP&#xff09;。它使用Erlang语言编写&#xff0c;具备高可用性、可扩展性和易用性等特点&#xff0c;广泛应用于各种分布式系统中。本文将详细介绍Rabb…...

Shell脚本6 -- 条件判断if

声明&#xff1a; 本文的学习内容来源于B站up主“泷羽sec”视频【shell编程&#xff08;4&#xff09;脚本与用户交互以及if条件判断】的公开分享&#xff0c;所有内容仅限于网络安全技术的交流学习&#xff0c;不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题&#xff0c…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解

一、前言 在HarmonyOS 5的应用开发模型中&#xff0c;featureAbility是旧版FA模型&#xff08;Feature Ability&#xff09;的用法&#xff0c;Stage模型已采用全新的应用架构&#xff0c;推荐使用组件化的上下文获取方式&#xff0c;而非依赖featureAbility。 FA大概是API7之…...

uniapp获取当前位置和经纬度信息

1.1. 获取当前位置和经纬度信息&#xff08;需要配置高的SDK&#xff09; 调用uni-app官方API中的uni.chooseLocation()&#xff0c;即打开地图选择位置。 <button click"getAddress">获取定位</button> const getAddress () > {uni.chooseLocatio…...

2025-06-01-Hive 技术及应用介绍

Hive 技术及应用介绍 参考资料 Hive 技术原理Hive 架构及应用介绍Hive - 小海哥哥 de - 博客园https://cwiki.apache.org/confluence/display/Hive/Home(官方文档) Apache Hive 是基于 Hadoop 构建的数据仓库工具&#xff0c;它为海量结构化数据提供类 SQL 的查询能力&#xf…...

鸿蒙APP测试实战:从HDC命令到专项测试

普通APP的测试与鸿蒙APP的测试有一些共同的特征&#xff0c;但是也有一些区别&#xff0c;其中共同特征是&#xff0c;它们都可以通过cmd的命令提示符工具来进行app的性能测试。 其中区别主要是&#xff0c;对于稳定性测试的命令的区别&#xff0c;性能指标获取方式的命令的区…...

智能问数Text2SQL Vanna windows场景验证

架构 Vanna 是一个开源 Python RAG&#xff08;检索增强生成&#xff09;框架&#xff0c;用于 SQL 生成和相关功能。 机制 Vanna 的工作过程分为两个简单步骤 - 在您的数据上训练 RAG“模型”&#xff0c;然后提出问题&#xff0c;这些问题将返回 SQL 查询&#xff0c;这些查…...