Vue基础面试题(一)

1.Vue的基本原理

  • Vue.js的核心原理在于其响应式的数据绑定机制,当创建一个Vue实例时,Vue会遍历每个属性,用Object.defineProperty转化为gettersetter。这样使得Vue可以追踪属性的变化,在属性被修改访问时通知变化。
  • 每个组件也都有相应的watcher实例,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的setter被调用时,会通知watcher重新计算,从而致使它关联的组件得以更新。

2.双向数据绑定的原理

  • Vue数据双向绑定原理是通过数据劫持结合发布者-订阅者模式的方式来实现的,首先是对数据进行监听,然后当监听的属性发生变化时则告诉订阅者是否要更新,若更新就会执行对应的更新函数从而更新视图。(再加上响应式数据的绑定原理)

3.使用 Object.defineProperty() 来进行数据劫持有什么缺点?

  • 通过数组下标修改数组数据以及为对象添加新的属性这些操作无法拦截。
  • Vue3中使用Proxy对对象进行代理,实现数据劫持。它可以完美的监听到任何方式的数据改变。

4.MVVM、MVC、MVP的区别

这三者都是框架模式,设计目的都是为了解决Model和View的维护和耦合问题

  • MVC通过分离Model、View和Controller的方式来组织代码结构。模式较早主要是应用在后端,在前端的早期也有应用。优点是分层清晰,缺点是数据流混乱,难维护。
  • MVP模式是MVC的进化,使用Presenter层作为中间层负责MV通信,解决了两者耦合问题。但Presenter层过于臃肿会导致维护问题。
  • MVVM模式中,Model和View并无直接关联,是通过ViewModel来进行联系的,Model和ViewModel之间有着双向数据绑定的联系。这种模式在前端领域有着广泛的应用,实现了Model和View的数据自动同步,因此开发者只需要专注于数据的维护操作。

5.Computed 和 Watch 的区别

  • 计算属性可以从组件数据中派生新的数据,可以简化模板中的复杂表达式,有返回值,支持缓存(只有依赖的数据发生改变才会重新进行计算),不支持异步操作,如果一个属性依赖于其它属性,一般会使用computed。
  • watch主要是监听数据的变化(数据必须是data中声明的数据或者父组件传递过来的数据),它没有返回值,不支持缓存(数据变化时,就会执行相应的操作),支持异步监听,可以设置immediate,deep(用在复杂的数据类型中)等选项,当数据变化时执行异步或开销较大的操作时使用watch。

6.Computed 和 Methods 的区别

  • computed方法是带缓存的,数据发生改变时才会重新进行计算,而methods里的函数每次调用都会执行。
  • computed 适用于根据已有数据衍生新的数据,Methods 适用于处理事件和复杂逻辑的场景。

7.slot是什么?有什么作用?原理是什么?

  • 作用:让父组件可以向子组件指定位置插入html结构,是组件通信的一种方式。适用于父组件=>子组件
  • 默认插槽:父组件中传递相关内容,子组件中定义插槽占坑。
  • 具名插槽:给插槽起一个名字。
  • 作用域插槽:数据在定义插槽的自身,但根据数据生成的结构需要由使用者来决定。

8.如何保存页面的当前的状态

  • 将状态存储在LocalStorage/SessionStorage
  • 路由传值
  • 单页面渲染
  • 使用Vue的keep-alive

9.常见的事件修饰符及其作用

  • stop:阻止事件冒泡(点击子元素时,父元素和子元素同时发生点击事件)–从里往外
  • prevent:阻止默认行为(点击默认自动跳转到对应链接)
  • capture:存在capture从外到里捕获,剩下的从内到外输出。
  • self:只会触发自己范围内的事件,不包含子元素。
  • once:只触发一次回调

10.v-if、v-show、v-html 的原理

  • v-if使用时会调用addifCondition方法,根据条件决定是否生成虚拟节点,如果为false,生成节点时就会忽略对应节点。在实际渲染的过程中就没有虚拟DOM和实际DOM,就不会渲染到页面上。
  • v-show是无论条件是否满足,都会生成对应的虚拟节点并渲染实际的DOM节点。只是在渲染的过程中通过display属性来控制节点的显示与隐藏。
  • v-html:首先清除目标元素下的所有子节点,然后使用v-html的值作为新的HTML内容,然后通过内部方法调用来设置元素的innerHTML属性。

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

  • v-show隐藏是为该元素添加css–display:none,dom元素依旧还在。v-if显示隐藏是将dom元素整个添加或删除。
  • v-if DOM编译和卸载的过程, v-show是基于css的。
  • v-if消耗搞,适用于不频繁切换元素显示,业务复杂。v-show消耗低,适用于频繁切换。

12. data为什么是一个函数而不是对象

  • Vue规定data必须是一个函数,这个函数必须返回一个新的对象。每次创建实例的时候就会调用data函数来生成新的数据对象,确保每个实例都有自己独立的数据副本,避免数据共享和相互污染的问题(防止一个实例变化影响其他实例),使得组件更好维护。

13.对keep-alive的理解,它是如何实现的,具体缓存的是什么?

  • keep-alive是Vue中的一个内置缓存组件,避免组件内的数据被重复渲染,提高性能和用户体验。适用于需要频繁切换的动态组件和路由组件。

14.$nextTick 原理及作用

  • $nextTick是vue提供的一个方法,主要用于DOM更新完成后执行回调函数,他解决了DOM更新和数据变化的不同步问题。
  • 常用于需要在数据变化后立即操作DOM的场景,避免因 Vue 的异步更新机制导致的状态不同步问题。

15.Vue中封装的数组方法有哪些,其如何实现页面更新

在 Vue 中,对于对象的响应式处理是通过 Object.defineProperty 来实现的,但是这种方式并不能直接监听到数组内部变化、长度变化以及截取操作等。为了让 Vue 能够监听到数组的这些变化,Vue 对数组进行了特殊处理。

  • 重写数组方法:push、pop、shift、unshift、splice、sort 和 reverse。
  • 使用__proto__或者prototype:Vue 将数组的原型指向了一个特殊的对象,该对象包含了重写后的数组变异方法,这样就能够确保当调用这些方法时,能够触发数据更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/851266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL的视图pg_tables

PostgreSQL的视图pg_tables pg_tables 是 PostgreSQL 中的一个系统视图,用于显示当前数据库中所有用户定义的表的信息。这个视图提供了关于表的名称、所属模式(schema)、所有者以及表类型等详细信息。 pg_tables 视图的主要列 列名类型描述…

如何提高个人和企业的网络安全意识?

提高个人网络安全意识 个人可以通过以下方式提高网络安全意识: 1. 加强教育和培训:参加网络安全培训课程,学习识别网络攻击的常见迹象、安全密码的设置、不点击可疑链接等知识。 2. 建立网络安全政策:制定个人网络安全规则&…

【Linux】进程3——PID/PPID,父进程,子进程

在讲父子进程之前,我们接着上面那篇继续讲 1.查看进程 mycode.c makefile 我们在zs_108直接编译mycode.c,直接运行,然后我们转换另一个账号来查看这个进程 我们可以通过ps指令来查看进程 我们就会好奇了,第二行是什么&#xff…

基于JavaScript 实现近邻算法以及优化方案

前言 近邻算法(K-Nearest Neighbors,简称 KNN)是一种简单的、广泛使用的分类和回归算法。它的基本思想是:给定一个待分类的样本,找到这个样本在特征空间中距离最近的 k 个样本,这 k 个样本的多数类别作为待…

【C++】<知识点> C++11新特性

文章目录 一、auto关键字 二、decltype关键字 三、nullptr关键字 四、智能指针 五、 无序容器(哈希表) 六、统一的初始化方法 七、成员变量默认初始值 八、范围for循环 九、右值引用与移动语义 十、lambda表达式 一、auto关键字 1. 作用&#…

Linux shell编程学习笔记58:cat /proc/mem 获取系统内存信息

0 前言 在开展系统安全检查的过程中,除了收集cpu信息,我们还需要收集内存信息。在Linux中,获取内存信息的命令很多,这里我们着重研究 cat /proc/mem命令。 1 cat /proc/mem命令 /proc/meminfo 文件提供了有关系统内存的使用情况…

280 基于matlab的摇号系统GUI界面仿真MATLAB程序

基于matlab的摇号系统GUI界面仿真MATLAB程序,输入总数量及摇号需求,进行随机性摇号,并对摇取的号码进行双重随机性数据检测,确定是否符合要求。程序已调通,可直接运行。 280 GUI人机交互 摇号系统GUI界面仿真 - 小红书…

技术前沿 |【大模型InstructBLIP进行指令微调】

大模型InstructBLIP进行指令微调 一、引言二、InstructBLIP模型介绍三、指令微调训练通用视觉语言模型的应用潜力四、InstructBLIP的指令微调训练步骤五、实验结果与讨论六、结论与展望 一、引言 随着人工智能技术的快速发展,视觉语言模型(Vision-Langu…

使用SourceTree切换不同的托管平台

背景:sourcetree一开始绑定了gitee,想拉取github的项目时拉取不了 原因:git绑定的账号(邮箱)、密码不一致 解决办法: 重新设置账号密码 在windows种可找到下面的文件夹,进行删除 C:\Users\US…

5.1 实体完整性

一个表只能有一个主键约束,且主键约束不能取空值。 通过unique约束定义唯一性,为了保证一个表非主键列不输入重复值,可在该列定义unique约束。 primary key约束与unique约束主要区别如下。 (1)一个表只能创建一个primary key约束&#xff0…

让GNSSRTK不再难【第一天】

第1讲 GNSS系统组成以及应用 北斗导航科普动画_哔哩哔哩_bilibili 1.1 GNSS系统 1.1.1 基本概念 全球卫星导航系统(Global Navigation Satellite System, GNSS),是能在地球表面或近地空间的任何地点为用户提供全天候的三维坐标、速度以及…

STM32-电灯,仿真

目录 前言: 一. 配置vscode 二. 新创建软件工程 三. 仿真 1.新建工程想到,选择名称和路径 2.从选中的模板创建原理图 3.不创建PCB布版设计 4.选择没有固件项目 5.完成 四.源码 五. 运行效果 六. 总结 前言: 这篇主要是配置vscode和创建仿真,和点灯的完整代码,欢迎大…

在Windows上用Llama Factory微调Llama 3的基本操作

这篇博客参考了一些文章,例如:教程:利用LLaMA_Factory微调llama3:8b大模型_llama3模型微调保存-CSDN博客 也可以参考Llama Factory的Readme:GitHub - hiyouga/LLaMA-Factory: Unify Efficient Fine-Tuning of 100 LLMsUnify Effi…

美琳莱卡:创新消费模式引领新零售时代

公司成立时间与定位 美琳莱卡自创立之初,便以独特的视角和前瞻性的战略定位,立足于消费市场的变革前沿。公司成立于2024年,正值全球数字化浪潮蓬勃兴起,消费升级趋势日益明显之际。美琳莱卡敏锐地捕捉到这一时代机遇,将自身定位为创新消费模式的引领者,致力于通过线上线下高度…

攻防演练之-网络集结号

每一次的网络安全攻防演练都是各个安全厂商期待的网络安全盛会,因为目前的安全生态导致了只有在网络安全攻防演练期间,网络安全的价值才会走向台前,收到相关方的重视。虽然每一次都会由于各种原因不能如期举行,但是这一次的推迟总…

idea最新专业版安装+maven配置教程!

本教程适用于 J B 全系列产品,包括 Pycharm、IDEA、WebStorm、Phpstorm、Datagrip、RubyMine、CLion、AppCode 等。 (直接复制,拿走不谢) 9H1390TRAK-eyJsaWNlbnNlSWQiOiI5SDEzOTBUUkFLIiwibGljZW5zZWVOYW1lIjoi5rC45LmF5rA5rS7I…

MySQL之查询性能优化(七)

查询性能优化 排序优化 无论如何排序都是一个成本很高的操作,所以从性能角度考虑,应尽可能避免排序或者尽可能避免对大量数据进行排序。前面已经提到了,当不能使用索引生成排序结果的时候,MySQL需要自己进行排序,如果…

【传知代码】上下位关系自动检测方法(论文复现)

前言:在信息爆炸的时代,我们每天都沉浸在海量的数据和信息中。随着互联网技术的飞速发展,如何从这些信息中准确、高效地提取出有用的知识,成为了当下研究的热点。其中,上下位关系(也称为层级关系或种属关系…

vscode 中 eslint 无效?npm init 是什么?

vscode 中 eslint 无效 我想要给一个项目添加 eslint,按照 eslint 官方指南操作: npm init eslint/configlatest自动安装了相关依赖并创建配置文件 eslint.config.mjs。 按理说,此刻项目应该已经配置好 eslint 了。但是我的编辑器 vscode …

《python程序语言设计》2018版第5章第36题改造4.17 石头 剪刀 布某一方超过2次就结束。

代码编写记录 2024.05.04 05.36.01version 换一个什么数代替剪子 我先建立一个函数judgement condition 石头3 剪子2 布1 如何构建一个循环进行的架构,是我们最需要的想法 循环以什么条件开始呢 是小于2个还是大于2个。 guess_num random.randint(1, 3) computer…