高级第二个月考试

news2024/9/22 13:32:02

1.单页面应用和多页面应用的区别及优缺点

        

 

2.写出对虚拟dom的理解

        概念:

                虚拟DOM其实就是用一个原生的JS对象去描述一个DOM节点,实际上它只是对真实 DOM 的一层抽象。最终可以通过一系列操作使这棵树映射到真实环境上。相当于在js与DOM之间做了一个缓存,利用patch(diff算法)对比新旧虚拟DOM记录到一个对象中按需更新, 最后创建真实的DOM

        虚拟dom原理流程:

                模板 ==> 渲染函数 ==> 虚拟DOM树 ==> 真实DOM

                vuejs通过编译将模板(template)转成渲染函数(render),执行渲染函数可以得到一个虚拟节点树在对 Model 进行操作的时候,会触发对应 Dep 中的 Watcher 对象。Watcher 对象会调用对应的 update 来修改视图。

        虚拟 DOM 的实现原理主要包括以下 3 部分:

                用 JavaScript 对象模拟真实 DOM 树,对真实 DOM 进行抽象;

                diff 算法 — 比较两棵虚拟 DOM 树的差异;

                pach 算法 — 将两个虚拟 DOM 对象的差异应用到真正的 DOM 树。

3.vue组件之间通信的方式有哪些,是如何通信的

        1. 父传子 通过在父组件自定义属性,在子组件通过props接收

        2. 子改父或者子传父 在父组件中通过自定义事件传递方法,在子组件中通过$emit接收自定义事件

<children @ eventChange=”change”></children>

this.$emit(‘eventChange’,100)

        3. 兄弟之间通信 通过一个事件总线(eventBus 其实是一个空实例),在A组件中通过$on绑定自定义事件  在B组件中通过$emit接收组件

        4.通过$parent /$children/$refs   $parent指的是父组件实例   $children/$refs是子组件实例

        5. $attrs & $listeners

                $attrs获取父组件中不被props接收的自定义属性  并且可以通过 v-bind="$attrs" 传入内部组件

                $listeners获取父组件中的自定义事件

        6.provide & inject 祖先和后代之间的通信  

        Provide的值可以是对象或者是返回对象的函数

4.写出vue中的所有的生命周期函数,分别有什么作用

beforecreate:实例已经初始化,但不能获取DOM节点。(没有data,没有el)
created:实例已经创建,仍然不能获取DOM节点。(有data,没有el)
载入阶段:
beforemount:模板编译完成,但还没挂载到界面上。(有data,有el)
mounted:编译好的模板已挂载到页面中(数据和DOM都已经渲染出来)。
更新阶段:
beforeupdate:数据发生变化立即调用,此时data中数据是最新的,但页面上数据仍然是旧的(检测到数据更新时,但DOM更新前执行)。
updated:更新结束后执行,此时data中的值和页面上的值都是最新的。
销毁阶段:
beforedestroy:当要销毁vue实例时,在销毁之前执行。
destroy:在销毁vue实例时执行。

actived  在keep-alive中使用,缓存组件激活

deactived 在keep-alive中使用,缓存组件不激活

5.<keep-alive></keep-alive>的作用是什么?什么场景使用?常用属性?生命周期?

Keep-alive 是 Vue.js 内置的一个抽象组件,用于缓存有状态组件,可以在组件切换时保留组件的状态避免重新渲染。它有以下两个作用:

缓存有状态的组件,避免组件在切换时被重新渲染;

在缓存的组件被激活时触发 activated 钩子函数,在缓存的组件被停用时触发 deactivated 钩子函数。

使用 Keep-alive 可以提高组件的性能,尤其是在组件状态比较复杂或需要较长时间计算的情况下,通过缓存组件避免重复渲染,提高应用的性能。

6.写出你对vue的mixin的理解,有什么应用场景?

mixin(混入),提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。

本质其实就是一个js对象,它可以包含我们组件中任意功能选项,如data、components、methods、created、computed等等

我们只要将共用的功能以对象的方式传入 mixins选项中,当组件使用 mixins对象时所有mixins对象的选项都将被混入该组件本身的选项中来

在Vue中我们可以局部混入跟全局混入

使用场景

在日常的开发中,我们经常会遇到在不同的组件中经常会需要用到一些相同或者相似的代码,这些代码的功能相对独立

这时,可以通过Vue的mixin功能将相同或者相似的代码提出来

7.Vue是如何实现双向绑定的原理?

vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调。当把一个普通 Javascript 对象传给 Vue实例来作为它的 data选项时,Vue将遍历它的属性,用Object.defineProperty()将它们转为getter/setter。用户看不到getter/setter,但是在内部它们让Vue追踪依赖,在属性被访问和修改时通知变化。

8.写出vue路由中的导航守卫以及导航守卫回调函数中三个参数的作用

全局守卫:beforeEach,afterEach

局部守卫:

beforeRouteEnter:因为当守卫执行前,组件实例还没被创建,不能获取组件实例的this

beforeRouteUpdate: 在当前路由改变,但是该组件被复用时调用,可以访问组件实例 this

beforeRouteLeave:导航离开该组件的对应路由时调用,可以访问组件实例 this

每个守卫方法接收三个参数:

to:目标路由对象

from:准备要离开的路由

next():进行管道中的下一个钩子。可传递参数有布尔值false,直接写路径'/'或{path:'/'},回调函数

注意:后置钩子函数afterEach不会接受next函数也不会改变导航本身。

9.写出$route与$router的区别

$route是“路由信息对象”,包括path,params,hash,query,fullPath,matched,name等路由信息参数。

而$router是“路由实例”对象包括了路由的跳转方法,钩子函数等

10.vue-router路由传参有哪些方法,如何获取路由参数。

params⽅法传参的时候,要在路由后⾯加参数名占位;并且传参的时候,参数名要跟路由后⾯设置的参数名对应。

/user/:id这个路由匹配/user/111, /user/222这⾥的 id就是 params

query⽅法,就没有这种限制,直接在跳转⾥⾯⽤就可以。

query传参和params传参的区别

1)query 传参配置的是 path,而 params 传参配置的是name,且在 params中配置 path 无效

2)query传递的参数会显示在地址栏中,而params传参不会

3)query传参刷新页面数据不会消失,而params传参刷新页面数据回消失

4)params可以使用动态传参,动态传参的数据会显示在地址栏中,且刷新页面不会消失,因此可以使用动态params传参,根据动态传递参数在传递页面获取数据,以防页面刷新数据消失

11.vuex是什么?怎么使用?哪种功能场景使用它

vuex 就是一个仓库,仓库里放了很多对象。

其中 state 存放的是数据状态,不可以直接修改里面的数据。

getters类似vue的计算属性,主要用来过滤一些数据。

mutations:存放的是动态修改Vuex的state中保存的数据状态的方法。

actions:保存的触发mutations中方法的方法,可以理解为通过将mutations里面处里数据的方法变成可异步的处理数据的方法,简单的说就是异步操作数据。

一般什么样的数据会放在 State 中呢?

目前主要有两种数据会使用 vuex 进行管理: 1、组件之间全局共享的数据 2、通过后端异步请求的数据 比如做加入购物车、登录状态等都可以使用Vuex来管理数据状态

怎么使用Vuex? 在main.js引入store,注入。新建了一个目录store,… export

场景有:单页应用中,组件之间的状态、音乐播放、登录状态、加入购物车

12.vue中hash模式和history模式的区别

Vue底层对它们的实现方式不同:

hash模式是依靠onhashchange事件(监听location.hash的改变)

history模式是主要是依靠的HTML5 history中新增的两个方法,pushState()可以改变url地址且不会发送请求,replaceState()可以读取历史记录栈,还可以对浏览器记录进行修改。

当真正需要通过URL向后端发送HTTP请求的时候,比如常见的用户手动输入URL后回车,或者是刷新(重启)浏览器,这时候history模式需要后端的支持。因为history模式下,前端的URL必须和实际向后端发送请求的URL一致,例如有一个URL是带有路径path的(例如www.libai.wang/blogs/id),如果后端没有对这个路径做处理的话,就会返回404错误。所以需要后端增加一个覆盖所有情况的候选资源,一般会配合前端给出的一个404页面。

13.写出对路由懒加载的理解并写出它的用法

当打包构建应用时,JavaScript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就会更加高效。

Vue Router 支持开箱即用的动态导入,这意味着你可以用动态导入代替静态导入:

// 将

// import UserDetails from './views/UserDetails.vue'

// 替换成

const UserDetails = () => import('./views/UserDetails.vue')

const router = createRouter({

  routes: [{ path: '/users/:id', component: UserDetails }],

})

14.Vue2和vue3的响应式原理分别是什么,以及vue3为什么要更改实现响应式原理的方式

Vue2中使用的响应式原理是通过Object.defineProperty方法对数据进行劫持监听,从而实现数据的响应式更新。而Vue3中使用的响应式原理是基于ES6的Proxy实现的,通过Proxy对象代理数据,可以实现更高效的数据监听和更新,同时也可以监听到数组的变化。

15.说一下对vue3的理解以及新特性有哪些

Vue3 是 Vue.js 的最新版本,相比于 Vue2,它带来了许多变化和升级

新特性:

1)更快的渲染速度:Vue3 通过重写了 reactivity system 和 compiler,显著提高了渲染性能。

2)Composition API:Vue3 引入了 Composition API,允许开发者将一个组件的逻辑分割成可复用的逻辑代码块,提高了组件的可复用性,并且使代码更加清晰简洁。

3)Teleport:Teleport 是 Vue3 中新引入的功能,允许你将一个组件渲染到 DOM 树中的任何位置,使得像模态框这类弹出式组件的实现变得更加容易。

4)更好的 Typescript 支持:Vue3 深度整合了 Typescript,提供更好的类型检查和代码补全功能。

5)其他改进:Vue3 中还有一些其他的改进,如支持 Fragments、更好的警告和错误提示等等。

16.写一下setup函数的作用

setup函数是Vue3中引入的新特性,它是组件的一个选项,用于在组件初始化过程中执行一些逻辑操作。setup函数可以返回一个对象,该对象中包含组件中使用的响应式数据、方法等内容,可以通过解构赋值获取其中的内容。

17.Vue 3.x所采用的Composition Api 与Vue 2.x使用的Options Api 有什么区别

Vue 2.x使用的Options API是通过一个包含组件选项的对象来创建组件,包括data、methods、computed、watch等选项。而Vue 3.x采用的Composition API是通过函数的方式来组织组件的代码,可以将一个组件的相关逻辑组织在一起,提高代码的可读性和可维护性。

18.Vue 3.x中pinia有哪些核心属性以及在组件的使用?

pinia是Vue3中的状态管理库,具有以下核心属性:

$state:一个ref对象,用于存储状态数据。

$getters:一个包含所有状态的getter函数的对象。

$actions:一个包含所有操作状态的action函数的对象。

在组件中使用pinia,需要通过useStore方法来获取一个与组件相关联的状态管理对象。

19.Vue 3.x中生命周期函数相比Vue 2.x 有变化

Vue 3.x中的生命周期函数相比Vue 2.x发生了一些变化:

beforeCreate 和 created 已经合并成一个新的函数 setup。

deactivated 和 activated 已经被废弃,取而代之的是 beforeMount 和 beforeUpdate。因为在Vue3中,keep-alive组件被完全重写了,其默认行为现在与没有keep-alive一样。

20.写出Vue3中watch与watchEffect的区别

Vue3中的watch和watchEffect都用于监听数据的变化,但是它们之间有以下区别:

watch需要显式地监听数据变化,并且需要指定回调函数。在回调函数中可以处理数据变化的逻辑,也可以手动处理数据,因此灵活性更高。watch可以监听多个数据。

watchEffect则可以自动监听函数内部的响应式数据的变化,只要其内部引用的响应式数据发生变化,回调函数就会被调用。watchEffect不需要显式地声明监听哪些数据,因此代码更简洁,但也意味着它无法监听特定的数据。

21.写出对promise的理解,并用promise封装一个异步请求的方法

Promise是JavaScript中处理异步操作的一种机制。它代表了一个异步操作的最终完成或失败,并可以获取其结果。使用Promise可以更方便地管理异步代码,避免了回调地狱(callback hell)的问题,使代码更易读、可维护。

在Promise中,异步操作被封装在一个Promise对象中,它有三个状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。当异步操作完成时,可以通过resolve函数将Promise状态从pending变为fulfilled,并传递异步操作的结果;而在异步操作失败时,可以通过reject函数将Promise状态从pending变为rejected,并传递失败的原因。

22. 为什么vue中v-if和v-for不建议一起使用?

如果它们同时出现在同一个元素上时,会引起优先级和渲染问题。

实际上,v-for 的优先级高于 v-if。这是因为 Vue 在编译模板时,会先处理 v-for,然后再处理 v-if。这就意味着,当 v-if 和 v-for 出现在同一个元素上时,每次数据更新时都会重新运行 v-for 指令,相当于重新渲染整个列表,这可能会影响性能。

如果需要根据条件过滤或渲染列表中的某些元素,可以使用计算属性或者过滤器来解决问题。比如,我们可以将 v-for 循环放到一个计算属性中,然后在模板中使用计算属性来渲染数据,并在该计算属性中使用 v-if 来过滤数据,这样就可以避免 v-for 和 v-if 之间的优先级问题,同时也能更好地控制渲染结果。

 

23.自定义一个指令,实现v-show指令的功能

 

24. Vue的过滤器是什么?如何使用?定义一个倒序的过滤器

Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:

{{ message | capitalize }}

filters: {
capitalize: function (value) {
if (!value) return ''
return value.split(‘’).reverse().join(‘’)

}
}

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

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

相关文章

用于自动驾驶的大规模三维视觉语义地图的构建

文章&#xff1a;Vision-based Large-scale 3D Semantic Mapping for Autonomous Driving Applications 作者&#xff1a;Qing Cheng&#xff0c;Niclas Zeller&#xff0c;Daniel Cremers 编辑&#xff1a;点云PCL 欢迎各位加入知识星球&#xff0c;获取PDF论文&#xff0c;欢…

网络编程——Udp套接字

文章目录 1. 简单的UDP网络程序1.1 日志的打印1.2 服务端初始化1.3 启动服务器并提供服务1.4 客户端1.5 客户端发送的消息1.6 服务端的构造函数和析构函数1.7 本地测试1.8 服务端回复消息给所有客户端 1. 简单的UDP网络程序 我们把udp的协议封装成一个类。 下面我们就开始认识…

SpringBoot使用Swagger配置API接口文档

&#x1f4a7; 概述 Swagger是一个用于设计、构建和文档化 RESTful API 的开源框架。它提供了一组工具&#xff0c;使得开发人员能够更轻松地定义、描述和测试API接口。 具体来说&#xff0c;Swagger包含以下几个核心组件&#xff1a; Swagger规范&#xff08;Swagger Specif…

【CTF-Reverse】IDA动态调试,反调试技术

在本专栏前两篇文章中&#xff0c;带领大家讲解了逆向加密算法&#xff0c;AES,TEA,RC4&#xff0c;Base64加密算法&#xff0c;并带领大家识别各种密码算法特征&#xff0c;这一篇文章来带领大家学习在逆向过程中的动态调试&#xff1a;IDA动态调试&#xff0c;反调试技术。 …

5SHY3545L0016 3BHB020720R0002可控硅模块IGCT

​ 5SHY3545L0016 3BHB020720R0002可控硅模块IGCT 5SHY3545L0016 3BHB020720R0002可控硅模块IGCT 1) dcs系统往往具有丰富的自诊断功能。根据报警,可以直接找到故障点,并且还可通过报警的消除来验证维修结果。 2) 通信接头接触不良会引起通信故障,确认通信接头接触不良后,可以…

ssm企业网站的设计与实现-计算机毕设 附源码82639

ssm企业网站的设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中…

docker安装sentinel

关于如何安装docker 可以看我的这篇文章 ​​​​​​http://t.csdn.cn/3jKPm 第一步&#xff1a;拉取镜像 docker pull bladex/sentinel-dashboard 这里不加版本号默认拉取最新版本 第二步&#xff1a;查看已经安装的镜像 docker images 看到这个就是安装好了 第三步&…

基于Java+Swing实现飞机大战游戏

基于JavaSwing实现飞机大战游戏 一、系统介绍二、功能展示三、其他系统四、获取源码 一、系统介绍 基于Java的飞机大战游戏主要需要我方飞机和敌方飞机&#xff0c;还有子弹&#xff0c;特殊nPC&#xff0c;开始背景&#xff0c;结束背景&#xff0c;以及背景音乐。我方飞机可…

chatGPT对企业的发展有什么影响

ChatGPT目前正在全世界范围内掀起风暴&#xff0c;成为炙手可热的一个名词。作为基于人工智能的工具的最新产品&#xff0c;目前ChatGPT呈现给我们的似乎只是足够有趣&#xff0c;且从目前已知的信息来看&#xff0c;它似乎还没有任何商业运作相关的计划&#xff0c;大多应用聚…

webrtc stun协议

STUN&#xff08;Simple Traversal of User Datagram Protocol Through Network Address Translators&#xff09;&#xff0c;即简单的用UDP穿透NAT&#xff0c;是个轻量级的协议&#xff0c;是基于UDP的完整的穿透NAT的解决方案。它允许应用程序发现它们与公共互联网之间存在…

死磕AI大模型网络,鹅厂出招了!

2023年&#xff0c;以ChatGPT为代表的AIGC大模型全面崛起&#xff0c;成为了整个社会关注的焦点。 大模型表现出了强悍的自然语言理解能力&#xff0c;刷新了人们对AI的认知&#xff0c;也掀起了新一轮的“算力军备竞赛”。 大家都知道&#xff0c;AIGC大模型的入局门槛是很高的…

西门子S7-1200系列PLC输入/输出接线

西门子S7-1200是一款紧凑型、模块化的PLC&#xff0c;可完成简单逻辑控制、高级逻辑控制、HMI 和网络通信等任务。下面分享S7-1200系列PLC输入/输出接线图给大家。 CPU 1211C 接线图 CPU 1211C AC/DC/继电器 (6ES7 211-1BE40-0XB0) ① 24 VDC 传感器电源 ② 对于漏型输入将负…

KingbaseES的学习心得和知识总结(三)|Kingbase数据库性能调优工具sys_kwr插件的简介和使用

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、KingbaseES V8产品文档首页&#xff0c;点击前往 2、Kingbase 文档库&#xff0c;点击前往 3、北京人大金仓信息技术股份有限公司 官网首页&#xff0c;点击前往…

单片机——时间表程序加仿真

一、程序 #include <REG52.h> #include "main.h" sbit key1P3^0; sbit key2P3^1; sbit key3P3^2; sbit key4P3^3; sbit SWP1^0; unsigned char code SEG[]{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8E,0x86}; unsigned char i,cp,cp1,flash,key…

Python小白必看

Python学习计划&#xff1a; 1.先学习Python基础知识&#xff0c;包括&#xff1a; 变量、数据类型、运算符条件语句、循环语句函数、模块、包 2.掌握Python的常用库和框架&#xff0c;例如&#xff1a; NumPy&#xff1a;用于科学计算、数据分析等Pandas&#xff1a;用于数…

Vue表单验证,表单填写完成无法通过rules验证问题

表单校验使用的是ElementUI官网的表单校验规则&#xff0c;但是表单在填写完成后还是通不过校验&#xff0c;这就需要进行相应的检查 1.检查rules与ref&#xff0c;rules与ref的名字可以随便定义&#xff0c;但是要确保在这块写的与在data中定义的一致 2.检查<el-form-ite…

Pandas 解决保存H5文件发生异常问题

代码&#xff1a; #保存h5文件 #指定文件路径和读写模式 hdpd.HDFStore(mystock.h5,w) #将my的数据存入到hd中 hd[data]my #关闭文件 hd.close() 发生异常&#xff1a; 原因&#xff1a;缺少pytables 解决&#xff1a; 执行命令 pip install tables 安装好之后重启jupyter内核…

2023年1月至4月天猫平台美妆品类销售数据分析

如今&#xff0c;随着人们消费观念的突破&#xff0c;越来越多的人用美妆来诠释个性表达&#xff0c;美丽经济获得更多关注&#xff0c;化妆品消费理念逐渐增强&#xff0c;因此&#xff0c;美妆市场也形成了较大的规模。 根据鲸参谋电商数据显示&#xff0c;2023年1月至4月&am…

争取一文说透NuGet

一、NuGet是什么? NuGet是一个为大家所熟知的Visual Studio扩展&#xff0c;通过这个扩展&#xff0c;开发人员可以非常方便地在Visual Studio中安装或更新项目中所需要的第三方组件&#xff0c;同时也可以通过NuGet来安装一些Visual Studio的插件等。 二、官网&#xff1a;…

驱动开发:内核读写内存多级偏移

让我们继续在《内核读写内存浮点数》的基础之上做一个简单的延申&#xff0c;如何实现多级偏移读写&#xff0c;其实很简单&#xff0c;读写函数无需改变&#xff0c;只是在读写之前提前做好计算工作&#xff0c;以此来得到一个内存偏移值&#xff0c;并通过调用内存写入原函数…