Vue面试题大全(完整版·真实面试向)_第1页
Vue面试题大全(完整版·真实面试向)_第2页
Vue面试题大全(完整版·真实面试向)_第3页
Vue面试题大全(完整版·真实面试向)_第4页
Vue面试题大全(完整版·真实面试向)_第5页
已阅读5页,还剩8页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Vue面试题大全(完整版·真实面试向)本文整理前端面试高频Vue全套考题,覆盖Vue2/Vue3基础、核心原理、语法特性、工程化、性能优化、实战坑点、面试手写题,全部为企业真实面试原题,无冗余话术,适合刷题、复盘、面试突击。一、Vue基础核心面试题(必问)1.说说你对Vue的理解,Vue是什么?Vue是一款轻量级、渐进式的前端MVVM框架,核心用于构建用户界面。相比于原生JS、jQuery,Vue通过数据驱动视图的思想,解放了DOM操作,大幅提升前端开发效率。渐进式体现在:可以单独引入Vue使用,也可以搭配路由、状态管理、构建工具搭建完整工程化项目,按需引入、灵活适配不同项目场景。核心特点:数据双向绑定、组件化开发、虚拟DOM、生命周期、指令系统。2.MVVM原理是什么?和MVC的区别?MVVM核心:Model(数据层)、View(视图层)、ViewModel(视图数据中间层)。ViewModel是核心,负责监听数据变化、更新视图,同时监听视图操作、更新数据,实现数据和视图的双向绑定,开发者只需操作数据,无需手动操作DOM。和MVC区别:MVC:Model、View、Controller,由控制器处理视图和数据的交互,视图和数据耦合度偏高,需要手动操作DOM更新页面MVVM:无控制器,ViewModel自动完成双向绑定,视图和数据解耦,专注数据逻辑开发3.Vue双向绑定原理(Vue2/Vue3区别)Vue2:基于Object.defineProperty()劫持对象属性的getter/setter,结合发布订阅模式实现双向绑定。缺陷:无法监听对象新增、删除属性,无法监听数组下标修改、数组长度修改,因此需要Vue提供的$set、$delete方法,以及重写数组七个变异方法实现数组监听。Vue3:基于ES6Proxy代理整个对象,拦截对象的读取、修改、新增、删除、数组操作等所有行为,完美解决Vue2的监听缺陷,支持嵌套对象深度监听,性能更优。4.Vue生命周期有哪些?各自的使用场景?生命周期是组件从创建、挂载、更新、销毁的完整过程,Vue2/Vue3选项式生命周期基本一致。创建阶段beforeCreate:实例刚创建,数据、方法、DOM均未初始化,几乎不使用created:数据和方法已初始化,DOM未挂载,无法操作DOM;常用场景:页面初始化请求接口、初始化数据挂载阶段beforeMount:挂载前,模板已编译完成,即将渲染DOMmounted:DOM挂载完成,页面渲染完毕;常用场景:操作DOM、初始化定时器、监听DOM事件、第三方插件初始化更新阶段beforeUpdate:数据更新后,页面重新渲染前updated:数据更新、页面渲染完成销毁阶段beforeUnmount(beforeDestroy):组件销毁前,实例仍可用;常用场景:清除定时器、解绑事件、取消请求unmounted(destroyed):组件销毁完成,DOM和实例全部清空补充:activated/deactivated配合keep-alive使用,组件缓存激活/失活触发。5.生命周期钩子中为什么推荐在created发请求?mounted不行吗?created阶段数据已初始化,提前请求接口可以提前拿到数据,减少页面空白时间,提升体验mounted等待DOM挂载完成后才请求,请求时机延后,首屏加载更慢特殊场景:需要依赖DOM元素高度、位置的接口逻辑,可放在mounted中6.Vue常用指令有哪些?各自作用?v-text:渲染文本,覆盖标签原有内容v-html:渲染HTML片段,存在XSS风险,谨慎使用v-show:控制元素显示隐藏,通过CSSdisplay切换,频繁切换场景首选v-if/v-else/v-else-if:条件渲染,直接销毁/创建DOM,切换频率低、权限控制场景首选v-for:列表循环渲染,必须绑定keyv-on/@:绑定事件监听v-bind/::动态绑定属性v-model:表单双向绑定,语法糖v-pre:跳过编译,直接显示原始内容,提升渲染性能v-cloak:解决页面闪烁问题,配合CSS隐藏未编译模板v-once:元素或组件只渲染一次,后续不再更新7.v-show和v-if的区别?使用场景?渲染机制:v-if是惰性渲染,条件为false时直接销毁DOM;v-show始终渲染DOM,仅通过样式控制显隐性能消耗:v-if切换开销大,会触发组件生命周期、销毁重建;v-show切换开销极小初始渲染:v-if初始条件false则不渲染,初始渲染更快;v-show无论条件如何都会渲染DOM使用场景:频繁切换用v-show;一次性判断、权限显示、极少切换用v-if8.v-for为什么必须加key?key的作用是什么?能不能用index?Vue列表更新采用diff算法,key是元素的唯一标识,用于对比新旧虚拟DOM节点,精准定位节点,减少DOM复用错误。key作用:高效更新虚拟DOM,避免节点错位、重复渲染,提升diff性能。不推荐用index作为key:列表删除、插入、排序时,index会发生变化,导致key错乱,出现组件状态错乱、表单数据错位、渲染异常等问题。最优方案:使用后端返回的唯一ID作为key。9.Vue中data为什么必须是函数?针对组件场景:如果data是对象,所有组件实例会共享同一个对象,一个组件修改数据,所有组件数据都会被污染。data设置为函数,每次创建组件实例都会返回一个全新的对象,每个实例拥有独立的数据,互不干扰。根实例的data可以是对象,因为根实例只会创建一次。10.简述Vue的组件化思想组件化是Vue核心思想,将页面拆分成多个独立、可复用、低耦合的小型组件,每个组件拥有独立的模板、样式、数据、逻辑。优势:代码复用、便于维护、分工开发、逻辑清晰、减少冗余代码,适合大型项目开发。二、Vue核心进阶面试题(高频难点)1.Vue虚拟DOM是什么?为什么需要虚拟DOM?虚拟DOM是对真实DOM的抽象描述,本质是一个JS对象,用来记录DOM的标签、属性、子节点等信息。核心作用:真实DOM操作开销极大,频繁操作DOM会造成页面卡顿数据更新时,先对比新旧虚拟DOM差异(diff算法),只更新变化的DOM节点,实现精准按需更新实现跨平台渲染,可适配web、小程序、移动端等多端2.Vuediff算法原理?diff的比对流程?diff算法是虚拟DOM的对比更新算法,Vue采用同层比对策略,只对比同一层级节点,不跨层级比对,大幅降低复杂度。比对流程:前置比对:先判断节点类型,类型不同直接销毁旧节点、创建新节点类型相同:对比key、属性,更新节点属性子节点比对(核心):优先处理首尾节点,通过头尾指针移动比对,复用节点,最后处理新增、删除、移动节点diff算法核心是最大限度复用DOM节点,减少DOM操作次数,提升页面更新性能。3.Vuecomputed和watch的区别?使用场景?computed(计算属性)基于依赖缓存,依赖不变则多次调用不会重新计算同步执行,必须有返回值适合:多数据联动、复杂数据计算、过滤筛选数据watch(侦听器)无缓存,数据每次变化都会触发执行支持异步操作,无需返回值适合:数据变化后执行异步操作、复杂业务逻辑、监听路由/对象深度变化总结:计算用computed,监听用watch。4.watch的immediate和deep属性作用immediate:true:组件初始化时立即执行一次监听,默认首次加载不执行deep:true:开启深度监听,可监听对象、数组内部属性的变化,默认只能监听简单数据类型5.Vue过滤器是什么?作用?过滤器是Vue用于文本格式化的函数,仅做数据展示处理,不修改原始数据。常用场景:时间格式化、金额格式化、大小写转换、状态文字转换。支持全局过滤器、局部过滤器,可链式调用,Vue3已移除过滤器API,推荐使用方法或计算属性替代。6.组件传值方式大全(Vue2/Vue3通用)父子组件传值父传子:props子传父:$emit自定义事件父子互传:v-model、.sync修饰符(Vue2)父获取子实例/数据:$refs、$children子获取父实例:$parent跨级/兄弟传值事件总线:$bus(适合小型项目)状态管理:Vuex/Pinia(中大型项目)provide/inject:跨层级深层传值7.props校验怎么做?props传参能不能修改?Vue支持对props进行类型、默认值、必填、自定义校验规则校验,规范组件传参,减少报错。props数据不能直接修改:Vue单向数据流原则,子组件无权修改父组件传递的数据,直接修改会报错。如需修改:在子组件中定义data或计算属性,接收props值后再修改。8.$nextTick的作用和使用场景Vue数据更新是异步批量更新,修改数据后DOM不会立即更新,$nextTick可以在DOM更新完成后执行回调。使用场景:修改数据后,需要立即操作更新后的DOM、获取DOM最新宽高、更新后聚焦输入框等。9.Vue异步更新机制原理Vue为提升性能,避免频繁DOM渲染,会将同一事件循环中的数据修改缓存,统一批量更新DOM。同步代码执行完毕后,再执行异步队列的DOM更新操作,因此数据修改后立即获取DOM会拿到旧值,需要借助$nextTick。10.keep-alive的作用、属性、生命周期keep-alive用于缓存组件,组件切换时不会销毁重建,保留组件状态,提升页面切换速度。常用属性include:指定需要缓存的组件exclude:指定不需要缓存的组件max:最大缓存组件数量专属生命周期activated:组件缓存激活时触发deactivated:组件缓存失活时触发注意:缓存组件不会执行beforeUnmount、unmounted,需要清理逻辑可放在deactivated中。三、Vue2与Vue3区别高频面试题1.Vue3相较于Vue3的优势?性能提升:Proxy替代defineProperty,监听无缺陷、响应式更快、打包体积更小语法优化:组合式API替代选项式API,代码按需组织,适合大型复杂项目Tree-shaking支持,按需引入API,减少冗余代码新增Teleport、Suspense、多根节点等特性类型支持更好,全面适配TS2.选项式API和组合式API的区别?选项式API(Vue2):按功能分类(data、methods、computed、watch),小型项目清晰,大型项目相同业务逻辑分散在各个选项中,代码碎片化,难以维护组合式API(Vue3):按业务逻辑组织代码,一个业务的变量、方法、监听集中在一起,支持抽离组合式函数复用,适合大型项目3.setup函数的特点?执行时机?setup是Vue3组合式API的入口函数,组件创建前执行执行时机早于beforeCreate,此时组件实例未创建,无法使用this内部定义的数据、方法需要return才能在模板中使用支持props、context参数,可获取属性、插槽、事件4.ref和reactive的区别?使用场景?ref:用于基本数据类型(字符串、数字、布尔),也可用于对象;通过.value访问数据,模板中可省略.valuereactive:专门用于引用数据类型(对象、数组),无需.value,直接访问最佳实践:基本类型用ref,复杂对象、表单对象用reactive。5.Vue3toRef和toRefs的作用toRef:单独将reactive对象中的某个属性转为响应式ref,和原对象保持关联toRefs:将整个reactive对象的所有属性批量转为ref,解构后不丢失响应式核心用途:解决reactive对象解构丢失响应式的问题。四、Vue路由(VueRouter)面试题1.路由原理是什么?hash和history模式区别?前端路由核心:不刷新页面,切换视图,通过监听地址变化,匹配对应组件渲染。hash模式基于url#哈希值变化,哈希变化不会触发页面刷新兼容性最好,无需后端配置地址带#,不美观,部分场景不支持history模式基于H5historyAPI,地址无#,更规范美观需要后端配置重定向,否则刷新页面404兼容性稍差,不支持低版本浏览器2.路由传参方式及区别1.params传参参数在url地址中隐藏(动态路由除外)刷新页面参数丢失搭配name属性跳转2.query传参参数拼接在url后面,明文展示刷新页面参数不丢失path、name均可跳转3.路由守卫有哪些?执行顺序?全局守卫全局前置守卫:router.beforeEach(权限拦截、登录校验)全局解析守卫:router.beforeResolve全局后置钩子:router.afterEach(页面title修改、日志统计)路由独享守卫beforeEnter:单独给某个路由配置守卫组件内守卫beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave完整执行顺序beforeEach=>beforeEnter=>beforeRouteEnter=>beforeResolve=>afterEach4.路由懒加载原理及作用路由懒加载是通过动态import语法,实现路由组件按需加载,进入对应路由才加载组件资源。作用:减少首屏打包体积,提升首屏加载速度,优化项目性能。5.路由跳转报错问题(Avoidedredundantnavigation)原因:重复跳转当前路由,路由重复跳转触发报错。解决方案:重写路由push/replace方法,捕获异常,阻止重复跳转报错。五、Vue状态管理(Vuex/Pinia)面试题1.Vuex核心属性及作用state:数据源,存储全局状态数据mutations:唯一修改state的方式,同步执行actions:处理异步逻辑、业务逻辑,通过commit调用mutations修改数据getters:状态计算属性,过滤、加工state数据modules:模块化拆分,解决大型项目状态臃肿问题2.mutations为什么必须是同步?actions为什么可以异步?Vuex需要通过mutation记录数据变化,实现状态追踪、日志调试。如果mutation异步,无法精准追踪数据变更顺序,调试工具失效。actions专门处理异步请求、复杂业务逻辑,通过commit同步提交mutation,保证数据变更可追踪。3.Pinia相比Vuex的优势去除mutations,简化代码,异步同步统一在actions中处理无需模块嵌套,结构更简洁天然支持TS,类型推断更友好体积更小、API更简洁、调试更方便支持自动模块化,无需手动配置六、Vue性能优化面试题(重中之重)1.Vue项目性能优化方案(全套)1.代码层面优化合理使用v-if和v-show,避免无效渲染v-for必须绑定唯一key,避免用index,同时避免v-for和v-if同级使用频繁更新数据使用computed缓存计算结果合理使用v-once、v-pre减少编译和渲染开销销毁组件时清除定时器、解绑事件、取消请求2.工程化优化路由懒加载、组件懒加载图片懒加载、静态资源压缩开启gzip压缩、CDN加速静态资源打包拆分,分离第三方依赖,减小主包体积3.渲染优化使用keep-alive缓存常用组件,避免重复销毁重建长列表虚拟滚动,只渲染可视区域DOM,解决大数据列表卡顿减少不必要的响应式数据,静态数据无需响应式4.网络优化接口缓存、防抖节流处理高频请求避免重复请求,请求前置拦截2.v-for和v-if为什么不建议同级使用?优先级:v-for优先级高于v-if,同级使用时,会先循环渲染所有节点,再根据条件删除节点,造成无效循环、性能浪费。优化方案:外层用v-if做条件判断,内层v-for循环;或者通过计算属性提前过滤数据。3.大数据列表卡顿怎么解决?核心方案:虚拟列表(虚拟滚动),只渲染可视区域DOM,滚动时动态替换DOM节点,DOM数量恒定,不会随数据量增加而增多,彻底解决万级数据列表卡顿。辅助方案:分页加载、分片渲染、防抖滚动事件。七、Vue实战坑点&易错面试题1.Vue数据更新页面不渲染的原因及解决Vue2常见原因直接给对象新增属性、删除属性,无法监听更新:使用$se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论