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

React 中shouldComponentUpdate生命周期方法的作用,如何利用它优化组件性能?

大白话React 中shouldComponentUpdate生命周期方法的作用,如何利用它优化组件性能?

在 React 里,shouldComponentUpdate 这个生命周期方法就像是一个“关卡守卫”,它能决定组件是否需要重新渲染。组件重新渲染是个挺费性能的事儿,就好比你每次都要把整个房间重新布置一遍,即便只是有一点点小改动。而 shouldComponentUpdate 就可以帮你避免不必要的“重新布置”,只在真正需要的时候才让组件重新渲染。

它的作用

shouldComponentUpdate 方法会在组件接收到新的 props 或者 state 时被调用。它会返回一个布尔值:如果返回 true,组件就会重新渲染;要是返回 false,组件就不会重新渲染。这就给了你一个机会,在组件重新渲染之前检查一下新的 propsstate,看看是不是真的有必要重新渲染。

如何利用它优化组件性能

下面通过一个简单的例子来看看怎么用 shouldComponentUpdate 优化组件性能。

import React, { Component } from 'react';// 定义一个名为 MyComponent 的组件,继承自 React.Component
class MyComponent extends Component {// 构造函数,初始化组件的状态constructor(props) {super(props);// 初始化 state 中的 count 为 0this.state = {count: 0};}// 自定义的方法,用于增加 count 的值incrementCount = () => {// 使用 setState 方法更新 state 中的 count 值this.setState(prevState => ({count: prevState.count + 1}));};// shouldComponentUpdate 生命周期方法shouldComponentUpdate(nextProps, nextState) {// 比较当前的 state.count 和下一个 state.count 的值if (this.state.count === nextState.count) {// 如果相等,说明不需要重新渲染,返回 falsereturn false;}// 如果不相等,说明需要重新渲染,返回 truereturn true;}// render 方法,用于渲染组件的 UIrender() {return (<div>{/* 显示当前的 count 值 */}<p>Count: {this.state.count}</p>{/* 点击按钮调用 incrementCount 方法增加 count 的值 */}<button onClick={this.incrementCount}>Increment</button></div>);}
}export default MyComponent;

代码解释

  1. constructor 方法:这是组件的构造函数,在组件创建时被调用。它的作用是初始化组件的 state,这里把 count 初始化为 0。
  2. incrementCount 方法:这是一个自定义的方法,当点击按钮时会调用这个方法。它使用 setState 来更新 state 中的 count 值。
  3. shouldComponentUpdate 方法:这就是关键的“关卡守卫”。它接收两个参数 nextPropsnextState,分别代表下一个 propsstate。在这个方法里,我们比较当前的 state.count 和下一个 state.count 的值。如果它们相等,说明 count 没有变化,就不需要重新渲染,返回 false;如果不相等,就需要重新渲染,返回 true
  4. render 方法:这个方法用于渲染组件的 UI。它返回一个包含 p 标签和 button 标签的 div 元素。p 标签显示当前的 count 值,button 标签点击时会调用 incrementCount 方法。

通过使用 shouldComponentUpdate,我们可以避免组件在 count 没有变化时进行不必要的重新渲染,从而提高组件的性能。

在React中,使用PureComponent和shouldComponentUpdate有什么区别?

在 React 里,PureComponentshouldComponentUpdate 都能用于优化组件性能,不过它们的实现方式和使用场景有所不同。下面详细介绍二者的区别。

实现机制

  • PureComponentPureComponent 是 React 提供的一个基类,它继承自 ComponentPureComponent 会自动对 propsstate 进行浅比较。浅比较就是只比较对象的一层属性,如果属性是对象或者数组,它不会递归比较内部的元素。要是 props 或者 state 没有发生变化,PureComponent 就不会重新渲染。
  • shouldComponentUpdateshouldComponentUpdate 是一个生命周期方法,你可以在自定义的 Component 里重写这个方法。在这个方法中,你能够根据自身的需求来决定组件是否需要重新渲染。你可以进行深比较、根据特定的业务逻辑判断等。

代码示例

使用 PureComponent
import React, { PureComponent } from 'react';class MyPureComponent extends PureComponent {render() {return <div>{this.props.value}</div>;}
}export default MyPureComponent;

在这个例子中,MyPureComponent 继承自 PureComponent,它会自动进行浅比较。如果 props.value 没有变化,组件就不会重新渲染。

使用 shouldComponentUpdate
import React, { Component } from 'react';class MyComponent extends Component {shouldComponentUpdate(nextProps, nextState) {// 这里进行自定义的比较逻辑if (this.props.value === nextProps.value) {return false; // 不需要重新渲染}return true; // 需要重新渲染}render() {return <div>{this.props.value}</div>;}
}export default MyComponent;

在这个例子中,MyComponent 继承自 Component,并且重写了 shouldComponentUpdate 方法。在这个方法里,我们手动比较了 this.props.valuenextProps.value,根据比较结果决定是否重新渲染组件。

使用场景

  • PureComponent:适用于 propsstate 结构简单,且不需要进行深比较的情况。使用 PureComponent 可以减少代码量,让代码更简洁。
  • shouldComponentUpdate:适用于需要进行复杂比较逻辑的情况,比如需要进行深比较、根据特定业务逻辑判断是否重新渲染等。当 propsstate 是嵌套对象或数组时,shouldComponentUpdate 就可以发挥更大的作用。

注意事项

  • PureComponent:由于它进行的是浅比较,当 propsstate 是嵌套对象或数组时,可能会出现误判,导致组件没有按预期重新渲染。
  • shouldComponentUpdate:在重写这个方法时,要确保逻辑正确,避免出现错误的判断,导致组件无法正常更新。

综上所述,PureComponentshouldComponentUpdate 各有优缺点,你可以根据具体的业务需求选择合适的方式来优化组件性能。

除了PureComponent和shouldComponentUpdate,React中还有哪些优化组件性能的方法?

1. React.memo

React.memo 是一个高阶组件,它用于函数组件,和 PureComponent 类似,对 props 进行浅比较,避免函数组件不必要的重新渲染。

import React from 'react';const MyFunctionComponent = (props) => {return <div>{props.value}</div>;
};// 使用 React.memo 包裹函数组件
const MemoizedComponent = React.memo(MyFunctionComponent);export default MemoizedComponent;

在上述代码中,React.memo 会对传入 MyFunctionComponentprops 进行浅比较,如果 props 没有变化,组件就不会重新渲染。

2. 使用 useMemo 和 useCallback

  • useMemo:用于缓存计算结果,避免在每次渲染时都进行高开销的计算。
import React, { useMemo } from 'react';const MyComponent = ({ numbers }) => {// 使用 useMemo 缓存计算结果const sum = useMemo(() => {return numbers.reduce((acc, num) => acc + num, 0);}, [numbers]);return <div>Sum: {sum}</div>;
};export default MyComponent;

在这个例子中,useMemo 会缓存 numbers 数组求和的结果,只有当 numbers 数组发生变化时,才会重新计算求和结果。

  • useCallback:用于缓存函数,避免在每次渲染时都创建新的函数实例。
import React, { useCallback, useState } from 'react';const MyButton = ({ onClick }) => {return <button onClick={onClick}>Click me</button>;
};const ParentComponent = () => {const [count, setCount] = useState(0);// 使用 useCallback 缓存函数const handleClick = useCallback(() => {setCount(count + 1);}, [count]);return (<div><p>Count: {count}</p><MyButton onClick={handleClick} /></div>);
};export default ParentComponent;

这里,useCallback 缓存了 handleClick 函数,只有当 count 变化时,才会重新创建这个函数。

3. 懒加载(Lazy Loading)和 Suspense

  • 懒加载:可以让你在需要的时候才加载组件,而不是在应用启动时就加载所有组件,这能减少初始加载时间。
import React, { lazy, Suspense } from 'react';// 懒加载组件
const LazyComponent = lazy(() => import('./LazyComponent'));const App = () => {return (<div><Suspense fallback={<div>Loading...</div>}><LazyComponent /></Suspense></div>);
};export default App;

在上述代码中,LazyComponent 只有在需要渲染时才会被加载。

  • Suspense:用于在懒加载组件时显示加载中的提示信息,增强用户体验。

4. 避免内联函数和对象

render 方法中创建内联函数或对象会导致每次渲染时都创建新的实例,这可能会触发子组件的不必要重新渲染。可以把函数和对象提取到组件外部或者使用 useCallbackuseMemo 进行缓存。

// 不好的做法
const BadComponent = () => {return <ChildComponent onClick={() => console.log('Clicked')} />;
};// 好的做法
const handleClick = () => console.log('Clicked');
const GoodComponent = () => {return <ChildComponent onClick={handleClick} />;
};

5. 优化列表渲染

使用 key 属性:在渲染列表时,为每个列表项提供一个唯一的 key 属性,这样 React 就能更高效地识别哪些元素发生了变化,减少不必要的重新渲染。

const items = [1, 2, 3];
const ListComponent = () => {return (<ul>{items.map(item => (<li key={item}>{item}</li>))}</ul>);
};

在这个例子中,item 作为 key,帮助 React 识别列表项的变化。

相关文章:

React 中shouldComponentUpdate生命周期方法的作用,如何利用它优化组件性能?

大白话React 中shouldComponentUpdate生命周期方法的作用&#xff0c;如何利用它优化组件性能&#xff1f; 在 React 里&#xff0c;shouldComponentUpdate 这个生命周期方法就像是一个“关卡守卫”&#xff0c;它能决定组件是否需要重新渲染。组件重新渲染是个挺费性能的事儿…...

AI写一个视频转图片帧工具(python)

现在的AI写python太方便了 说的话 我想用python实现一个能够将视频的所有帧数转化为图片的软件&#xff0c;可以自由配置转换的帧率或者全部&#xff0c;需要有界面&#xff0c;我需要增加一点功能&#xff0c;就是我需要读取出视频的分辨率&#xff0c;然后设置输出帧的分辨…...

React第三十一章(组件实战)

组件实战 这一章建议大家看完hooks css 原理 组件 这些章节之后再来看&#xff0c;这样会更好理解。 本章是额外新增的&#xff0c;因为之前的知识大家都掌握的差不多了&#xff0c;所以这一章节主要是让大家动手实践&#xff0c;巩固一下前面的知识。 那么你会学到什么&#…...

详细介绍WideCharToMultiByte()

书籍&#xff1a;《Visual C 2017从入门到精通》的2.7 字符串 环境&#xff1a;visual studio 2022 内容&#xff1a;几个字符串类型->&#xff08;将单字节char*转换为宽字节wchar_t *&#xff09;&#xff08;将宽字节wchar_t* 转换为单字节char *&#xff09; WideChar…...

Qt开发:QFileDialog的使用

文章目录 一、QFileDialog的介绍二、QFileDialog的常用静态方法三、完整示例 一、QFileDialog的介绍 QFileDialog 是 Qt 框架中提供的一个用于文件选择的标准对话框类&#xff0c;它允许用户在应用程序中选择文件或目录。它是跨平台的&#xff0c;在不同操作系统上会自动适配本…...

深度学习篇---回归分类任务的损失函数

文章目录 前言一、分类任务常用损失函数1. 交叉熵损失&#xff08;Cross-Entropy Loss&#xff09;数学形式使用场景特点训练状态分析损失下降损失震荡训练损失低但是验证损失高 2. Hinge Loss&#xff08;合页损失&#xff09;数学形式适用场景特点训练状态分析损失趋近于0损失…...

【MLP-BEV(10)】BEVPooling V1和BEVPooling V2的view_transformer,进行鱼眼图片实践

文章目录 先说说 BEVPoolv1步骤1:3D点生成步骤2 2D特征采样和BEV特征生成特点再谈谈BEVPoolv2步骤1:3D点生成步骤2: 计算索引关系步骤3: `voxel_pooling`计算鱼眼图片进行实践步骤1、3D点生成(基于Kannala-Brandt 进行调整)步骤2、2D特征采样和BEV特征生成(1) 体素化 (Voxe…...

上海SMT贴片技术解析与行业趋势

内容概要 随着长三角地区电子制造产业集群的快速发展&#xff0c;上海作为核心城市正引领着SMT贴片技术的革新浪潮。本文聚焦表面组装技术在高密度互连、微间距贴装等领域的突破性进展&#xff0c;通过解析焊膏印刷精度控制、元件定位算法优化等核心工艺&#xff0c;展现上海企…...

RAG优化:python从零实现[吃一堑长一智]循环反馈Feedback

本文将介绍一种有反馈循环机制的RAG系统,让当AI学会"吃一堑长一智",给传统RAG装了个"后悔"系统,让AI能记住哪些回答被用户点赞/拍砖,从此告别金鱼记忆: 每次回答都像在玩roguelike:失败结局会强化下次冒险悄悄把优质问答变成新知识卡牌,实现"以…...

Ubuntu 防火墙配置

Ubuntu 防火墙配置 一、UFW 基础操作二、核心规则配置三、高级功能四、特殊场景配置五、规则管理六、默认策略与安全建议七、故障排除 一、UFW 基础操作 检查 UFW 状态 sudo ufw status # 查看防火墙状态 sudo ufw status verbose # 显示详细规则 sudo ufw status numbered #…...

网络运维学习笔记(DeepSeek优化版) 024 HCIP-Datacom OSPF域内路由计算

文章目录 OSPF域内路由计算&#xff1a;单区域的路由计算一、OSPF单区域路由计算原理二、1类LSA详解2.1 1类LSA的作用与结构2.2 1类LSA的四种链路类型 三、OSPF路由表生成验证3.1 查看LSDB3.2 查看OSPF路由表3.3 查看全局路由表 四、2类LSA详解4.1 2类LSA的作用与生成条件4.2 2…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-2.2.1 Bulk API的正确使用与错误处理

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 Elasticsearch Bulk API 深度实践&#xff1a;性能调优与容错设计1. Bulk API 核心机制解析1.1 批量写入原理剖析1.1.1 各阶段性能瓶颈 2. 高性能批量写入实践2.1 客户端最佳…...

Oracle 23ai Vector Search 系列之2 ONNX(Open Neural Network Exchange)

文章目录 Oracle 23ai Vector Search 系列之2 ONNX(Open Neural Network Exchange)ONNX基本概念ONNX(Open Neural Network Exchange)ONNX Runtime ONNX Runtime 在Oracle数据库中的集成参考 Windows 环境图形化安装 Oracle 23ai Oracle 23ai Vector Search 系列之1 架构基础 Or…...

前端 - ts - - declare声明类型

在使用typeScript的项目中 需要声明属性类型 单独的局部属性 可以直接在当前文件中声明 全局属性需要在项目根目录下新建.d.ts文件 vite会自动识别.d.ts类型文件 在该文件中使用declare声明类型有三种写法 1、在某种类型的文件中声明 2、声明window上的属性类型 3、全局声明…...

Processor System Reset IP 核 v5.0(vivado)

这个IP的作用&#xff0c;我的理解是&#xff0c;比普通按键复位更加高效灵活&#xff0c;可以配置多个复位输出&#xff0c;可以配置复位周期。 1、输入信号&#xff1a; 重要的信号有时钟clk信号&#xff0c;一般连接到系统时钟&#xff1b;输入复位信号&#xff0c;一般是外…...

基于dify平台批量分析excel格式信息

如何以表格形式批量输入一些信息&#xff0c;然后让大模型以对话应用形式逐条进行推理分析&#xff1f; 这里提供一个分步解决方案&#xff0c;结合 Dify平台功能 和 API调用优化 的思路&#xff0c;既保证效率又降低复杂度&#xff1a; 1. 优先检查 Dify 的「数据集」功能 Di…...

GMII 接口

文章目录 概述硬件拓扑GMII 接口站管理接口发送数据时序接收数据时序参考 本文为笔者学习以太网对网上资料归纳整理所做的笔记&#xff0c;文末均附有参考链接&#xff0c;如侵权&#xff0c;请联系删除。 概述 GMII 是千兆网的MII接口&#xff0c;这个也有相应的 RGMII 接口&…...

学习不同电脑cpu分类及选购指南

关于电脑cpu 一、CPU型号的核心组成与命名规则Intel命名规则:AMD命名规则:5. 后缀:Intel常见后缀及其含义:AMD后缀一些常见的后缀及其含义:二、主流品牌CPU的分类与性能差异三、区分CPU型号的实用方法四、主流品牌CPU对比与选择建议五、选购CPU的注意事项关于不同主流CPU的…...

Android 动态设置默认Launcher(默认应用 电话-短信-浏览器-主屏幕应用))

Android 动态设置默认Launcher(默认应用 电话-短信-浏览器-主屏幕应用&#xff09;) 文章目录 场景需求参考资料思路期待效果 实现方案源码流程分析和思路实现DefaultAppActivityHandheldDefaultAppFragmentHandheldDefaultAppPreferenceFragmentDefaultAppChildFragmentDefaul…...

23种设计模式-策略(Strategy)设计模式

策略设计模式 &#x1f6a9;什么是策略设计模式&#xff1f;&#x1f6a9;策略设计模式的特点&#x1f6a9;策略设计模式的结构&#x1f6a9;策略设计模式的优缺点&#x1f6a9;策略设计模式的Java实现&#x1f6a9;代码总结&#x1f6a9;总结 &#x1f6a9;什么是策略设计模式…...

游戏引擎学习第188天

回顾并计划今天的内容 原本这周的目标是进行可视化操作的尝试&#xff0c;但每一天都被一些棘手的bug和问题所阻碍&#xff0c;导致我们一直没能实现这个目标。直到今天&#xff0c;星期四&#xff0c;我们终于解决了这些问题&#xff0c;所有功能都能正常运行了&#xff0c;所…...

TF-IDF——自然语言处理——红楼梦案例

目录 一、红楼梦数据分析 &#xff08;1&#xff09;红楼梦源文件 &#xff08;2&#xff09;数据预处理——分卷实现思路 &#xff08;3&#xff09;分卷代码 二、分卷处理&#xff0c;删除停用词&#xff0c;将文章转换为标准格式 1.实现的思路及细节 2.代码实现&#…...

Oracle数据库数据编程SQL<2.3 DML增、删、改及merge into>

目录 一、DML数据操纵语言&#xff08;Aate Manipulation Language) 二、【insert】插入数据 1、单行插入 2、批量插入 3、将数据同时插入到多张表insert all/insert first 三、【update】 更新数据 1、语法 2、举例 3、update使用注意事项&#xff1a; 四、【delete…...

面试计算机操作系统解析(一中)

判断 1. 一般来说&#xff0c;先进先出页面置换算法比最近最少使用页面置换算法有较少的缺页率。&#xff08;✘&#xff09; 正确答案&#xff1a;错误解释&#xff1a;FIFO&#xff08;先进先出&#xff09;页面置换算法可能导致“Belady异常”&#xff0c;即页面数增加反而…...

启山智软实现b2c单商户商城对比传统单商户的优势在哪里?

启山智软实现 B2C 单商户商城具有以下对比优势&#xff1a; 技术架构方面 先进的框架选型&#xff1a;基于 SpringCloud 等主流框架开发&#xff0c;是百万真实用户沉淀并检验的商城系统&#xff0c;技术成熟稳定&#xff0c;能应对高并发场景&#xff0c;保证系统在大流量访…...

蓝桥杯备考:贪心问题之均分纸牌

咱的贪心策略就是每次分好一个堆儿&#xff0c;如果某个堆已经是满足题意了&#xff0c;就不用管这个堆了&#xff0c;否则要向下一个堆借几个元素 #include <iostream> using namespace std; const int N 110; typedef long long ll; int a[N]; int n; ll x; int cnt…...

免去繁琐的手动埋点,Gin 框架可观测性最佳实践

作者&#xff1a;牧思 背景 在云原生时代的今天&#xff0c;Golang 编程语言越来越成为开发者们的首选&#xff0c;而对于 Golang 开发者来说&#xff0c;最著名的 Golang Web 框架莫过于 Gin [ 1] 框架了&#xff0c;Gin 框架作为 Golang 编程语言官方的推荐框架 [ 2] &…...

centos7 linux VMware虚拟机新添加的网卡,能看到网卡名称,但是看不到网卡的配置文件

问题现象&#xff1a;VMware虚拟机新添加的网卡&#xff0c;能看到网卡&#xff0c;但是看不到网卡的配置文件 解决方案&#xff1a; nmcli connection show nmcli connection add con-name ens36 ifname ens36 type ethernet #创建一个网卡连接配置文件&#xff0c;这里con…...

python的内置方法getitem和len

完整小测试&#xff1a; #python的内置函数&#xff0c;getitemclass Animal():def __init__(self,name):self.name namedef __str__(self):return f"This is {self.name}"class Zoo():def __init__(self,animal_list):self.animal_list animal_listdef __getite…...

深入理解 Git Stash:功能、用法与实战示例

文章目录 深入理解 Git Stash&#xff1a;功能、用法与实战示例一、Git Stash 的核心概念二、Git Stash 的基本用法1. 存储当前修改2. 查看 Stash 列表3. 恢复 Stash4. 恢复并删除 Stash5. 删除 Stash&#xff08;1&#xff09;删除指定 Stash&#xff08;2&#xff09;清空所有…...

SQL 复杂查询和性能优化

一、掌握复杂查询的核心技能 1. ​理解 SQL 执行顺序 SQL 语句的逻辑执行顺序&#xff08;非书写顺序&#xff09;&#xff1a; FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT ​关键点&#xff1a;每一步的结果会传递给下一步&a…...

【web应用安全】关于web应用安全的几个主要问题的思考

文章目录 防重放攻击1. **Token机制&#xff08;一次性令牌&#xff09;**2. **时间戳 超时验证**3. **Nonce&#xff08;一次性随机数&#xff09;**4. **请求签名&#xff08;如HMAC&#xff09;**5. **HTTPS 安全Cookie**6. **幂等性设计****综合防御策略建议****注意事项…...

看懂roslunch输出

自编了一个demo 第一步&#xff1a;创建功能包 cd ~/catkin_ws/src catkin_create_pkg param_demo roscpp第二步&#xff1a;写 main.cpp 创建文件&#xff1a;param_demo/src/param_node.cpp #include <ros/ros.h> #include <string>int main(int argc, char*…...

如何查看Unity打包生成的ab文件

文章目录 前言AssetStudioab文件介绍1. 动态加载资源2. 资源分离与模块化3. 平台兼容性4. 资源压缩与加密5. 资源管理与更新6. 减少安装包大小7. 资源加载灵活性8. 资源打包与分发9. 实际应用场景10. 注意事项 总结 前言 问题来源于工作又回归到工作&#xff0c;当发现发布包里…...

从泛读到精读:合合信息文档解析如何让大模型更懂复杂文档

从泛读到精读&#xff1a;合合信息文档解析如何让大模型更懂复杂文档 一、引言&#xff1a;破解文档“理解力”瓶颈二、核心功能&#xff1a;合合信息的“破局”亮点功能亮点1&#xff1a;复杂图表的高精度解析图表解析&#xff1a;为大模型装上精准“标尺”表格数据精准还原 功…...

Python SciPy面试题及参考答案

目录 什么是 SciPy?它与 NumPy 有什么区别? 如何在 Python 中安装 SciPy? 如何导入 SciPy 库? SciPy 中有哪些子模块?简要介绍它们的功能。 如何使用 SciPy 进行数值积分?请举例说明。 SciPy 中提供了哪些求解微分方程的函数? 什么是插值?SciPy 中如何进行插值?…...

21.Excel自动化:如何使用 xlwings 进行编程

一 将Excel用作数据查看器 使用 xlwings 中的 view 函数。 1.导包 import datetime as dt import xlwings as xw import pandas as pd import numpy as np 2.view 函数 创建一个基于伪随机数的DataFrame&#xff0c;它有足够多的行&#xff0c;使得只有首尾几行会被显示。 df …...

【redis】数据类型之Stream

Redis Stream是Redis 5.0版本引入的一种新的数据类型&#xff0c;它提供了一种持久化的、可查询的、可扩展的消息队列服务。 它结合了Redis高性能的特性与持久化能力&#xff0c;支持&#xff1a; 多消费者组模式&#xff08;Consumer Groups&#xff09;消息回溯&#xff08…...

day17 周末两天偷懒没更新,今天炼丹加学习,完结STL常用容器部分

还剩下两个常用容器&#xff0c;一个是set(集合容器) &#xff0c; 一个是map容器 set/multiset 容器 set容器是关联式容器&#xff0c;该容器的特点是&#xff1a;所有元素都会在插入时被自动排序 set/multiset 都是关联式容器 &#xff0c;其底层结构是使用二叉树实现的。…...

嵌入式开发场景中Shell脚本执行方式的对比

‌Shell脚本执行方式对比表‌ ‌执行方式‌‌命令示例‌‌是否需要执行权限‌‌是否启动子Shell‌‌环境变量影响范围‌‌适用场景‌‌嵌入式开发中的典型应用‌‌直接执行脚本‌./script.sh是是子Shell内有效独立运行的脚本&#xff0c;需固定环境自动化构建脚本&#xff08;…...

数据结构之多项式相加的链表实现

在计算机科学中&#xff0c;多项式的表示和运算经常会用到。使用链表来表示多项式是一种常见且有效的方法&#xff0c;它可以方便地处理多项式的各项&#xff0c;并且在进行多项式相加等运算时具有较好的灵活性。 多项式通常由一系列的项组成&#xff0c;每一项包含一个系数和…...

Java 实现将Word 转换成markdown

日常的开发中&#xff0c;需要将word 等各类文章信息转换成格式化语言&#xff0c;因此需要使用各类语言将word 转换成Markdown 1、引入 jar包 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version&g…...

IEEE PDF Xpress校验出现 :字体无法嵌入问题以及pdf版本问题

文章目录 问题描述一、字体嵌入问题首先查看一下&#xff0c;哪些字体没有被嵌入查看window的font文件夹里的字体下载字体的网站修复字体嵌入问题 二、pdf版本不对 问题描述 在处理IEEE的camera ready的时候&#xff0c;提交到IEEE express的文件没有办法通过validate&#xf…...

Sa-Token

简介 Sa-Token 是一个轻量级 Java 权限认证框架&#xff0c;主要解决&#xff1a;登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。 官方文档 常见功能 登录认证 本框架 用户提交 name password 参数&#xff0c;调用登…...

StarRocks 中 CURRENT_TIMESTAMP 和 CURRENT_TIME 分区过滤问题

背景 本文基于Starrocks 3.3.5 最近在进行Starrocks 跑数据的时候&#xff0c;发现了一个SQL 扫描了所有分区的数据&#xff0c;简化后的SQL如下&#xff1a; select date_created from tableA where date_createddate_format(current_time(), %Y-%m-%d %H:%i:%S) limit 20其…...

GithubPages+自定义域名+Cloudfare加速+浏览器收录(2025最新排坑)

前言 最近刷到一个小视频&#xff0c;讲述了选择域名选择的三宗罪&#xff0c;分别是 不要使用 .net&#xff0c;因为它价格贵&#xff0c;但是在顶级域名中的 SEO 效果却不是很好&#xff0c;也就是性价比很低不要使用 .cn&#xff0c;因为国外访问该网站可能会很慢&#xf…...

Canvas粒子系统终极指南:从基础运动到复杂交互的全流程实现

文章目录 一、粒子系统基础架构1.1 粒子数据结构设计1.2 粒子系统管理器 二、基础粒子效果实现2.1 重力场模拟2.2 弹性碰撞效果 三、高级交互实现3.1 鼠标吸引效果3.2 颜色渐变粒子 四、性能优化策略4.1 粒子池复用4.2 分层渲染 五、复杂效果实现5.1 烟花爆炸效果5.2 流体模拟 …...

【QT】新建QT工程(详细步骤)

新建QT工程 1.方法(1)点击new project按钮&#xff0c;弹出对话框&#xff0c;新建即可&#xff0c;步骤如下&#xff1a;(2) 点击文件菜单&#xff0c;选择新建文件或者工程&#xff0c;后续步骤如上 2.QT工程文件介绍(1).pro文件 --》QT工程配置文件(2)main.cpp --》QT工程主…...

详解Http:在QT中使用Http协议

目录 一、HTTP 概述 1、主要特点 2、HTTP 方法 3、HTTP 状态码 4、HTTP 头部 5、HTTP的工作原理 二、在Qt中使用HTTP 1、发送简单的HTTP请求 2、发送POST请求 3、处理异步请求 4、使用QSslConfiguration进行HTTPS 5、 处理JSON响应 6、处理错误 三、总结 一、HTTP…...

Next.js 中间件鉴权绕过漏洞 (CVE-2025-29927) 复现利用与原理分析

免责声明 本文所述漏洞复现方法仅供安全研究及授权测试使用&#xff1b; 任何个人/组织须在合法合规前提下实施&#xff0c;严禁用于非法目的&#xff1b; 作者不对任何滥用行为及后果负责&#xff0c;如发现新漏洞请及时联系厂商并遵循漏洞披露规则。 漏洞原理 Next.js 是一个…...