Vue 高频面试题及详细真实答案(实战版)_第1页
Vue 高频面试题及详细真实答案(实战版)_第2页
Vue 高频面试题及详细真实答案(实战版)_第3页
Vue 高频面试题及详细真实答案(实战版)_第4页
Vue 高频面试题及详细真实答案(实战版)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

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

文档简介

Vue高频面试题及详细真实答案(实战版)一、Vue基础核心面试题1、说说Vue的响应式原理(Vue2与Vue3区别)参考答案:Vue2核心是Object.defineProperty劫持对象属性的getter/setter,结合发布订阅模式实现数据响应式。缺陷很明显:无法监听对象新增、删除的属性,所以需要Vue.set/this.$set手动触发响应无法监听数组下标修改、数组长度修改,只能重写数组7个变异方法(push/pop/shift/unshift/splice/sort/reverse)实现监听初始化时需要递归遍历所有对象、数组,深层数据劫持开销大,性能一般Vue3改用Proxy代理整个对象,解决了Vue2的所有痛点:可监听属性新增、删除、数组下标和长度修改懒劫持机制,只会代理当前访问的属性,无需递归全量遍历,性能更好支持Map、Set等复杂数据结构的响应式2、Vue中data为什么必须是一个函数?参考答案:只针对组件场景,根实例的data可以是对象。组件是可复用的模板,如果组件data是对象,所有组件实例会共用同一个对象引用,一个组件修改数据,所有复用组件的数据都会同步变化,造成数据污染。data写成函数,每次创建组件实例都会执行函数返回一个全新的独立对象,每个组件实例的数据相互独立,互不影响。3、v-if和v-for优先级谁高?为什么不建议一起使用?参考答案:Vue2中v-for优先级高于v-if;Vue3中v-if优先级高于v-for。不建议一起用的核心原因是性能浪费:Vue2:先循环渲染所有列表,再根据条件判断隐藏/销毁,哪怕只需要展示少量数据,也会完整遍历循环Vue3:先判断条件,条件为false时直接不执行循环,看似优化,但会导致循环变量无法在v-if中获取,直接报错最优解决方案:在外层用template包裹v-if,内层写v-for,或者直接在computed中先过滤数据,再渲染列表。4、Vue组件的生命周期有哪些?各自的使用场景参考答案(常用核心钩子,贴合业务):beforeCreate:实例刚创建,data、methods未初始化,几乎不用created:数据、方法已初始化,DOM未生成、无法操作DOM。常用场景:页面初始请求接口、初始化数据beforeMount:挂载前,模板已编译完成,即将渲染DOMmounted:DOM挂载完成,可操作DOM、获取DOM节点。常用场景:操作DOM、初始化第三方插件(图表、富文本)、依赖DOM的接口请求beforeUpdate:数据更新前,视图未刷新updated:数据更新完成,视图刷新完毕beforeUnmount:组件销毁前。常用场景:清除定时器、解绑全局事件、取消接口请求,防止内存泄漏unmounted:组件销毁完成,所有DOM和事件监听已移除5、computed和watch的区别和使用场景参考答案:核心区别:缓存机制:computed有依赖缓存,依赖值不变时,多次调用不会重复计算;watch无缓存,数据变化就触发执行数据类型:computed是计算属性,必须有返回值,用于派生新数据;watch是监听函数,无返回值,专注监听数据变化同步异步:computed只能同步;watch支持异步操作使用场景:computed:简单数据推导、多数据联动计算(价格合计、筛选列表、格式化数据)watch:数据变化后执行异步操作、复杂逻辑(监听路由变化、接口请求、数据变动后的弹窗、日志上报)二、Vue进阶原理面试题1、Vue虚拟DOM是什么?作用是什么?参考答案:虚拟DOM是对真实DOM的JS对象模拟,用标签名、属性、子节点等字段描述DOM结构,是真实DOM的轻量副本。核心作用:提升渲染性能:真实DOM操作开销极大,JS计算对比开销小。数据更新时,先对比新旧虚拟DOM差异(diff算法),只更新变化的DOM节点,不整页重绘跨平台渲染:虚拟DOM是JS对象,可脱离浏览器环境,支持渲染到小程序、移动端、SSR等多平台2、说说Vue的diff算法原理参考答案:diff算法是虚拟DOM的对比策略,Vue采用同层对比,只对比同一层级节点,不跨层级比较,大幅降低复杂度。核心流程:先判断节点类型,不同类型直接销毁旧节点、创建新节点相同类型节点,对比属性,更新差异属性核心子节点对比:采用双端对比(头头、尾尾、头尾、尾头),快速复用节点通过key建立节点唯一标识,精准匹配新旧节点,避免错复用、乱排序key的作用:唯一标识节点,提升diff对比精度和效率,不建议用index作为key,会导致列表更新错乱、状态复用异常。3、Vue双向绑定原理参考答案:双向绑定是数据驱动视图+视图更新数据的结合,核心是v-model语法糖。数据变视图变:依靠响应式原理,数据触发setter,通知视图更新视图变数据变:监听表单input事件,将用户输入的值同步更新到data数据中v-model本质是:value绑定数据+@input监听事件的语法糖,自定义组件也可以通过model选项或defineModel实现双向绑定。4、Vue组件通信方式有哪些?适用场景参考答案(业务常用全覆盖):父子通信父传子:props传递数据,适合常规父子数据传递子传父:$emit触发自定义事件,子组件向父组件反馈数据、触发方法父获子实例:ref获取子组件DOM/实例,调用子组件方法子获父实例:$parent,不推荐,耦合度高跨级/多层通信provide/inject:祖先组件向所有后代组件注入数据,适合深层嵌套传值(主题、全局配置)兄弟/任意组件通信Vue2:EventBus事件总线,小型项目临时使用全局状态管理:Vuex/Pinia,中大型项目统一管理全局数据(用户信息、权限、全局状态)5、nextTick原理及使用场景参考答案:Vue数据更新是异步批量更新,修改数据后不会立即更新DOM,会缓存所有数据变更,等待同一事件循环结束后统一更新视图,避免频繁DOM操作造成性能损耗。nextTick就是等待DOM更新完成后的回调方法。使用场景:修改数据后,需要立即操作更新后的DOM,比如获取最新DOM高度、聚焦输入框、渲染完毕后执行动画。底层原理:优先使用微任务(Promise、MutationObserver),降级使用宏任务(setTimeout),保证异步执行优先级。三、Vue路由面试题1、Vue路由hash模式和history模式区别参考答案:hash模式(默认)URL带#号,#后的内容不会传给后端基于浏览器hashchange事件,兼容性最好部署简单,无需后端配置,刷新页面不会404缺点:URL不美观,部分场景不支持锚点history模式URL无#,简洁美观,和传统网页地址一致基于HTML5history.pushState实现缺点:刷新页面会请求后端真实地址,后端未配置重定向会出现404,部署需要后端配合配置2、路由守卫有哪些?全局守卫执行顺序参考答案:常用守卫分类:全局守卫:beforeEach(全局前置)、afterEach(全局后置)路由独享守卫:beforeEnter组件内守卫:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave完整执行顺序:全局前置beforeEach=>路由独享beforeEnter=>组件内beforeRouteEnter=>路由跳转=>全局后置afterEach核心使用场景:beforeEach做全局权限拦截、登录校验、页面标题修改。3、路由懒加载的作用和写法参考答案:路由懒加载是按需加载组件,初始打包时不会把所有页面代码打包进主文件,只有跳转到对应路由时才加载对应组件代码。核心作用:减小首屏打包体积,优化首屏加载速度,解决项目打包后首屏卡顿问题。常规写法:()=>import('@/views/home/index.vue')四、Vuex/Pinia面试题1、Vuex核心属性及执行流程参考答案:五大核心:state、getters、mutations、actions、modulesstate:全局数据源,存储公共状态getters:状态计算,类似computed,派生新数据,带缓存mutations:唯一修改state的方式,同步执行,用于修改数据actions:异步操作,处理接口请求、复杂异步逻辑,内部调用mutations修改数据modules:模块拆分,解决项目state臃肿、命名冲突问题完整流程:组件dispatch触发actions=>actions处理异步逻辑=>commit触发mutations=>mutations修改state=>视图响应更新2、Pinia相比Vuex的优势参考答案:去除繁琐的mutations,直接在actions中同步/异步修改数据,代码更简洁天然模块化,无需手动配置modules,每个仓库独立完美适配TS,类型推导更精准支持组件直接修改state,写法更简洁,适配Vue3组合式语法去除dispatch/commit冗余写法,开发效率更高五、高频坑点&实战面试题1、Vue数据更新了,视图不更新的原因及解决方案参考答案:Vue2常见原因:直接新增/删除对象属性,未触发响应式通过数组下标、数组长度修改数组数据异步修改数据后,未等待DOM更新就操作视图解决方案:使用this.$set/Vue.set新增响应式属性使用数组变异方法、扩展运算符、splice修改数组DOM操作逻辑放入nextTick回调中Vue3基本不会出现该问题,Proxy可监听所有数据变动。2、Vue性能优化方案(项目实战级)参考答案:1、编码层面优化v-for必须加key,避免index作为key,同时避免v-for和v-if混用频繁切换的组件使用v-show,频繁销毁创建用v-if长列表虚拟滚动,只渲染可视区域DOM,解决大数据列表卡顿复杂计算逻辑用computed缓存,避免页面重复计算销毁组件前清除定时器、监听事件、定时器,防止内存泄漏2、工程打包优化路由、组件懒加载,按需引入UI组件库、第三方插件按需引入,避免全量引入打包开启gzip压缩,减小包体积图片、静态资源压缩,使用cdn托管静态资源3、体验优化首屏加载添加loading状态接口请求防抖、节流,避免频繁请求页面缓

温馨提示

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

评论

0/150

提交评论