前端面试准备-4

1.React Router的history模式中,push和replace有什么区别

都是用于页面导航,但是他们对浏览器历史记录的处理不一样。

①:push是在浏览历史栈里加入一条新的浏览历史,点击返回键会返回上一个页面

②;replace是替换当前历史记录,点击回退键,会回到替换前页面

// 使用 push 方法导航
navigate('/home');  
history.push('/home');// 使用 replace 方法导航
navigate('/home', { replace: true });
history.replace('/home');

2.React中,除了在构造函数中绑定this,其它绑定的方法有哪些

①:使用箭头函数定义类方法

②:在render方法中使用箭头函数

③:使用bind方法在render中绑定

3.为什么在React中遍历时不建议使用索引作为唯一的key

因为当数组顺序发生变化,或发生增加、删除等,会导致不必要的重新渲染。

3.ReactRouter中的router组件有几种类型

①:BrowserRouter

②:HashRouter,使用url的hash部分(#)来实现路由

③:MemoryRouter,将历史记录保存在内存中

4.在React的render函数中是否可以直接写if-else判断

不能。因为render函数返回的时JSX,本质上时JavaScript表达式,在表达式内部不能直接写于语句。

可以使用三元运算符或逻辑与运算符。

//三元运算符
render() {return (<div>{this.state.isLoggedIn ? '欢迎回来' : '请登录'}</div>)
}//逻辑运算
render() {return (<div>{this.state.isLoggedIn && '欢迎回来'}</div>)
}

5.如何在React项目中导入图片,那种效果更好

①:import导入,适用于项目文件内的静态图片资源

import logo from './images/logo.png'function Header() {return <img src={logo} alt="logo" />
}

②:request方法,适用于动态导入图片

function Avatar() {const avatar = require('./images/avatar.png')return <img src={avatar} alt="avatar" />
}

③:public文件夹,适用于不需要经过打包处理的静态图片资源

function Banner() {return <img src="/images/banner.png" alt="banner" />
}

6.在React的JSX中,属性是否可以被覆盖,覆盖原则是什么

①:从左到右覆盖,后面的同名属性会覆盖前面的同名属性

②:展开运算符的覆盖规则。使用展开运算符(...)传递props时,展开运算符后面的属性会覆盖展开运算符里面的同名属性

③:显示属性优先。显示声明的属性会覆盖展开运算符中的属性

// 默认样式
const defaultProps = {className: 'btn',type: 'button'
};// 使用时覆盖默认值
<button {...defaultProps} className="btn-primary" />
// 最终 className 为 "btn-primary"

7.什么是React中的受控组件,它的应用场景是什么

受控组件是指表单元素的值受React state控制的组件。在受控组件中,表单数据由React组件处理,而不是由DOM本身处理。

实现关键点:

①:将表单元素的值与state绑定

const [value, setValue] = useState('');
<input value={value} onChange={e => setValue(e.target.value)} />

②:提供onchange事件处理函数

③:表单元素的值始终等于state中的值

import { useState } from 'react';function MyInput() {const [value, setValue] = useState('');const handleChange = (e) => {setValue(e.target.value);};return (<input type="text" value={value} onChange={handleChange} />);
}

8.为什么React使用虚拟DOM来提高性能

直接操作真实dom的开销大,相对昂贵和耗时。虚拟DOM是一种轻量级副本,允许React在内存中进行计算和差异检测,然后将最小的、最高效的变化应用到真实dom上。这样可以减少不必要的真实DOM跟新,提高性能。

9.Node.js中同步和异步代码的区别

主要在于代码的执行顺序和阻塞行为。

①:同步代码。执行后会阻塞后续代码的执行,直到当前操作完成。

②:异步代码。不会阻塞后续代码的执行。异步操作会在完成时,通过回调函数、Promise以及async/await等机制通知相关的代码片段去处理。

// 同步代码
const fs = require('fs');
const data = fs.readFileSync('file.txt', 'utf8');
console.log(data); // 此时,代码会等待文件读取完成再执行后面的代码
console.log('Done'); // 这行代码会在文件读取完成后执行// 异步代码
fs.readFile('file.txt', 'utf8', (err, data) => {if (err) throw err;console.log(data); // 文件读取完成时,这个回调函数才会被执行
});
console.log('Done'); // 这行代码会被立即执行,不会等待文件读取完成

10.Node.js中的Buffer对象是什么,作用是什么?

Buffer对象是Node.js中的全局类,用来在处理二进制数据时,提供对内存缓冲区的操作。可以非常有效的处理非字符串类型的数据,如从文件中读取的二进制数据或者网络协议传输的数据。

作用:

  • 处理二进制数据:例如视频、文件、图片的读取
  • 与流结合:与Node.js的流操作结合,通常用于文件处理和网络传输
  • 转换编码格式:utf8,base64等转码

具体使用

①:创建buffer

// 分配 10 个字节的 Buffer
const buf1 = Buffer.alloc(10);// 通过字符串创建,默认编码为 'utf8'
const buf2 = Buffer.from('Hello, World!');

②:读写操作

const buf = Buffer.alloc(10);
buf.write('Hello');// 输出部分写入后的结果
console.log(buf.toString('utf8', 0, 5));  // Hello

③:与流结合

const fs = require('fs');
const readStream = fs.createReadStream('example.txt');
readStream.on('data', (chunk) => {console.log(`Received ${chunk.length} bytes of data.`);
});

④:编码转换

const buf = Buffer.from('Hello, World!');
console.log(buf.toString('base64'));  // 输出 base64 编码的字符串

11.Node.js中的process对象是什么,常用的属性有哪些

Node.js 中,process 是一个 全局对象,提供了当前 Node.js 进程的信息与控制方式,不需要require引入。它是 Node.js 与操作系统交互的桥梁,允许你访问环境变量、参数、内存使用情况、退出程序等。

名称作用
process.argv获取命令行参数
process.env获取环境变量
process.exit([code])退出程序
process.cwd()当前工作目录
process.pid当前进程 ID
process.platform当前操作系统平台
process.memoryUsage()获取内存使用信息
process.nextTick()注册微任务(在事件循环前执行)

12.Node.js中的require和import有什么区别

①:require

requireCommonJS 的模块引入方式,Node.js 从一开始就使用它;

语法形式为:const  module  =  require( 'module_name' )

require通常用于需要立即同步加载模块的情况,因为他是同步的

②:import

importES6 模块系统(ESM) 的语法,是浏览器和现代 JavaScript 的标准模块系统。

语法为 import module from 'module_name'

import更适合现代前端项目和需要异步加载模块的场景,因为他是异步加载的,不会阻塞主线程。

13.Node.js的回调、Promise和async/await有什么区别

皆为Node.js处理异步操作的三种方式

①:回调

这种方法需要将函数作为参数传递给另一个函数,并在异步操作完成后调用这个回调函数。

(当一个函数作为参数传入另一个参数中,并且它不会立即执行,只有当满足一定条件后该函数才可以执行,这种函数就称为回调函数。我们熟悉的定时器和Ajax中就存在有回调函数)

容易造成“回调地狱”

//想要打印1 2 3,就得如下的代码:setTimeout(function () {  //第一层console.log('1');setTimeout(function () {  //第二程console.log('2');setTimeout(function () {   //第三层console.log('3');}, 1000)}, 2000)}, 3000)//这种回调函数里面嵌套回调函数就叫回调地狱

②:Promise

对回调的一种改进,更现代化的异步处理方式。它表示一个未来将完成的异步操作或一个错误操作。其中,Promise可以链式调用,解决了回调地狱的问题

const promise = new Promise((resolve, reject) => {setTimeout(() => {resolve('Success!');}, 1000);
});
promise.then(result => console.log(result)).catch(error => console.error(error));

③:async/await

async/await是基于Promise的语法糖,让异步代码看起来更像是同步代码。可以使用try/catch处理错误。

async function fetchData() {try {const data = await fs.promises.readFile('example.txt', 'utf8');console.log(data);} catch (err) {console.error(err);}
}
fetchData();

14.Node.js中的定时器函数setImmediate()和setTimeout()函数有什么区别

都是用来调度异步任务的定时器函数

①:setImmediate()允许在当前事件循环结束后立即执行函数,而setTimeout()则是在指定时间后执行回调函数

②:在I/O操作完成后,setImmediate()的回调函数通常会比setTimeout()的回调函数优先执行。

③:setImmediate()主要是用于希望在I/O执行完后立即执行,而setTimeout()则是延时执行。

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

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

相关文章

【机器学习基础】机器学习入门核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation)

机器学习入门核心&#xff1a;Jaccard相似度 &#xff08;Jaccard Index&#xff09; 和 Pearson相似度 &#xff08;Pearson Correlation&#xff09; 一、算法逻辑Jaccard相似度 (Jaccard Index)**Pearson相似度 (Pearson Correlation)** 二、算法原理与数学推导1. Jaccard相…

Unity3D仿星露谷物语开发57之保存库存信息到文件

1、目标 保存下面库存栏中信息到文件中。 2、修改SceneSave.cs脚本 添加2行代码&#xff1a; 3、修改InventoryManager对象 添加Generate GUID组件。 4、修改InventoryManager.cs脚本 添加继承自ISaveable 添加属性信息&#xff1a; private string _iSaveableUniqueID;pub…

测量3D翼片的距离与角度

1&#xff0c;目的。 测量3D翼片的距离与角度。说明&#xff1a; 标注A 红色框选的区域即为翼片&#xff0c;本示例的3D 对象共有3个翼片待测。L1与L2的距离、L1与L2的角度即为所求的翼片距离与角度。 2&#xff0c;原理。 使用线结构光模型&#xff08;标定模式&#xff0…

深入理解 SQL 的 JOIN 查询:从基础到高级的第一步

在处理数据库时&#xff0c;我们常常需要从多个表中提取数据。比如想知道一个城市的天气情况&#xff0c;同时又想知道这个城市的具体位置。这就需要将 weather 表和 cities 表结合起来查询。这种操作在 SQL 中被称为 JOIN 查询。 现在看下两种表的情况 1.weather 表&#xff…

上传头像upload的简易方法,转base64调接口的

1.首页使用el-image显示数据&#xff0c;用的是转base64后端返给的 <el-table-column prop"avatar" align"center" label"头像"><template #default"scope"><el-image style"height: 40px;width: 40px;" :sr…

[AD] CrownJewel-1 Logon 4799+vss-ShadowCopy+NTDS.dit/SYSTEM+$MFT

QA QA攻擊者可以濫用 vssadmin 實用程式來建立卷影快照&#xff0c;然後提取 NTDS.dit 等敏感檔案來繞過安全機制。確定卷影複製服務進入運作狀態的時間。2024-05-14 03:42:16建立卷影快照時&#xff0c;磁碟區複製服務會使用機器帳戶驗證權限並列舉使用者群組。找到卷影複製過…

rtpmixsound:实现音频混音攻击!全参数详细教程!Kali Linux教程!

简介 一种将预先录制的音频与指定目标音频流中的音频&#xff08;即 RTP&#xff09;实时混合的工具。 一款用于将预先录制的音频与指定目标音频流中的音频&#xff08;即 RTP&#xff09;实时混合的工具。该工具创建于 2006 年 8 月至 9 月之间。该工具名为 rtpmixsound。它…

GitHub 趋势日报 (2025年05月28日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 2379 agenticSeek 1521 computer-science 841 n8n 577 langflow 351 qlib 282 skt…

threejsPBR材质与纹理贴图

1. PBR材质简介 本节课没有具体的代码&#xff0c;就是给大家科普一下PBR材质&#xff0c;所谓PBR就是&#xff0c;基于物理的渲染(physically-based rendering)。 Three.js提供了两个PBR材质相关的APIMeshStandardMaterial和MeshPhysicalMaterial,MeshPhysicalMaterial是Mes…

Android 12系统源码_多屏幕(四)自由窗口模式

一、小窗模式 1.1 小窗功能的开启方式 开发者模式下开启小窗功能 adb 手动开启 adb shell settings put global enable_freeform_support 1 adb shell settings put global force_resizable_activities 11.2 源码配置 copy file # add for freedom PRODUCT_COPY_FILES …

C# 将HTML文档、HTML字符串转换为图片

在.NET开发中&#xff0c;将HTML内容转换为图片的需求广泛存在于报告生成、邮件内容存档、网页快照等场景。Free Spire.Doc for .NET作为一款免费的专业文档处理库&#xff0c;无需Microsoft Word依赖&#xff0c;即可轻松实现这一功能。本文将深入解析HTML文档和字符串转图片两…

【HTML-15.2】HTML表单按钮全面指南:从基础到高级实践

表单按钮是网页交互的核心元素&#xff0c;作为用户提交数据、触发操作的主要途径&#xff0c;其重要性不言而喻。本文将系统性地介绍HTML表单按钮的各种类型、使用场景、最佳实践以及高级技巧&#xff0c;帮助开发者构建更高效、更易用的表单交互体验。 1. 基础按钮类型 1.1…

吴恩达MCP课程(4):connect_server_mcp_chatbot

目录 完整代码代码解释1. 导入和初始化2. 类型定义3. MCP_ChatBot 类初始化4. 查询处理 (process_query)5. 服务器连接管理6. 核心特性总结 示例 完整代码 原课程代码是用Anthropic写的&#xff0c;下面代码是用OpenAI改写的&#xff0c;模型则用阿里巴巴的模型做测试 .env 文…

C++内存学习

引入 在实例化对象时&#xff0c;不管是编译器还是我们自己&#xff0c;会使用构造函数给成员变量一个合适的初始值。 但是经过构造函数之后&#xff0c;我们还不能将其称为成员变量的初始化&#xff1a; 构造函数中的语句只能称为赋初值&#xff0c;而不能称作初始化 因为初…

MySQL 大战 PostgreSQL

一、底层架构对比 ​​维度​​​​MySQL​​​​PostgreSQL​​​​存储引擎​​多引擎支持&#xff08;InnoDB、MyISAM等&#xff09;单一存储引擎&#xff08;支持扩展如Zheap、Zedstore&#xff09;​​事务实现​​基于UNDO日志的MVCC基于堆表(Heap)的MVCC​​锁机制​​…

基于FPGA的二叉决策树cart算法verilog实现,训练环节采用MATLAB仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) MATLAB训练结果 上述决策树判决条件&#xff1a; 分类的决策树1 if x21<17191.5 then node 2 elseif x21>17191…

【RAG】RAG综述|一文了解RAG|从零开始(下)

文章目录 5. RAG的架构5.1 Naive RAG5.2 Advanced RAG5.2.1 检索前处理和数据索引技术5.2.2 知识分片技术5.2.3 分层索引5.2.4 检索技术5.2.4.1 优化用户查询5.2.4.2 通过假想文档嵌入修复查询和文档不对称5.2.4.3 Routing5.2.4.5 自查询检索5.2.4.6 混合搜索5.2.4.7 图检索5.2…

山东大学软件学院项目实训-基于大模型的模拟面试系统-面试官和面试记录的分享功能(2)

本文记录在发布文章时&#xff0c;可以添加自己创建的面试官和面试记录到文章中这一功能的实现。 前端 首先是在原本的界面的底部添加了两个多选框&#xff08;后期需要美化调整&#xff09; 实现的代码&#xff1a; <el-col style"margin-top: 1rem;"><e…

FPGA纯verilog实现MIPI-DSI视频编码输出,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 MIPI 编解码方案 3、设计思路框架工程设计原理框图FPGA内部彩条RGB数据位宽转换RGB数据缓存MIPI-DSI协议层编码MIPI-DPHY物理层串化MIPI-LVDS显示屏工程…

LXQt修改开始菜单高亮

开始菜单红色高亮很难看 mkdir -p ~/.local/share/lxqt/palettes/ mkdir -p ~/.local/share/lxqt/themes/ cp /usr/share/lxqt/palettes/Dark ~/.local/share/lxqt/palettes/Darker cp -p /usr/share/lxqt/themes/dark ~/.local/share/lxqt/themes/darker lxqt-panel.qss L…