版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Vue高频面试题及详细答案(实战版)一、Vue基础核心面试题1、说说Vue2和Vue3的核心区别?整体最大的变化是底层架构、响应式原理、代码组织方式和性能优化,日常开发体感差异非常大,具体核心区别如下:1.响应式原理不同Vue2基于Object.defineProperty实现,只能监听对象的已有属性,无法监听新增、删除属性,也不支持数组下标修改、数组长度修改的监听。所以项目里经常需要用$set、$delete解决更新失效问题。Vue3基于Proxy实现,可以直接监听对象新增/删除属性、数组任意修改、嵌套对象深层变化,无需手动处理响应式缺失的问题,覆盖范围更全面。2.代码组织方式不同Vue2主要用OptionsAPI,按照data、methods、computed、watch分类写代码,大型组件中,同一个业务逻辑的代码会分散在各个选项里,维护起来麻烦。Vue3支持CompositionAPI,可按业务逻辑聚合代码,把一个功能的变量、方法、监听写在一起,还能抽离独立组合函数复用,适合中大型项目。同时完全兼容OptionsAPI,老项目迁移无压力。3.生命周期与钩子变化Vue3移除了beforeCreate、created对应的组合式钩子,用setup函数替代;部分钩子改名,比如beforeMount对应onBeforeMount,mounted对应onMounted,同时新增了onRenderTracked、onRenderTriggered调试钩子。4.性能与体积优化Vue3做了模板编译优化,静态节点直接跳过diff,动态节点精准对比;同时采用按需引入,打包体积更小,初始渲染和更新渲染速度都比Vue2快很多。5.数据初始化差异Vue2的data必须是函数,防止组件实例数据污染;Vue3组合式API中直接定义变量即可,写法更简洁。2、Vue响应式原理的核心流程是什么?响应式的核心就是数据劫持+依赖收集+派发更新,Vue2和Vue3流程逻辑一致,只是劫持方式不同,具体流程:1.数据劫持:对组件内的响应式数据进行劫持,拦截数据的读取、修改操作;2.依赖收集:组件渲染模板时,会读取响应式数据,此时触发getter,将当前渲染的Watcher收集到数据的依赖池中;3.派发更新:当数据被修改时,触发setter,遍历依赖池中的所有Watcher,通知对应的组件重新渲染、更新视图。简单说就是:读取数据时记录谁在用,修改数据时通知使用者更新。3、v-if和v-for为什么不建议一起使用?优先级谁高?优先级:Vue2中v-for优先级高于v-if;Vue3中v-if优先级高于v-for。不管哪个版本,都不建议混用,核心问题是性能浪费:1.Vue2中,会先循环渲染所有列表项,再根据条件判断是否隐藏,哪怕条件不成立,也会执行完整的循环逻辑,完全无效消耗性能;2.Vue3中,先判断条件,条件不成立时不会循环,看似优化,但如果条件依赖循环项的变量,会直接报错,取不到变量;正确写法:外层用template包裹,v-if写在外层,v-for写在内层,先判断条件再循环。4、key的作用是什么?为什么不建议用index作为key?key的核心作用:作为虚拟DOM节点的唯一标识,帮助diff算法精准识别新旧节点,判断节点是新增、删除、还是复用,减少不必要的DOM渲染,提升更新性能。不建议用index做key的原因:1.列表进行删除、插入、排序操作时,数组下标会发生变化,导致key错乱;2.diff算法会误判节点,本该复用的节点无法复用,需要重新渲染;3.会导致列表绑定的输入框内容、选中状态错乱,出现业务bug;最佳实践:使用后端返回的唯一id、唯一标识作为key。5、Vue组件的生命周期有哪些?各自的使用场景?生命周期就是组件从创建、挂载、更新、销毁的完整过程,常用钩子及场景:创建阶段setup(Vue3)/created:组件实例创建完成,数据、方法已初始化,可发起接口请求、初始化数据,此时DOM未生成,无法操作DOM。挂载阶段onMounted/mounted:DOM渲染完成,页面节点已挂载,可操作DOM、获取DOM元素、初始化第三方插件(表格、图表、富文本等)。更新阶段onUpdated/updated:数据修改、视图更新完成后触发,可处理更新后的DOM操作,避免在这个钩子频繁修改数据,容易造成死循环。销毁阶段onUnmounted/beforeUnmount:组件销毁前触发,核心用来清理定时器、监听事件、全局订阅、第三方实例,防止内存泄漏。二、Vue核心原理面试题1、说说虚拟DOM的理解,为什么需要虚拟DOM?虚拟DOM就是用JS对象模拟真实DOM结构,包含节点标签、属性、子节点等信息,是真实DOM的映射。为什么要用虚拟DOM:1.真实DOM操作开销极大,频繁修改DOM会造成页面重排重绘,性能很差;2.数据更新时,Vue会先生成新的虚拟DOM,通过diff算法对比新旧虚拟DOM的差异,只把差异部分更新到真实DOM,实现最小化DOM更新;3.具备跨平台能力,虚拟DOM是JS对象,可适配web、小程序、APP等多端渲染。2、Vuediff算法的核心逻辑是什么?diff算法核心是同层比较、不跨层对比,只对比同一层级的虚拟DOM,大幅降低对比复杂度,具体流程:1.先对比新旧节点的标签、key,不一致直接销毁旧节点、创建新节点;2.节点一致,对比属性,更新差异属性;3.核心子节点对比:Vue采用双端对比+最长递增子序列优化,优先对比首尾节点,复用可复用节点,对新增、删除、移动的节点精准处理,最大化减少DOM操作。整体目的就是:尽可能复用原有DOM,只更新变化的部分,提升渲染效率。3、computed和watch的区别和使用场景?核心区别1.计算属性computed:依赖缓存,只有依赖的数据变化才会重新计算,支持return返回值,是属性,模板中直接使用;默认只读,可手动开启读写。2.监听watch:无缓存,数据每次修改都会触发回调,是方法,不支持返回值,主要用来监听数据变化执行异步、复杂逻辑。使用场景computed:简单的数据计算、数据筛选、格式化(比如价格计算、列表过滤、大小写转换),优先用computed,性能更好。watch:异步请求、复杂业务逻辑、数据变化后执行多步操作、监听路由变化、深度监听对象数组。4、Vue异步更新机制(nextTick原理)?Vue为了提升性能,数据更新是异步的。当我们修改数据后,视图不会立刻更新,而是将更新操作缓存到队列中,等同一事件循环的所有代码执行完毕,再统一执行视图更新,避免频繁修改数据造成多次DOM渲染。nextTick作用:获取更新后的真实DOM。修改数据后,立刻通过nextTick回调,就能拿到最新渲染完成的DOM节点,进行DOM操作。执行优先级:Promise.then>MutationObserver>setTimeout,优先使用微任务执行,保证更新速度。三、Vue路由与状态管理1、Vue路由的导航守卫有哪些?执行顺序?常用导航守卫分为全局守卫、路由独享守卫、组件内守卫,完整执行顺序:1.全局前置守卫beforeEach2.路由独享守卫beforeEnter3.组件内前置守卫beforeRouteEnter4.全局解析守卫beforeResolve5.全局后置守卫afterEach常用场景:beforeEach做全局登录鉴权、页面权限控制;afterEach做页面标题修改、页面访问统计。2、路由懒加载的原理和作用?原理:利用ES6动态import语法,实现组件按需加载,只有访问对应路由时,才会加载该路由的组件代码。作用:打包时将路由组件分割为独立chunk文件,避免首屏加载所有组件代码,减小首屏打包体积,提升页面首屏加载速度,优化用户体验。3、Pinia和Vuex的区别?为什么现在推荐用Pinia?1.结构更简洁:Pinia移除了Vuex繁琐的mutations,只有state、getters、actions,代码更简洁,上手成本低;2.无需同步操作:Vuex强制同步修改state(mutations)、异步放actions,限制多;Pinia支持直接修改state,actions可同步可异步,更灵活;3.模块天然隔离:Pinia每个仓库独立,无需modules嵌套,不存在命名空间冲突问题;4.TS支持更好:类型推导更精准,适配大型项目;5.体积更小、调试更方便。日常开发中,Vue3项目基本全部使用Pinia,Vuex仅用于老旧项目维护。四、Vue实战高频坑点&优化题1、Vue数据更新视图不更新的常见原因及解决方案?Vue2常见原因1.直接给对象新增、删除属性,无响应式;解决方案:使用$set、$delete,或初始化时定义所有属性;2.通过数组下标修改元素、修改数组长度,无响应式;解决方案:用splice、push、filter等数组变异方法,或$set;3.数据层级过深,视图未刷新;解决方案:深度监听、手动调用$forceUpdate强制更新;4.异步赋值时机错误,数据覆盖。Vue3基本不会出现此类问题,Proxy可监听所有数据变化。2、Vue性能优化的常用手段?1.代码层面优化优先用computed缓存计算结果;合理使用v-once渲染静态内容;v-show替代频繁切换的v-if;拆分大型组件,避免单组件代码冗余。2.列表渲染优化长列表使用虚拟列表,只渲染可视区域DOM;避免用index做key;v-for外层避免嵌套v-if。3.打包优化路由懒加载、组件按需引入;UI库按需导入;打包剔除冗余代码、开启gzip压缩。4.事件与内存优化组件销毁前清空定时器、监听事件、全局订阅;避免全局变量滥用;合理使用防抖节流优化高频事件(滚动、输入、点击)。5.渲染优化Vue3利用静态提升、补丁标记等编译优化,减少diff开销。3、组件传值的所有方式有哪些?1.父子传值:父传子props;子传父$emit;2.多层级传值:provide/inject跨层级透传;3.兄弟/任意组件传值:全局事件总线(Vue2)、mitt(Vue3)、Pinia/Vuex状态管理;4.简单数据共享:全局挂载变量、本地缓存(localStorage、sessionStorage);5.组件实例通信:$parent、$children、$r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026银行跳槽面试题目及答案试卷及答案
- 2026年医疗质量度工作总结报告(3篇)
- 2026年项护理核心制度试题及答案
- 2026年农村经济与管理专业考试试卷及答案
- 2026年火灾应急疏散演练方案
- 2026年公需课《人工智能赋能制造业高质量发展》试题及答案
- 2026年炊事专业考核考前冲刺测试卷(历年真题)附答案详解
- 2025年食品安全考试题及答案
- 2025年血吸虫病题库及答案
- 2026年法律科技生态系统:合同审查工具的互联互通
- 《TCWTCA装配式高桩码头节点连接技术规程》
- 2026年校招:中国国际航空试题及答案
- 2026中国建设银行招聘考试(信息技术类)历年参考题库含答案详解
- 2026年工贸企业有限空间作业专项整治考核试卷及答案
- 天津市南开区2025-2026学年九年级上学期期中质量检测历史试题(含答案)
- 2025年国家电网考试历年真题库(附参考答案)
- 既有线施工安全注意事项培训课件
- 2026届江西重点中学协作体高三第二次联考政治试卷
- 危险化学品安全管理2026年培训
- 小学生对自然观察活动的参与体验与科学素养培养课题报告教学研究课题报告
- 2026年江苏南京公开国企招聘真题试题及答案
评论
0/150
提交评论