前端高级面试题及其答案
以下是一些前端高级面试题及其答案:
一、JavaScript相关
- 事件循环(Event Loop)机制
- 答案:
- JavaScript的事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。它包含宏任务(macrotask)队列(如
setTimeout、setInterval、I/O、UI rendering等)和微任务(microtask)队列(如Promise.then、Promise.catch、Promise.finally、process.nextTick(Node.js环境)等)。事件循环的执行顺序是先执行一个宏任务,然后执行所有微任务,接着进行UI渲染(如果有需要),再开始下一个宏任务。
- JavaScript的事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。它包含宏任务(macrotask)队列(如
- 答案:
- 闭包(Closure)
- 答案:
- 闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的一种常见方式是在一个函数内部定义另一个函数,并且内部函数引用了外部函数的变量。例如:
function outer() {let count = 0;return function inner() {count++;console.log(count);}; } const innerFunc = outer(); innerFunc();//1 innerFunc();//2- 闭包可能导致内存泄漏的情况是在闭包中引用了大量不必要的外部变量,并且这些闭包长时间存在(例如作为全局变量或者被长期保存的引用)。避免的方法是在不需要闭包中的变量时,解除对外部变量的引用,例如将内部函数设置为
null。
- 答案:
- 原型链(Prototype Chain)
- 答案:
- 在JavaScript中,每个对象都有一个原型对象(通过
__proto__属性,不过这是非标准的访问方式,标准的是Object.getPrototypeOf),原型对象也有自己的原型,这样就形成了一条原型链。构造函数通过prototype属性指向原型对象。对象通过原型链可以继承其原型对象的属性和方法。例如:
function Animal() {this.type = 'animal'; } Animal.prototype.getType = function () {return this.type; }; function Dog() {this.name = 'dog'; } Dog.prototype = new Animal(); const dog = new Dog(); console.log(dog.getType());//animal- 这种继承方式的优点是简单直观,可以方便地共享属性和方法。缺点是所有子类实例共享原型对象上的引用类型属性,一个实例修改会影响其他实例;并且创建子类实例时不能向父类构造函数传递参数。
- 在JavaScript中,每个对象都有一个原型对象(通过
- 答案:
- 异步编程(Asynchronous Programming)
- 答案:
- 除了
setTimeout和Promise,还有async/await(是基于Promise的语法糖,使异步代码看起来更像同步代码)、Generator函数(可以通过yield关键字暂停和恢复函数的执行来实现异步流程控制)等异步编程方式。将以回调函数为基础的异步代码转换为Promise代码时,例如有一个回调函数doSomething(callback),可以将其封装为返回Promise的函数:
function doSomethingAsync() {return new Promise((resolve, reject) => {doSomething((err, result) => {if (err) {reject(err);} else {resolve(result);}});}); }- 转换为
async/await代码时,使用async定义一个异步函数,在需要等待异步操作结果的地方使用await关键字。
- 除了
- 答案:
二、框架相关(以React为例)
- 组件生命周期(Component Lifecycle)
- 答案:
- 在类组件中:
componentDidMount:组件挂载后调用,适合进行数据获取、事件监听等操作。componentDidUpdate:组件更新后调用,可用于根据新的props或state进行一些操作,但要避免无限循环更新。componentWillUnmount:组件卸载前调用,用于清理定时器、取消网络请求、移除事件监听等操作。
- 在函数组件中,可以使用
useEffect钩子模拟生命周期。例如,空依赖数组[]相当于componentDidMount和componentWillUnmount的组合:
function MyFunctionComponent() {useEffect(() => {// 类似componentDidMount的操作return () => {// 类似componentWillUnmount的操作};}, []);return <div>My Function Component</div>; } - 在类组件中:
- 答案:
- 虚拟DOM(Virtual DOM)
- 答案:
- 虚拟DOM是React中用JavaScript对象来表示真实DOM的一种概念。当组件的状态发生变化时,React会首先创建一个新的虚拟DOM树,然后与旧的虚拟DOM树进行比较(这个过程称为Diff算法),找出需要更新的部分,最后只将这些变化的部分更新到真实DOM上,从而减少了直接操作真实DOM带来的性能开销。
- 答案:
- 状态管理(State Management)
- 答案:
- 在大型React应用中,随着组件层级变深和组件间交互增多,单纯依靠组件内部的
state管理变得困难。Redux通过集中管理应用的状态来解决这个问题。Redux中有store(存储整个应用的状态)、reducer(纯函数,根据旧状态和动作创建新状态)、action(描述状态改变的对象)等概念。组件通过connect函数(在React - Redux库中)将store中的状态映射到组件的props上,并且可以通过dispatch动作来改变状态。
- 在大型React应用中,随着组件层级变深和组件间交互增多,单纯依靠组件内部的
- 答案:
三、性能优化
- 前端性能优化的常见策略
- 答案:
- 减少HTTP请求次数:可以将多个小的脚本文件合并成一个大的脚本文件,使用CSS精灵图将多个小图标合并到一张大图中。
- 优化图片加载:压缩图片大小,在不影响视觉效果的前提下选择合适的图片格式(如对于简单图形可以使用SVG格式),对图片进行懒加载(当图片进入可视区域时再加载)。
- 代码压缩和优化:JavaScript压缩工具(如UglifyJS)可以去除空格、注释并缩短变量名等;CSS压缩可以去除冗余代码。
- 答案:
- 浏览器渲染优化
- 答案:
- 浏览器渲染流程包括构建DOM树、构建CSSOM树、合并为渲染树、布局和绘制。避免不必要的重排可以通过批量修改样式(如使用
class切换而不是修改单独的样式)、缓存布局相关的属性(如offsetWidth等);避免不必要的重绘可以通过将多次DOM操作合并为一次操作等方式。
- 浏览器渲染流程包括构建DOM树、构建CSSOM树、合并为渲染树、布局和绘制。避免不必要的重排可以通过批量修改样式(如使用
- 答案:
四、其他
- 跨域(Cross - origin)问题
- 答案:
- 跨域是指浏览器出于安全考虑,不允许页面向与自身来源(协议、域名、端口)不同的域发送请求。常见的解决方法有:
- CORS(跨域资源共享):服务器端设置
Access - Control - Allow - Origin等相关响应头来允许特定的源进行跨域访问。 - JSONP(JSON with Padding):利用
<script>标签没有跨域限制的特性,通过动态创建<script>标签并指定回调函数来获取数据,但只支持GET请求。
- CORS(跨域资源共享):服务器端设置
- 跨域是指浏览器出于安全考虑,不允许页面向与自身来源(协议、域名、端口)不同的域发送请求。常见的解决方法有:
- 答案:
- 模块化开发(Modular Development)
- 答案:
- 前端模块化开发是将代码按照功能或逻辑拆分成多个模块,以便于管理、复用和维护。CommonJS是Node.js中的模块化规范,采用同步加载模块的方式,通过
require导入模块,module.exports导出模块;AMD(Asynchronous Module Definition)主要用于浏览器端的异步模块加载,如RequireJS遵循AMD规范,通过define定义模块,require加载模块;ES6模块是ECMAScript标准中的模块化规范,采用静态导入(import)和导出(export),支持异步和同步加载,并且具有更好的静态分析能力。
- 前端模块化开发是将代码按照功能或逻辑拆分成多个模块,以便于管理、复用和维护。CommonJS是Node.js中的模块化规范,采用同步加载模块的方式,通过
- 答案:
相关文章:
前端高级面试题及其答案
以下是一些前端高级面试题及其答案: 一、JavaScript相关 事件循环(Event Loop)机制 答案: JavaScript的事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。它包含宏任务(macrotask)队列&…...
【ORACLE】这个‘‘和null不等价的场景,deepseek你怎么看?
【ORACLE】一处’和null不等价的场景–to_char(number,varchar2) 背景 最近在做一个国产数据库替代项目,要求将ORACLE迁移到一个openGauss系数据库,迁移后,执行一个存储过程时,发现国产库的执行结果和ORACLE不一致, …...
使用Python实现PDF与SVG相互转换
目录 使用工具 使用Python将SVG转换为PDF 使用Python将SVG添加到现有PDF中 使用Python将PDF转换为SVG 使用Python将PDF的特定页面转换为SVG SVG(可缩放矢量图形)和PDF(便携式文档格式)是两种常见且广泛使用的文件格式。SVG是…...
ComfyUI 安装教程:macOS 和 Linux 统一步骤
本教程将详细介绍如何在 macOS 和 Linux 上安装 ComfyUI。我们将从 安装 Anaconda 开始,到安装 PyTorch 和 ComfyUI,最后提供一些常见问题的解决方法。 macOS和linux安装步骤很相似 可以按照1️⃣安装anaconda2️⃣安装python3️⃣torch4️⃣comfyui Co…...
360手机刷机 360手机解Bootloader 360手机ROOT
360手机刷机 360手机解Bootloader 360手机ROOT 问:360手机已停产,现在和以后,能刷机吗? 答:360手机,是肯定能刷机的 360手机资源下载网站 360手机-360手机刷机RootTwrp 360os.top 360rom.github.io 一、…...
t113-qt
修改QT配置: # # qmake configuration for building with arm-linux-gnueabi-g ## MAKEFILE_GENERATOR UNIX # CONFIG incremental # QMAKE_INCREMENTAL_STYLE sublib# include(../common/linux.conf) # include(../common/gcc-base-unix.conf) # inc…...
【真一键部署脚本】——一键部署deepseek
目录 deepseek一键部署脚本说明 0 必要前提 1 使用方法 1.1 使用默认安装配置 1.1 .1 使用其它ds模型 1.2 使用自定义安装 2 附录:deepseek模型手动下载 3 脚本下载地址 deepseek一键部署脚本说明 0 必要前提 linux环境 python>3.10 1 使用方法 1.1 …...
【AI 语音】实时语音交互优化全解析:从 RTC 技术到双讲处理
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
pytest-xdist 进行多进程并发测试
在自动化测试中,运行时间过长往往是令人头疼的问题。你是否遇到过执行 Pytest 测试用例时,整个测试流程缓慢得让人抓狂?别担心,pytest-xdist 正是解决这一问题的利器!它支持多进程并发执行,能够显著加快测试…...
【Android】版本和API对应关系表
目录 版本和API对应关系表 不积跬步,无以至千里;不积小流,无以成江海。要沉下心来,诗和远方的路费真的很贵! 版本和API对应关系表 版本名版本号名称APIAndroid 1616.0W36Android 1515.0V35Android 1414.0U34Android 1…...
通过acme生成与续签ssl证书,并部署到nginx
通过acme生成与续签ssl证书,并部署到nginx 介绍 官方介绍: acme.sh 实现了 acme 协议,可以从 ZeroSSL,Lets Encrypt 等 CA 生成免费的证书。 安装 acme.sh 1. curl方式 curl https://get.acme.sh | sh -s emailmyexample.com…...
mysql系统库介绍,数据字典(介绍,存储方式,常见表,访问权限),系统表(介绍,不同功能的表)
目录 mysql系统库 介绍 数据字典 介绍 不同版本下的存储方式 常见的数据字典表 访问权限 系统表 介绍 权限授予系统表 对象信息系统表 服务器端帮助系统表 时区系统表 mysql系统库 介绍 MySQL 默认创建 的特殊数据库,主要用于存储服务器运行时所需的信…...
spring 学习(工厂方式 实例化对象(静态工厂,实例化工厂,实现factorybean 规范))
目录 前言 第一种:静态工厂方式实例化对象 静态工厂的特点 demo(案例) 第二种:实例工厂的方式 实例工厂和静态工厂的区别 demo(案例) 第三种:实现FactoryBean规范的方式 demo(案例) 前言 spring 实…...
MarkupLM:用于视觉丰富文档理解的文本和标记语言预训练
摘要 结合文本、布局和图像的多模态预训练在视觉丰富文档理解(VRDU)领域取得了显著进展,尤其是对于固定布局文档(如扫描文档图像)。然而,仍然有大量的数字文档,其布局信息不是固定的࿰…...
讯飞智作 AI 配音技术浅析(三):自然语言处理
自然语言处理(NLP)是讯飞智作 AI 配音技术的重要组成部分,负责将输入的文本转换为机器可理解的格式,并提取出文本的语义和情感信息,以便生成自然、富有表现力的语音。 一、基本原理 讯飞智作 AI 配音的 NLP 技术主要包…...
kafka服务端之日志存储
文章目录 日志布局日志索引日志清理日志删除基于时间基千日志大小基于日志起始偏移量 日志压缩总结 日志布局 Ka饮a 中的消息是以主题为基本单位进行归类的, 各个主题在逻辑 上相互独立。 每个主题又可以分为一个或多个分区, 分区的数量可以在主题创建的…...
软件工程的熵减:AI如何降低系统复杂度
软件开发的世界,如同一个不断膨胀的宇宙。随着功能的增加和时间的推移,代码库越来越庞大,系统复杂度也随之水涨船高。代码膨胀、维护困难、开发效率低下等问题困扰着无数开发者。这不禁让人联想到物理学中的“熵增”原理——一个孤立系统的熵…...
模拟开发小鹅通首页网站练习
HTML代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>小鹅通-首页</title><!-- 引入页…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_strerror 函数
声明 ngx_strerror 函数声明在 ngx_errno.h 中: u_char *ngx_strerror(ngx_err_t err, u_char *errstr, size_t size); 实现 在 ngx_errno.c 中: u_char * ngx_strerror(ngx_err_t err, u_char *errstr, size_t size) {size_t len;const char *ms…...
第26场蓝桥入门赛
5.扑克较量【算法赛】 - 蓝桥云课 C: #include <iostream> #include <algorithm> using namespace std;int a[100005];int main() {int n,k;cin>>n>>k;for (int i1; i<n; i)cin>>a[i], a[i] % k;sort(a1, a1n);int mx a[1]k-a…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
