VUE经典面试题

2023-11-16

  • vue2.0的实现原理?

  • vue数据双向绑定是通过数据劫持结合发布者订阅模式来实现的,也就是说数据层和视图层同步,数据层发生变化,视图跟着变化,视图变化数据也跟着随之发生变化.
  • 第一步:需要observe的数据对象进行递归遍历
  • 第二步:compile解析模板指令
  • 第三步:Watcher订阅者是Observe和Compile之间通信的桥梁
  • 第四步:MVVM作为数据绑定的入口,整合Observe和Compile和Watcher三者,通过Observe来监听自己的model的数据变化,通过compile来解析编译模板指令,最终利用Watcher搭起Observe和Compile之间的通信桥梁,达到数据变化--->视图更新;视图交互变化--->数据model变化的双向绑定效果.
  • computed和watch和methods三者之间的区别?运用场景?

  • computed和watch都基于watcher来实现的。
  • computed的属性是具备缓存的,依赖的值不发生变化,对其取值时计算属性方法不会重复执行.
  • watch是监听值的变化,当值发生改变的时候,会调用回调函数.
  • methods 方法表示一个具体的操作,主要用来书写业务逻辑.
  • computed 和 methods 区别?

    • computed 是属性调用,而 methods 是方法调用
    • computed 带有缓存功能,而 methods 不会被缓存
    • computed 中的方法不能带参数,而 methods 中的方法可以带参数
  • computed在做用户设置模块,设置用户密码的时候,需要给密码加号,具体密码的长度是不知道的,此时用computed来监听密码的长度,然后判断添加几个号.
  • watch在做数据监测模块的时候,上面是一个下拉框,页面需求是通过点击下拉框,然后再显示下面的table的数据,此时需要监听下拉框里面ass_id值的变化,有值就显示下面的内容,如果没有就不显示,也可以有change做,也可以用computed监听.
  • v-for,key属性的作用?

  • Vue中为v-for提供了一个属性,key,在写v-for的时候,都需要给元素加上一个key属性,这个key属性必须是唯一的标识,并且给key赋值的内容不能是可变的。
  • key属性的作用:
  • 1.提高v-for渲染的效率和渲染性能 2.避免数据混乱
  • 为什么v-if和v-for不能同时使用?

  • 1.v-if避免和v-for一起使用,原因是v-for的优先级比v-if高,一起使用会造成性能浪费
  • 解决方案有两种,把v-if放在v-for的外层或者把需要v-for的属性先从计算属性中过滤一次
  • 2.v-if和v-for的优先级问题在vue3中不需要考虑,vue3更新了v-if和v-for的优先级,使v-if的优先级高于v-for
  • 谈谈对vue中diff算法的理解?

  • 1. diff算法是虚拟DOM技术的必然产物:通过新旧虚拟DOM作为对比(即diff),将变化的地方更新在真实DOM上,用来修改dom,不会引起dom树的重绘;
  • 2. vue.2.x中为了降低Watcher粒度,每个组件只有一个Watcher与之对应,只有引入diff才能精确找到发生变化的地方;
  • 3. vue中diff执行的时刻是组件实例执行其更新函数时,它会比对上一次渲染结 果oldVnode和新的渲染结果newVnode,此过程称为patch;
  • 4.diff过程整体遵循深度优先,同层比较的策略,两个节点之间比较会根据他们是否拥有子节点或者文本节点做不同操作,比较两组子节点是算法的重点,首先,假设头尾节点可能相同做4次比对尝试,如果没有找到相同节点才按照通用方式遍历查找,查找结束再按情况处理剩下的节点,借助key通常可以非常精确找到相同节点,因此整个patch过程非常高效。
  • vue首屏白屏如何解决?

  • 总结:资源加载优化 和 页面渲染优化
  • 1.路由懒加载/图片懒加载
  • 2.开启gzip压缩
  • 3.进行cdn加速
  • 4.开启vue服务渲染模式(使用SSR)
  • 5.用webpack的externals属性把不需要打包的库文件分离出去,减少打包后文件的大小
  • 6.在生产环境中删除不必要的console.log
  • 7.静态资源本地缓存
  • 8.添加loading效果,给用户一种进度感受
  • 9.UI框架按需导入
  • 10.图片资源进行压缩(雪碧图)
  • 11.组件重复打包(在webpack的config文件中,修改CommonsChunkPlugin的配置)
  • 12.提取公共样式
  • 13.减少es6转为es5的冗余代码
  • Vue 的最大的优势是什么?

  • 一、vue作为一款轻量级框架,门槛低,上手快,简单易学。
  • 二、vue可以进行组件化开发,数据与结构相分离,使代码量减少,从而提升开发效率,易于理解
  • 三、vue最突出的优势在于对数据进行双向绑定,使用虚拟DOM
  • 四、相较于传统页面通过超链接实现页面跳转,vue会使用路由跳转不会刷新页面
  • 五、vue是单页面应用,页面局部刷新,不用每次跳转都请求数据,加快了访问速度,提升了用户体验
  • 对于MVVM的理解?

  • MVVM 是 Model-View-ViewModel 的缩写。
  • Model代表数据模型,也可以在Model中定义数据修改和操作业务逻辑。
  • View 代表UI 组件,它负责将数据模型转化成UI 展现出来。
  • ViewModel 监听模型数据的改变 和控制视图行为、处理用户交互,简单理解就是一个同步View 和 Model的对象,连接Model和View桥梁。
  • 对于MVC的理解?

  • MVC是一种设计模式:
  • M(Model):模型层。是应用程序中用于处理应用程序数据逻辑的部分,模型对象负责在数据库中存取数据;
  • V(View):视图层。是应用程序中处理数据显示的部分,视图是依据模型数据创建的;
  • C(Controller):控制层。是应用程序中处理用户交互的部分,控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。
  • MVVM的优势

  • 1.mvc和mvvm都是一种设计思想。 主要就是mvc中Controller演变成mvvm中的viewModel。 mvvm主要解决了mvc中大量DOM操作使页面渲染性能降低,加载速度变慢的问题 。
  • 2.MVVM与MVC最大的区别就是:它实现了View和Model的自动同步:当Model的属性改变时,我们不用再自己手动操作Dom元素来改变View的显示,它会自动变化。
  • 3.整体看来,MVVM比MVC精简很多,我们不用再用选择器频繁地操作DOM。
  • MVVM并不是用VM完全取代了C,ViewModel存在目的在于抽离Controller中展示的业务逻辑,而不是替代Controller,其它视图操作业务等还是应该放在Controller中实现。
  • Vue的路由实现:hash模式 和 history模式?

  • vue-router中有三种模式:分别是hash、history、abstract
  • hash模式:使用了锚点技术重写了url访问路径,会在原有的url路径上拼接成“#”,这种方式可以不重新加载原有html基础上实现切换url路径的目的.
  • #以及#后面的字符称之为hash,用window.location.hash读取; 特点:hash虽然在URL中,但不被包括在HTTP请求中;用来指导浏览器动作,对服务端安全无用,hash不会重加载页面。 hash 模式下,仅 hash 符号之前的内容会被包含在请求中,如 http://www.xxx.com,因此对于后端来说,即使没有做到对路由的全覆盖,也不会返回 404 错误。
  • history模式:history是vue-router中常用的一中路由模式,它不需要借助描点技术,是采用HTML5的新特性;且提供了两个新方法:pushState(),replaceState()可以对浏览器历史记录栈进行修改,以及popState事件的监听到状态变更。
  • history 模式下,前端的 URL 必须和实际向后端发起请求的 URL 一致,如 http://www.xxx.com/items/id。后端如果缺少对 /items/id 的路由处理,将返回 404 错误。
  • 什么是vuex?

  • Vuex是一个专为 Vue.js 应用程序开发的状态管理模式,它由五部分组成:
  • 分别是:state,mutations,actions,getters,modules
  • state: 专门存放数据的,自己定义变量(this.$store.state.userInfo.man_id)
  • mutations: 唯一可以修改state数据的地方 (this.$store.commit('increment'))
  • actions:可以包含异步操作,请求异步必须在action里面(写方法的)this.$store.dispatch('increment')
  • getters: 类似于vue组件中的计算属性,对state数据进行计算(会被缓存) 默认会传递2个参数(state, getters) this.$store.getters.doneTodosCount
  • modules:模块化管理store(仓库),每个模块拥有自己的 state、mutation、action、getter
  • 问题:存储在vuex中的状态,刷新页面,会丢失。
  • 最简单的做法就是利用插件 vuex-persistedState。为了解决刷新页面数据丢失,才有了数据持久化。
  • 也可以把值存到本地储存中,从本地存储中进行取值
  • 虚拟DOM的实现原理与优缺点?

  • 用JavaScript对象模拟真实DOM树,对真实DOM进行抽象;
  • 通过diff算法,比较两棵DOM树的差异;
  • 通过pach,最后把两个虚拟DOM对象的差异更新到真正的dom中.
  • 虚拟DOM的作用:使用原生js或者jquery写页面的时候会发现操作DOM是一件非常麻烦的一件事情,往往是DOM标签
  • 和js逻辑同时写在js文件里,数据交互时不时还要写很多的input隐藏域,如果没有好的代码规范的话会显得代码非常冗余混乱,耦合性高并且难以维护。
  • 另外一方面在浏览器里一遍又一遍的渲染DOM是非常非常消耗性能的,常常会出现页面卡死的情况;所以尽量减少对DOM的操作成为了优化前端性能的必要手段,vdom就是将DOM的对比放在了js层,通过对比不同之处来选择新渲染DOM节点,从而提高渲染效率。
  • 优点:
  • 保证性能下限: 虚拟DOM可以经过diff找出最小差异,然后批量进行pach,这种操作虽然比不上手动优化,但是比起粗暴的DOM操作性能要好很多,因此虚拟DOM可以保证性能下限
  • 无需手动操作DOM: 虚拟DOM的diff和pach都是在一次更新中自动进行的,我们无需手动操作DOM,极大提高开发效率
  • 跨平台: 虚拟DOM本质上是JavaScript对象,而DOM与平台强相关,相比之下虚拟DOM可以进行更方便地跨平台操作,例如服务器渲染、移动端开发等等
  • 缺点:
  • 无法进行极致优化: 在一些性能要求极高的应用中虚拟DOM无法进行针对性的极致优化,比如VScode采用直接手动操作DOM的方式进行极端的性能优化

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VUE经典面试题 的相关文章

随机推荐

  • ubuntu下nfs服务安装

    操作系统 ubuntu22 04 2 一 服务端安装与配置 1 在服务端安装nfs服务端组件 sudo apt install nfs kernel server 2 创建共享目录share并且授权所有人可以访问 sudo mkdir sh
  • 物联网全栈教程-从云端到设备(一)

    一 2016年的时候 我还在学校里面准备着毕业论文 当时做的课题是预测一个挖掘机上面的一个继电器的寿命 我们的想法是检测其吸合的次数 然后根据吸合的次数来预计其寿命 这个想法很简单 因为一个继电器失效之前通常会正常吸合一定的次数比如10W次
  • 【错误】IDEA :Windows找不到文件“chrome”。请确定文件名是否正确,再试一次

    idea运行前端页面的时候 遇到错误找不到浏览器位置 首先确认的就是地址没找到 那么需要我们手动添加一下 找到浏览器 查看属性复制它的全路径 在回到idea中然后在IDEA里面 File gt setting gt Web Browsers
  • EMC整改小技巧

    EMC整改小技巧 差模干扰与共模干扰 差模干扰 存在于L N线之间 电流从L进入 流过整流二极管正极 再流经负载 通过热地 到整流二极管 再回到N 在这条通路上 有高速开关的大功率器件 有反向恢复时间极短的二极管 这些器件产生的高频干扰 都
  • 浏览器会因为什么样的脚本而崩溃

    浏览器可能因为以下几种情况而崩溃 无限循环 如果JavaScript脚本包含一个无限循环 浏览器将无法停止脚本的执行 导致浏览器不响应甚至崩溃 例如 以下代码会导致无限循环 while true 无限循环 内存泄漏 如果JavaScript
  • Java关键字--------final关键字

    final关键字 final关键字表示最终的 不可修改的 final关键字可以用来修饰类 方法和属性 1 final关键字修饰属性 被final关键字修饰的属性的值和类型都不能再改变 就属于常量 只能做一次赋值 被final修饰的属性通常与
  • 【XINLIX 原语】XILINX 原语的使用之 IBUFDS 差分转单端、OBUFDS 单端转差分

    目录 IBUFGDS IBUFDS 介绍 IBUFDS 示意图 例化方式 OBUFDS OBUFDS 介绍 OBUFDS 示意图 例化方式 在 XILINX 中有许多原语 常见的差分转单端 IBUFDS 单端转差分 OBUFDS IBUFG
  • SO_LINGER选项

    SO LINGER选项 SO LINGER选项用于控制close系统调用在关闭TCP连接时的行为 默认情况下 当我们使用close系统调用来关闭一个socket时 close将立即返回 TCP模块负责把该socket对应的TCP发送缓冲区中
  • 代理IP与网络安全在跨境电商中的关键作用

    跨境电商已成为全球商业的重要组成部分 然而 随之而来的网络安全问题也日益凸显 为了在海外市场取得成功 不仅需要优质的商品和服务 还需要稳定 安全的网络连接 本文将介绍如何运用Socks5代理IP技术解决这些挑战 1 代理IP与网络安全 网络
  • [技术讨论]PT100采样电路设计

    本来不论PT100还是PT1000 他们的采样电路网上都很多 而且之前直接用的是现成的MAX31865方案 奈何领导说太贵 用集成运放搭吧 领导动动嘴 属下跑断腿 于是各方论坛 度娘 终于整了个有希望的方案 仅以此文记述这段硬件方案设计的经
  • MySQL 中的 SET 与 ENUM 类型使用详解

    一 SET类型 在创建表时 就指定SET类型的取值范围 sql view plain copy 属性名 SET 值1 值2 值3 值n 其中 属性名 参数指字段的名称 值n 参数表示列表中的第n个值 这些值末尾的空格将会被系统直接删除 其基
  • IRET指令详解

    copy from http lion3875 blog 51cto com 2911026 532347 当使用IRET指令返回到相同保护级别的任务时 IRET会从堆栈弹出代码段选择子及指令指针分别到CS与IP寄存器 并弹出标志寄存器内容
  • alert获取输入框内容_js弹出输入框并且获取输入值

    prompt 方法用于与用户交互 提示用户输入信息的对话框 首先 看看prompt方法的语法形式 var val prompt str1 str2 以上代码中 此方法包含两个属性 str1 提示用户输入的信息 str2 用户输入文本信息默认
  • OpenAI最新官方ChatGPT聊天插件接口《插件示例demo》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(四)(附源码)

    Example plugins 插件示例demo 前言 Introduction 导言 Learn how to build a simple todo list plugin with no auth 了解如何构建一个简单的待办事项列表插
  • 钉钉机器人接收阿里云物联网平台转发的数据

    开篇先献上效果图 现在钉钉已经成为跟微信一样流行的APP了 社交端微信占了 企业端现在的老大应该是非钉钉莫属了 现在用户数量应该已经超过4亿了吧 疫情期间钉钉可是真火了一把 好了 下面进入正题 1 数据获取 首先数据的来源是接入到阿里物联网
  • 背景差分法示例

    背景差分法 背景差分法是一种很常用而且广泛传感的技术 主要用于背景不动的情况下提取前景 它主要的原理是在当前帧和背景做减法 然后使用threshold进行二值化得到前景掩码 下面是背景减法的示意图 背景差分法主要包含以下两个步骤 1 背景的
  • 如何触发‘isTrusted = true‘点击事件

    前言 isTrusted是DOM属性 只能可读 如果事件是由用户调用的 则该事件是可信的 如果是由脚本调用的 则该事件是不可信的 总的来说就是 如果你是通过正常浏览器方式进行操作 基本无法改变该属性 解决方法 1 使用python的sele
  • Ubuntu16.04安装搜狗输入法 详细教程

    由于自己也是一个刚入门Ubuntu的新手 对很多终端命令 软件的安装都不大了解 这里记录一下Linux版本的搜狗输入法 一开始觉着有个中文版的系统自带的输入法挺好的 结果没有想到拼音确实不是很好用 就根据这篇教程安装好了Linux版本的搜狗
  • Faster RCNN详解

    paper Faster R CNN Towards Real Time Object Detection with Region Proposal Networks Tensorflow faster r cnn github Tenso
  • VUE经典面试题

    vue2 0的实现原理 vue数据双向绑定是通过数据劫持结合发布者订阅模式来实现的 也就是说数据层和视图层同步 数据层发生变化 视图跟着变化 视图变化数据也跟着随之发生变化 第一步 需要observe的数据对象进行递归遍历 第二步 comp