2019年web前端经典面试题——之VUE篇

386 阅读3分钟

Vue篇

Vue

  • MVVM原理?


    MVVM是Model-View-ViewModel的缩写。MVVM是一种设计思想。Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;View 代表UI 组件,它负责将数据模型转化成UI 展现出来,ViewModel 是一个同步View 和Model的对象(桥梁)。

    在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Model 和 ViewModel 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上。

    ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。

    如图:


  • mvvm和mvc区别?它和其它框架(jquery)的区别是什么?哪些场景适合?

    mvc和mvvm其实区别并不大。都是一种设计思想。

    • 主要就是mvc中Controller演变成mvvm中的viewModel。
    • mvvm主要解决了mvc中大量的DOM操作使页面渲染性能降低,加载速度变慢,影响用户体验。

    区别:

      vue数据驱动,通过数据来显示视图层而不是节点操作。
    

    场景:

      数据操作比较多的场景,更加便捷。
    

  • vue的优点?

    • 低耦合。
      • 视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
    • 可重用性。
      • 你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
    • 独立开发。
      • 开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。
    • 可测试
      • 界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。

  • vue组件怎么使用?自己怎么创建共用组件?Vue组件封装过程?

  • vue双向数据绑定原理?

    • 采用数据劫持结合发布者-订阅者模式的方式
    • 通过 Object.defineProperty() 来劫持各个属性的 setter/getter,
    • 在数据变动时发布消息给订阅者,触发相应的监听回调。

    具体步骤如下:

    A.需要observe的数据对象进⾏递归遍历
    B.compile解析模板指令
    C.Watcher订阅者是Observer和Compile之间通信桥梁
    D.MVVM作为数据绑定的⼊⼜,整合Observer、Compile和Watcher三者
    

  • watch、computed 和 methods 区别?

  • vue核心是什么?

  • vue单页面应用优点、缺点?

  • vue-cli 怎么使用自定义组件?遇到过哪些问题?

  • vue-cli中 src文件夹下的每个文件用法?

  • keep-alive 作用?

  • vue生命周期的理解?

    
    
  • router 和 route 区别?$router数据传递?

  • 组件之间的通信方式?

  • v-for 为什么要使用 :key ?

  • v-show 和 v-if 区别?

  • Vuex的理解、有几种属性?Mutaions actions 在哪使用?

  • 在复杂交互和多层页面切换时,如何保证页面间及不同组件之间值的传递? 提交或者返回上一级的时候,如何实现父级页面刷新且停留在进入前的状态?

  • v-model原理?

  • VueRouter中 query传参和param传参区别?

  • 路由守卫?

  • VueRouter 钩子函数有哪些?

  • vue-router怎么实现动态路由懒加载?

  • mixin混入

  • 作用域插槽怎么使用?

  • $nextTick作用?

  • 怎么获取全局Store中的数据? mapState是什么?

  • 虚拟dom实现原理?

  • vue可以通过数据劫持精准探测数据变化,为什么还要通过虚拟dom进行diff检测差异?

有待更新....