当前位置: 首页 > news >正文

2024前端面试题-工程化篇

1.webpack(模块打包工具)五大核心

Entry入口,Output定义输出路径和命名规则,Loader模块转换器,Plugin扩展插件,Mode模式(Webpack使用相应模式的配置)

2.谈一谈你对Loader和Plugin的理解,使用过哪些?

loader:模块转换器,用于把模块原内容按照需求转换成新内容
通过使用不同的Loader,Webpack可以要把不同的文件都转成JS文件,比如CSS、ES6/7、JSX等

plugin:扩展插件
在 Webpack 构建流程中的特定时机注入扩展逻辑来改变构建结果或做你想要的事情
一个插件是含有apply方法的一个对象,通过这个方法可以参与到整个webpack打包的各个流程
IgnorePlugin
不打包匹配文件   
PrefetchPlugin
预加载的插件,提高性能

loader是用来对模块的源代码进行转换,而插件目的在于解决 loader 无法实现的其他事
因为plugin可以在任何阶段调用,能够跨Loader进一步加工Loader的输出
常用的:babel-loader(对js代码进行兼容性编译) file-loader(将webpack将所需的对象作为文件发送,并返回其公共URL.) url-loader less-loader, sass-loader

3.webpack热更新原理

Webpack的热更新,在不刷新页面的前提下,将新代码替换掉旧代码。

HRM的原理实际上是 webpack-dev-server(WDS)和浏览器之间维护了一个websocket服务。当本地资源发生变化后,webpack会先将打包生成新的模块代码放入内存中,然后WDS向浏览器推送更新,并附带上构建时的hash,让客户端和上一次资源进行对比.

4.什么是Code Splitting

Code Splitting代码分割,是一种优化技术。它允许将一个大的chunk拆分成多个小的chunk,从而实现按需加载,减少初始加载时间,并提高应用程序的性能 。

在Webpack中通过optimization.splitChunks配置项来开启代码分割

5.Webpack的Source Map是什么?如何配置生成Source Map?

Source Map是一种文件,它建立了构建后的代码与原始源代码之间的映射关系。通常在开发阶段开启,用来调试代码,帮助找到代码问题所在。

在Webpack配置文件中的devtool选项中指定devtool: 'source-map'来开启

6.如何减小打包体积

  • 按需加载:路由懒加载,动态组件按需加载
  • 代码压缩:使用uglifyjs-webpack-plugin插件压缩代码
  • 开启Tree Shaking摇树机制:optimization: {   usedExports: true,   concatenateModules: true,   minimize: true, }
  • 图片压缩:image-webpack-plugin
  • CDN引入
  • 使用Gzip压缩:在服务端(例如Nginx)配置启用Gzip
  • 移除不必要的插件和依赖
  • 代码分割(Code Splitting):将应用程序的代码划分为多个代码块,按需加载

7.webpack和vite的区别

编译方式:webpack在编译过程中,将文件打包成bundle.js文件,然后再运行这个文件
vite在开发模式下不会打包文件,他会利用浏览器的es module import属性,在需要时编译文件,在生产模式下,使用rollup打包,提供更好的tree-shaking,代码压缩和性能优化。
开发效率:webpack热更新是全量更新,修改一个文件会更新全部,会导致编译速度变慢。
vite是增量更新,只更新修改的文件,在大型应用中也可以保持较快的编译速度。
扩展性:webpack插件比vite丰富
应用场景不同:webpack适合大型复杂的项目,因为插件丰富,vite适合中小型快速开发的项目。

8.前端优化策略

  • 尽量减少http请求个数
  • 避免空的src和href
  • 使用CDN
  • 图片懒加载
  • 路由懒加载
  • 减少页面中的冗余代码
  • 杜绝404

9.为什么pnpm比npm快

  • Pnpm 使用基于内容寻址的文件系统来存储磁盘上的所有文件,这意味着它不会在磁盘中重复存储相同的依赖包,即使这些依赖包被不同的项目所依赖。这种存储方式使得Pnpm在安装依赖时能够更高效地利用磁盘空间,同时也减少了下载和安装的时间。
  • Pnpm 在下载和安装依赖时采用了并行下载的能力,这进一步提高了安装速度。
  • Pnpm 还具有一些其他特性,例如节省空间的硬链接和符号链接的使用,这些都有助于提高其性能。

10.说一下你对Monorepo的理解

Monorepo是一种将多个项目代码存储在一个仓库的代码管理方式,将不同的项目代码放在一个仓库中,优缺点如下: 优点:

  • 更好的实现代码复用,方便代码管理
  • 可以复用项目基础设施,不需要每个项目都建立一遍
  • 更好的CR
  • 子项目模块之间的关系更加透明,可以实现一次命令完成所有部署。
  • 管理依赖变得更加简单,可以在一个统一的环境中处理依赖库的版本和更新。
  • 一种开放,透明,共享的组织文化,这有利于开发者成长,代码质量的提升

缺点:

  • 代码权限管理变得很复杂
  • 项目上手学习成本高,需要了解子项目之间的依赖关系
  • 项目基础建设、依赖管理、代码搜索、分支模型等技术要求会很高
  • 所以代码放在一次,会导致项目仓库体积过大,clone等操作会变很慢

相关文章:

2024前端面试题-工程化篇

1.webpack(模块打包工具)五大核心 Entry入口,Output定义输出路径和命名规则,Loader模块转换器,Plugin扩展插件,Mode模式(Webpack使用相应模式的配置) 2.谈一谈你对Loader和Plugin的…...

【附源码】Python :PYQT界面点击按钮随机变色

系列文章目录 Python 界面学习:PYQT界面点击按钮随机变色 文章目录 系列文章目录一、项目需求二、源代码三、代码分析3.1 导入模块:3.2 定义App类:3.3 构造函数:3.4 初始化用户界面:3.5 设置窗口属性:3.6 …...

[Qt][QSS][下]详细讲解

目录 1.样式属性0.前言1.盒模型(Box Model) 2.常用控件样式属性1.按钮2.复选框3.单选框4.输入框5.列表6.菜单栏7.注意 1.样式属性 0.前言 QSS中的样式属性⾮常多,不需要都记住,核⼼原则是⽤到了就去查 ⼤部分的属性和CSS是⾮常相似的 QSS中有些属性&am…...

RAII在实现webserver这个项目中是怎么体现的?起到了什么作用

在WebServer项目中,RAII(Resource Acquisition Is Initialization,即资源获取即初始化)是一种重要的资源管理策略,它主要通过智能指针、锁、文件句柄等对象的生命周期来管理资源的分配和释放。RAII在WebServer项目中的…...

QT下显示自己派生的QWidget界面(提升为)

在实际开发过程中,我们可能有这样的需求,自己绘制一个仪表盘界面,然后将其贴到主界面上方。 这个时候就会用到“提升为”这个功能,该功能目的是将QWidget提升为自己派生的QWdiget子类,具体操作为,在主界面…...

jvm监控工具一览

下面是对 BTrace、JAD、JMAP、JSTAT、JSTACK、JINFO 以及 MARK 工具的比较表: 工具/属性功能适用场景使用难度是否侵入式是否需要重启 JVMBTrace动态跟踪和监控 Java 应用程序性能分析、故障排查、日志收集、安全监控中等无侵入式否JAD反编译 Java 字节码文件&…...

使用 Visual Studio 编辑器作为 DailyNotes 的 markdown 编辑器

DailyNotes 是我使用过的最优秀的日常笔记管理工具,为它配置一个好的 markdown 编辑器,可以大幅提升效率。 除了使用 Typora 作为 markdown 编辑器,Visual Studio Code 也是一个非常不错的选择,令人惊喜的是,它也支持…...

Linux下进程间的通信--管道

关于进程间的通信 Linux进程间通信(Inter-Process Communication,IPC)是指在多个进程之间传输数据或信号的一些方法。由于Linux中的进程有各自独立的地址空间,因此它们不能直接访问对方的内存。为了实现进程间的通信,…...

【算法】汉诺塔、顺序查找和二分查找法、冒泡排序、插入排序、选择排序

1 时间装饰器 2 汉诺塔 3 顺序查找和二分查找法 4 冒泡排序 5 插入排序 6 选择排序 1 时间装饰器 import timedef cal_time(func):def wrapper(*args, **kwargs):t1 time.time()result func(*args, **kwargs)t2 time.time()print("%s running time: %s secs." % …...

Mac电脑遇到DNS解析失败,ip可以访问,域名无法访问

当Mac电脑遇到DNS解析失败的问题时,可以尝试以下几个解决方法‌: 1.检查网络连接‌:确保Mac已连接到可用的网络,并且网络连接正常。可以尝试重新连接Wi-Fi或使用有线连接来排除网络问题。 2.清除DNS缓存‌:打开终端应…...

走进 “星星的孩子” 的世界:理解与关爱儿童自闭症

在这个充满生机与活力的世界里,有一群特殊的孩子,他们仿佛来自遥远的星球,沉浸在自己的独特世界中,难以与外界进行有效的沟通和互动。他们是自闭症儿童,也被称为 “星星的孩子”。 自闭症,又称孤独症谱系障…...

【学习笔记】7、存储器、复杂可编程器件和现场可编程门阵列

可编程逻辑器件PLD复杂可编程逻辑器件CPLD现场可编程门阵列FPGA 7.1 只读存储器(ROM) 7.1.1 ROM的结构 ROM存储器 存储阵列 地址译码器 输出控制电路 存储阵列,由许多存储单元(1bit)组成。每次读出一组数据&…...

Java面试题———RabbitMQ篇

目录 1.你们项目中哪里用到了RabbitMQ 2、为什么会选择使用RabbitMQ 3、使用RabbitMQ如何保证消息不丢失 4、消息的重复消费问题如何解决的 5、如何解决消息堆积在MQ的问题 6、RabbitMQ如何保证消费的顺序性 7、RabbitMQ的延迟队列有了解过嘛 8、RabbitMQ如何设置消息过…...

2 种方式申请免费 SSL 证书,阿里云 Certbot

如何使用免费的 SSL 证书,有时在项目中需要使用免费的 SSL 证书,Aliyun 提供免费证书,三个月有效期,可以直接在aliyun 申请,搜索 SSL 证书,选择测试证书。 Aliyun 证书需要每三月来来换一次,页…...

49.给出一个字符串数组,实现一个算法给定一组字符串,将字母异位词组合在一起

49. Group Anagrams 题目 给定一组字符串,将字母异位词组合在一起。 示例: 输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [ [“ate”,“eat”,“tea”], [“nat”,“tan”], [“bat”] ] 注意: 所有输入均为小写字母。输出的顺序可以…...

如何制作统信UOS启动盘?

如何制作统信UOS启动盘? 一、下载UOS系统安装镜像二、在UOS系统环境下制作启动盘步骤一:准备U盘步骤二:打开启动盘制作工具步骤三:选择ISO镜像文件步骤四:选择安装介质并格式化步骤五:等待制作完成 三、在W…...

Conda命令

查看当前有哪些虚拟环境 conda env list创建(删除)一个新的虚拟环境 conda create --name test1 python3.8 conda env remove --name test1进入和退出一个环境 conda activate test1 conda deactivate列出当前包安装的包 conda list安装包 conda in…...

perl——获取数组中元素的索引

参考: 如何获取数组中元素的索引 如果保证所有元素都是唯一的,或者只有第一个索引是感兴趣的: my ($index) grep { $array[$_] ~~ $element } 0 .. $#array;...

Vector vs 数组:Java中Vector相比数组的优点

每日自动更新各类学习教程及工具下载合集 ​​https://pan.quark.cn/s/874c74e8040e​​ 在Java编程中,数组(Array)和Vector都是用于存储数据的容器,但它们在设计和功能上有所不同。选择使用哪种数据结构取决于具体的需求。在这…...

掌握步进电机控制算法:提升自动化精度的关键(代码示例)

引言 步进电机因其高精度定位、良好的控制性能和简单的驱动方式,广泛应用于各类自动化设备中,如3D打印机、数控机床和机器人等。为了实现对步进电机的精确控制,采用合适的控制算法至关重要。本文将详细介绍几种常见的步进电机控制算法&#…...

SEATA分布式事务——AT模式烂

简介 AI Agent 不仅仅是一个能聊天的机器人(如普通的 ChatGPT),而是一个能够感知环境、进行推理、自主决策并调用工具来完成特定任务的智能系统,更够完成更为复杂的AI场景需求。 AI Agent 功能 根据查阅的资料,agent的…...

【计算机网络】思科实验:OSPF多区域配置与链路状态数据库解析

1. OSPF多区域配置实战指南 第一次接触OSPF多区域配置时,我被那些LSA类型和区域边界搞得头晕眼花。直到在真实项目里把整个网络搞瘫痪过一次,才真正理解多区域设计的精妙之处。这次我们就用Packet Tracer搭建一个包含Area 0、Area 1和Area 2的完整实验环…...

标书智能体(二)——生成标书提纲代码+提示词

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

C++ 友元深度解析:突破封装的边界

引言在 C 面向对象编程中,封装是三大特性之一。它通过 private 和 protected 访问限定符,将类的内部实现细节隐藏起来,只暴露必要的 public 接口。这种设计极大地提高了代码的安全性和可维护性。但是,现实世界总是存在例外。有时候…...

BlenderKit实战指南:3D创作效能革命的智能资产管理系统深度解析

BlenderKit实战指南:3D创作效能革命的智能资产管理系统深度解析 【免费下载链接】BlenderKit Official BlenderKit add-on for Blender 3D. Documentation: https://github.com/BlenderKit/blenderkit/wiki 项目地址: https://gitcode.com/gh_mirrors/bl/BlenderK…...

零代码:CAM++说话人识别系统,可视化界面完成语音比对

零代码:CAM说话人识别系统,可视化界面完成语音比对 1. 系统概述 CAM说话人识别系统是一款基于深度学习的声纹识别工具,通过直观的可视化界面让用户无需编写代码即可完成语音比对和特征提取。该系统由开发者"科哥"基于阿里达摩院开…...

2026年公考备战:呼和浩特这3家培训机构凭何领跑行业口碑榜?

呼和浩特这3家培训机构凭何领跑行业口碑榜?随着2026年公考备战季悄然拉开序幕,呼和浩特众多备考生的目光再次聚焦于如何选择一家靠谱的培训机构。近期,一份基于学员真实反馈、上岸数据及行业教研深度的本土公考机构口碑榜引发关注。榜单显示&…...

RTX 4090用户必看:Anything to RealCharacters 2.5D转真人引擎环境部署与性能调优

RTX 4090用户必看:Anything to RealCharacters 2.5D转真人引擎环境部署与性能调优 获取更多AI镜像 想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领…...

效率提升80%:AI全流程研发真实项目落地复盘

很多开发者对AI编程的印象还停留在写片段、补代码,但真正落地到团队项目、需求评审、架构设计、Code Review全链路时,大多AI都显得“水土不服”。最近深度实践了AI全流程研发模式,结合行业实践与真实项目落地,聊一聊如何把AI从“辅…...

告别手动复制粘贴!用PowerShell脚本批量下载全球1米树冠高度数据(附完整脚本)

告别手动复制粘贴!用PowerShell脚本批量下载全球1米树冠高度数据(附完整脚本) 在生态研究和地理信息系统(GIS)工作中,处理大规模栅格数据是家常便饭。想象一下,当你需要下载数百个甚至上千个1米…...