• 技术文章 >web前端 >Vue.js

    【整理分享】一些Vue高频面试题

    青灯夜游青灯夜游2022-08-25 18:58:48转载416
    本次给大家分享一些关于Vue的常见面试题,带你梳理基础知识,增强Vue知识储备,值得收藏,快来看看吧!

    大前端零基础入门到就业:进入学习

    分享的是一些Vue的常见面试题,是不代表全部。如果文章有不对的地方欢迎指出,有疑惑 或者有其他面试题的小伙伴也可以在评论区留言分享,大家一起交流探讨,谢谢!

    1. vue2.0组件通信⽅式有哪些?

    2. v-model是如何实现双向绑定的?

    3. Vuex和单纯的全局对象有什么区别?

    Vuex和全局对象主要有两种区别:

    4. Vue 的⽗组件和⼦组件⽣命周期钩⼦执⾏顺序是什么?

    渲染过程:⽗组件挂载完成⼀定是等⼦组件都挂载完成后,才算是⽗组件 挂载完,所以⽗组件的mounted在⼦组件mouted之后

    ⽗beforeCreate -> ⽗created -> ⽗beforeMount -> ⼦beforeCreate -> ⼦created -> ⼦beforeMount -> ⼦mounted -> ⽗mounted

    ⼦组件更新过程:

    1. 影响到⽗组件: ⽗beforeUpdate -> ⼦beforeUpdate->⼦updated -> ⽗ updted
    2. 不影响⽗组件: ⼦beforeUpdate -> ⼦updated

    ⽗组件更新过程:

    1. 影响到⼦组件: ⽗beforeUpdate -> ⼦beforeUpdate->⼦updated -> ⽗ updted
    2. 不影响⼦组件: ⽗beforeUpdate -> ⽗updated

    销毁过程:⽗beforeDestroy -> ⼦beforeDestroy -> ⼦ destroyed -> ⽗destroyed

    看起来很多好像很难记忆,其实只要理解了,不管是哪种情况,都⼀定是⽗组件等待⼦组件完 成后,才会执⾏⾃⼰对应完成的钩⼦,就可以很容易记住

    5. v-show 和 v-if 有哪些区别?

    所以, v-if 切换的开销更⼤,⽽ v-show 初始化渲染开销更 ⼤,在需要频繁切换,或者切换的部分dom很复杂时,使⽤ v-show 更合 适。渲染后很少切换的则使⽤ v-if 更合适。

    6. Vue 中 v-html 会导致什么问题

    在⽹站上动态渲染任意 HTML,很容易导致 XSS 攻击。所以只能在可信内 容上使⽤ v-html,且永远不能⽤于⽤户提交的内容上。

    7. v-for 中 key 的作⽤是什么?

    key 是给每个 vnode 指定的唯⼀ id ,在同 级的 vnode diff 过程中,可以根据 key 快速的对⽐,来判断是 否为相同节点,并且利⽤ key 的唯⼀性可以⽣成 map 来更快的获 取相应的节点。

    另外指定 key 后,就不再采⽤“就地复⽤”策略了,可以保证渲染的准确性 。

    8. 为什么 v-for 和 v-if 不建议⽤在⼀起

    9. vue-router hash 模式和 history 模式有什么区别?

    区别:

    10. vue-router hash 模式和 history 模式是如何实现的?

    # 后⾯ hash 值的变化,不会导致浏览器向服务器发出请求,浏览器不发出请 求,就不会刷新⻚⾯。同时通过监听 hashchange 事件可以知道 hash 发⽣了哪些变化,然后根据 hash 变化来实现更新⻚⾯部分内容的操作。

    history 模式的实现,主要是 HTML5 标准发布的两个 API, pushStatereplaceState ,这两个 API 可以在改变 url,但是不会发送请求。这样就可以监 听 url 变化来实现更新⻚⾯部分内容的操作。

    11. vue3.0 相对于 vue2.x 有哪些变化?

    12. 那你能讲⼀讲MVVM吗?

    13. vue 中组件 data 为什么是 return ⼀个对象的函数,⽽不是直接是个对象?

    14. Vue 中的 computed 是如何实现的

    流程总结如下:

    1、当组件初始化的时候, computeddata 会分别建⽴各 ⾃的响应系统, Observer 遍历 data中每个属性设置 get/set 数据拦截

    2、初始化 computed 会调⽤ initComputed 函数

    3、当某个属性发⽣变化,触发 set 拦截函数,然后调⽤⾃身消息订阅器 depnotify ⽅法,遍 历当前 dep 中保存着所有订阅者 wathcersubs 数组,并逐个 调⽤ watcherupdate ⽅ 法,完成响应更新。

    15. Vue 的响应式原理

    如果⾯试被问到这个问题,⼜描述不清楚,可以直接画出 Vue 官⽅⽂档的这个图,对着图来 解释效果会更好。

    1.png

    16. Object.defineProperty有哪些缺点?

    17. Vue2.0中如何检测数组变化?

    Vue 的 Observer 对数组做了单独的处理,对数组的⽅法进⾏编译,并赋值给 数组属性的 __proto__属性上,因为原型链的机制,找到对应 的⽅法就不会继续往上找了。编译⽅法中会对⼀些会增加索引的⽅法( pushunshiftsplice )进⾏⼿动 observe。

    18. nextTick是做什么⽤的,其原理是什么?

    能回答清楚这道问题的前提,是清楚 EventLoop 过程。

    注意:之所以将 nextTick 的回调函数放⼊到数组中⼀次 性执⾏,⽽不是直接在 nextTick 中执⾏回调函数,是为了保证在同⼀个tick内多 次执⾏了 nextTcik ,不会开启多个异步任务,⽽是把这些异步任务都压成⼀个同 步任务,在下⼀个tick内执⾏完毕。

    19. Vue 的模板编译原理

    vue模板的编译过程分为3个阶段:

    将模板字符串解析⽣成 AST,⽣成的AST 元素节点总共有 3 种类型,1 为普通元素, 2 为 表达式,3为纯⽂本。

    Vue 模板中并不是所有数据都是响应式的,有很多数据是⾸次渲染后就永远不会变化的,那么 这部分数据⽣成的 DOM 也不会变化,我们可以在 patch 的过程跳过对他们的⽐对。

    此阶段会深度遍历⽣成的 AST 树,检测它的每⼀颗⼦树是不是静态节点,如果是静态节点则 它们⽣成DOM 永远不需要改变,这对运⾏时对模板的更新起到极⼤的优化作⽤。

    1、⽣成代码

    const code = generate(ast, options)

    通过 generate ⽅法,将ast⽣成 render 函数。

    20. 你知道Vue3.x响应式数据原理吗?

    Vue3.x改⽤ Proxy 替代Object.defineProperty。因为Proxy可以直接监听对 象和数组的变化,并且有多达13种拦截⽅法。并且作为新标准将受到浏览器⼚商重点持续的性能优 化。

    Proxy只会代理对象的第⼀层,那么Vue3⼜是怎样处理这个问题的呢?

    判断当前Reflect.get的返回值是否为Object,如果是则再通过 reactive ⽅法做代理, 这 样就实现了深度观测。

    监测数组的时候可能触发多次get/set,那么如何防⽌触发多次呢?

    我们可以判断key是否为当前被代理对象target⾃身属性,也可以判断旧值与新值是否相等, 只有满足以上两个条件之⼀时,才有可能执⾏trigger。

    21. 你都做过哪些Vue的性能优化?

    编码阶段

    SEO优化

    打包优化

    用户体验

    还可以使用缓存(客户端缓存、服务端缓存)优化、服务端开启gzip压缩等。

    (学习视频分享:web前端开发编程基础视频

    以上就是【整理分享】一些Vue高频面试题的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:掘金社区,如有侵犯,请联系admin@php.cn删除

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    快捷开发Web应用及小程序:点击使用

    支持亿级表,高并发,自动生成可视化后台。

    专题推荐:面试题 Vue vue3
    上一篇:什么是状态管理?聊聊怎么利用Vuex进行状态管理 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 尤雨溪:新版Vue3中文文档上线了!• 深入剖析vue2.x中diff算法的原理• 看看这3道必问面试题,检验你的Vue掌握程度!• 组件间怎么通信?盘点Vue组件通信方式(值得收藏)• 详解vue3中reactive和ref的区别(源码解析)• 什么是插槽(slot)?聊聊Vue3中插槽的使用方法
    1/1

    PHP中文网