【每日前端面经】2024-03-03

题目来源: 牛客

说说你对Vue3的理解?

  • Vue2面对对象编程,Vue3函数时编程
  • 对TS支持的更好
  • 选项式API替代组合式API
  • 响应式原理由Object.defineProperty变为Proxy
  • 支持template中存在多个根节点
  • 重写虚拟DOM
  • 增加setup修饰符
  • 支持tree-shaking,减小体积
  • 组件渲染优化(Vue3支持单独渲染父子组件)
  • Vue3使用createApp,Vue2使用new Vue()
  • diff算法优化,使用静态树提升

Vue如何实现的响应式

Vue2

当把一个普通的JS对象传入Vue实例作为data选项,Vue将遍历此对象所有的属性并通过Object.defineProperty为其设置getter和setter,从而让Vue能够追踪依赖的变化,在被访问和修改时通知变更。每个组件实例都有一个wacher实例,会把渲染过程中需要的数据记录为依赖,当依赖项的setter触发时,会通知watch,然后把它关联的组件重新渲染

  • Vue无法检测对象属性的添加或移除,可以使用vm.$set(obj, property, value)为响应式对象添加响应式属性
  • Vue无法检测直接使用索引值设置数组项或修改数组长度,可以使用vm.$set(array, index, newValue)来响应式按索引修改属性值或者使用splice

Vue3

Vue3采用Proxy和Reflect的方法拦截对对象的交互

const exam= {name: "TOM"
};
const handler = {get: function (target, property) {// 检查当前运行的副作用,并将当前属性添加为副作用的依赖——订阅track(target, property);return Reflect.get(target.key);},set: function (target, property, value) {// 触发以target.property为依赖的副作用进行更新——发布trigger(target, property);return Reflect.set(target, key, value);}
};
const proxy = new Proxy(exam, handler);
proxy.name = "Jerry";
console.log(proxy.name);

Vue生命周期

Vue2

  • beforeCreate: 组件初始化之后,进行数据侦听和事件/侦听器的配置之前执行
  • created: 组件创建完成之后立即同步执行,已配置数据侦听、计算属性、方法等回调函数
  • beforeMount: 挂载开始之前执行,相关的render函数首次被调用
  • mounted: 组件挂载后执行,不能保证所有的子组件也都被挂载完毕
  • beforeUpdate: 数据发生改变,DOM被更新之前执行
  • updated: 数据更改导致虚拟DOM重新渲染和更新完毕之后调用
  • activated: 被keep-alive缓存的组件激活时调用
  • deactivated: 被keep-alive缓存的组件失活时调用
  • beforeDestoryed: 组件销毁之前调用
  • destoryed: 组件销毁之后调用
  • errorCaptured: 捕获到后代组件的错误时调用

Vue3

  • onMounted: 组件挂载完毕后执行
  • onUpdated: 组件因为响应式状态变更而更新其DOM树后执行
  • onUnmounted: 组件卸载之后执行
  • onBeforeMount: 组件挂载之前执行
  • onBeforeUpdate: 组件因为响应式状态变更而更新其DOM树前执行
  • onBeforeUnmount: 组件卸载之前执行
  • onErrorCaptured: 捕获了后代组件传递的错误时执行
  • onRenderTracked: 组件渲染过程中追踪到响应式依赖时调用
  • onRenderTriggered: 组件响应式依赖的变更触发了组件渲染时调用
  • onActivated: 若组件是keepAlice缓存树的一部分,当组件被插入到DOM中执行
  • onDeactivated: 若组件是keepAlice缓存树的一部分,当组件被从DOM中移除执行
  • onServerPrefetch: 组件实例在服务器上被渲染之前调用

created和mounted这两个生命周期中请求数据的区别

created是在组件实例一旦创建完成的时候立刻调用,这时候页面dom节点并未生成mounted是在页面dom节点渲染完毕之后就立刻执行的触发时机上created是比mounted要更早的两者相同点:都能拿到实例对象的属性和方法讨论这个问题本质就是触发的时机,放在mounted请求有可能导致页面闪动(页面dom结构已经生成),但如果在页面加载前完成则不会出现此情况建议:放在create生命周期当中

对nextTick的理解

Vue在更新DOM时时异步执行的。当数据发生变化时,Vue将开启一个异步更新队列,视图需要等队列中所有数据变化完成之后,再统一进行更新

对slot的理解?slot使用场景有哪些?

Vue组件通过插槽的方式实现内容的分法,它允许我们在父组件中编写DOM并在子组件渲染时把DOM添加到子组件的插槽中,使用起来非常方便。在实现上,Vue组件的插槽内容会被编译为插槽函数,插槽函数的返回值就是向槽位填充的内容。<slot>标签则会被编译为插槽函数的调用,通过执行对应的插槽函数,得到外部向槽位填充的内容(即虚拟DOM),最后将该内容渲染到槽位中

通过插槽可以让用户可以拓展组件,去更好地复用组件和对其做定制化处理。如果父组件在使用到一个复用组件的时候,获取这个组件在不同地方有少量的更改,如果去重写组件是一件不明智的事情。通过slot插槽向组件内部指定位置传递内容,完成这个复用组件在不同场景的应用。比如布局组件、表格列、下拉选、弹框显示内容等

对前端工程化的理解

前端工程化是一种思想,主要目的是为了提高效率和降低成本,即提高开发过程中的开发效率并减少不必要的重复工作时间等。可以从模块化、组件化、规范化和自动化四个方面着手

项目优化

  • 浏览器
    • 减少HTTP请求
    • 使用HTTP2.0
    • 设置浏览器缓存策略
    • 白屏时间做加载动画
  • 资源
    • 静态资源CDN
    • 静态资源单独域名
    • GZIP压缩
    • 做服务端渲染SSR
    • 将CSS放在头部,JS放在尾部
  • 图片
    • 字体图标代替图片图标
    • 精灵图
    • 图片懒加载
    • 图片预加载
    • 使用PNG格式
    • 小于10KB的图片转为BASE64
  • 代码
    • 慎用全局变量
    • 缓存全局变量
    • 减少回流与重绘
    • 节流防抖
    • 少用闭包
    • 减少数据读取次数
    • 文档碎片优化
    • 减少判断层级
  • 项目
    • 长列表优化
    • web worker
    • 避免iframe
  • 打包

面试官:你了解过Vue3吗?(Vue3知识点汇总)
Vue中的 n e x t T i c k 有什么作用?说说你对 nextTick有什么作用?说说你对 nextTick有什么作用?说说你对nextTick的理解
说说你对slot的理解?slot使用场景有哪些?
由浅入深,理解 Vue3 组件的插槽(slot)
谈谈你对生命周期的理解?在created和mounted这两个生命周期中请求数据有什么区别呢?

新人发文,礼貌求关❤️

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营(动态规划10,11 股票问题)| 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II

动态规划10 动态规划5步曲&#xff0c;个人感觉应该加一步状态分析 状态分析&#xff1a; 列出所有的状态&#xff0c;将状态归纳后定义dp数组状态转移&#xff0c;状态怎么转移也就是递推公式是什么 买卖股票的动规五部曲分析如下&#xff1a; 1 确定dp数组&#xff08;d…

pytorch中的可学习查找表实现之nn.Embedding

假设我们需要一个查找表&#xff08;Lookup Table&#xff09;&#xff0c;我们可以根据索引数字快速定位查找表中某个具体位置并读取出来。最简单的方法&#xff0c;可以通过一个二维数组或者二维list来实现。但如果我希望查找表的值可以通过梯度反向传播来修改&#xff0c;那…

上传项目的全部依赖到maven私有仓库-nexus

背景 项目之前的私有仓库不能使用了&#xff0c;本地仓库可以&#xff0c;但是一旦clean就没了&#xff0c;所以在本地有依赖的时候可以自己搭建一个maven私有仓库然后将依赖全部上传上去 搭建&#xff1a;使用docker-compose方式搭建 docker-compose文件 version: "3…

C语言入门到精通之练习47:一个偶数总能表示为两个素数之和。

题目&#xff1a;一个偶数总能表示为两个素数之和。 程序分析&#xff1a;我去&#xff0c;这是什么题目&#xff0c;要我证明这个问题吗&#xff1f;真不知道怎么证明。那就把一个偶数串联成两个素数吧。 实例 #include<stdio.h> #include<stdlib.h> int Isprime…

Python算法100例-3.1 回文数

完整源代码项目地址&#xff0c;关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.问题拓展7.巧用字符串技巧 1&#xff0e;问题描述 打印所有不超过n&#xff08;取n<256&#xff09;的其平方具有对称性质的数&#xff08;也称回…

在国内如何申请US,visa卡?

随着跨境与AI的发展大家对美国虚拟卡的需求也越来越多&#xff0c;比如说亚马逊、ebay、Etsy、ChatGPTPLUS、midjourney、POE等等软件以及海淘的需要&#xff0c;所以我们需要用到美国虚拟卡的场景就越来越多 如何获得一张US 虚拟信用卡&#xff1f; 方法很简单&#xff0c;点…

一线大厂软件测试面试题及答案解析,2024最强版...

【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程&#xff0c;一周学完让你面试通过率提高90%&#xff01;&#xff08;自动化测试&#xff09; 1、什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台、软件平台上…

CNAN知识图谱辅助推荐系统

CNAN知识图谱辅助推荐系统 文章介绍了一个基于KG的推荐系统模型&#xff0c;代码也已开源&#xff0c;可以看出主要follow了KGNN-LS 。算法流程大致如下&#xff1a; 1. 算法介绍 算法除去attention机制外&#xff0c;主要的思想在于&#xff1a;user由交互过的item来表示、i…

OpenShift AI - 部署并使用 LLM 模型

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.15 RHODS 2.7.0 的环境中验证 文章目录 安装 OpenShift AI 环境安装 Minio 对象存储软件配置 Single Model Serving 运行环境创建项目和 Workbench准备模型和配置 Model Server访问 LLM 模…

arm-linux-gnueabi、arm-linux-gnueabihf 交叉编译器区别

1、arm-linux-gnueabi&#xff1a; 使用软件浮点&#xff08;软浮点&#xff09;。这意味着所有的浮点运算都将由软件库来处理&#xff0c;而不会利用硬件中的浮点运算单元。因此&#xff0c;生成的目标代码包含了对软件浮点库的调用。 2、arm-linux-gnueabihf&#xff1a; 使…

c++八股文:c++新特性

文章目录 [toc] 1.C11的新特性有哪些2.智能指针3.类型推导4.左值和右值5.nullptr6.范围for循环7.lambda表达式参考 1.C11的新特性有哪些 语法的改进 &#xff08;1&#xff09;统⼀的初始化⽅法 &#xff08;2&#xff09;成员变量默认初始化 &#xff08;3&#xff09;auto关…

mybatis中#{}和${}的区别?

#{}是占位符&#xff0c;预编译处理&#xff1b;${}是拼接符&#xff0c;字符串替换&#xff0c;没有预编译处理。 Mybatis在处理#{}时&#xff0c;#{}传入参数是以字符串传入&#xff0c;会将SQL中的#{}替换为?号&#xff0c;调用PreparedStatement的set方法来赋值。 Mybat…

DCTNet

DCTNet http://giantpandacv.com/academic/%E7%AE%97%E6%B3%95%E7%A7%91%E6%99%AE/%E9%A2%91%E5%9F%9F%E4%B8%AD%E7%9A%84CNN/CVPR%202020%20%E5%9C%A8%E9%A2%91%E5%9F%9F%E4%B8%AD%E5%AD%A6%E4%B9%A0%E7%9A%84DCTNet/ 一个对输入图像进行频域转换和选择的方法&#xff0c;达到…

python实现手机号归属地查询

手机上突然收到了某银行的短信提示&#xff0c;看了一下手机的位数&#xff0c;正好是11位。我一想&#xff0c;这不就是标准的手机号码吗&#xff1f;于是一个想法涌上心头——用python的库实现查询手机号码归属地查询自由。 那实现的效果如下&#xff1a; 注&#xff1a;电…

达梦数据库基础操作(一):用户操作

达梦数据库基础操作(一)&#xff1a;用户操作 1 达梦运行状态 SELECT banner as 版本信息 FROM v$version;1.2 达梦版本号 SELECT banner as 版本信息 FROM v$version;1.3 用户相关操作 默认用户名密码&#xff1a;SYSDBA/SYSDBA 注意&#xff1a;在哪个数据库下创建的用户…

2.3_3 进程互斥的硬件实现方法

文章目录 2.3_3 进程互斥的硬件实现方法&#xff08;一&#xff09;中断屏蔽方法&#xff08;二&#xff09;TestAndSet指令&#xff08;三&#xff09;Swap指令 总结&#xff08;四&#xff09;互斥锁 2.3_3 进程互斥的硬件实现方法 学习提示&#xff1a; 1.理解各方法的原理 …

宝塔Linux面板迁移网站数据的详细步骤是什么?

宝塔Linux面板迁移网站数据的详细步骤是什么&#xff1f; 准备工作&#xff1a;确保宝塔面板处于最新版本并与服务器环境一致。如果需要迁移到其他机器&#xff0c;需要将迁入服务器的宝塔面板信息和API秘钥填写好。秘钥的有效期为7天&#xff0c;建议在使用后手动关闭接口以保…

Python从0到100(二):Python语言介绍及第一个Pyhon程序

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

springcloud:3.3测试重试机制

服务提供者【test-provider8001】 Openfeign远程调用服务提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相关接口 测试远程调用&#xff1a;http://localhost:8001/payment/index 服务消费者【test-consumer-resilience4j8004】 Openfeign远程调用消费者搭建 文章地址http:/…

Vue 3 中如何使用全局 API?

Vue 3 中的全局 API 使用详解 Vue 3 相较于 Vue 2 在全局 API 的使用上有了较大的变化。Vue 3 引入了新的全局 API 创建方式&#xff0c;并通过 createApp 方法替代了 Vue 2 中的 new Vue()。这种变化使得 Vue 3 在全局 API 的使用上更加灵活&#xff0c;也更好地支持了 tree-…