vue面试题vue2和vue3合集里有关于vue最全面的面试题,通过获取最新的面试题库,让你了解时下最新的技术,让你紧跟时代,从vue2到vue3的区别,再到各自的优势,以及做出的优化,全面具体的分析时下的面试题!
vue2和vue3的区别
1)根节点的不同
Vue3在组件中可以放置多个根节点
Vue2只能一个根节点
2)双向数据绑定原理的区别
3)Vue3中采用compositionAPI
vue3:采用的组合型API(compositionAPI)
vue2:采用的选项型API(opsitionAPI)
4)父子传参不同
vue3:父传子,用props,子传父用事件EmittingEvents。在vue3中的setup()中的第二个参数content对象中就有emit,那么我们只要在setup()接收第二个参数中使用分解对象法取出emit就可以在setup方法中随意使用了。
vue2:父传子,用props,子传父用事件EmittingEvents。在vue2中,会调用this$emit然后传入事件名和对象。
5)生命周期函数不同
6)建立的数据方式不同
vue2:数据是放置在data属性中
vue3:需要使用setup方法,该方法在初始化构造的时候触发
注:ref:需要value访问,内部还是使用的definePropertysetget方法进行监听(proxy不支持基本类型的监听)
reactive:使用的proxy对数据进行的一个代理
7)diff算法不同
8)生命周期的变化
被激活:onActivated 被包含在<keep-alive>中的组件,会多出两个生命周期钩子函数。被激活时执行。
切换:onDeactivated 比如从 A 组件,切换到 B 组件,A 组件消失时执行
挂载前:beforeMount -> onBeforeMount
挂载后:mounted -> onMounted
创建前:beforeCreate -> 使用setup()
创建后:created -> 使用setup()
销毁前:beforeDestroy -> onBeforeUnmount
销毁后:destroyed -> onUnmounted
更新前:beforeUpdate -> onBeforeUpdate
更新后:updated -> onUpdated
异常捕获:errorCaptured -> onErrorCaptured
vue模式讲解
1.什么是MVC?
V-View视图:负责用户界面的展示和呈现,通常是用户可以看到和与之交互的部分。
M-Model数据:负责数据管理和业务逻辑。模型表示应用程序中的数据结构以及对数据的操作。
C-Controller控制器:负责接收用户的输入并作出响应,它处理用户与模型和视图之间的交互。控制器将用户的操作转发给模型进行处理,并将模型的结果传递给视图进行展示。
MVC的优势:
通过明确定义了各个组件的职责,开发人员可以更好地组织和管理代码,同时也使得代码更容易被复用。能够将应用程序的各个功能模块分离开来,提高代码的可维护性和可扩展性。
2.什么是MVVM?
VM-ViewModel视图-数据:它是View和Model的粘合体,负责View和Model的交互和协作
M-Model数据:负责数据管理和业务逻辑。
V-View视图:负责用户界面的展示和呈现。
vue双向数据绑定是通过数据劫持结合发布订阅模式的方式来实现的,也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变;
核心:关于VUE双向数据绑定,其核心是Object.defineProperty()方法,getset方法。
它是基于MVC的一种演变,将视图和数据绑定的方式更加紧密地结合在一起。在MVVM的框架下视图和模型是不能直接通信的。它们通过ViewModel来通信,ViewModel通常要实现一个observer观察者,当数据发生变化,ViewModel能够监听到数据的这种变化,然后通知到对应的视图做自动更新,而当用户操作视图,ViewModel也能监听到视图的变化,然后通知数据做改动,这实际上就实现了数据的双向绑定。并且MVVM中的View和ViewModel可以互相通信。
MVVM是一种软件架构模式。
webpack这块你平时做过哪些优化吗?
使用 webpack-merge 合并配置:我将基础配置和开发/生产环境配置分开,使用 webpack-merge 来合并配置,这样可以保持配置的可维护性。
在使用 Webpack 进行项目构建时,我进行了一些优化措施来提升构建速度和减少最终包的大小:
开启 tree-shaking:确保只打包用到的模块和代码,减少不必要的代码。
利用 SplitChunksPlugin 进行代码分割:通过配置 SplitChunksPlugin,我将公共的依赖模块提取到单独的 chunk 中,这样可以利用浏览器缓存,减少重复加载。
使用 TerserPlugin 进行代码压缩:在生产环境中,我使用 TerserPlugin 来压缩 JavaScript 代码,减少文件体积。
配置 externals:对于一些大型的库,比如 lodash 或 moment,我会将它们配置为外部依赖,避免打包到最终的 bundle 中。
利用缓存:通过配置 cache-loader 或 HardSourceWebpackPlugin 来缓存构建结果,提高二次构建的速度。
使用 webpack-bundle-analyzer 分析打包结果:通过可视化工具来分析打包后的文件大小,进一步优化。
vue3的优势
更好的TypeScript支持:Vue3对TypeScript的支持更加完善,可以更好地进行类型检查和代码提示。
更小的体积:Vue3的体积比Vue2更小,同时也支持按需加载,减少了页面加载时间。
更好的组件封装:Vue3引入了Composition API,可以更好地封装组件逻辑,使得组件更加可复用和易维护。
更快的渲染速度:Vue3使用了Proxy代理对象,可以更快地跟踪数据变化,从而提高渲染速度。
更好的响应式系统:Vue3的响应式系统进行了重构,可以更好地处理嵌套对象和数组的变化,同时也提供了更多的API来处理响应式数据。
总之,Vue3带来了更好的性能、更小的体积、更好的TypeScript支持、更好的组件封装和更好的响应式系统,使得开发者可以更加高效地开发Vue应用。
MVC的优势:
通过明确定义了各个组件的职责,开发人员可以更好地组织和管理代码,同时也使得代码更容易被复用。能够将应用程序的各个功能模块分离开来,提高代码的可维护性和可扩展性。