版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Vue高级面试题及详细答案(实战向、无模板化)一、Vue核心原理类(高频进阶)1.说说Vue2和Vue3响应式原理的核心区别,以及各自的缺陷参考答案:Vue2响应式核心是Object.defineProperty,通过劫持对象的get/set方法实现数据监听。它的问题很明显:只能监听对象已有属性,新增、删除属性无法触发更新;同时不支持数组下标修改、数组长度修改的监听,所以Vue2需要$set方法手动触发响应。另外,面对层级很深的大对象,初始化会一次性递归遍历所有属性,初始化性能差。Vue3改用Proxy实现响应式,直接代理整个对象,解决了Vue2的所有痛点:可以监听属性新增、删除、数组下标和长度修改,无需$set。并且Vue3是懒递归,只有用到的属性才会递归劫持,大幅提升初始化性能。但Proxy也有短板:无法监听原始值(字符串、数字、布尔等),所以Vue3单独设计了ref来处理基本数据类型;同时Proxy代理的是对象引用,直接替换整个对象地址可以响应,但部分特殊场景需要手动处理原始对象。2.Vue3中ref和reactive的区别,以及使用场景如何选择参考答案:首先核心差异:ref可以处理基本数据类型和引用类型,reactive只能处理引用类型(对象、数组)。ref底层是通过给值包裹一层value属性,再通过Proxy代理这个对象实现响应式,使用时脚本层需要.value取值,模板中会自动解包,不用写.value。reactive直接代理目标对象,无需多余的value字段,结构更简洁。但它有个致命问题:解构会丢失响应式,直接const{a}=obj拿到的变量不是响应式的,需要用toRefs或者toRef处理。使用场景总结:1.基本数据类型(字符串、数字、布尔、null、undefined)统一用ref;2.简单、单层的对象/数组,需要解构赋值的场景,优先用ref;3.复杂多层对象、表单对象、状态集合,不需要频繁解构,用reactive更清爽。3.双向绑定的原理是什么?Vue单向数据流和双向绑定冲突吗?参考答案:Vue双向绑定是数据劫持+视图更新的语法糖,核心逻辑:数据变化自动更新视图,视图变化(输入事件)自动更新数据。本质是单向数据流:父组件数据单向传递给子组件,双向绑定只是在视图层做了事件监听封装。v-model本质是:value绑定+@input事件的组合。两者完全不冲突。Vue严格禁止子组件直接修改父组件传入的props,就是为了保证单向数据流清晰、可追溯;而双向绑定只作用于当前组件内部状态,自定义组件的v-model也是通过事件派发更新父数据,不会直接修改props,所以不会破坏单向数据流。4.Vue虚拟DOM的作用是什么?为什么不直接操作DOM?参考答案:虚拟DOM就是用JS对象模拟真实DOM结构,保存节点标签、属性、子节点等信息。直接操作真实DOM最大的问题是DOM操作开销极高,浏览器会触发重排重绘,频繁修改页面会造成严重卡顿。而JS运算速度远快于DOM操作。虚拟DOM的核心价值:数据更新时,先生成新的虚拟DOM树,通过diff算法对比新旧虚拟DOM,只找出差异部分更新真实DOM,极大减少DOM操作次数,提升页面性能。补充:Vue3重写了diff算法,增加了静态提升、PatchFlag标记,只对比动态节点,比Vue2的全量对比性能提升很多。5.详细说下Vuediff算法流程,key的作用以及key重复的后果参考答案:diff核心逻辑是同层对比、不跨层级比较,逐层对比虚拟DOM节点,分为三步:1.先对比新旧节点根标签,标签不同直接销毁旧节点、新建新节点;2.标签相同,对比属性,更新差异属性;3.对比子节点,优先执行头尾指针快速比对,处理头部新增、尾部删除、头尾移位场景,最后处理未知乱序节点,通过key建立新旧节点映射关系,复用可复用节点。key的作用:作为节点唯一标识,让diff算法精准识别新旧节点对应的关系,最大化复用DOM节点,避免不必要的销毁重建。key重复的后果:算法无法正确匹配节点,会出现DOM错乱、数据渲染错位、表单值残留、样式错乱等问题,严重时导致页面功能异常。很多人图方便用index做key,列表频繁增删排序时,index会变化,同样会导致节点复用错误,不推荐使用。二、Vue3进阶知识点(必问)1.setup语法糖的优缺点,setup执行时机参考答案:setup是Vue3组合式API的核心执行函数,执行时机在beforeCreate之前,此时组件实例还未创建,所以无法使用this。setup语法糖(<scriptsetup>)优点:1.代码更简洁,无需手动return变量和方法,模板可直接使用;2.无需手动定义props、emits选项,通过defineProps、defineEmits直接声明;3.自带顶层响应式,无需过多冗余代码,编译优化更好。缺点:1.所有代码默认顶层执行,无法使用组件选项式的一些配置,写法单一;2.新手容易逻辑混乱,大量业务代码堆在顶层,不注意拆分会导致文件臃肿;3.无法在setup内部获取组件实例this。2.computed和watch的区别,各自适用场景,以及watch深度监听原理参考答案:核心区别:1.computed是计算属性、惰性缓存,依赖值不变就不会重新计算,有返回值,支持缓存;watch是监听函数,数据变化就触发回调,无缓存,主要用于副作用操作。2.computed是同步执行,不能处理异步逻辑;watch支持异步操作。使用场景:简单数据推导、多数据合并、过滤计算,用computed;数据变化后需要执行异步请求、修改DOM、操作缓存、多复杂副作用,用watch。深度监听:watch默认只监听第一层数据,监听对象内部属性变化需要开启deep:true。原理是递归遍历监听对象的所有属性,为每一个属性绑定监听事件,所以深度监听开销较大,尽量精准监听具体属性,不监听整个大对象。3.Vue3生命周期和Vue2的差异,常用进阶生命周期使用场景参考答案:Vue3兼容Vue2生命周期,只是组合式API中名称全部改为onXXX形式,核心差异:1.移除了beforeCreate、created,功能合并到setup中;2.新增onRenderTracked、onRenderTriggered用于调试依赖收集和更新触发;3.销毁生命周期改名:beforeDestroy→beforeUnmount,destroyed→unmounted。进阶场景:onMounted:DOM渲染完成,适合接口请求、DOM操作、初始化第三方插件;onBeforeUnmount:组件卸载前清除定时器、监听事件、解绑全局订阅,防止内存泄漏;onUpdated:组件更新完成,适合更新后DOM二次处理。4.组合式API和选项式API的优劣,为什么推荐组合式API参考答案:选项式API按照功能分类(data、methods、computed、watch),新手友好,但大型组件逻辑分散,同一个业务逻辑会拆分在不同选项中,维护困难,且复用逻辑只能靠mixins,容易出现命名冲突、来源不清晰的问题。组合式API可以按业务逻辑聚合代码,同一个功能的变量、方法、监听放在一起,逻辑高度内聚。同时通过hooks抽离公共逻辑,复用更清晰,无命名冲突,TS类型支持更好。缺点是小型简单页面会显得代码稍繁琐,学习成本更高。整体来看,中大型项目优先组合式API,小型页面可灵活选择。三、Vue性能优化实战(高阶重点)1.日常开发中Vue页面性能优化的具体方案(落地可执行)参考答案:1.减少不必要的渲染:静态内容使用v-once只渲染一次,不变的数据不放在响应式中;2.列表优化:长列表使用虚拟列表,避免一次性渲染大量DOM;列表key不用index,避免节点复用异常;3.响应式优化:大对象、静态数据用markRaw取消响应式,减少监听开销;无需响应式的数据直接定义普通变量;4.计算与监听优化:多用computed缓存计算结果,减少重复运算;精准监听属性,不整对象深度监听;5.组件优化:合理使用defineProps精准传参,避免无效props传递;频繁切换组件用keep-alive缓存,避免重复创建销毁;6.打包优化:路由懒加载、组件按需引入、图片资源压缩、去除冗余依赖;7.内存优化:组件卸载时清除定时器、事件监听、全局订阅、DOM事件,杜绝内存泄漏。2.keep-alive的作用、缓存机制,以及activated、deactivated生命周期参考答案:keep-alive是Vue内置缓存组件,用于缓存组件实例,避免组件频繁切换时重复创建、销毁、请求接口,大幅提升页面切换性能。缓存机制:组件首次渲染后,实例会被保存在内存中,再次切换回来直接复用缓存实例,不会执行onMounted等初始化生命周期。专属生命周期:activated:缓存组件进入页面时触发,可用于刷新页面数据、更新状态;deactivated:缓存组件离开页面时触发,可用于暂停定时器、保存页面状态。同时可以通过include、exclude、max属性控制缓存组件和最大缓存数量,避免内存占用过高。3.什么是Vue内存泄漏?常见场景和解决方式参考答案:Vue组件销毁后,本该被回收的内存因为存在持续引用,无法被浏览器垃圾回收,就会造成内存泄漏,长期积累会导致页面卡顿、崩溃。常见场景:1.全局事件监听、window事件绑定未移除;2.定时器、延时器未清除;3.第三方图表、编辑器、播放器实例未销毁;4.全局订阅、事件总线监听未取消。解决方式:在onBeforeUnmount生命周期中,手动清除所有定时器、解绑事件、销毁第三方实例、取消订阅,切断所有引用。四、Vue工程化与实战坑点1.Vue组件通信的所有方式,以及各自适用场景参考答案:1.props/emits:父子组件基础通信,最常用、最规范,适合简单父子传值;2.defineExpose/ref:父组件获取子组件实例,调用子组件方法、获取子组件数据,适合主动操控子组件;3.provide/inject:祖孙、跨多级组件传值,无需逐层传递,适合全局状态、主题、配置等通用数据;缺点是响应式不直观,数据修改难以追溯;4.mitt事件总线:平级组件、任意组件通信,适合简单轻量项目的跨组件事件传递;5.Pinia:全局状态管理,适合中大型项目,统一管理全局用户信息、权限、全局配置、列表状态等;6.本地存储(localStorage、sessionStorage):跨页面、刷新页面保留数据,非实时通信,适合持久化静态数据。2.Pinia相比Vuex的优势参考答案:1.去除了Vuex繁琐的mutations,直接修改state,代码更简洁,无需冗余的同步方法;2.模块天然隔离,无需手动配置modules,每个store独立,互不干扰;3.完美支持TS,类型推导更精准,适配大型项目;4.无需命名空间,使用简单,上手成本低;5.支持插件、持久化,生态完善,同时保留了action异步处理能力。3.v-if和v-for为什么不能一起用?正确写法是什么参考答案:Vue编译优先级中,v-for优先级高于v-if。如果两者同写在一个标签上,会先循环渲染所有列表,再根据条件判断隐藏节点,造成无效循环、性能浪费,数据量大时页面卡顿严重。正确写法:1.外层用template包裹,v-if写在template上,v-for写在内部标签,先判断再循环;2.优先通过computed过滤列表数据,直接渲染过滤后的数组,从根源减少循环次数,性能最优。4.Vue刷新页面后数据丢失的原因和解决方案参考答案:原因:Pinia/Vuex状态是保存在内存中的,页面刷新后内存重置,所有全局状态会清空,导致数据丢失。解决方案:1.使用pinia-plugin-persistedstate持久化插件,自动将state缓存到本地;2.核心数据手动存入localStorage、sessionStorage,页面初始化时读取缓存赋值;3.登录态、权限等核心数据,页面刷新后重新请求接口初始化。五、手写原理高频面试题1.简单说下Vue双向绑定手写核心思路参考答案:1.定义数据,通过劫持方式监听数据变化;2.数据变化时自动更新视图;3.给输入框绑定input事件,视图输入变化时,更新数据值;4.实现数据和视图的双向联动,核心就是数据劫持+事件监听。2.手写简易防抖、节流(Vue项目常用)参考答案:防抖:触发事件后延迟执行,期间再次触发重置计时,多用于输入框搜索functiondebounce(fn,delay=300){
lettimer=null
returnfunction(...args){
if(timer)clearTimeout(timer)
timer=set
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026浙江高考试题-2026年浙江高考试题及答案
- 2026年医疗质量自查报告及整改措施(六篇)
- 2026年消防安全教育培训测试题有答案
- 2026年安徽高一化学月考真题试题及答案
- 2025年政府采购履约验收业务考试真题及答案
- 2025年注册安全工程师考试真题含答案(建筑施工安全)
- 2025年血细胞形态学考试题及答案
- 表格设计成课件
- AgentCore 企业智能体构建与治理沙龙上海站 -让智能体成为企业的生产力 Agent Native 基础设施、平台与组织探索
- 2025-2026版江苏小学六年级科学下学期试卷
- 河南省开封市2026届高三下学期第二次质量检测数学试题(解析版)
- 2026年消防月活动主题宣贯课件
- 2026年云南云瑞水务有限公司社会公开招聘(25人)考试参考题库及答案详解
- 涂装废气RCO治理设备运维管理手册
- GB/T 18247.3-2026主要花卉产品等级第3部分:盆栽观叶植物
- 中国水稻研究所陵水试验基地建设项目水土保持报告表
- 亚细胞定位研究方法
- 自理能力评分
- 智联行测eas题库2026
- GSP 药品经营质量管理规范培训课件
- 接触器更换方法
评论
0/150
提交评论