版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Vue真实面试题及答案(接地气版)一、Vue基础高频题1.说说Vue2和Vue3的核心区别?不用讲虚的,日常开发最直观的区别:1)响应式原理不同:Vue2用Object.defineProperty,只能监听对象已有属性、数组特定方法,新增/删除属性、数组下标修改监听不到,需要$set处理;Vue3用Proxy,直接监听整个对象,支持新增、删除、数组所有操作,无死角监听。2)API风格:Vue2选项式API(Options),代码分散,复杂组件逻辑杂乱、复用麻烦;Vue3组合式API(Setup),按功能聚合代码,逻辑复用、抽离自定义钩子更方便。3)生命周期:Vue3移除了beforeCreate、created,统一在setup中写;部分钩子更名(如destroyed改为unmounted),同时支持选项式和组合式两种写法。4)性能&体积:Vue3重写了虚拟DOM,编译做了静态提升、补丁标记,渲染更快;支持tree-shaking,按需引入,打包体积更小。5)数据初始化:Vue2组件data必须是函数;Vue3组合式直接定义响应式数据,无需顾虑这个问题。2.v-if和v-for为什么不建议一起用?优先级谁高?优先级:Vue2中v-for优先级高于v-if;Vue3反过来,v-if优先级更高。核心问题:Vue2里一起用,会先循环渲染所有列表,再判断条件隐藏节点,造成不必要的循环渲染,极度浪费性能。Vue3虽然先判断条件再循环,但逻辑不清晰、可读性差,后续维护容易出bug。正确写法:外层用template包裹,v-if写在外层,v-for写在内层;或者直接用computed提前过滤列表数据。3.Vue中key的作用,为什么不能用index、random做key?key作用:虚拟DOMdiff算法的唯一标识,用来精准对比新旧节点,避免就地复用DOM,减少不必要的DOM渲染,提升更新性能。为什么不用index:数组删除、插入、排序时,后续元素index会批量变化,导致diff匹配错乱,触发不必要的DOM更新,严重时会造成表单输入错乱、列表闪烁问题。为什么不用random:每次渲染都会生成新随机数,key每次都变,diff完全无法复用节点,相当于每次都全量重新渲染列表,性能极差。最佳实践:用后端返回的唯一ID(id、uuid)做key。4.说说Vue单向数据流?子组件能不能修改props?Vue规定props是单向数据流:父组件数据更新会自动传给子组件,子组件不能直接修改props数据。直接修改的问题:控制台会报错,且会导致父组件数据被意外篡改,数据流混乱,排查bug极难。正确修改方式:1)基础类型数据:子组件定义本地data/ref变量,接收props初始值,修改本地变量;2)需要同步父组件:子组件触发emit事件,通知父组件修改;3)对象类型props:可以修改属性值(因为引用地址不变),但绝对不推荐,隐性修改会导致数据流不可控。二、Vue核心原理面试题1.简单说下Vue响应式原理(Vue2/Vue3分开说)Vue2响应式:通过Object.defineProperty劫持对象的get、set方法。数据读取时收集依赖(watcher),数据修改时触发更新,重新渲染视图。缺陷:无法监听对象新增/删除属性、数组下标修改、数组长度修改,需要依赖$set、$forceUpdate兜底。Vue3响应式:基于ES6Proxy代理整个对象,拦截读取、修改、删除、新增等所有操作,监听无死角。搭配track收集依赖、trigger触发更新,同时用effect管理副作用,响应式更全面、性能更好。2.虚拟DOM是什么?为什么需要虚拟DOM?虚拟DOM就是用JS对象模拟真实DOM结构,包含节点类型、属性、子节点等信息。为什么用它:真实DOM操作极其消耗性能,频繁增删改DOM会造成大量重排重绘。虚拟DOM会先在JS层对比新旧节点差异(diff算法),只把差异部分更新到真实DOM,最小化DOM操作,大幅提升渲染性能。同时实现了跨平台,一套虚拟DOM可以适配Web、小程序、移动端。3.Diff算法的核心流程?只说面试核心、工作常用的:diff是同层对比,不会跨层级比较,降低复杂度。1)先对比节点类型:类型不同,直接销毁旧节点、创建新节点;2)类型相同,对比属性,更新差异属性;3)子节点对比:优先复用key相同的节点,通过头尾指针遍历,处理新增、删除、移动节点,最大化复用DOM;4)最后处理多余旧节点删除、新增新节点。4.computed和watch的区别和使用场景?computed(计算属性):基于依赖缓存,依赖不变就不会重新计算,页面渲染自动触发,惰性更新。只适合数据计算、派生数据(比如筛选列表、拼接文本、数值计算)。不支持异步。watch(监听):数据变化就触发函数,无缓存,支持异步操作、复杂逻辑。适合数据变化后执行动作(比如监听搜索框变化请求接口、监听路由变化、修改数据后弹窗提示)。总结:能⽤computed绝不⽤watch,复杂异步逻辑用watch。三、Vue路由&状态管理1.vue-router两种模式区别?hash模式:地址带#号,#后面的内容不会传给后端,改变hash不会刷新页面。兼容性好,无需后端配置,但地址不美观。history模式:地址无#,和正常网页地址一致,更美观。基于H5historyAPI,刷新页面会请求后端地址,需要后端配置重定向,否则刷新404。2.路由守卫有哪些?全局守卫执行顺序?常用守卫:全局前置守卫beforeEach、全局解析守卫beforeResolve、全局后置守卫afterEach、路由独享守卫beforeEnter、组件内守卫。执行顺序:beforeEach=>路由独享beforeEnter=>组件内beforeRouteEnter=>beforeResolve=>afterEach。日常开发最常用beforeEach做全局登录鉴权、页面权限控制。3.Vuex/Pinia的区别,为什么Vue3推荐Pinia?Vuex问题:模板代码多、概念繁琐(state/mutations/actions/getters),强制mutations同步修改数据,异步必须走actions,代码冗余;TS类型支持差;模块嵌套复杂。Pinia优势:去掉了mutations,同步异步都直接写actions,代码极简;天然支持TS,类型推导完美;无模块嵌套,每个仓库独立;支持按需引入、热更新,体积更小,上手成本极低。现在Vue3新项目基本全部用Pinia,Vuex只存在于老项目维护中。四、Vue工程化&实战坑点1.Vue组件通信方式有哪些?适用场景?1)父子通信:props/emit(最常用,简单父子传值)2)祖孙跨级通信:provide/inject(深层组件传值,不用层层透传)3)兄弟/任意组件通信:全局事件总线(Vue2)、mitt(Vue3)、Pinia/Vuex(复杂全局状态)4)属性透传:$attrs/$listeners(高阶组件封装)5)直接实例访问:$parent/$children/ref(不推荐,耦合度太高)2.Vue性能优化你做过哪些?(实战向)不说空话,都是项目常用优化手段:1)列表优化:长列表用虚拟滚动,避免一次性渲染大量DOM;key用唯一ID,不用index;v-for和v-if拆分写法。2)数据优化:合理用computed缓存数据;频繁触发的事件用防抖节流;销毁组件时清除定时器、监听事件,防止内存泄漏。3)渲染优化:静态内容用v-once只渲染一次;频繁不变的数据冻结Object.freeze,取消响应式,减少监听开销。4)工程打包优化:路由懒加载、组件按需引入;图片压缩、资源CDN;开启gzip压缩;去除无用依赖。5)更新优化:合理拆分组件,避免单组件代码臃肿,减少不必要的组件更新。3.组件销毁时需要手动清理什么?为什么?必须手动清理:定时器、延时器、全局事件监听、自定义事件、DOM事件绑定、WebSocket连接。原因:Vue组件销毁只会清空组件自身的响应式数据和DOM,不会清理全局挂载的事件和定时器,不清理会造成内存泄漏、定时器叠加、页面卡顿、接口重复请求。4.为什么Vue3要用setup语法糖?1)代码更简洁,无需return变量、方法,减少冗余代码;2)逻辑聚合,同一功能的变量、方法写在一起,维护性更高;3)天然适配TS,类型推导更顺畅;4)无需关心this指向问题,彻底摆脱this陷阱。五、高频手写/场景题1.怎么实现组件懒加载?路由懒加载(最常用):constHome=()=>import('@/views/Home.vue')组件内懒加载:配合defineAsyncComponent实现组件按需引入,减少首屏打包体积。2.怎么解决Vue页面刷新后state数据丢失?Pinia/Vuex数据存在内存中,页面刷新会重置,解决方案:1)手动监听页面刷新,将核心数据存入localStorage/sessionStorage;2)项目中直
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办公室业务培训课件
- 2026医师定期考核-人文医学简易程序医师定期考核历年题库含答案
- 2026年预防定期考核模拟题库带答案(巩固)
- 2026年西藏高一化学月考真题试题及答案
- 2026年世界防治结核病日知识试题与答案
- 2026年监理工程师《案例分析【水利】》真题及答案解析
- 2026年安全生产知识竞赛题库附完整答案(全优)
- 2025年注册安全工程师考试化工安全专业实务试卷及答案
- 2025年学生综合心理测试题库及答案
- 办公室图形课件
- 2025年中国人寿保险招聘考试历年参考题库含答案详解(5套卷)
- 阿拉善盟教师招聘真题2025
- 2026年法学商法反垄断法竞争行为试题及答案
- 湖南省长沙市2026-2027学年高一上学期期中考试语文自编卷(范围:统编版必修一1-4单元)(原卷版)
- 小学六年级英语Unit 4 Managing money well B Let's learn教学设计
- 路基清表安全技术交底培训
- 休闲垂钓乐园项目规划设计方案
- 2025官方国标|高质量数据集格式要求(TC609-5-2025-02 完整版)
- 高考英语3500词汇(电子版)
- 电动工具培训
- 国家管网笔试试题及答案
评论
0/150
提交评论