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

前端面试题整理(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的运行结果。

相关文章:

前端面试题整理(1.0)

1.nextTick原理 Vue是异步执行Dom更新的,一旦观察到数据变化,Vue就会开启一个队列,然后把在同一个事件循环(event loop)当中观察到数据变化的Watcher推送到这个队列。如果这个Watcher被触发多次,智慧被推送…...

使用Spire.PDF for Python插件从PDF文件提取文字和图片信息

目录 一、Spire.PDF插件的安装 二、从PDF文件提取文字信息 三、从PDF文件提取图片信息 四、提取图片和文字信息的进阶应用 总结 在Python中,提取PDF文件的文字和图片信息是一种常见的需求。为了满足这个需求,许多开发者会选择使用Spire.PDF插件&…...

springBoot整合讯飞星火认知大模型

1.概述 讯飞星火大模型是科大讯飞最近开放的拥有跨领域的知识和语言理解能力的大模型,能够完成问答对话和文学创作等。由于讯飞星火大模型最近可以免费试用,开发者都可以免费申请一个QPS不超过2的账号,用来实现对平台能力的验证。本文将利用…...

JMM对数据竞争的定义

JMM对数据竞争的定义 Java内存模型规范对数据竞争的定义如下在一个线程中写一个变量,在另一个线程读同一个变量,而且写和读没有通过同步来排序。如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序。当程序未正确同步时&…...

民安智库(湖北知名满意度测评公司)食品安全满意度调查如何开展

食品安全问题一直以来都是社会各界广泛关注的焦点之一。近年来,食品安全事件频发,引起了公众的高度关注和担忧。因此,开展食品安全满意度调查,了解公众对食品安全状况的认知和满意程度,对于促进食品安全共建共治共享具…...

Rust 语法笔记

变量绑定(声明变量) let 变量名: 类型 变量值; let 变量名 变量值[类型]; // 整型 默认 i32;浮点 默认 f64所有的 let 绑定都必须尾接;,代码块也不例外。 mut 可以通过重新声明的方式来改变变量类型 可以下划线改善数字的可读…...

AI智慧安防智能监控平台如何做到健身房智能视频监控?

随着大家对健身的重视,健身房也开始遍地开花,健身房的兴起是必然的,但是健身房的管理不容疏忽,通过EasyCVR智能视频监控系统,则可以解决监管不足的问题。 1、安全摄像头布局 根据健身房的大小和布局,合理规…...

ps插件Coolorus for Mac中文激活版

Coolorus是一款非常实用的Photoshop插件,它为Photoshop增加了色环配色面板,让设计师可以更直观地选择颜色。同时,Coolorus还提供了多种专业配色方案,如鲜艳色、复古色、日常色等,设计师可以直接套用这些方案&#xff0…...

MySQL的索引——索引的介绍及其数据结构B+树 索引的类型 索引的使用及其失效场景 相关名词解释

前言 索引是存储引擎用于快速查找数据纪录的一种数据结构,索引是数据库中经常提及的一个词,究竟什么是索引,索引的数据结构是什么,索引有什么类型? 本篇博客尝试阐述数据库索引的相关内容,涉及什么是索引…...

第十六届中国智慧城市大会 | 国产化三维重建技术服务智慧城市建设

2023年10月13日,由武汉大势智慧科技有限公司、飞燕航空遥感技术有限公司主办的第十六届智慧城市大会-实景三维技术创新与应用论坛在广州成功举办。 来自实景三维、自然资源、数字孪生、AI大数据、航空遥感等多个领域的专家,深度分享各自的智慧城市建设经…...

通过数组的指针获得数组个数

这几天学习智能指针时,自己在练习写个管理数组指针的类时碰到了通过数组指针获取数组个数的问题 1.在网上查询了通过数组指针获取数组个数的方法,对于自定义数据在前四个节点保存了数组个数 Student* pAry new Student[3];size_t num *((size_t*)pAry - 1);//3测试是成功的…...

GeoServer改造Springboot启动四(解决post接口方法无法用@requestbody为入参的请求)

1、修改源码4 解决问题:解决Controller接口post方法(如图 19)无法用@requestbody为入参的 json数据进行请求,用swagger请求示例如图 20,具体错误呈现如图 21。 图 19Controller接口示例 图 20post接口请求示例 图 21post接...

C#,数值计算——分类与推理Phylagglomnode的计算方法与源程序

1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Phylagglomnode { public int mo { get; set; } public int ldau { get; set; } public int rdau { get; set; } public …...

mysql、oracle 构建数据

mysql 构建数据 --创建表 set sql_modeONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE TABLE vote_records_memory ( id int(10) unsigned NOT NULL AUTO_INCRE…...

二叉树;二叉树的前序、中序、后序遍历及查找;顺序存储二叉树;线索化二叉树

数组、链表和树存储方式分析 对于树结构,不论是查找修改还是增加删除,效率都比较高,结合了链表和数组的优点,如以下的二叉树: 1、数组的第一个元素作为第一个节点 2、数组的第二个元素3比7小,放在7的左边…...

有手就会做!保姆级Jmeter分布式压测操作流程(图文并茂)

分布式压测原理 分布式压测操作 保证本机和执行机的JDK和Jmeter版本一致配置Jmeter环境变量配置Jmeter配置文件 上传每个执行机服务jmeter chmod -R 755 apache-jmeter-5.1.1/ 执行机配置写自己的ip 控制机配置所有执行机ip,把server.rmi.ssl.disable改成true 将本机也作为压…...

澳洲谷揽GRANAR谷物分析仪维修GR-1800蛋白检测仪

澳洲GRANAR谷揽GR-1800谷物分析仪应用领域:大豆、油菜籽、亚麻籽 常用分析指标:蛋白质、芥酸、水分、灰分 、油脂等 分析时间:<3min 使用场景:谷物收购、生产加工、实验室 GR-1800i型号特点 1.检测时间由3分钟缩短…...

python基础语法(1)

基础语法 前言一、常量和表达式二、变量和类型变量是什么变量的语法(1)定义变量(2) 使用变量 变量的类型(1) 整数(2) 浮点数(小数)(3)字符串(string)可以使用单引号或双引号创建字符串(4) 布尔(5) 其他(1)类型决定了数据在内存中占…...

Web前端开发——新年倒计实时刷新

Web前端开发——年倒计实时刷新 H5(HTML5)前端开发是指使用HTML5、CSS3和JavaScript等技术进行网页和移动应用的开发。HTML5是最新的HTML标准,提供了丰富的语义化标签和功能,使得网页可以更加优雅和多样化。CSS3是用于样式表的升级版本,提供了更多的样式效果和布局控制能…...

ubuntu20.4 执行sudo apt-get update出现错误 libnettle.so.6 动态链接库错误

一、错误描述 sudo apt-get update 报错提示 libnettle.so.6 动态链接库错误 $ sudo apt update /usr/lib/apt/methods/https: error while loading shared libraries: libnettle.so.6: cannot open shared object file: No such file or directory /usr/lib/apt/methods/ht…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂&#xff…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...