vue面试题目|ssr,模板编译原理,mixin,监听对象

31. delete和Vue.delete删除数组的区别

delete 只是被删除的元素变成了 empty/undefined 其他的元素的键值还是不变。Vue.delete 直接删除了数组 改变了数组的键值

32. vue如何监听对象或者数组某个属性的变化

当在项目中直接设置数组的某一项的值,或者直接设置对象的某个属性值,这个时候,你会发现页面并没有更新。这是因为Object.defineProperty()限制,监听不到变化。解决方式:this.$set(你要改变的数组/对象,你要改变的位置/key,你要改成什么value

this.$set(this.arr, 0, "OBKoro1"); // 改变数组
this.$set(this.obj, "c", "OBKoro1"); // 改变对象

调用以下几个数组的方法

splice()、 push()、pop()、shift()、unshift()、sort()、reverse()

splice(),push(),pop(),shift(),unshift(),sort(),reverse()vue源码里缓存了array的原型链,然后重写了这几个方法,触发这几个方法的时候会observer数据,意思是使用这些方法不用再进行额外的操作,视图自动进行更新。 推荐使用splice方法会比较好自定义,因为splice可以在数组的任何位置进行删除/添加操作vm.$set 的实现原理是:

●如果目标是数组,直接使用数组的 splice 方法触发相应式;

●如果目标是对象,会先判读属性是否存在、对象是否是响应式,最终如果要对属性进行响应式处理,则是通过调用 defineReactive 方法进行响应式处理( defineReactive 方法就是 Vue 在初始化对象时,给对象属性采用 Object.defineProperty 动态添加 getter 和 setter 的功能所调用的方法)、

delete知识被删除的元素变成了empty/undefined其他的元素的兼职还是不变的,r如果目标是对象,会先判断属性是否存在,

defineReacttive方法就是vue在初始化对象的时候给对象属性采用Object.defineProperty动态添加getter和setter的功能所调用的方法

33. 什么是 mixin ?

●Mixin 使我们能够为 Vue 组件编写可插拔和可重用的功能。●如果希望在多个组件之间重用一组组件选项,例如生命周期 hook、 方法等,则可以将其编写为 mixin,并在组件中简单的引用它。●然后将 mixin 的内容合并到组件中。如果你要在 mixin 中定义生命周期 hook,那么它在执行时将优化于组件自已的 hook。

我们能够为vue组件编写可以插拔和可重用的功能额

如果希望在多个组件之间重用一组组件选项,例如声明周期hook,方法等等,则可以编写mixin你并且组件当中简单引用他

然后将mixin的内容合并到组件当中,如果你要在mixin当中定义声明周期hook那么他在执行的时候将优化与组件的hook

34. Vue模版编译原理

vue中的模板template无法被浏览器解析并渲染,因为这不属于浏览器的标准,不是正确的HTML语法,所有需要将template转化成一个JavaScript函数,这样浏览器就可以执行这一个函数并渲染出对应的HTML元素,就可以让视图跑起来了,这一个转化的过程,就成为模板编译。模板编译又分三个阶段,解析parse,优化optimize,生成generate,最终生成可执行函数render。●解析阶段:使用大量的正则表达式对template字符串进行解析,将标签、指令、属性等转化为抽象语法树AST。●优化阶段:遍历AST,找到其中的一些静态节点并进行标记,方便在页面重渲染的时候进行diff比较时,直接跳过这一些静态节点,优化runtime的性能。●生成阶段:将最终的AST转化为render函数字符串。、

模板的template无法被浏览器解析并且渲染,因为不属于浏览器的标准,不是正确的html语法,所有需要将template转化成为javascript函数,这样浏览器就可以执行一个函数并且渲染处对应的html元素,就可以让视图跑出来了,模板编译、

模板编译分为三个阶段:解析parse,优化optimze,生成,generate最终生成可以执行的函数render

解析阶段:使用大量的正则表达式对template字符串进行解析,将标签指令属性等转化成为抽象语法树ast

解析,优化,生成

将大量的正则表达式对template字符串进行解析,将标签指令和属性转化成为抽象语法树ast

优化极端:遍历ast找到其中一些静态节点,并且将i女性标记,方便再页面重新渲染的时候进行diff比较,直接跳过一些静态系欸但那,

35. 对SSR的理解

SSR也就是服务端渲染,也就是将Vue在客户端把标签渲染成HTML的工作放在服务端完成,然后再把html直接返回给客户端SSR的优势:●更好的SEO●首屏加载速度更快SSR的缺点:●开发条件会受到限制,服务器端渲染只支持beforeCreate和created两个钩子;●当需要一些外部扩展库时需要特殊处理,服务端渲染应用程序也需要处于Node.js的运行环境;●更多的服务端负载

再客户端把标签渲染成为html的工作放在服务端完成,然后再把html直接返回给客户端

更好的seo

首屏加载速度更快

开发条件会受到限制,服务器端渲染只支持

beforeCreate和crezated两个钩子

当需要一些外部扩展库的时候需要特殊处理,服务端渲染应用程序处于node.js的运行环境当中

#23届找工作求助阵地##软件开发薪资爆料##通信硬件薪资爆料##我的实习求职记录##你们的毕业论文什么进度了#
全部评论

相关推荐

查看36道真题和解析 软件开发2024笔面经
点赞 评论 收藏
转发
头像
不愿透露姓名的神秘牛友
05-11 18:19
1. 简述多态实现的原理。2. 链表和数组有什么区别?3. 简述队列和栈的异同。4. &&和&、||和|有什么区别?5. C++的引用和C语言的指针有什么区别?6. typedef和define有什么区别?7. 关键字const是什么?8. static有什么作用?9. extern有什么作用?10. 流操作符重载为什么返回引用?11. 简述指针常量与常量指针的区别。12. 如何避免"野指针"?13. 常引用有什么作用?14. 构造函数能否为虚函数?15. 关键字volatile有什么含意(举例说明)?16. 程序什么时候应该使用线程,什么时候单线程效率高?17. Linux有内核级线程吗?18. C++中什么数据分配在栈或堆中,new分配数据是在近堆还是远堆中?19. 使用线程是如何防止出现大的波峰?20. 函数模板与类模板有什么区别?21. 动态连接库的两种方式?22. 什么是平衡二叉树?23. 冒泡排序算法的时间复杂度是什么?24. C和C++中的struct有什么不同?25. 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)。26. 不能做switch()的参数类型是?27. 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?28. 8086是多少位的系统?在数据总线上是怎么实现的?29. 局部变量能否和全局变量重名?30. 结构传递和返回是如何实现的?为什么sizeof返回的值大于结构大小的期望值,是不是尾部都有填充?答案在面经中  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
查看30道真题和解析
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务