版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Vue前端高频面试题及详细答案(实战向)一、Vue基础核心面试题1、说说Vue的核心特性有哪些?结合实际开发,Vue最核心的特性主要有五点,都是日常开发高频用到的:第一是数据双向绑定,通过数据驱动视图,不用手动操作DOM,修改数据页面自动更新,大幅简化DOM操作逻辑,提升开发效率。第二是组件化开发,可以把页面拆分成多个独立、可复用的组件,每个组件有自己的模板、样式和逻辑,方便代码复用、维护和团队协作。第三是虚拟DOM,不会直接操作真实DOM,通过虚拟DOM对比新旧节点差异,精准更新变化的DOM,减少重排重绘,提升页面渲染性能。第四是生命周期,组件从创建、挂载、更新到销毁有完整的生命周期钩子,方便我们在对应阶段执行初始化、请求数据、清理定时器等逻辑。第五是指令系统,内置v-for、v-if、v-show、v-bind、v-on等常用指令,快速实现列表渲染、条件展示、属性绑定、事件绑定等功能。2、v-if和v-show的区别?实际项目中怎么选择?核心区别:1、渲染原理不同:v-if是真正的条件渲染,条件为false时,组件/元素不会被创建,DOM节点直接不存在;条件为true时才会初始化渲染。v-show只是控制CSS的display属性,不管条件真假,DOM节点都会提前渲染,只是通过样式控制显示和隐藏。2、切换开销不同:v-if切换开销大,每次切换都会触发组件的销毁和重建;v-show切换开销极小,仅修改样式即可。3、初始渲染开销不同:v-if初始条件为false时,无初始渲染开销;v-show无论是否显示,都有初始渲染开销。4、是否支持组件生命周期:v-if切换会触发组件的created、mounted、destroyed等钩子;v-show切换不会触发任何生命周期。项目使用场景:页面元素频繁切换显示隐藏(如弹窗、tab切换),优先用v-show;页面元素条件很少改变(如权限控制、首次加载判断),优先用v-if。3、Vue中key的作用是什么?为什么不能用index作为key?key的核心作用:key是Vue识别组件/元素唯一身份的标识,在列表diff对比过程中,通过key精准区分新旧节点,避免节点复用错乱,保证列表渲染、更新、删除的准确性,提升diff效率。不推荐用index作为key的原因:数组进行删除、插入、排序操作时,数组的index会重新排序,导致原本的key对应关系错乱。Vue会错误复用DOM节点,出现数据渲染错位、表单输入内容错乱、状态丢失等问题。比如列表中间删除一条数据,后续所有数据的index都会-1,用index做key会让后续节点全部复用旧DOM,造成数据不匹配。最优选择是使用后端返回的唯一id作为key。4、Vue数据双向绑定的原理是什么?Vue2和Vue3的实现原理不同,是面试高频考点:Vue2原理:基于Object.defineProperty()通过Object.defineProperty劫持对象的属性读取(getter)和属性修改(setter)。数据读取时触发getter,收集依赖(记录哪些视图用到了该数据);数据修改时触发setter,通知依赖更新,更新视图。缺点:无法监听对象新增、删除的属性,也无法监听数组下标修改、长度修改,所以Vue2提供了$set、$delete方法解决该问题。Vue3原理:基于Proxy通过Proxy代理整个对象,相比Object.defineProperty优势明显:可以监听对象新增、删除属性,支持数组下标、长度的修改,监听范围更广,无需额外处理响应式,性能也更优。5、Vue组件的生命周期有哪些?常用钩子的使用场景?Vue组件生命周期分为四大阶段:创建、挂载、更新、销毁,包含11个钩子,日常开发常用6个:1、created:组件实例创建完成,数据、方法已初始化,但DOM未生成,页面未挂载。适合初始化数据、调用接口请求数据(无DOM操作)。2、mounted:组件DOM挂载完成,页面渲染完毕。适合操作DOM、初始化第三方插件、获取DOM节点。3、beforeUpdate:数据更新前触发,可获取更新前的DOM状态。4、updated:数据更新完成,DOM重新渲染完毕。适合依赖最新DOM的操作。5、beforeUnmount:组件销毁前触发,组件实例还在,DOM还存在。适合清理定时器、解绑事件、取消接口请求,防止内存泄漏。6、unmounted:组件完全销毁,DOM卸载,实例销毁。二、Vue进阶原理面试题1、说说Vue的虚拟DOM和diff算法?虚拟DOM:是一个描述真实DOM结构的JS对象,包含节点类型、属性、子节点等信息。操作数据时,先修改虚拟DOM,再通过diff算法对比新旧虚拟DOM的差异,最后只将差异部分更新到真实DOM,避免频繁操作真实DOM带来的性能损耗。diff算法核心逻辑(同层比较):1、diff算法只做同层级节点对比,不会跨层级比较,以此降低时间复杂度,提升对比效率;2、先对比节点类型:类型不同,直接销毁旧节点、创建新节点;类型相同,对比属性和子节点;3、列表对比时,通过key建立节点映射关系,精准判断节点新增、删除、移动,最大化复用DOM节点。2、Vue为什么数据更新了,视图不一定立刻更新?怎么解决?原因:Vue的异步更新队列机制Vue为了提升性能,会将同一事件循环中的数据修改统一收集、去重,等待所有数据修改完成后,再统一更新视图。所以数据修改后,DOM不会立即更新,此时获取DOM内容还是旧值。解决方案:使用$nextTick$nextTick可以在DOM更新完成后执行回调函数,能精准获取更新后的DOM节点和数据。日常开发中,修改数据后需要立即操作新DOM的场景,都需要用到$nextTick。3、Vue组件通信方式有哪些?适用场景分别是什么?根据组件关系,常用通信方式共8种,覆盖所有业务场景:1、父子组件通信父传子:props,适合父组件向子组件传递静态/动态数据,是最基础的父子通信方式;子传父:$emit自定义事件,子组件触发事件并携带参数,向父组件传递数据;父访问子:$refs、$children,直接获取子组件实例和DOM;子访问父:$parent,直接获取父组件实例。2、跨级组件通信provide/inject:祖先组件向所有后代组件注入数据,无需逐层传递,适合全局通用数据(如主题、配置);$attrs/$listeners:批量传递父组件属性和事件,适合多层组件透传参数。3、任意组件通信事件总线(EventBus):适合小型项目简单跨组件通信,中型大型项目不推荐,容易造成事件堆积;Vuex/Pinia:全局状态管理,适合中大型项目,统一管理全局公共状态(用户信息、菜单、全局配置)。4、Vuex的核心属性和使用场景?Pinia相比Vuex的优势?Vuex五大核心属性:state:存储全局状态数据;mutations:唯一修改state的方式,同步方法,可追踪数据变化;actions:处理异步逻辑(接口请求),通过commit调用mutations修改数据;getters:state的计算属性,缓存数据,简化组件获取状态的逻辑;modules:模块化拆分,解决state臃肿、命名冲突问题。Pinia优势(Vue3首选):1、去除了繁琐的mutations,支持直接修改state,也支持异步逻辑,代码更简洁;2、天然支持模块化,无需手动配置modules,每个仓库独立隔离;3、完美适配TS,类型推导更精准;4、无需命名空间,使用简单,体积更小,调试更便捷。5、computed和watch的区别和使用场景?核心区别:1、功能不同:computed是计算属性,基于依赖缓存数据;watch是监听属性,监听数据变化执行回调;2、缓存机制:computed有缓存,依赖值不变时,多次调用不会重复计算;watch无缓存,数据变化就会执行;3、支持同步异步:computed只支持同步;watch支持异步操作;4、返回值:computed必须有return返回值;watch不需要返回值。使用场景:需要依赖现有数据计算新数据、简化模板逻辑、频繁读取,用computed(如价格合计、状态筛选);需要监听数据变化执行异步操作、复杂逻辑、多数据联动,用watch(如输入框防抖、数据变化请求接口)。三、Vue实战常见问题1、Vue中如何解决内存泄漏问题?常见场景和解决方案常见内存泄漏场景:1、组件中定义的定时器、延时器,组件销毁后未清除;2、全局事件、自定义事件绑定后,组件销毁未解绑;3、监听window、document事件未移除;4、EventBus事件订阅未取消。解决方案:在组件beforeUnmount钩子中,统一清除定时器、解绑所有事件、取消EventBus订阅、清空监听,避免组件销毁后依然占用内存。2、Vue路由守卫有哪些?全局守卫和独享守卫的使用场景路由守卫核心作用:控制页面跳转权限、登录校验、页面标题修改、路由拦截等。1、全局守卫(作用于所有路由)beforeEach:全局前置守卫,跳转前执行,最常用,用于登录权限拦截、白名单配置;afterEach:全局后置守卫,跳转完成后执行,用于修改页面title、关闭loading。2、路由独享守卫(只作用于单个路由)beforeEnter:单独给某个路由配置守卫,适合单个页面的专属权限校验(如后台管理页单独权限控制)。3、组件内守卫beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave,用于组件内部路由跳转逻辑控制。3、路由懒加载的原理和作用?原理:基于ES6的import()动态导入语法,在路由跳转时,才去加载对应页面的组件代码,而非项目初始化时一次性加载所有组件。作用:实现代码分割,减小项目首屏加载体积,缩短首屏加载时间,优化项目打包性能,避免首屏加载卡顿。是Vue项目性能优化的基础必备方案。4、Vue中$route和$router的区别?$router:路由实例对象,是全局路由管理器,包含路由跳转、替换、前进后退等方法(push、replace、go),用于编程式导航。$route:当前路由信息对象,存储当前页面的路由参数,包含path、name、query、params、meta等属性,用于获取路由参数、页面信息。四、Vue性能优化面试题1、Vue项目常用的性能优化方案?整理项目实战中落地的全方位优化方案:1、代码层面优化合理使用v-if和v-show、key唯一标识、避免v-for和v-if同级使用;使用computed缓存计算数据、watch防抖节流;组件销毁清理定时器和事件。2、路由优化全程使用路由懒加载,拆分打包文件,优化首屏速度。3、打包优化开启gzip压缩、去除console打印、第三方库CDN引入、按需引入UI组件库(ElementPlus、AntDesignVue)。4、渲染优化长列表使用虚拟滚动(只渲染可视区域DOM)、图片懒加载、组件缓存(keep-alive)。5、请求优化接口请求缓存、防抖节流、重复请求取消。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年法治建设考试模拟试卷(含答案)
- 2026年人工智能技术应用场景模拟题及答案详解
- 2026-2030年中国无灰分散剂行业发展趋势与竞争格局分析研究报告
- 甘肃省白银市靖远县第一中学2026-2027学年高一上学期10月阶段检测历史试卷(含答案)
- 2026年人教版七年级英语第6单元语法专项训练习题及答案
- 2026年心理咨询师二级考试心理咨询伦理与法规模拟试卷及答案
- 人教版初中物理声学基础测试卷及答案
- 2026年部编版小学语文四年级上册第4单元课文阅读同步练习题及答案
- 山西省二级建造师管理实务科目练习题及答案
- 客户协议书集合5篇
- 中小学楷书书写规范教学
- 检验检测机构法律法规政策培训测试题及答案
- 5.1.3小数乘法(课件)(共20张)西师大版(新教材)五年级上册
- 2025年上半年CATTI三级笔译实务真题详解(含参考译文)
- 2026年甘肃省兰州新区商贸物流投资集团数投公司大数据专业技术人员招聘10人笔试备考试题及答案详解
- 2026公安联考笔试真题题库及标准答案(公安专业科目完整版)
- 2026年吉林大学中日联谊医院专业技术系列人员招聘笔试参考题库及答案详解
- 护理副高职称评审答辩自我介绍模板
- 2026年陕西省基层法律工作者题库及答案
- 病因考试试题及答案
- 中国国新招聘笔试
评论
0/150
提交评论