前端面试题整理(1.0)

1.nextTick原理

Vue是异步执行Dom更新的,一旦观察到数据变化,Vue就会开启一个队列,然后把在同一个事件循环(event loop)当中观察到数据变化的Watcher推送到这个队列。如果这个Watcher被触发多次,智慧被推送到队列一次。这种缓冲行为可以有效去掉重复数据造成的不必要的计算和DOM操作。而在下一个事件循环时,Vue会清空队列,并进行必要的Dom更新。当你设置vm(this).someData='new value',DOM并不会马上更新,而是在异步队列被清除,也就是下一个事件循环开始时执行更新时才会进行必要的Dom更新。如果此时你想要根据更新的DOM状态去做某些事情,就会出现问题。为了在数据变化之后等待Vue完成更新Dom,可以在数据变化之后立即使用Vue.nextTick(callback)。这样回调函数在DOM更新完成后就会调用。

2.Data为什么是一个函数

在Vue组件中,data选项必须是一个函数,而不能直接是一个对象。这是因为Vue组件可以同时存在多个实例,如果直接使用对象形式的data选项,那么所有的实例将会共享同一个data对象,这样就会造成数据相互干扰的问题。因此,将data选项设置为函数可以让每个实例都拥有自己独立的data对象。

3.为什么循环的时候需要加key?

作用:key的作用主要是为了高效的更新虚拟DOM,提高渲染性能。key属性可以避免数据混乱的情况出现。

原理:

①Vue实现了一套虚拟Dom,使我们可以不直接操作Dom元素之操作数据,就可以重新渲染页面,而隐藏在背后的原理是高效的Diff算法。

②当页面数据发生变化时,Diff只会比较同一层级的节点。

③如果节点类型不同,直接干掉前面的节点,再创建并插入新的节点,不会再比较这个节点后面的子节点;如果节点类型相同,则会重新设置该节点的属性,从而实现节点更新。

④使用key给每一个节点做一个唯一标识,Diff算法就可以正确识别此节点,“”“就地更新查找到正确的位置插入新的节点。

4.有哪些常见的Loader?你用过哪些Loader?

Raw-loader:加载文件原始内容(utf-8)

file-Loader:把文件输出为一个文件夹中,在代码中通过相对URL去引用输出的文件(处理图片和字体)

url-loader:与file-loader类似,区别是用户可以设置一个阈值,大于阈值会交给file-loader处理,小于阈值时返回文件base64形式编码(处理图片和字体)

Source-map-Loader:加载额外的Source map文件,以方便断点调试

svg-inline-loader:将压缩后的svg内容注入代码中

image-loader:加载并且压缩图片文件

json-loader:加载json文件

handlebars-loader:将handlebars模板编译成函数并返回。

Babel-loader:把ES6转换成ES5

ts-loader:将Typescript转换成JavaScript

awesome-Typescript-loader:将Typescript转换成JavaScript,性能优于ts-loader。

Sass-loader:将scss/sass代码转换成css

css-loader:加载css,支持模块化、压缩、文件导入等特性。

style-loader:把css代码注入到JavaScript中,通过Dom操作去加载css。

postcss-loader:扩展css语法,使用下一代css,可以配合autoprefixer插件自动补齐css3前缀。

eslint-loader:通过eslint检查JavaScript代码

tslint-loader:通过tslint检查Typescript代码。

Mocha-loader:加载Mocha测试用例的代码

coverjs-loader:计算测试的覆盖率

Vue-loader:加载Vue.js单文件组件。

i18n-loader:国际化

cache-loader:可以在一些性能开销较大的Loader之前添加,目的是将结果缓存到磁盘里

2.有哪些常见的plugin?你用过哪些plugin?

define-plugin:定义环境变量(Webpack4之后指定model会自动配置)

ignore-plugin:忽略部分文件。

html-Webpack-plugin:简化HTML文件创建(依赖于html-loader)

Web-Webpack-plugin:可方便地为单页应用输出HTML,比html-Webpack-plugin好用

uglifyjs-Webpack-plugin:不支持ES6压缩(Webpack4以前)

terser-Webpack-plugin:支持ES6压缩(Webpack4)

Webpack-parallel-uglify-plugin:多进程执行代码压缩。提升构建速度。

mini-css-extract-plugin:分离样式文件,css提取为独立文件,支持按需加载(替代extract-text-webpack-plugin)

serviceworker-webpack-plugin:为网页增加离线缓存功能

clean-webpack-plugin:目录清理

ModuleConcatenationPlugin:开启Scope hoisting

speed-measure-webpack-plugin:可以看到每个loader和plugin执行耗时(整个打包耗时、每个Plugin和Loader耗时)

Webpack-bundle-analyzer:可视化Webpack输出文件的体积(业务组件、依赖第三方模块)

3.说一说Loader和Plugin的区别?

Loader本质是一个函数,在该函数中对接到的内容进行转换,返回转换后的结果。因为Webpack只认识JavaScript,所以Loader就成了翻译官,对其他类型的资源进行转译的预处理工作。

Plugin就是插件,基于事件流框架Tapable,插件可以扩展Webpack的功能,在Webpack运行的声明周期中会广播出许多事件,Plugin可以监听这些事件,在合适的时机通过Webpack提供的API改变输出结果。

Loader在module.rules中配置,作为模板的解析规则,类型为数组。每一项都是一个Object,内部包含了test(类型文件)、loader、options(参数)等属性。

Plugin在plugins中单独配置,类型为数组,每一项是一个Plugin的实例,参数都通过构造函数传入。

4.Webpack打包流程

Webpack的打包流程是一个串行的过程,从启动到结束会依次执行以下流程:

①初始化参数:从配置文件和shell语句中读取与合并参数,得出最终的参数

②开始编译:用上一步得到的参数初始化Complier对象,加载所有配置的插件,执行对象的run方法开始执行编译。

③确定入口:根据配置中的entry找出所有的入口文件。

④编译模块:从入口文件触发,调用所有配置的Loader对模块进行翻译,再找出该模块依赖的模块,再递归本步骤直至所有入口依赖文件都经过了本步骤的处理

⑤完成模块编译:在经过第4步使用Loader翻译完所有模板后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系。

⑥输出资源:根据入口和模块之间的依赖关系,组装成一个个包含多个模块的Chunk,再把每个Chunk转换成一个单独的文件加入到输出列表,这步是可以修改输出内容的最后机会。

⑦输出完成:在确定好输出内容后,根据配置确定输出的路径和文件名,把文件内容写入到文件系统。

在以上过程中,Webpack会特定的时间点广播出特定的事件,插件在监听到感兴趣的事件后会执行特定的逻辑,并且插件可以调用Webpack提供的API改变Webpack的运行结果。

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

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

相关文章

【Java基础面试四十一】、说一说你对static关键字的理解

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:说一说你对static关键字…

postgresql 配置文件 与 修改配置如何启用

2.启用配置 postgresql显式地以表格的方式告诉我们哪些配置项需要重启数据库实例、哪些配置项仅需要重新加载配置文件即可无需重启服务 select name, context from pg_settings context 的值指示具体策略: internal: 编译期间的设置,只有重新编译才能生…

2525.根据规则将箱子分类/并查集/动态规划

2525. 根据规则将箱子分类 - 力扣(LeetCode) 给你四个整数 length ,width ,height 和 mass ,分别表示一个箱子的三个维度和质量,请你返回一个表示箱子 类别 的字符串。 如果满足以下条件,那么…

typescript实现一个简单的区块链

TypeScript 是一种由 Microsoft 推出的开源编程语言,它是 JavaScript 的超集,允许程序员使用面向对象的方式编写代码,并提供类型检查和语法提示等优秀的开发体验。区块链技术是一种分布式的、可靠的、不可篡改的数据库技术,用于记…

《数据结构与算法之美》读书笔记1

Java的学习 方法参数多态(向上和向下转型) 向上转型: class Text{public static void main(String[] args) {Animals people1 new NiuMa();people1.eat1();//调用继承后公共部分的方法,没重写调用没重写的,重写了调…

基于Django与深度学习的股票预测系统 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果3 Django框架4 数据整理5 模型准备和训练6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于Django与深度学习的股票预测系统 ** 该项目较为新颖,适合作为竞赛课题方向&#xff…

Ubuntu桌面环境的切换方法

你在找它吗? 国内麒麟、深度等系统虽然界面更炫,但——软件仓库与Ubuntu官方已不兼容。国内系统遇到稳定性问题,还是得拿Ubuntu做参照。今天本来介绍下这款Linux桌面。 为什么在 Ubuntu 上考虑 LXQt? 性能:LXQt设计为…

计算机网络-计算机网络体系结构-传输层

目录 一、UDP 二、TCP 特点 首部格式 连接管理 可靠传输 流量控制(点对点) 拥塞控制(全局) 三、拥塞控制算法 慢开始&拥塞避免 快重传&快恢复 功能一:提供进程与进程之间的逻辑通信 功能二:复用和分用 功能三:对收到的报…

摩尔信使MThings的协议转换(数据网关)功能

摩尔信使MThings可以作为现场总线(RS485)和以太网的数据中枢,并拥有强大的Modbus协议转换功能。 数据网关功能提供协议转换和数据汇聚功能,可实现多维度映射,包括:不同的通道(总线)类型、协议类型&#xff…

PHP yield

概念: Generator:带 yield的function yield:Generator或task的中断关键字,执行到yield时一次调度周期执行完即阻塞,并返回右侧表达式结果,等待下一次调度器运行next()或迭代遍历才会继续往下执行&#xff0…

Axure RP静态站点的发布与内网穿透结合实现远程访问本地原型页面

文章目录 前言1.在AxureRP中生成HTML文件2.配置IIS服务3.添加防火墙安全策略4.使用cpolar内网穿透实现公网访问4.1 登录cpolar web ui管理界面4.2 启动website隧道4.3 获取公网URL地址4.4. 公网远程访问内网web站点4.5 配置固定二级子域名公网访问内网web站点4.5.1创建一条固定…

python生成的报告中绘制了多张图,但最后都混合到一起了

问题来源: 用python生成的报告中,存在三张图,第一个张图是正常的, 后面的图都是不正常的,全都是多张图混合而成的,这是为什么呢? 三段代码均是下述调用方式 import matplotlib.pyplot as plt pl…

【Linux】操作系统的认识

操作系统 1. 冯诺依曼体系结构2. 操作系统 1. 冯诺依曼体系结构 冯诺依曼体系结构的介绍 冯.诺依曼结构消除了原始计算机体系中,只能依靠硬件控制程序的状况(程序作为控制器的一部分,作为硬件存在),将程序编码存储在…

JUC并发编程笔记2

省流: 自己笔记,划走~~~~ 缓存更新策略

mybatis-plus自动填充

前言 这是我在这个网站整理的笔记,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 mybatis-plus自动填充 大家做设计数据表的时候,基本上都会有del_flag,create_time, update_time,这三个字段,这也是…

【Java】迭代器的next方法

Collection 集合的遍历 概述&#xff1a;Iteration&#xff1a;迭代器&#xff0c;集合的专用遍历方式 Iterator<E> Iterator() 返回在此 collection 的元素上进行迭代的迭代器boolean hasNext() 如果返回仍有元素可以迭代&#xff0c;则返回 trueE next() 返回迭代的下一…

计算机视觉基础(5)——特征点及其描述子

前言 本文我们将学习到特征点及其描述子。在特征点检测中&#xff0c;我们将学习角点检测和SIFT关键点检测器&#xff0c;角点检测以哈里斯角点检测器为例进行说明&#xff0c;SIFT将从高斯拉普拉斯算子和高斯差分算子展开。在描述子部分&#xff0c;我们将分别学习SIFT描述子和…

【软考】软件开发中不同对象之间的关系

1. 关联&#xff08;Association&#xff09;&#xff1a; 关联表示两个或多个对象之间的关系。这种关系可以是双向的&#xff0c;也可以是单向的。关联关系通常用于描述两个对象之间的连接&#xff0c;但不涉及对象之间的所有权或整体-部分的关系。 例子&#xff1a; 考虑一…

UE4 小知识【不断更新中】

最近在实习的时候发现 UE 真的好多东西不太会&#xff0c;比较杂&#xff0c;此篇文章记录一下一些 UE 小知识。 请移步我的博客&#xff1a;UE4 小知识 ps&#xff1a;还有很多其他的模块&#xff0c;后续会整理后单独发博客。

内置式永磁同步电机复矢量电流调节器设计

导读&#xff1a;本期主要介绍永磁同步电机复矢量电流调节器。针对内置式永磁同步电机d、q轴电流存在动态耦合的问题&#xff0c;在基于有效磁链概念得到IPMSM的复矢量数学模型&#xff0c;设计出相应的复矢量电流调节器&#xff0c;实现了d、q轴电流的动态解耦。通过仿真验证所…