问的多查的多的vue面试题整理不容错过,快看有没有你被问到的题目!(2)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

| destoryed | 组件销毁后调用 |

虚拟dom


  • 由于dom操作耗时十分长,且dom对象的体积很大,单个div的dom属性就有294个之多;

  • Virtual DOM 就是用一个原生的 JS 对象去描述一个 DOM 节点,所以它比创建一个 DOM 的代价要小很多。

  • VNode 是对真实 DOM 的一种抽象描述,它的核心定义无非就几个关键属性,标签名、数据、子节点、键值等,其它属性都是用来扩展 VNode 的灵活性以及实现一些特殊 feature 的。由于 VNode 只是用来映射到真实 DOM 的渲染,不需要包含操作 DOM 的方法,因此它是非常轻量和简单的。

  • Virtual DOM到真实的dom需要经过以下过程:VNode 的 create、diff、patch

v-model双向数据绑定原理


vue 双向数据绑定是通过 数据劫持 结合 发布订阅模式 的方式来实现的,也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变; 核心:Object.defineProperty() 方法。

v-model本质上是语法糖,v-model在内部为不同的输入元素使用不同的属性并抛出不同的事件

  • text 和 textarea 元素使用 value 属性和 input 事件

  • checkbox 和 radio 使用 checked 属性和 change 事件

  • select 字段将 value 作为 prop 并将 change 作为事件

<input :value=“sth” @input=“sth = $event.target.value” />

复制代码

vue 插槽


设置在自组件内部的插槽像一个盒子,位置由子组件决定,放什么内容由父组件决定。

实现了内容分发,提高了组件自定义的程度,让组件变的更加灵活

  1. 默认插槽:

无需name属性,取子组件肚子里第一个元素节点作为默认插槽。

子页面

hello,world!

子页面

hello,world!

复制代码

  1. 具名插槽:

在多个插槽的情况下使用,利用name标识插槽。

子页面

头部

脚部

身体

子页面

头部

身体

脚部

复制代码

  1. 作用域插槽:

子组件给父组件传递数据。

子页面

头部: {{ slotProps.data }}

子页面

头部: data from child-component.

复制代码

Vue与Angular以及React的区别?


Vue与AngularJS的区别

  • Angular采用TypeScript开发, 而Vue可以使用javascript也可以使用TypeScript

  • AngularJS依赖对数据做脏检查,所以Watcher越多越慢;Vue.js使用基于依赖追踪的观察并且使用异步队列更新,所有的数据都是独立触发的。

  • AngularJS社区完善, Vue的学习成本较小

Vue与React的区别

  • vue组件分为全局注册和局部注册,在react中都是通过import相应组件,然后模版中引用;

  • props是可以动态变化的,子组件也实时更新,在react中官方建议props要像纯函数那样,输入输出一致对应,而且不太建议通过props来更改视图;

  • 子组件一般要显示地调用props选项来声明它期待获得的数据。而在react中不必需,另两者都有props校验机制;

  • 每个Vue实例都实现了事件接口,方便父子组件通信,小型项目中不需要引入状态管理机制,而react必需自己实现;

  • vue使用插槽分发内容,使得可以混合父组件的内容与子组件自己的模板;

  • vue多了指令系统,让模版可以实现更丰富的功能,而React只能使用JSX语法;

  • Vue增加的语法糖computedwatch,而在React中需要自己写一套逻辑来实现;

  • react的思路是all in js,通过js来生成html,所以设计了jsx,还有通过js来操作css,社区的styled-component、jss等;而 vue是把html,css,js组合到一起,用各自的处理方式,vue有单文件组件,可以把html、css、js写到一个文件中,html提供了模板引擎来处理。

  • react做的事情很少,很多都交给社区去做,vue很多东西都是内置的,写起来确实方便一些,比如 reduxcombineReducer就对应vuexmodules, 比如reselect就对应vuex的getter和vue组件的computed, vuex的mutation是直接改变的原始数据,而redux的reducer是返回一个全新的state,所以redux结合immutable来优化性能,vue不需要。

  • react是整体的思路的就是函数式,所以推崇纯组件,数据不可变,单向数据流,当然需要双向的地方也可以做到,比如结合redux-form,组件的横向拆分一般是通过高阶组件。而vue是数据可变的,双向绑定,声明式的写法,vue组件的横向拆分很多情况下用mixin

$route$router的区别


  • $route是路由信息对象,包括path,params,hash,query,fullPath,matched,name等路由信息参数。

  • 而$router是路由实例对象包括了路由的跳转方法,钩子函数等。

Vue的SPA 如何优化加载速度


  • 减少入口文件体积

  • 静态资源本地缓存

  • 开启Gzip压缩

  • 使用SSR,nuxt.js

vue项目中的优化


编码阶段

  • 不要在模板里面写过多表达式

  • 尽量减少data中的数据,data中的数据都会增加gettersetter,会收集对应的watcher

  • v-ifv-for不能连用

  • 如果需要使用v-for给每项元素绑定事件时使用事件代理

  • SPA 页面采用keep-alive缓存组件

  • 频繁切换的使用v-show,不频繁切换的使用v-if

  • 循环调用子组件时添加key,key保证唯一

  • 使用路由懒加载、异步组件

  • 防抖、节流

  • 第三方模块按需导入

  • 长列表滚动到可视区域动态加载

  • 图片懒加载

SEO优化

  • 预渲染

  • 服务端渲染SSRnuxt.js

打包优化

  • 压缩代码

  • Tree Shaking/Scope Hoisting

  • 使用cdn加载第三方模块

  • 多线程打包happypack

  • splitChunks抽离公共文件

  • sourceMap优化

用户体验

  • 骨架屏

  • PWA渐进式Web应用,使用多种技术来增强web app的功能,让网页应用呈现和原生应用相似的体验。

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

vue有了数据响应式,为何还要diff?


核心原因:粒度

  • React通过setState知道有变化了,但不知道哪里变化了,所以需要通过diff找出变化的地方并更新dom。

  • Vue已经可以通过响应式系统知道哪里发生了变化,但是所有变化都通过响应式会创建大量Watcher,极其消耗性能,因此vue采用的方式是通过响应式系统知道哪个组件发生了变化,然后在组件内部使用diff。这样的中粒度策略,即不会产生大量的Watcher,也使diff的节点减少了,一举两得。

vue模版编译


编译的核心是把 template 模板编译成 render 函数,主要分为如下三个步骤:

  • 生成AST树

  • 优化

  • codegen

MVVM


MVVMModel-View-ViewModel缩写,也就是把MVC中的Controller演变成ViewModelModel层代表数据模型,View代表UI组件,ViewModel是View和Model层的桥梁,数据会绑定到viewModel层并自动将数据渲染到页面中,视图变化的时候会通知viewModel层更新数据。

响应式数据原理(Vue2.x & Vue3.0)


Vue2.x在初始化数据时,会使用Object.defineProperty重新定义data中的所有属性,当页面使用对应属性时,首先会进行依赖收集(收集当前组件的watcher),如果属性发生变化会通知相关依赖进行派发更细(发布订阅模式)。

vue3.0采用es6中的proxy代替Object.defineProperty做数据监听。

Proxy与Object.defineProperty的优劣对比?


Proxy的优势如下:

  • Proxy可以直接监听对象而非属性

  • Proxy可以直接监听数组的变化

  • Proxy有多达13种拦截方法,不限于apply、ownKeys、deleteProperty、has等等是Object.defineProperty不具备的

  • Proxy返回的是一个新对象,我们可以只操作新的对象达到目的,而Object.defineProperty只能遍历对象属性直接修改

  • Proxy作为新标准将受到浏览器厂商重点持续的性能优化,也就是传说中的新标准的性能红利

Object.defineProperty的优势如下:

  • 兼容性好,支持IE9

最后

我可以将最近整理的前端面试题分享出来,其中包含HTML、CSS、JavaScript、服务端与网络、Vue、浏览器、数据结构与算法等等,还在持续整理更新中,希望大家都能找到心仪的工作。

篇幅有限,仅展示部分截图:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
仪的工作。

篇幅有限,仅展示部分截图:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-vAtvPQOE-1713099941159)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值