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

前端面试准备-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()则是延时执行。

相关文章:

前端面试准备-4

1.React Router的history模式中&#xff0c;push和replace有什么区别 都是用于页面导航&#xff0c;但是他们对浏览器历史记录的处理不一样。 ①&#xff1a;push是在浏览历史栈里加入一条新的浏览历史&#xff0c;点击返回键会返回上一个页面 ②;replace是替换当前历史记录…...

AI赋能金融风控:基于机器学习的智能欺诈检测系统实战教程

引言 在数字化转型浪潮中&#xff0c;金融欺诈手段呈现智能化、隐蔽化趋势。传统规则引擎已难以应对复杂多变的欺诈模式&#xff0c;而机器学习技术通过自动学习数据特征&#xff0c;正在重塑金融风控体系。本文将基于Python生态&#xff0c;以信用卡欺诈检测为切入点&#xf…...

Java虚拟机内存区域划分

Java虚拟机内存区域划分 Java虚拟机&#xff08;JVM&#xff09;的内存区域划分主要分为五个部分&#xff1a; 程序计数器&#xff1a;程序计数寄存器&#xff0c;给CPU使用本地方法栈&#xff1a;为JVM使用到的Native方法服务方法区&#xff1a;存储的是编译后的.class文件堆…...

如何下载python的第三方类库

无论是在cmd中&#xff08;使用python环境&#xff09;&#xff0c;还是在Anaconda Prompt中&#xff08;使用虚拟环境&#xff09;&#xff0c;都可以通过pip命令进行下载python的第三方类库。 pip install packagename --default-timeout600 -i https://mirrors.tuna.tsingh…...

Redis击穿,穿透和雪崩详解以及解决方案

在 Java 开发中&#xff0c;Redis 作为常用的缓存中间件&#xff0c;可能会面临击穿、穿透、雪崩这三类经典问题。以下是对这三个问题的详细解析及对应的 Java 解决方案&#xff1a; 一、Redis 缓存击穿&#xff08;Cache Breakdown&#xff09; 问题描述 定义&#xff1a;大…...

网络渗透基础:信息收集

1.信息收集 whois xx.com 域名注册信息 注册人、电话、email Whois.chinaz.com kali自带whois工具 域名备案信息 Beian.miit.gov.cn Tianyancha.com Icp.chinaz.com 爱站 Sou.xiaolanben.com 2.子域名收集 收集方式 枚举&#xff1a;基于字典搜索引擎&#xff1a;googleh…...

[SAP] 如何查询当前屏幕的Tcode?

事务代码Tcode是SAP中到达特定屏幕的快捷路径 如何查询以下屏幕的事务码Tcode&#xff1f; 要浏览当前所使用的屏幕的事务码&#xff0c;可以选择System | Status 这里的事务代码是[VA22]&#xff0c;它是Change Quotation的事务代码...

ZigBee 协议:开启物联网低功耗通信新时代

在物联网蓬勃发展的时代&#xff0c;无线通信技术犹如连接万物的桥梁&#xff0c;而 ZigBee 协议以其独特的优势&#xff0c;在众多通信协议中脱颖而出&#xff0c;成为构建低功耗、可靠物联网网络的关键技术之一。 一、ZigBee 协议的起源与发展 ZigBee 这个名字充满了自然的灵…...

JavaScript 模块系统:CJS/AMD/UMD/ESM

文章目录 前言一、CommonJS (CJS) - Node.js 的同步模块系统1.1 设计背景1.2 浏览器兼容性问题1.3 Webpack 如何转换 CJS1.4 适用场景 二、AMD (Asynchronous Module Definition) - 浏览器异步加载方案2.1 设计背景2.2 为什么现代浏览器不原生支持 AMD2.3 Webpack/Rollup 如何处…...

STM32F407寄存器操作(ADC非连续扫描模式)

1.前言 书接上回&#xff0c;在看手册的时候我突然发现手册上还描述了另一种ADC扫描模式&#xff0c;即非连续扫描模式&#xff0c;想着连续扫描模式都已经探索过了&#xff0c;那就顺手把非非连续模式研究一下吧。 2.理论 我们先看看手册&#xff0c;这里我就以规则通道举例…...

生产系统中TongWeb故障应急处理办法

本文档主要说明在上线正式运行的系统中&#xff0c;若TongWeb或部署在TongWeb上的应用出现问题时&#xff0c;现场维护人员或在现场的TongWeb支持人员应当采取的处理步骤。 工作基本原则&#xff1a; 任何操作必须经过项目相关负责人同意后进行&#xff0c;禁止在未允许的情况…...

PHP学习笔记(十一)

类常量 可以把在类中始终保持不变的值定义为常量&#xff0c;类常量的默认可见性是public。 接口中也可以定义常量。 可以用一个变量来动态调用类&#xff0c;但该变量的值不能为关键字 需要注意的是类常量只为每个类分配一次&#xff0c;而不是为每个类的实例分配。 特殊的…...

PyTorch中 torch.utils.data.DataLoader 的详细解析和读取点云数据示例

一、DataLoader 是什么&#xff1f; torch.utils.data.DataLoader 是 PyTorch 中用于加载数据的核心接口&#xff0c;它支持&#xff1a; 批量读取&#xff08;batch&#xff09;数据打乱&#xff08;shuffle&#xff09;多线程并行加载&#xff08;num_workers&#xff09;自…...

直线模组在手术机器人中有哪些技术挑战?

手术机器人在现代医疗领域发挥着越来越重要的作用&#xff0c;直线模组作为其关键部件&#xff0c;对手术机器人的性能有着至关重要的影响。然而&#xff0c;在手术机器人中使用直线模组面临着诸多技术挑战&#xff0c;具体如下&#xff1a; 1、‌高精度要求‌&#xff1a;手术…...

RK3568DAYU开发板-平台驱动开发--UART

1、程序介绍 本程序是基于OpenHarmony标准系统编写的平台驱动案例&#xff1a;UART 系统版本:openharmony5.0.0 开发板:dayu200 编译环境:ubuntu22 部署路径&#xff1a; //sample/06_platform_uart 2、基础知识 2.1、UART简介 UART指异步收发传输器&#xff08;Univer…...

ubuntu 安装 Redis 5.0.8 的完整步骤

以下是根据前面的沟通记录整理的完整安装过程和依赖项&#xff0c;确保在 Ubuntu 22 上成功安装 Redis 5.0.8。 安装 Redis 5.0.8 的完整步骤 1. 安装依赖 在编译和运行 Redis 之前&#xff0c;需要安装一些必要的工具和库&#xff1a; sudo apt update sudo apt install bu…...

制造企业搭建AI智能生产线怎么部署?

制造商需要精准协调生产和发货&#xff0c;确保订单及时交付。MES、ERP、CRM 系统与生产线集成&#xff0c;对生产管理流程、物料跟踪、品控、确定货期至关重要。如果某个系统发生延迟或者效率低下&#xff0c;会在造成整个生产环节停滞&#xff0c;影响最终交付&#xff0c;导…...

深度学习驱动的超高清图修复技术——综述

Deep Learning-Driven Ultra-High-Definition Image Restoration: A Survey Liyan Wang, Weixiang Zhou, Cong Wang, Kin-Man Lam, Zhixun Su, Jinshan Pan Abstract Ultra-high-definition (UHD) image restoration​​ aims to specifically solve the problem of ​​quali…...

unix/linux source 命令,其内部结构机制

要理解 source (或 .) 命令的内部结构机制,我们需要戴上“操作系统”和“解释器设计”的眼镜,深入到 Shell 如何管理其状态以及如何执行命令的层面。 虽然我们无法直接看到 Shell 内部的 C 代码(除非我们去阅读 Bash 或 Zsh 的源码),但我们可以基于其行为和操作系统的原理…...

【LLM】FastAPI入门教程

note FastAPI 是一个现代的、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff08;应用程序编程接口&#xff09;。它基于 Python 3.7&#xff0c;使用了 Python 类型提示&#xff08;type hints&#xff09;&#xff0c;并且具有自动化的文档…...

进程同步机制-信号量机制-记录型信号量机制中的的wait和signal操作

wait和signal是记录型信号量机制中用于实现进程同步与互斥的两个重要操作&#xff0c; wait 操作 wait(semaphores *S) {S->value --;if (S->value<0) block(S->list) }请求资源&#xff1a;S->value --; 这一步表示进程请求一个单位的资源&#xff0c;将信号…...

gitlib 常见命令

git clone <项目URL> # 从 GitLab 拉取代码到本地 git status 查看状态 git diff 文件路径 查看修改位置 git diff 文件路径 查看修改位置 black -l 180 路径 格式化文件 git add 路径 &#xff08;可以多个&#xff09; 添加修改到暂存区 git commit -m “提交说明…...

Azure DevOps 管道部署系列之二IIS

本博客旨在提供如何使用 Azure DevOps YAML 管道部署到虚拟机上的 IIS 的实用指南。 开始之前,您需要做好以下准备: 您拥有要部署的服务器的访问权限以及 PowerShell 的管理员访问权限。您拥有要部署的远程服务器的互联网访问权限。您拥有在服务器上安装 .NET Core 托管包的…...

Vue.js教学第十七章:Vue 与后端交互(一),Axios 基础

Vue 与后端交互(一):Axios 基础 在现代前端开发中,Vue 应用通常需要与后端 API 进行数据交互,以实现动态数据的获取和提交。Axios 是一个基于 Promise 的 HTTP 客户端,广泛用于 Vue 项目中与后端进行通信。本文将深入讲解 Axios 的基本用法,包括如何通过 Axios 发送 GE…...

人工智能浪潮下,制造企业如何借力DeepSeek实现数字化转型?

一、DeepSeek技术概述 DeepSeek&#xff0c;凭借其强大的深度学习和自然语言处理能力&#xff0c;能够理解复杂问题并提供精准解决方案。它不仅能够作为学习、工作、生活的助手&#xff0c;满足用户在不同场景下的需求&#xff0c;更能在制造业中发挥重要作用。通过自然语言交…...

NodeJS全栈开发面试题讲解——P2Express / Nest 后端开发

✅ 2.1 Express 的中间件机制&#xff1f;如何组织一个 RESTful API 项目&#xff1f; 面试官好&#xff0c;我来讲讲 Express 的中间件机制&#xff0c;它是 Express 架构的核心&#xff0c;也是组织 RESTful 项目的基础。 &#x1f9e9; 什么是中间件&#xff1f; 中间件&am…...

从线性代数到线性回归——机器学习视角

真正不懂数学就能理解机器学习其实是个神话。我认为&#xff0c;AI 在商业世界可以不懂数学甚至不懂编程也能应用&#xff0c;但对于技术人员来说&#xff0c;一些基础数学是必须的。本文收集了我认为理解学习本质所必需的数学基础&#xff0c;至少在概念层面要掌握。毕竟&…...

计算机网络相关发展以及常见性能指标

目录 一、因特网概述 1.1 基本概念 1.2 因特网发展的三个阶段 1.3 英特网服务提供者ISP 1.4 英特网的标准化工作 1.5 因特网的组成 1.6 简单总结 二、3种交换方式 2.1 电路交换&#xff08;Circuit Switching&#xff09; 2.2 分组交换&#xff08;Packet Switching&…...

通义灵码:基于MCP的火车票小助手系统全流程设计与技术总结

具体操作步骤请访问&#xff1a;https://blog.csdn.net/ailuloo/article/details/148319336?spm1001.2014.3001.5502 前沿技术应用全景图 一、项目背景与需求分析 目标&#xff1a;基于12306 MCP接口&#xff0c;开发一款解决高峰出行&#xff08;春运/节假日&#xff09;痛…...

为什么建立 TCP 连接时,初始序列号不固定?

主要原因有两个方面&#xff1a; 很大程度上避免历史报文被下一个相同四元组的 TCP 连接接收问题&#xff08;主要方面&#xff09;防止黑客伪造相同序列号的 TCP 报文被接收 接下来&#xff0c;详细说说第一点 假设每次建立 TCP 连接时&#xff0c;客户端和服务端的初始序列…...