公司面试题总结(六)

31.说一说 webpack 的构建流程是什么?

初始化流程:

从配置文件和 Shell 语句中读取与合并参数
初始化需要使用的插件和配置插件等执行环境所需要的参数

编译构建流程:

从 Entry 发出,针对每个 Module 串行调用对应的 Loader 去翻译文件内容
再找到该 Module 依赖的 Module,递归地进行编译处理

输出流程:

对编译后的 Module 组合成 Chunk,
把 Chunk 转换成文件,输出到文件系统

32.如何优化 webpack 打包速度

并行编译:

thread-loader: 利用多个 CPU 内核并行运行加载器。
HappyPack : 将模块转换任务分解到多个 worker 进程中并行处理。

代码拆分

splitChunksPlugin 代码分割,将公共代码、第三方库等抽离到单独的 chunk,减
少重复编译的工作量。

动态导入(import())

根据路由或其他条件按需加载代码,避免一次性打包所有代码。

Tree Shaking:

确保你的 ES 模块使用的是静态导入导出, Tree Shaking 移除未使用的代码。

DllPlugin/DllReferencePlugin:

不经常变动的依赖(如 React, Vue 库)提前打包成 DLL(动态链接库) ,避免每次
构建都重新打包这些库。

减少 Loader 和 Plugin 的数量

只使用必要的 loader 和 plugin,每个额外的处理都会增加构建时间。

提升 Loader 性能:

Babel 等慢速 loader,使用针对性的配置优化,比如@babel/preset-env 的
useBuiltIns 和 targets 选项,减少不必要的 polyfill。

Excluding node_modules:

不需要转译的 node_modules 模块,可以在.babelrc 或 webpack 配置中排除它们。

Cache:

利用 Webpack 的持久化缓存特性,如 cacheDirectory 选项,或使用 hard-source
webpack-plugin 等第三方插件来缓存编译结果。

优化 Resolving 配置:

减少模块解析的搜索范围,通过 resolve.modules, resolve.alias 等配置项提高模块 查找速度。

Source Map 优化:

开发环境使用 cheap-module-eval-source-map 或更快的 source-map 选项,生产
环境考虑是否需要 source map 或使用更简洁的格式。

升级 Webpack 和其他依赖

保持 Webpack 及其相关 loader、plugin 的版本是最新的,新版本往往带来性能改
进。

分析和监控:

使用 webpack-bundle-analyzer 分析包大小,找出可以进一步优化的地方。

33.说说 webpack 中常见的 Loader?解决了什么问题?

loader 对模块的"源代码"进行转换,
在 import 或"加载"模块时预处理文件
webpack 分析各种模块依赖关系,然后形成资源列表,最终打包生成到指定的文件中。
babel-loader :用 babel 来转换 ES6 文件到 ES5
html-minify-loader: 压缩 HTML
style-loader: 将 css 添加到 DOM 的内联样式标签 style 里
css-loader : 允许将 css 文件通过 require 的方式引入,并返回 css 代码
less-loader: 处理 less css
sass-loader: 处理 sass css
postcss-loader: 用 postcss 来处理 CSS
autoprefixer-loader: 处理 CSS3 属性前缀,已被弃用,建议直接使用 postcss
file-loader: 分发文件到 output 目录并返回相对路径
url-loader: 和 file-loader 类似,但是当文件小于设定的 limit 时可以返回一个 Data Url

34.说说 webpack 中常见的 Plugin?解决了什么问题?

Plugin(Plug-in)是一种计算机应用程序,它和主应用程序互相交互,以提供特定的功
是一种遵循一定规范的应用程序接口编写出来的程序,只能运行在程序规定的系统下,
因为其需要调用原纯净系统提供的函数库或者数据
webpack 中的 plugin 也是如此,plugin 赋予其各种灵活的功能,例如打包优化、资源
管理、环境变量注入等,它们会运行在 webpack 的不同阶段(钩子 / 生命周期),贯穿
了 webpack 整个编译周期
HtmlWebpackPlugin
        ◼ 在打包结束后,自动生成一个 html 文文件,
        ◼ 并把打包生成的 js 模块引入到该 html 中
clean-webpack-plugin 删除(清理)构建目录
mini-css-extract-plugin 提取 CSS 到一个单独的文件中
DefinePlugin 允许在编译时创建配置的全局对象,是一个 webpack 内置的插件,不需
要安装
copy-webpack-plugin
        ◼ 复制文件或目录到执行区域,
        ◼ 如 vue 的打包过程中,如果我们将一些文件放到 public 的目录下,那么这个目录
                会被复制到 dist 文件夹中

35.请详细说说 webpack 中的 plugin 和 loader 之间的区别是什么?

loader

是文件加载器,能够加载资源文件,并对这些文件进行一些处理,诸如编译、压缩
等,最终一起打包到指定的文件中

plugin

赋予了 webpack 各种灵活的功能,例如打包优化、资源管理、环境变量注入等,目的是解决 loader 无法实现的其他事

 

36.说说你对 promise 的了解

Promise 承诺 ,异步编程的一种解决方案,比传统解决方案(回调函数)更合理和更加强大
回调函数 形成了经典的回调地狱

promise 解决异步操作的优点:

链式操作减低了编码难度
代码可读性明显增强
状态

promise 对象仅有三种状态

pending(进行中)
fulfilled(已成功)
rejected(已失败)
对象的状态不受外界影响,只有异步操作的结果,可以决定当前状态

用法

Promise 对象是一个构造函数,用来生成 Promise 实例
const promise = new Promise(function(resolve, reject) {});
Promise 构造函数接受一个函数作为参数,函数的两个参数分别是 resolve 和 reject
resolve 函数: 将 Promise 对象的状态从“未完成”变为“成功”
reject 函数: 将 Promise 对象的状态从“未完成”变为“失败”

实例方法 then() catch() finally()

then()
实例状态发生改变时的回调函数
第一个参数是 resolved 状态的回调函数,
第二个参数是 rejected 状态的回调函数
then 方法返回的是一个新的 Promise 实例,也就是 promise 能链式书写的原因
catch()
.then(null, rejection)或.then(undefined, rejection) 的别名,
用于指定发生错误时的回调函数
Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止
一般来说,使用 catch 方法代替 then()第二个参数
finally()
用于指定不管 Promise 对象最后状态如何,都会执行的操作

构造函数方法 all() race() allSettled() resolve() reject()

all()
Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例
const p = Promise.all([p1, p2, p3]);
接受一个数组作为参数,数组成员都为 Promise 实例
实例 p 的状态由 p1、p2、p3 决定,分为两种: 只有 p1、p2、p3 的状态都变成 fulfilled,p 的状态才会变成 fulfilled,此时 p1、
p2、p3 的返回值组成一个数组,传递给 p 的回调函数
只要 p1、p2、p3 之中有一个被 rejected,p 的状态就变成 rejected,此时第
一个被 reject 的实例的返回值,会传递给 p 的回调函数
注意,如果作为参数的 Promise 实例,自己定义了 catch 方法,那么它一旦被
rejected,并不会触发 Promise.all()的 catch 方法
race()
Promise.race()方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例
const p = Promise.race([p1, p2, p3]);
只要 p1、p2、p3 之中有一个实例率先改变状态,p 的状态就跟着改变
率先改变的 Promise 实例的返回值则传递给 p 的回调函数
allSettled()
Promise.allSettled()方法接受一组 Promise 实例作参数,包装一个新 Promise 实例
只有等到所有这些参数实例都返回结果,不管是 fulfilled 还是 rejected,包装实例
才会结束
const promises = [
fetch('/api-1'),
fetch('/api-2'),
fetch('/api-3'),
];
await Promise.allSettled(promises);
removeLoadingIndicator();
resolve()
将现有对象转为 Promise 对象
Promise.resolve('foo')
// 等价于
new Promise(resolve => resolve('foo'))
参数可以分成四种情况:
参数是一个 Promise 实例,promise.resolve 将不做任何修改、原封不动地返
回这个实例
参数是一个thenable对象,promise.resolve会将这个对象转为 Promise对象,
然后就立即执行 thenable 对象的 then()方法
参数不是具有 then()方法的对象,或根本就不是对象,Promise.resolve()会返
回一个新的 Promise 对象,状态为 resolved
没有参数时,直接返回一个 resolved 状态的 Promise 对象
reject()
Promise.reject(reason)方法也会返回一个新的 Promise 实例,该实例的状态为
rejected
const p = Promise.reject('出错了');
// 等同于
const p = new Promise((resolve, reject) => reject('出错了'))

使用场景

将图片的加载写成一个 Promise,一旦加载完成,Promise 的状态就发生变化 通过链式操作,将多个渲染数据分别给个 then,让其各司其职。或当下个异步请求依
赖上个请求结果的时候,我们也能够通过链式操作友好解决问题
通过 all()实现多个请求合并在一起,汇总所有请求结果,只需设置一个 loading 即可
通过 race 可以设置图片请求超时

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

仙侠手游【天道情缘】修复版服务端+GM后台+详细教程

下载地址:仙侠手游【天道情缘】修复版服务端GM后台详细教程

【立体几何】如何使用两个正方体(特殊骰子)摆出所有日期1~31

问题 如何使用两个正方体(特殊骰子)摆出所有日期? 解答 下标列举了所有日期 日期十位数个位数011号正方体:02号正方体:02号正方体:11号正方体:1021号正方体:02号正方体:02号正方体:21号正方…

Facebook:数字时代的文化交流平台

在当今信息爆炸的数字时代,Facebook已经成为了一个不可或缺的社交媒体平台,不仅在个人生活中起到了联系社交的作用,更在全球范围内促进了文化交流和理解。本文将深入探讨Facebook作为文化交流平台的重要性,并分析其在数字时代如何…

从零手写实现 nginx-17-nginx.conf 全局的默认配置

前言 大家好,我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的,可以参考我的另一个项目: 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

开源医疗大模型Llama3-Aloe-8B-Alpha,性能超越 MedAlpaca 和 PMC-LLaMA

前言 近年来,大型语言模型 (LLM) 在医疗领域展现出巨大潜力,能够帮助医生和研究人员更快地获取信息、分析数据,并提高医疗服务效率。然而,目前市场上大多数医疗 LLM 都是闭源模型,限制了其在学术研究和应用领域的推广…

OpenGL3.3_C++_Windows(10)

最终演示 ​ demo演示 Assimp模型渲染 模型导入库Assimp:导入很多种不同的模型文件格式,加载至Assimp的通用数据结构(树形)中,不论导入的是什么种类的文件格式,用同一种方式访问我们需要的数据。 Assimp库…

【Java】多态、final关键字、抽象类、抽象方法

多态(Polymorphism) 【1】多态跟属性无关,多态指的是方法的多态,而不是属性的多态。 【2】案例代入: public class Animal {//父类:动物: public void shout(){ System.out.println("我是小动物&am…

JAVA-CopyOnWrite并发集合

文章目录 JAVA并发集合1_实现原理2_什么是CopyOnWrite?3_CopyOnWriteArrayList的原理4_CopyOnWriteArraySet5_使用场景6_总结 JAVA并发集合 从Java5开始,Java在java.util.concurrent包下提供了大量支持高效并发访问的集合类,它们既能包装良好的访问性能…

无人机的发展

朋友们,你们知道吗?无人机的发展之路可谓是科技界的一股清流,风头正劲啊!从最初简单的遥控飞机到现在各种智能功能的加持,无人机真是越来越神奇了! 首先,无人机在航拍领域大放异彩!无…

ETL可视化工具 DataX -- 简介( 一)

引言 DataX 系列文章: ETL可视化工具 DataX – 安装部署 ( 二) 1.1 DataX 1.1.1 Data X概览 DataX 是阿里云DataWorks数据集成的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServ…

ChatGPT 提示词技巧一本速通

一、基本术语 概念 定义 案例 提示词 prompt 向AI模型提出的问题或者指示,告诉它我们希望得到什么样的回答或结果,是与模型互动的主要形式。 任务:生成一封电子邮件邀请。 提示词:请帮我写一封邀请同事参加下周五团队建设活…

Vue引入element-plus-04

我们这次开发是使用vue的脚手架来进行开发,前面我们已经使用过最原生的方式去编写我们的vue的语法,从今天开始就使用vue的脚手架,但是前提是你需要用于node的环境 在我们开始之前,我们至少需要有node npm是什么? npm是一个强大的包管理工具,它…

Stable Diffusion【应用篇】【艺术写真】:粘土风之后陶瓷风登场,来看看如何整合AI艺术写真吧

在国外的APP Remini引爆了粘土滤镜后,接着Remini又推出了瓷娃娃滤镜。相当粘土滤镜,个人更喜欢瓷娃娃滤镜,因为陶瓷工艺更符合东方艺术审美。 下面我们就来看看陶瓷特效在AI写真方面的应用。话不多说,我们直接开整。 关于粘土整…

基于BERT微调+模板填充快速实现文本转DSL查询语句

前言 Text2SQL是指将自然语言转化为类SQL查询语句,使得用户的查询文本可以直接实现和数据库交互,本文介绍一种以BERT为基础模型,通过模板填充来实现的Text2SQL算法和产品化。 内容摘要 Text2SQL任务说明模板填充的思路条件列选择子模型搭建…

TCGAbiolinks包学习

TCGAbiolinks 写在前面学习目的GDCquery GDCdownload GDC prepare中间遇到的报错下载蛋白质数据 写在前面 由于别人提醒我TCGA的数据可以利用TCGAbiolinks下载并处理,所以我决定阅读该包手册,主要是该包应该是有更新的,我看手册进行更新了&…

Kotlin编程实践-【Java如何调用Kotlin中带默认值参数的函数】

问题 如果你有一个带有默认参数值的 Kotlin 函数,如何从 Java 调用它而无须为每个参数显式指定值? 方案 为函数添加注解JvmOverloads。 也就是为Java添加重载方法,这样Java调用Kotlin的方法时就不用传递全部的参数了。 示例 在 Kotlin …

干部管理软件有哪些

随着信息技术的飞速发展,干部管理软件在各级党政机关、国企事业单位中扮演着越来越重要的角色。这些软件通过整合干部管理的各项业务流程,实现了干部信息的系统化、规范化和高效化管理。以下是几款主流的干部管理软件及其特点: 一、干部信息…

基于python深度学习的CNN图像识别鲜花-含数据集+pyqt界面

代码下载: https://download.csdn.net/download/qq_34904125/89383615 本代码是基于python pytorch环境安装的。 下载本代码后,有个requirement.txt文本,里面介绍了如何安装环境,环境需要自行配置。 或可直接参考下面博文进行…

AI 一键换脸,背景替换,ioDraw让图片更有趣

还在为繁琐的图片处理而烦恼吗?快来试试ioDraw的AI图片工具! 它集图像识别、图像生成、智能换脸、背景替换、图像融合、肖像风格化、空间风格化、智能扩图、智能抠图、画质提升、美颜、拉伸修复、透视校正等功能于一身,为你提供前所未有的图…

(Javascript)AI数字人mp4转canvas播放并去除背景绿幕

1、需求介绍 H5页面嵌入AI数字人播报&#xff0c;但生成的数字人是mp4格式且有绿幕背景&#xff0c;需要转成canvas并去除背景&#xff1b; 2、效果&#xff1a; 去除前&#xff1a; 去除后&#xff1a; 3、代码 <!DOCTYPE html> <html lang"en"><…