位置: IT常识 - 正文

2023前端面试上岸手册——VUE部分(2021前端面试题校招)

编辑:rootadmin
2023前端面试上岸手册——VUE部分 目录Vue 的基本原理双向数据绑定的原理MVVM、MVC、MVP 的区别slot 是什么?有什么作用?原理是什么?\$nextTick 原理及作用Vue 单页应用与多页应用的区别Vue 中封装的数组方法有哪些,其如何实现页面更新Vue data 中某一个属性的值发生改变后,视图会立即同步执行重新渲染吗?简述 mixin、extends 的覆盖逻辑子组件可以直接改变父组件的数据吗?对 React 和 Vue 的理解,它们的异同Vue 的优点assets 和static 的区别delete 和Vue.delete 删除数组的区别Vue 模版编译原理vue 初始化页面闪动问题MVVM 的优缺点?v-if 和v-for 哪个优先级更高?如果同时出现,应如何优化?对Vue 组件化的理解对vue 设计原则的理解说一下Vue 的生命周期Vue 子组件和父组件执行顺序created 和mounted 的区别一般在哪个生命周期请求异步数据keep-alive 中的生命周期哪些路由的hash 和history 模式的区别Vue-router 跳转和 location.href 有什么区别Vuex 的原理Vuex 和 localStorage 的区别Redux 和 Vuex 有什么区别,它们的共同思想为什么要用 Vuex 或者 ReduxVuex 有哪几种属性?Vuex 和单纯的全局对象有什么区别?为什么 Vuex 的 mutation 中不能做异步操作?Vue3.0 有什么更新defineProperty 和proxy 的区别Vue3.0 为什么要用 proxy?虚拟 DOM 的解析过程diff算法的原理Vue 中key 的作用下期更新React部分Vue 的基本原理

推荐整理分享2023前端面试上岸手册——VUE部分(2021前端面试题校招),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:前端年后面试真题,前端年后面试真题,21年前端面试题,2020年前端面试,2021前端面试题校招,2023前端面试上机操作不会怎么办,2020年前端面试,前端2021面试,内容如对您有帮助,希望把文章链接给更多的朋友!

当 一 个 Vue 实 例 创 建 时 , Vue 会 遍 历 data 中 的 属 性 , 用 Object.defineProperty ( vue3.0 使 用 proxy ) 将 它 们 转 为 getter/setter,并且在内部追踪相关依赖,在属性被访问和修改时通知变化。 每个组件实例都有相应的 watcher 程序实例,它会在组 件渲染的过程中把属性记录为依赖,之后当依赖项的 setter 被调用时,会通知 watcher 重新计算,从而致使它关联的组件得以更新。

双向数据绑定的原理

Vue.js 是采用数据劫持结合发布者- 订阅者模式的方式, 通过 Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。主要分为以下几个步骤:

需要observe 的数据对象进行递归遍历,包括子属性对象的属性,都加上setter 和getter 这样的话,给这个对象的某个值赋值,就会触发setter,那么就能监听到了数据变化

compile 解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图

Watcher 订阅者是 Observer 和 Compile 之间通信的桥梁,主要做的事情是: ①在自身实例化时往属性订阅器(dep)里面添加自己 ②自身必须有一个update()方法 ③待属性变动dep.notice()通知时,能调用自身的 update()方法,并触发 Compile 中绑定的回调,则功成身退。

MVVM 作为数据绑定的入口,整合 Observer、Compile 和 Watcher三者,通过 Observer 来监听自己的 model 数据变化,通过 Compile来解析编译模板指令,最终利用 Watcher 搭起 Observer 和 Compile之间的通信桥梁,达到数据变化 -> 视图更新;视图交互变化(input)-> 数据model 变更的双向绑定效果。

MVVM、MVC、MVP 的区别

MVC、MVP 和 MVVM 是三种常见的软件架构设计模式,主要通过分离关注点的方式来组织代码结构,优化开发效率。

在开发单页面应用时,往往一个路由页面对应了一个脚本文件,所有的页面逻辑都在一个脚本文件里。页面的渲染、数据的获取,对用户事件的响应所有的应用逻辑都混合在一起,这样在开发简单项目时,可能看不出什么问题,如果项目变得复杂,那么整个文件就会变得冗长、混乱,这样对项目开发和后期的项目维护是非常不利的。

MVC

MVC 通过分离 Model、View 和 Controller 的方式来组织代码结构。其中 View 负责页面的显示逻辑,Model 负责存储页面的业务数据,以及对相应数据的操作。并且 View 和 Model 应用了观察者模式,当 Model 层发生改变的时候它会通知有关 View 层更新页面。

Controller 层是 View 层和 Model 层的纽带,它主要负责用户与应用的响应操作,当用户与页面产生交互的时候,Controller 中的事件触发器就开始工作了,通过调用 Model 层,来完成对 Model 的修改,然后 Model 层再去通知 View 层更新。

MVVM

MVVM 分为 Model、View、ViewModel:

Model 代表数据模型,数据和业务逻辑都在Model 层中定义; View 代表UI 视图,负责数据的展示;

ViewModel 负责监听Model 中数据的改变并且控制视图的更新,处理用户交互操作;

Model 和 View 并无直接关联,而是通过 ViewModel 来进行联系的, Model 和ViewModel 之间有着双向数据绑定的联系。因此当 Model 中的数据改变时会触发View 层的刷新,View 中由于用户交互操作而改变的数据也会在Model 中同步。

这种模式实现了 Model 和View 的数据自动同步,因此开发者只需要专注于数据的维护操作即可,而不需要自己操作DOM。

MVP

MVP 模式与 MVC 唯一不同的在于 Presenter 和 Controller。在 MVC 模式中使用观察者模式,来实现当 Model 层数据发生变化的时候,通知 View 层的更新。这样 View 层和 Model 层耦合在一起,当项目逻辑变得复杂的时候,可能会造成代码的混乱,并且可能会对代码的复用性造成一些问题。MVP 的模式通过使用 Presenter 来实现对 View 层和 Model 层的解耦。MVC 中的 Controller 只知道 Model 的接口,因此它没有办法控制 View 层的更新,MVP 模式中, View 层的接口暴露给了 Presenter 因此可以在 Presenter 中将 Model 的变化和 View 的变化绑定在一起,以此来实现 View 和 Model 的同步更新。这样就实现了对 View 和 Model 的解耦, Presenter 还包含了其他的响应逻辑。

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

slot 又名插槽,是 Vue 的内容分发机制,组件内部的模板引擎使用 slot 元素作为承载分发内容的出口。插槽 slot 是子组件的一个模板标签元素,而这一个标签元素是否显示,以及怎么显示是由父组件决定的。slot 又分三类,默认插槽,具名插槽和作用域插槽。

默认插槽:又名匿名插槽,当 slot 没有指定name 属性值的时候一个默认显示插槽,一个组件内只有有一个匿名插槽。

具名插槽:带有具体名字的插槽,也就是带有name 属性的slot,一个组件可以出现多个具名插槽。

作用域插槽:默认插槽、具名插槽的一个变体,可以是匿名插槽,也可以是具名插槽,该插槽的不同点是在子组件渲染作用域插槽时,可以将子组件内部的数据传递给父组件,让父组件根据子组件的传递过来的数据决定如何渲染该插槽。

实现原理:当子组件 vm 实例化时,获取到父组件传入的 slot 标签的内容,存放在vm.$slot 中,默认插槽为vm.$slot.default,具名插槽为vm.$slot.xxx,xxx 为插槽名,当组件执行渲染函数时候,遇到slot 标签,使用$slot 中的内容进行替换,此时可以为插槽传递数据,若存在数据,则可称该插槽为作用域插槽。

$nextTick 原理及作用

Vue 的 nextTick 其本质是对 JavaScript 执行原理 EventLoop 的一种应用。

nextTick 的核心是利用了如 Promise 、 MutationObserver 、 setImmediate、setTimeout 的原生 JavaScript 方法来模拟对应的微/宏任务的实现,本质是为了利用 JavaScript 的这些异步回调任务队列来实现 Vue 框架中自己的异步回调队列。

nextTick 不仅是 Vue 内部的异步队列的调用方法,同时也允许开发者在实际项目中使用这个方法来满足实际应用中对 DOM 更新数据时机的后续逻辑处理nextTick 是典型的将底层 JavaScript 执行原理应用到具体案例中的示例,引入异步更新队列机制的原因∶

如果是同步更新,则多次对一个或多个属性赋值,会频繁触发 UI/DOM的渲染,可以减少一些无用渲染

同时由于 VirtualDOM 的引入,每一次状态发生变化后,状态变化的信号会发送给组件,组件内部使用 VirtualDOM 进行计算得出需要更新的具体的 DOM 节点,然后对 DOM 进行更新操作,每次更新状态后的渲染过程需要更多的计算,而这种无用功也将浪费更多的性能,所以异步渲染变得更加至关重要

Vue 采用了数据驱动视图的思想,但是在一些情况下,仍然需要操作 DOM。有时候,可能遇到这样的情况,DOM1 的数据发生了变化,而 DOM2需要从DOM1 中获取数据,那这时就会发现DOM2 的视图并没有更新,这时就需要用到了nextTick 了。

由于Vue 的DOM 操作是异步的,所以,在上面的情况中,就要将 DOM2获取数据的操作写在$nextTick 中。

2023前端面试上岸手册——VUE部分(2021前端面试题校招)

所以,在以下情况下,会用到nextTick:

在数据变化后执行的某个操作,而这个操作需要使用随数据变化而变化的 DOM 结构的时候,这个操作就需要方法在 nextTick()的回调函数中。

在vue 生命周期中,如果在created()钩子进行DOM 操作,也一定要放在nextTick()的回调函数中。

因为在created()钩子函数中,页面的DOM 还未渲染,这时候也没办法操作DOM,所以,此时如果想要操作DOM,必须将操作的代码放在 nextTick()的回调函数中。

Vue 单页应用与多页应用的区别

概念:

SPA 单页面应用(SinglePage Web Application),指只有一个主页面的应用,一开始只需要加载一次 js、css 等相关资源。所有内容都包含在主页面,对每一个功能模块组件化。单页应用跳转,就是切换相关组件,仅仅刷新局部资源。

MPA 多页面应用 (MultiPage Application),指有多个独立页面的应用,每个页面必须重复加载js、css 等相关资源。多页应用跳转,需要整页资源刷新。

区别:

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

在Vue 中,对响应式处理利用的是 Object.defineProperty 对数据进行拦截,而这个方法并不能监听到数组内部变化,数组长度变化,数组的截取变化等,所以需要对这些操作进行 hack,让 Vue 能监听到其中的变化。

那Vue 是如何实现让这些数组方法实现元素的实时更新的呢,下面是 Vue 中对这些方法的封装:

简单来说就是,重写了数组中的那些原生方法,首先获取到这个数组的 ob , 也就是它的 Observer 对象, 如果有新的值, 就调用 observeArray 继续对新的值观察变化(也就是通过 target_proto_== arrayMethods 来改变了数组实例的型),然后手动调用notify,通知渲染watcher,执行update。

Vue data 中某一个属性的值发生改变后,视图会立即同步执行重新渲染吗?

不会立即同步执行重新渲染。Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。Vue 在更新 DOM 时是异步执行的。只要侦听到数据变化, Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据变更。

如果同一个watcher 被多次触发,只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作是非常重要的。然后,在下一个的事件循环tick 中,Vue 刷新队列并执行实际

(已去重的)工作。

简述 mixin、extends 的覆盖逻辑mixin 和 extends

mixin 和 extends 均是用于合并、拓展组件的, 两者均通过 mergeOptions 方法实现合并。

mixins 接收一个混入对象的数组,其中混入对象可以像正常的实例对象一样包含实例选项,这些选项会被合并到最终的选项中。Mixin钩子按照传入顺序依次调用,并在调用组件自身的钩子之前被调用。

extends 主要是为了便于扩展单文件组件,接收一个对象或构造函数。

mergeOptions 的执行过程

规 范 化 选 项 ( normalizeProps 、 normalizelnject 、 normalizeDirectives)

对未合并的选项,进行判断

子组件可以直接改变父组件的数据吗?

子组件不可以直接改变父组件的数据。这样做主要是为了维护父子组件的单向数据流。每次父级组件发生更新时,子组件中所有的 prop都将会刷新为最新的值。如果这样做了,Vue 会在浏览器的控制台中发出警告。 子组件不可以直接改变父组件的数据。这样做主要是为了维护父子组 件的单向数据流。每次父级组件发生更新时,子组件中所有的 prop都将会刷新为最新的值。如果这样做了,Vue 会在浏览器的控制台中发出警告。 Vue 提倡单向数据流,即父级 props 的更新会流向子组件,但是反过来则不行。这是为了防止意外的改变父组件状态,使得应用的数据流变得难以理解,导致数据流混乱。如果破坏了单向数据流,当应用复杂时,debug 的成本会非常高。

只能通过 $emit 派发一个自定义事件,父组件接收到后,由父组件修改。

对 React 和 Vue 的理解,它们的异同

相似之处:

都将注意力集中保持在核心库,而将其他功能如路由和全局状态管理交给相关的库;

都有自己的构建工具,能让你得到一个根据最佳实践设置的项目模板;都使用了Virtual DOM(虚拟 DOM)提高重绘性能;

都有props 的概念,允许组件间的数据传递;

都鼓励组件化应用,将应用分拆成一个个功能明确的模块,提高复用性。

不同之处 :

数据流 Vue 默认支持数据双向绑定,而React 一直提倡单向数据流

虚拟DOM Vue2.x 开始引入"Virtual DOM",消除了和React 在这方面的差异,但是在具体的细节还是有各自的特点。 Vue 宣称可以更快地计算出Virtual DOM 的差异,这是由于它在渲染过程中,会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树。

对于React 而言,每当应用的状态被改变时,全部子组件都会重新渲染。当然,这可以通过 PureComponent/shouldComponentUpdate 这个生命周期方法来进行控制,但Vue 将此视为默认的优化。

组件化

React 与Vue 最大的不同是模板的编写。

Vue 鼓励写近似常规HTML 的模板。写起来很接近标准 HTML 元素,只是多了一些属性。

React 推荐你所有的模板通用JavaScript 的语法扩展——JSX 书写。

具体来讲:React 中render 函数是支持闭包特性的,所以import 的组件在render 中可以直接调用。但是在 Vue 中,由于模板中使用的数据都必须挂在 this 上进行一次中转,所以 import 一个组件完了之后,还需要在 components 中再

本文链接地址:https://www.jiuchutong.com/zhishi/295277.html 转载请保留说明!

上一篇:【Web后端架构】2022年10个最佳Web开发后端框架(web后端开发框架有哪些)

下一篇:【uni-app教程】四、UniAPP 路由配置及页面跳转(uni-app入门到实战)

  • 解说微博营销六大价值(微博营销博主)

    解说微博营销六大价值(微博营销博主)

  • 未识别的网络怎么解决win10(未识别的网络)(未识别的网络怎么改为工作网络)

    未识别的网络怎么解决win10(未识别的网络)(未识别的网络怎么改为工作网络)

  • ios14都支持哪些设备呢(ios14支持的iphone)

    ios14都支持哪些设备呢(ios14支持的iphone)

  • 苹果12尺寸(苹果12尺寸是6.1还是5.8呢)

    苹果12尺寸(苹果12尺寸是6.1还是5.8呢)

  • 手机碎屏裂纹处发黄怎么办(手机屏幕裂碎)

    手机碎屏裂纹处发黄怎么办(手机屏幕裂碎)

  • oppo手机怎么看电池健康状态(oppo手机怎么看电池容量)

    oppo手机怎么看电池健康状态(oppo手机怎么看电池容量)

  • 华为荣耀20pro支持5g吗(华为荣耀20pro支持多少快充)

    华为荣耀20pro支持5g吗(华为荣耀20pro支持多少快充)

  • qq作业提交了怎么修改(qq作业提交别人可以看见时间吗)

    qq作业提交了怎么修改(qq作业提交别人可以看见时间吗)

  • wifi流量是无限的吗(流量是无限的)

    wifi流量是无限的吗(流量是无限的)

  • ipad怎么共享屏幕(iPad怎么共享屏幕一起看电影)

    ipad怎么共享屏幕(iPad怎么共享屏幕一起看电影)

  • 小米视频工具箱怎么打开(小米视频工具箱怎么移动位置)

    小米视频工具箱怎么打开(小米视频工具箱怎么移动位置)

  • 魅族插口温度太高充不进电(魅族提示充电口温度过高已停止充电)

    魅族插口温度太高充不进电(魅族提示充电口温度过高已停止充电)

  • 手机后面pro什么意思(手机后面的pro和plus的区别)

    手机后面pro什么意思(手机后面的pro和plus的区别)

  • 小米10发烫怎么解决(小米10发烫怎么回事)

    小米10发烫怎么解决(小米10发烫怎么回事)

  • 笔记本电脑除号是哪个键(笔记本电脑除号在哪里)

    笔记本电脑除号是哪个键(笔记本电脑除号在哪里)

  • 抖音获赞怎么清零(抖音获赞怎么清除)

    抖音获赞怎么清零(抖音获赞怎么清除)

  • 手机号导入的包裹是什么东西(手机号导入的包裹怎么查)

    手机号导入的包裹是什么东西(手机号导入的包裹怎么查)

  • 网络硬件的组成(网络硬件的组成包括哪些)

    网络硬件的组成(网络硬件的组成包括哪些)

  • qq音乐歌词背景怎么设置(qq音乐歌词背景怎么换图)

    qq音乐歌词背景怎么设置(qq音乐歌词背景怎么换图)

  • 2g网速是多少kb(2g网络是多少kbps)

    2g网速是多少kb(2g网络是多少kbps)

  • 手机系统更新怎么关闭(手机系统更新怎么找不到)

    手机系统更新怎么关闭(手机系统更新怎么找不到)

  • 视频压缩失败什么意思(视频压缩失败什么原因)

    视频压缩失败什么意思(视频压缩失败什么原因)

  • 11promax是双卡吗(11promax是双卡吗?)

    11promax是双卡吗(11promax是双卡吗?)

  • 淘宝被禁止评价怎么办(淘宝被限制评价)

    淘宝被禁止评价怎么办(淘宝被限制评价)

  • r17有nfc功能吗(r17nfc功能在哪里找到)

    r17有nfc功能吗(r17nfc功能在哪里找到)

  • qq音乐如何添加收藏夹栏(qq音乐如何添加别人的歌单)

    qq音乐如何添加收藏夹栏(qq音乐如何添加别人的歌单)

  • 去国外怎么用流量(去国外怎么用流量看电视)

    去国外怎么用流量(去国外怎么用流量看电视)

  • 基于C#开发 B/S架构的实验室管理系统 云LIS系统(MVC + SQLserver + Redis)(c#开发入门及项目实战)

    基于C#开发 B/S架构的实验室管理系统 云LIS系统(MVC + SQLserver + Redis)(c#开发入门及项目实战)

  • NuSences 数据集解析以及 nuScenes devkit 的使用(nyud数据集)

    NuSences 数据集解析以及 nuScenes devkit 的使用(nyud数据集)

  • 借款合同印花税减免优惠政策2022
  • 协定税率的简称
  • 借款利息税前扣除标准例题
  • 母公司和子公司可以一起投标吗
  • 在建工程贷款利息分录
  • 车辆计提折旧需要计提吗
  • 处置公司车辆账务处理
  • 应收应付账务处理工作具体做哪些
  • 什么情况下要交土地出让金
  • 一般户用途可以是往来款吗
  • 残保金属于税种吗
  • 售后维修的配件开维修费
  • 其他综合收益和综合收益的关系
  • 纳税申报的具体流程个体户
  • 收到员工归还借款属于现金流量表
  • 为什么企业要预缴增值税
  • 自来水费缴纳后多久来水
  • 在建工程摊销是啥意思
  • 一般企业的会计原始凭证有哪些类型
  • 工地伙食标准 费用
  • 计提增值税的账务处理小规模
  • 企业注销个税怎样更正申报呢
  • 拍卖抵债资产的缴税责任
  • pps是啥文件
  • PHP:curl_reset()的用法_cURL函数
  • 总包和分包是什么关系
  • 会计实务中计提是什么意思
  • 因质量问题免费赔偿
  • 银行存款账面余额与银行账户余额
  • 以前年度损益调整
  • vs code前端插件
  • struts2漏洞检测工具下载
  • 520要来了要吵架的赶紧
  • 固定资产毁损应该填制什么凭证
  • vue组件怎么使用
  • 应收应付对冲的会计分录
  • 附表一般写在哪
  • 业务招待费的抵扣限额
  • 职工福利费的会计处理
  • 小规模纳税人申报步骤
  • 发票红冲重开是退个税吗
  • 明细与发票
  • 跨年后发票作废
  • 代理赚差价违法吗
  • 公户转私户的钱会退回吗
  • 自产产品发给职工做福利的会计处理
  • 发票报销抵扣税点是给谁
  • 其他应付款转营业外收入摘要怎么写
  • 转账支票的密码需要填写吗
  • 粗纤维测定仪价格
  • 新会计准则会计科目明细表
  • 应付职工薪酬核算的有
  • 如何学会计做账视频
  • Windows(x86,64bit)升级MySQL 5.7.17免安装版的详细教程
  • 微软软件怎么用
  • Fedora 13 Final DVD ISO系统下载
  • 苹果电脑如何缩小屏幕显示
  • win10系统怎么隐藏c盘
  • centos libcrypto.so.1.0.0
  • win7系统重装后u盘读不出来
  • 怎么用root登录
  • win8.1开始菜单怎么改成win7那样
  • windows8如何共享打印机
  • linux应用程序在哪个目录
  • 常见错误类型
  • c#+unity3d
  • perl常用函数
  • js对话框确定事件
  • nodejs mongoose
  • [置顶]游戏名 TentacleLocker
  • 在js中如何判断数据类型
  • nodejs的http
  • node-js
  • javascript获取当前文件夹文件数量
  • 异步加载场景
  • jquery ui draggable
  • 杭州国家税务局陈英泽
  • 百旺税控盘口令是多少
  • 沈阳市地方税务局
  • 三证合一怎么申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设