Vue.js 真实面试高频题库(无机器感、企业实战版)_第1页
Vue.js 真实面试高频题库(无机器感、企业实战版)_第2页
Vue.js 真实面试高频题库(无机器感、企业实战版)_第3页
Vue.js 真实面试高频题库(无机器感、企业实战版)_第4页
Vue.js 真实面试高频题库(无机器感、企业实战版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

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

文档简介

Vue.js真实面试高频题库(无机器感、企业实战版)说明:本题库整理一线互联网、中小企业真实面试问法,剔除模板化话术,覆盖Vue2基础、核心原理、Vue3特性、项目实战、性能优化、工程化、坑点排查,适合日常刷题、面试突击。一、Vue基础高频面试题1.说说你对Vue渐进式框架的理解?Vue不是强侵入性的全能框架,是可以逐层选用的渐进式框架。日常开发中可以只引入Vue核心库做页面简单交互,不用搭建完整工程;项目复杂后,可以按需接入路由、状态管理、UI组件库、打包工具等生态能力。对比重量级框架,它上手成本更低、灵活性更高,既能开发小型页面,也能支撑大型中后台项目,适配不同规模的业务场景。2.Vue单文件组件(SFC)的优势是什么?单文件组件将一个组件的结构、样式、逻辑封装在一个文件中,结构清晰、职责单一。核心优势有四点:一是代码结构化,便于维护和迭代;二是支持组件独立作用域,样式、逻辑不会全局污染;三是支持预处理器、模块化语法;四是便于组件复用、拆分,适配工程化开发。3.v-if和v-for为什么不建议一起使用?如果必须一起用怎么优化?Vue2中v-for优先级高于v-if,同时使用时会先循环渲染所有列表项,再通过条件判断过滤节点,造成无效循环、性能浪费。Vue3调整了优先级,v-if优先级更高,但依然存在逻辑不合理、可读性差的问题。优化方案:优先通过计算属性提前过滤列表数据,再进行循环渲染;如果是外层条件判断,直接把v-if写在v-for外层容器上。4.Vue中key的作用是什么?key可以用index吗?key是虚拟DOM节点的唯一标识,用于diff算法中精准对比新旧节点,判断节点是否可复用,减少不必要的DOM渲染,提升更新性能。不建议直接用index作为key。如果列表存在删除、插入、排序等操作,index会发生变化,导致DOM节点错误复用,出现数据错乱、渲染异常的问题。最优方案是使用后端返回的唯一ID作为key。5.v-show和v-if的区别及使用场景?1、渲染机制:v-if是真正的条件渲染,条件为false时节点直接销毁,为true时重新创建;v-show只是切换CSS的display属性,节点始终存在于DOM中。2、性能消耗:v-if切换开销大、初始渲染开销小;v-show初始渲染开销大、切换开销小。3、使用场景:频繁切换显示隐藏的场景用v-show;页面渲染后很少切换、需要按需加载的场景用v-if。二、Vue核心原理面试题1.说说Vue的响应式原理(分别说Vue2和Vue3)Vue2响应式:基于Object.defineProperty劫持对象的getter/setter,数据读取时收集依赖,数据修改时触发视图更新。存在明显缺陷:无法监听对象新增、删除的属性,无法监听数组下标修改、数组长度修改,因此Vue2提供了$set、$delete等API解决该问题。同时对于深层嵌套对象,需要递归遍历劫持,初始化性能较差。Vue3响应式:基于Proxy代理整个对象,支持监听属性新增、删除、数组下标和长度修改,解决了Vue2的所有缺陷。且Proxy是懒递归,只会在访问对应属性时才进行劫持,大幅优化了初始化性能。同时搭配Reflect保证属性操作的规范性。2.Vue虚拟DOM的作用是什么?虚拟DOM是对真实DOM的抽象描述,用JS对象模拟DOM节点结构。核心作用是:避免频繁操作真实DOM,因为真实DOM操作开销极大。数据更新时,先生成新的虚拟DOM树,通过diff算法对比新旧虚拟DOM的差异,只将差异部分更新到真实DOM,最大程度减少DOM操作次数,提升页面渲染性能。3.简述Vuediff算法的执行过程diff算法采用同层比较策略,不会跨层级对比,降低算法复杂度。首先对比新旧节点的标签类型、key:类型和key一致则判定为可复用节点,继续对比子节点;不一致则直接销毁旧节点、创建新节点。子节点对比分为三步:先对比头尾节点,快速复用首尾相同节点;再处理剩余未知节点,通过key建立映射表查找可复用节点;最后处理新增、删除、移动的节点,完成视图更新。4.什么是依赖收集、派发更新?依赖收集:页面渲染时,组件会读取响应式数据,此时数据的getter会触发收集操作,将当前组件的渲染Watcher记录到数据的依赖池中,建立数据和视图的关联。派发更新:当响应式数据被修改时,setter会触发更新,遍历依赖池中收集的所有Watcher,通知对应组件重新渲染,完成视图更新。5.computed和watch的区别和使用场景?computed计算属性:基于依赖缓存,依赖数据不变时,多次读取不会重复执行函数;支持只读和手动修改;是同步执行。适合简单的数据计算、数据格式化、多数据联动处理。watch侦听器:无缓存机制,数据每次变化都会触发执行;支持异步操作;可以监听简单数据、复杂对象、数组。适合数据变化后需要执行异步请求、复杂业务逻辑、DOM操作的场景。三、Vue组件与通信面试题1.Vue组件的生命周期有哪些?各自的使用场景?Vue2核心生命周期:beforeCreate:实例刚创建,无法获取data、methods,基本不用;created:实例创建完成,可获取数据和方法,未挂载DOM,常用于初始化接口请求、数据赋值;beforeMount:挂载前,模板编译完成,即将渲染DOM;mounted:DOM挂载完成,可操作DOM、初始化第三方插件、请求页面数据;beforeUpdate:数据更新前,可获取更新前的DOM状态;updated:数据更新完成,DOM渲染完毕;beforeDestroy:组件销毁前,清除定时器、监听事件、解绑全局订阅,防止内存泄漏;destroyed:组件销毁完成。Vue3组合式API舍弃了部分选项式生命周期,改用onMounted、onUpdated等钩子,使用逻辑更聚合。2.Vue组件常用通信方式有哪些?适用场景?1、父子通信:父传子props,子传父$emit,最常用、最规范;2、多层级祖孙通信:provide/inject,无需逐层传参,适合全局通用数据、主题、权限等传递;3、兄弟/跨级通信:Vue2用EventBus,简单项目够用;复杂项目统一用Vuex/Pinia状态管理;4、跨组件简单通信:$attrs/$listeners,快速透传属性和事件;5、refs:父组件直接获取子组件实例,调用子组件方法、获取子组件数据。3.props如何校验?为什么要做props校验?Vue支持对props进行类型、默认值、必填项、自定义规则校验。可以指定String、Number、Array等类型,设置required、default,还能通过validator自定义校验规则。校验的核心目的:规范组件入参,避免父组件传入错误数据导致子组件渲染异常;同时提升组件可读性和可维护性,多人协作时明确组件传参规范。4.怎么避免父子组件props层层传递的问题?多层组件嵌套传参容易出现propdrilling(属性穿透),解决方案:小型项目用provide/inject直接跨层注入;中大型项目统一使用Pinia/Vuex全局状态管理,公共数据统一维护,任意组件可直接获取修改;也可以用$attrs透传简化重复传参。四、Vue3专项面试题(高频)1.Vue3相比Vue2的核心优势?1、响应式升级:Proxy替代Object.defineProperty,解决数组、新增属性无法监听的问题,性能更优;2、组合式API:替代选项式API,可按业务逻辑聚合代码,解决大型项目代码碎片化、难以维护的问题,支持代码复用;3、性能提升:打包体积更小、初始化渲染、更新渲染速度更快,支持Tree-shaking;4、全新的组件、API优化,支持多根节点组件,废弃冗余API,语法更简洁。2.setup函数的执行时机和注意事项?setup是组合式API的入口,在beforeCreate之前执行,此时组件实例尚未创建,无法使用this。核心注意点:不能使用this访问组件实例;所有响应式数据、方法、生命周期都需在setup中定义;返回的数据和方法才能在模板中使用;setup中不支持异步直接返回数据。3.ref和reactive的区别?如何选择使用?ref:用于定义基本数据类型(字符串、数字、布尔),也可定义对象,数据会包裹在value属性中,模板使用时无需手动.value,脚本中必须通过.value访问修改。reactive:专门用于定义引用数据类型(对象、数组),无需value包裹,直接访问属性。使用原则:简单基础数据用ref,复杂对象、结构化数据用reactive。4.watch和watchEffect的区别?1、依赖收集:watch需要手动指定监听的数据源;watchEffect自动收集内部响应式依赖,无需手动指定;2、执行时机:watch默认初始不执行,仅数据变化执行;watchEffect组件初始化会立即执行一次;3、精准度:watch更精准,可监听单个或多个数据;watchEffect适合监听多个依赖、简化代码场景。五、Vue路由与状态管理1.Vue路由的hash模式和history模式区别?hash模式:URL带有#号,基于浏览器hashchange事件,路由变化不会触发页面刷新,兼容性好;缺点是URL不够美观,部分场景不支持。history模式:URL无#,基于H5historyAPI,地址简洁美观;缺点是刷新页面会请求后端地址,需要后端配置重定向,否则会出现404错误。2.路由守卫有哪些?全局守卫和组件守卫的使用场景?全局守卫:router.beforeEach(全局前置守卫,最常用,用于全局权限拦截、登录校验、页面标题修改)、router.afterEach(全局后置守卫,用于页面埋点、loading关闭)。组件内守卫:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave,用于单个组件的路由权限、离开确认、参数更新监听。3.说说Pinia相比Vuex的优势?1、语法更简洁,去除了mutations,无需区分同步异步,直接修改数据;2、支持模块化自动拆分,无需手动注册模块,模块独立、互不干扰;3、完美适配Vue3组合式API,类型推导更完善,TS支持友好;4、无需繁琐的辅助函数,取值、改值更简单,调试更便捷。六、项目实战与性能优化(面试高频压轴)1.你在项目中做过哪些Vue性能优化?1、渲染优化:长列表使用虚拟列表,减少DOM节点数量;合理使用v-show、v-if,规避无效循环;2、数据优化:合理使用computed缓存计算结果;避免在模板中写复杂表达式;3、打包优化:路由懒加载、组件懒加载,拆分代码块;按需引入UI组件库,减少打包体积;开启gzip压缩;4、缓存优化:页面组件缓存keep-alive,避免重复渲染;接口数据缓存;5、细节优化:销毁组件时清除定时器、监听事件、定时器,杜绝内存泄漏;避免频繁触发更新。2.Vue页面卡顿、加载慢一般怎么排查?首先通过浏览器性能面板查看长任务、卡顿耗时;排查是否存在大量无效DOM渲染、死循环、高频更新;检查接口请求是否过多、接口响应缓慢;查看打包文件体积是否过大,是否存在全局引入冗余资源;排查是否存在内存泄漏、定时器未销毁等问题,针对性优化。3.如何解决Vue数据更新视图不更新的问题?主要是Vue2响应式缺陷导致:对象新增属性、删除属性,数组下标修改、长度修改无法触发更新。解决方案:使用$set新增响应式属性;直接替换数组、对象数据源;Vue3项目直接使用Proxy响应式,无此类问题。同时区分宏任务、微任务,数据更新后如需获取最新DOM,使用nextTick。4.nextTick的作用和使用场景?Vue数据更新是异步批量更新机制,修改数据后DOM不会立刻更新。nextTick可以在DOM更新完成后执行回调,保证回调中可以获取到最新的DOM结构。常用场景:数据修改后,需要立即操作DOM、获取DOM宽高、获取最新表单状态等场景。七、常见坑点与面试追问1.组件中data为什么必须是函数?为了避免多个组件实例共享同一数据。如果data是对象,所有组件实例会共用同一个内存地址的数据,一个组件修改数据,其他组件数据会同步变化;data为函数时,每个组件实例都会返回一个独立

温馨提示

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

评论

0/150

提交评论