版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Vue高频面试题及真实面试答案(无模板感、实战向)一、Vue基础核心面试题1.说说你对Vue的理解,Vue是什么?Vue是一套轻量级、渐进式的前端MVVM框架,核心是用来开发单页面应用。渐进式的意思就是可以按需引入,不用一次性用上所有功能,简单页面可以只引入视图层,复杂项目可以搭配路由、状态管理、脚手架完整开发。它最大的特点是数据驱动视图,不用手动操作DOM,只需要修改数据,页面就会自动更新,极大提升了开发效率,同时组件化开发的模式也让代码复用性和可维护性变得更高。2.MVVM原理是什么?和MVC的区别?MVVM分为三层:Model(数据层)、View(视图层)、ViewModel(视图数据中间层)。核心逻辑是ViewModel通过数据劫持和订阅发布模式,实现数据和视图的双向绑定,数据变视图自动变,视图变(输入操作)数据也会同步更新。和MVC的区别:MVC中Controller需要手动控制视图和数据的联动,需要操作DOM;而MVVM完全解放了DOM操作,开发者只需要关注数据逻辑,耦合度更低,更适合前端页面开发。3.Vue2和Vue3的核心区别?日常开发最大的感受是什么?日常开发最直观的感受就是Vue3组合式API更灵活、代码更规整,适合大型项目,Vue2选项式API简单直观,适合小型项目。具体核心区别有这几点:1.语法层面:Vue2用选项式API(data、methods、computed分开写),代码逻辑分散;Vue3支持组合式API,可以按业务逻辑聚合代码,复用更方便。2.响应式原理:Vue2是Object.defineProperty,只能监听对象已有属性,不支持数组下标、新增/删除对象属性;Vue3用Proxy,直接监听整个对象,支持数组、新增属性、删除属性,响应式更全面。3.打包体积:Vue3移除了很多冗余API,支持Tree-shaking,打包后体积更小,加载更快。4.生命周期:Vue3部分生命周期改名,同时setup函数替代了beforeCreate和created,组件初始化逻辑更集中。5.支持TS:Vue3原生对TypeScript支持极好,Vue2需要额外配置,适配性差。4.Vue双向绑定的实现原理?双向绑定核心是数据响应式+视图更新+事件监听。Vue2中,通过Object.defineProperty劫持数据的getter和setter,数据读取时收集依赖,数据修改时触发更新,更新虚拟DOM并渲染页面。同时表单元素通过v-model绑定,监听input事件,把视图输入的值同步更新到数据,实现双向绑定。Vue3基于Proxy实现,劫持整个对象的读取、修改、删除、数组操作等行为,弥补了Vue2的响应式缺陷。5.v-model的原理,怎么自定义组件的v-model?v-model本质是语法糖,底层就是:value绑定数据+@input监听事件。自定义组件v-model(Vue2):父组件用v-model绑定值,子组件接收valueprops,触发input事件传回新值,即可实现双向绑定。Vue3中自定义v-model有所调整,默认属性名改为modelValue,事件名改为update:modelValue,同时支持多个v-model绑定,灵活性更高。6.v-if和v-show的区别?项目中怎么选择使用?1.实现原理:v-if是真正的销毁和创建DOM节点,切换时会重新渲染组件、触发生命周期;v-show只是控制CSS的display属性,DOM节点始终存在。2.性能消耗:v-if切换开销大,初始渲染开销小;v-show初始渲染开销大,切换开销极小。3.使用场景:频繁切换的弹窗、标签页用v-show;一次性判断、很少切换的模块、权限控制渲染用v-if。7.key的作用是什么?为什么不建议用index作为key?key是虚拟DOM的唯一标识,核心作用是diff算法精准对比节点,避免节点复用出错,提升更新效率。不建议用index做key:如果数组有删除、插入、排序操作,数组索引会变化,diff算法会误判节点,导致DOM错误复用,出现表单数据错乱、页面渲染异常、性能浪费等问题。日常开发优先用后端返回的唯一id作为key。二、Vue核心原理面试题1.说说Vue的虚拟DOM和diff算法虚拟DOM就是真实DOM的JS对象映射,用简单的对象结构描述节点标签、属性、子节点,操作JS对象的成本远低于操作真实DOM。当数据更新时,Vue不会直接操作真实DOM,会先生成新的虚拟DOM树,通过diff算法对比新旧虚拟DOM的差异,只把差异部分更新到真实DOM,减少DOM操作次数,提升页面性能。diff算法核心策略是同层比较,不会跨层级对比,同时通过key精准匹配节点,最大化复用DOM,提升更新速度。2.Vue响应式原理的缺陷(Vue2),怎么解决?Vue2响应式存在几个明显缺陷:1.无法监听对象新增、删除的属性,因为初始化时只劫持了已有属性;2.无法监听数组下标修改、数组长度修改的变化;3.深层嵌套对象遍历劫持,初始化性能开销大。项目中解决方案:新增属性用this.$set,修改数组用push、splice等Vue重写的数组方法,避免直接下标赋值。Vue3直接用Proxy彻底解决了这些问题。3.computed和watch的区别?各自使用场景?computed(计算属性):1.有缓存,依赖值不变时多次调用不会重新计算;2.同步执行,必须有返回值;3.适合简单的数据计算、数据筛选、格式化场景,比如总价计算、列表筛选、日期格式化。watch(侦听器):1.无缓存,数据每次变化都会触发;2.支持异步操作,无需返回值;3.适合数据变化后需要执行复杂逻辑的场景,比如监听路由变化、接口请求、修改DOM、多数据联动操作。4.Vue的生命周期有哪些?常用钩子及场景?Vue2常用生命周期钩子及实战场景:1.created:组件创建完成,数据、方法已挂载,DOM未生成,适合初始接口请求、初始化数据;2.mounted:DOM挂载完成,页面渲染完毕,适合操作DOM、初始化定时器、引入第三方插件;3.updated:数据更新后DOM重新渲染完成,适合数据更新后的DOM操作;4.beforeDestroy:组件销毁前,用来清除定时器、解绑事件、取消请求,防止内存泄漏;Vue3中setup替代了beforeCreate和created,onMounted、onUpdated等替代了原有生命周期钩子。三、Vue组件通信面试题(高频)1.Vue常用的组件通信方式及适用场景?1.父子通信:父传子用props,子传父用$emit,简单高效,日常最常用;2.兄弟组件通信:借助父组件中转、或者事件总线($bus),小型项目够用;3.跨层级/全局通信:Vuex(Vue2)、Pinia(Vue3),适合中大型项目全局状态管理,比如用户信息、购物车、全局配置;4.深层父子通信:provide/inject,无需逐层传参,适合多层嵌套组件共享数据;5.直接实例访问:$parent、$children、$refs,适合简单DOM操作、快速获取组件实例,不推荐大量使用,耦合度高。2.props传值的特点,怎么校验props?props是单向数据流,父组件数据变,子组件自动更新;子组件不能直接修改props的值,会报错,避免数据混乱。项目中必须做props校验,提升代码健壮性,可以校验类型、默认值、是否必填、自定义校验规则。比如设置type类型、default默认值、required是否必填,复杂场景用validator自定义校验逻辑。3.$bus事件总线的优缺点,有什么坑?优点:使用简单,无需引入复杂插件,适合小型项目兄弟、跨组件通信。缺点、坑:组件销毁时如果不手动移除事件监听,会造成事件叠加、重复触发,导致内存泄漏。解决方案:在beforeDestroy中解绑对应事件。中大型项目优先用Pinia/Vuex替代。四、Vue路由面试题1.vue-router的两种模式区别?hash和history?1.hash模式:地址栏带#号,兼容性极好,支持所有浏览器。原理是监听hashchange事件,hash变化不会刷新页面,不需要后端配置。缺点是地址不够美观,#号影响路由参数。2.history模式:地址栏无#,和普通网页地址一致,美观。原理是H5的history.pushState,需要后端配置路由重定向,否则刷新页面会404。上线项目基本都用history模式。2.路由守卫有哪些?全局守卫怎么用?常用路由守卫分为全局、独享、组件内守卫,项目中全局守卫用的最多。全局前置守卫router.beforeEach:路由跳转前触发,核心用来做登录权限拦截、页面标题修改、路由放行。判断是否有登录token,无token跳转登录页,有token正常放行。全局后置守卫router.afterEach:路由跳转完成触发,无next参数,用来关闭loading、统计页面访问等。3.路由懒加载的作用和写法?作用:项目打包时,把路由对应的组件拆分独立js文件,只有访问对应页面时才加载资源,减少首屏打包体积,提升首页加载速度,优化首屏性能。写法:直接在路由component中使用箭头函数引入组件,无需提前import导入,是项目标准写法。4.路由跳转报错:NavigationDuplicated怎么解决?报错原因:当前路由和目标路由一致时,重复跳转触发报错,不影响功能但控制台报错。解决方案:重写router的push和replace方法,捕获异常回调,屏蔽重复跳转的报错,是项目通用解决方案。五、Vue状态管理(Vuex/Pinia)1.Vuex的核心属性和流程?Vuex五个核心:state、getters、mutations、actions、modules。执行流程:组件dispatch触发actions(处理异步逻辑、接口请求)→actions调用mutations→mutations修改state数据→state更新驱动视图变化。核心规则:mutations必须同步,actions可以异步;只能通过mutations修改state,不能直接修改,方便统一管理和追踪数据变化。2.为什么Vue3推荐用Pinia替代Vuex?1.写法更简洁,去除了繁琐的mutations、actions分层,同步异步都可以直接写;2.原生支持TS,类型推导更精准;3.无需嵌套modules,每个仓库独立,结构清晰,维护简单;4.支持自动模块化,按需引入,打包体积更小;5.去除了Vuex的各种冗余限制,开发体验更好,现在Vue3项目基本全部使用Pinia。六、Vue性能优化(面试高频重点)1.项目中做过哪些Vue性能优化?我日常开发中主要从首屏加载、渲染性能、代码优化、打包优化四个方向做优化:1.路由懒加载、组件懒加载,拆分打包文件,减小首屏体积;2.列表渲染优化:长列表用虚拟滚动,避免一次性渲染大量DOM;稳定key,避免index索引;3.减少不必要渲染:v-if精准控制渲染,合理使用computed缓存数据,避免模板中写复杂逻辑;4.事件和定时器优化:页面销毁清除定时器、解绑事件,防止内存泄漏;5.打包优化:开启Tree-shaking,去除冗余代码,压缩图片、静态资源,使用CDN引入第三方依赖;6.防抖节流:搜索框、滚动、窗口resize事件做防抖节流,减少频繁触发;7.大数据渲染:避免直接监听大对象、大数组,减少响应式开销。2.怎么避免Vue页面卡顿?页面卡顿大多是DOM过多、数据监听过多、频繁渲染导致。首先优化长列表渲染,用虚拟列表只渲染可视区域DOM;其次减少无效响应式,静态数据可以用Object.freeze冻结,不需要响应式;然后避免频繁的数据修改和DOM更新,利用computed缓存、防抖节流减少执行次数;最后及时清理定时器和事件监听,杜绝内存泄漏累积导致的页面越用越卡。七、Vue实战坑及解决方案(面试加分项)1.数据更新了页面不刷新的原因及解决?基本都是Vue2响应式缺陷导致:新增对象属性、直接修改数组下标、修改数组长度,无法触发响应式更新。解决:用$set更新对象属性、数组元素;用splice、push等重写数组方法;Vue3直接使用Proxy无此问题。另外也可能是异步代码执行顺序问题,可配合nextTick确保DOM更新后再操作。2.nextTick的作用和使用场景?Vue
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消费者权益保护课件
- 医院空调系统运维管理手册
- 养老护理岗位流程标准化SOP
- 微生物自动化育种平台设计方案
- 泵的种类课件
- 药分论文毕业答辩
- 肾穿刺前后的护理
- 2026事业单位工勤技能-陕西-陕西无损探伤工五级(初级工)历年参考题库含答案详解
- 2026事业单位工勤技能-陕西-陕西公路养护工二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-重庆-重庆电工四级(中级工)历年参考题库含答案详解
- 蜂王浆的课件
- 基于多因素协同的喷涂机器人喷枪轨迹优化策略与应用研究
- 药品qa培训课件
- 项目合作佣金协议书范本
- 农村土地承包合同书
- 艺术品交易市场建设合同
- UL1977标准中文版-2019连接器UL中文版标准
- 公共图书馆情绪疗愈空间设计研究:动因、现状与实现机制
- 肺部疾病护理查房
- 心理咨询中的认知重构技巧
- 第9章 语义分割
评论
0/150
提交评论