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

React编程高级主题:背压(Backpressure)处理

在这里插入图片描述

文章目录

    • **5.1 背压(Backpressure)概述**
    • **5.1.1 缓冲(Buffer)**
      • **1. 基本概念**
      • **2. 缓冲的实现方式**
      • **3. 适用场景**
      • **4. 潜在问题**
    • **5.1.2 丢弃(Drop)**
      • **1. 基本概念**
      • **2. 丢弃的实现方式**
      • **3. 适用场景**
      • **4. 潜在问题**
    • **5.1.3 动态调整(Dynamic Pull)**
      • **1. 基本概念**
      • **2. 动态调整的实现方式**
      • **3. 适用场景**
      • **4. 潜在问题**
    • **5.2 背压策略对比**
    • **5.3 总结**
    • **背压(Backpressure)的原理**
      • **1. 基本概念**
      • **2. 背压的核心原理**
        • **(1) Push 模式(传统方式,无背压)**
        • **(2) Pull 模式(背压实现方式)**
      • **3. 背压的底层实现**
        • **(1) 响应式流规范(Reactive Streams)**
        • **(2) 背压信号传递**
      • **4. 背压策略的数学建模**
        • **(1) 漏桶算法(Leaky Bucket)**
        • **(2) 令牌桶算法(Token Bucket)**
      • **5. 背压在主流框架中的实现**
      • **6. 背压的适用场景与挑战**
        • **✅ 适用场景**
        • **⚠️ 挑战**
      • **7. 总结**

在这里插入图片描述

5.1 背压(Backpressure)概述

响应式编程(Reactive Programming)中,数据流(Data Stream)通常是异步、非阻塞的,生产者和消费者之间的处理速度可能存在不匹配的情况。如果生产者(Publisher)的发送速度远高于消费者(Subscriber)的处理能力,就会导致数据积压,最终可能引发内存溢出(OOM)系统崩溃

背压(Backpressure) 是一种流量控制机制,用于协调生产者和消费者的速率,确保系统在高负载下仍能稳定运行。常见的背压策略包括:

  1. 缓冲(Buffer)
  2. 丢弃(Drop)
  3. 动态调整(Dynamic Pull)

接下来,我们将深入探讨这些策略的原理、实现方式及适用场景。


在这里插入图片描述

5.1.1 缓冲(Buffer)

1. 基本概念

缓冲(Buffer)是最常见的背压策略,其核心思想是在生产者与消费者之间建立一个缓冲区,临时存储来不及处理的数据,等待消费者逐步消费。

2. 缓冲的实现方式

在响应式编程框架(如 RxJava、Project Reactor、Akka Streams)中,缓冲通常通过以下方式实现:

  • 固定大小缓冲区(Fixed-Size Buffer)
    设定一个固定容量的缓冲区,当缓冲区满时,生产者会被阻塞(Backpressure.BUFFER),或触发溢出策略(如丢弃、报错)。

    示例(RxJava)

    Flowable.range(1, 1000).onBackpressureBuffer(100) // 缓冲区大小=100.subscribe(System.out::println);
    
  • 动态调整缓冲区(Dynamic Buffer)
    缓冲区大小可以动态调整,例如基于系统负载自动扩容/缩容。

3. 适用场景

适用

  • 消费者处理速度偶尔低于生产者(短期峰值负载)。
  • 允许一定的延迟,但数据不能丢失(如日志收集、消息队列)。

不适用

  • 长期高负载场景,缓冲区可能无限增长,导致OOM。
  • 低延迟要求的实时系统(如高频交易)。

4. 潜在问题

  • 内存泄漏:如果缓冲区无限增长,可能导致OOM。
  • 延迟增加:数据在缓冲区中积压,导致处理延迟变高。

在这里插入图片描述

5.1.2 丢弃(Drop)

1. 基本概念

丢弃(Drop)策略的核心是当消费者无法及时处理数据时,直接丢弃部分数据,以避免系统崩溃。丢弃策略可以细分为:

  • 丢弃最新数据(Drop Latest):丢弃新到达的数据,保留旧数据。
  • 丢弃最旧数据(Drop Oldest):丢弃最早未处理的数据,保留新数据。

2. 丢弃的实现方式

示例(Project Reactor)

Flux.range(1, 1000).onBackpressureDrop(item -> System.out.println("Dropped: " + item)).subscribe(System.out::println);
  • 当消费者来不及处理时,新数据会被丢弃,并触发回调。

3. 适用场景

适用

  • 数据可丢失(如实时传感器数据、股票行情)。
  • 高吞吐量但允许部分数据缺失(如日志采样)。

不适用

  • 数据必须完整(如金融交易、数据库同步)。

4. 潜在问题

  • 数据丢失:可能影响业务逻辑的完整性。
  • 不确定性:丢弃策略可能导致某些关键数据缺失。

在这里插入图片描述

5.1.3 动态调整(Dynamic Pull)

1. 基本概念

动态调整(Dynamic Pull)是一种基于请求的背压策略,消费者主动向生产者请求数据量(Pull-Based),而不是被动接收(Push-Based)。这种方式能更精准地控制流量。

2. 动态调整的实现方式

示例(Reactive Streams 标准)

Publisher<Integer> publisher = subscriber -> {subscriber.onSubscribe(new Subscription() {int count = 0;@Overridepublic void request(long n) {for (int i = 0; i < n; i++) {if (count < 1000) {subscriber.onNext(count++);} else {subscriber.onComplete();}}}@Overridepublic void cancel() {}});
};publisher.subscribe(new Subscriber<>() {@Overridepublic void onSubscribe(Subscription s) {s.request(10); // 初始请求10个数据}@Overridepublic void onNext(Integer item) {System.out.println(item);// 动态调整请求量if (item % 50 == 0) {((Subscription) s).request(20); // 增加请求量}}@Overridepublic void onError(Throwable t) {}@Overridepublic void onComplete() {}
});

3. 适用场景

适用

  • 需要精确控制数据流的场景(如文件下载、数据库查询分页)。
  • 消费者处理能力动态变化(如自适应批处理)。

不适用

  • 超低延迟场景(Pull模式可能引入额外开销)。

4. 潜在问题

  • 实现复杂度高:需要手动管理请求量。
  • 可能引入延迟:Pull模式相比Push模式可能稍慢。

在这里插入图片描述

5.2 背压策略对比

策略数据完整性内存占用适用场景
缓冲(Buffer)✅ 完整⚠️ 可能OOM短期峰值负载
丢弃(Drop)❌ 可能丢失✅ 低允许数据丢失
动态调整(Pull)✅ 完整✅ 可控精确流量控制

5.3 总结

背压(Backpressure)是响应式编程中至关重要的流量控制机制,不同的策略适用于不同的业务场景:

  • 缓冲(Buffer):适用于短期峰值,但需警惕OOM。
  • 丢弃(Drop):适用于可容忍数据丢失的高吞吐场景。
  • 动态调整(Pull):适用于需要精确控制的场景,如分页查询。

在实际开发中,应根据业务需求、数据重要性、系统资源选择合适的背压策略,以确保系统的稳定性高性能


背压(Backpressure)的原理

1. 基本概念

背压(Backpressure)是响应式编程(Reactive Programming)中的一种流量控制机制,用于解决生产者(Publisher)消费者(Subscriber)之间的速率不匹配问题

  • 问题背景

    • 在异步数据流中,生产者可能以极快的速度发射数据(如每秒百万级事件)。
    • 如果消费者处理速度较慢(如数据库写入、网络I/O受限),未处理的数据会堆积,最终导致:
      • 内存溢出(OOM)(如果无限缓冲)
      • 系统崩溃(如果无限制接收)
      • 高延迟(数据积压)
  • 核心目标

    • 让生产者适应消费者的处理能力,避免数据积压。
    • 类似于TCP滑动窗口水管流量控制,确保系统稳定运行。

在这里插入图片描述

2. 背压的核心原理

背压的核心在于消费者主动控制数据流速,而非生产者无节制地推送数据。其实现方式可分为两种模式:

(1) Push 模式(传统方式,无背压)
  • 生产者主导:数据由生产者主动推送(如 Observable 不断发射数据)。
  • 问题:如果消费者处理不过来,数据会堆积,最终崩溃。
  • 示例
    // RxJava(无背压,可能OOM)
    Observable.range(1, 1_000_000).subscribe(item -> slowProcess(item)); // 消费者处理慢
    
(2) Pull 模式(背压实现方式)
  • 消费者主导:消费者按需请求数据(如 Subscriber.request(n))。
  • 关键机制
    • 消费者通过 Subscription 向生产者声明需求数量(Demand)。
    • 生产者仅发送消费者请求的数据量。
  • 示例
    // Reactive Streams(支持背压)
    publisher.subscribe(new Subscriber<>() {@Overridepublic void onSubscribe(Subscription s) {s.request(10); // 首次请求10个数据}@Overridepublic void onNext(Integer item) {slowProcess(item);if (needMore()) {s.request(5); // 处理完后再请求5个}}
    });
    

在这里插入图片描述

3. 背压的底层实现

(1) 响应式流规范(Reactive Streams)

背压的标准化实现基于 Reactive Streams(Java 9+ 内置),其核心接口:

  • Publisher<T>:数据生产者(如 FluxFlowable)。
  • Subscriber<T>:数据消费者。
  • Subscription:协调生产者和消费者的契约(关键背压控制点)。

工作流程

  1. 消费者订阅生产者(Publisher.subscribe(Subscriber))。
  2. 生产者返回 Subscription 对象。
  3. 消费者通过 subscription.request(n) 请求数据。
  4. 生产者按需发送数据(不超过 n 个)。
(2) 背压信号传递
  • 消费者 → 生产者:通过 request(n) 传递需求。
  • 生产者 → 消费者:通过 onNext() 发送数据,或 onComplete()/onError() 终止流。

4. 背压策略的数学建模

背压的本质是生产者与消费者之间的速率协调,可以用队列模型控制理论分析:

(1) 漏桶算法(Leaky Bucket)
  • 缓冲区:像一个有漏洞的水桶,数据以固定速率流出(消费者处理)。
  • 溢出策略:当桶满时,新数据被丢弃/拒绝。
  • 公式
    缓冲区大小 = 生产者速率 - 消费者速率
    如果缓冲区 > 容量 → 触发背压策略(丢弃/阻塞)
    

在这里插入图片描述

(2) 令牌桶算法(Token Bucket)
  • 令牌:消费者定期生成令牌,生产者需获取令牌才能发送数据。
  • 动态调整:令牌生成速率可随系统负载变化。

5. 背压在主流框架中的实现

框架背压支持关键类/接口
RxJavaFlowable(支持) / Observable(不支持)BackpressureStrategy
Reactor默认支持(基于 Reactive Streams)Flux, Mono, BaseSubscriber
Akka Streams自动背压(基于 Actor 模型)Source, Sink, Flow
Kafka消费者主动拉取(Pull-Based)Consumer.poll()

6. 背压的适用场景与挑战

✅ 适用场景
  • 高吞吐数据流(如日志收集、传感器数据)。
  • 资源受限系统(如嵌入式设备、移动端)。
  • 实时计算(如流处理引擎:Flink、Spark Streaming)。
⚠️ 挑战
  • 实现复杂度:需手动管理 request(n)(如分页查询)。
  • 延迟权衡:Pull 模式可能比 Push 模式延迟更高。
  • 策略选择:错误的背压策略可能导致数据丢失或OOM。

在这里插入图片描述

7. 总结

背压的本质是通过消费者驱动的拉取模式(Pull-Based),让数据流的速度适应最慢的环节。其核心原理包括:

  1. 需求驱动request(n))。
  2. 动态协调(缓冲区、丢弃、速率限制)。
  3. 标准化协议(Reactive Streams)。

正确使用背压可以显著提升系统的稳定性可伸缩性,但需根据业务场景选择合适的策略(缓冲/丢弃/动态拉取)。

相关文章:

React编程高级主题:背压(Backpressure)处理

文章目录 **5.1 背压&#xff08;Backpressure&#xff09;概述****5.1.1 缓冲&#xff08;Buffer&#xff09;****1. 基本概念****2. 缓冲的实现方式****3. 适用场景****4. 潜在问题** **5.1.2 丢弃&#xff08;Drop&#xff09;****1. 基本概念****2. 丢弃的实现方式****3. 适…...

Spring IoCDI

IoC容器 前⾯我们提到IoC控制反转&#xff0c; 就是将对象的控制权交给Spring的IOC容器 &#xff0c;由IOC容器创建及管理对 象。 也就是bean的存储. 在类上⾯添加 RestController 和 Controller 注解, 就是把这个对象交给Spring管理 , Spring 框架启动时就会加载该类. 把对象…...

COBOL语言的数据库交互

COBOL语言的数据库交互 引言 随着信息技术的不断发展&#xff0c;数据库管理系统&#xff08;DBMS&#xff09;已经成为现代应用程序中不可或缺的组成部分。在众多编程语言中&#xff0c;COBOL&#xff08;Common Business-Oriented Language&#xff09;以其在商业应用中的稳…...

【C++11(中)】—— 我与C++的不解之缘(三十一)

一、可变参数模版 基本语法&#xff1a; C11支持可变参数模版&#xff0c;简单来说就是支持可变数量参数的函数模版或者类模版&#xff1b; 可变数目的参数被称为参数包&#xff0c;存在两种参数包&#xff1a;模版参数包(表示0个或者多个模版参数)&#xff0c;函数参数包(表示…...

JavaScript学习19-事件类型之鼠标事件

1. 2. 3....

文件或目录损坏且无法读取:数据恢复的实战指南

在数字化时代&#xff0c;数据的重要性不言而喻。然而&#xff0c;在日常使用电脑、移动硬盘、U盘等存储设备时&#xff0c;我们难免会遇到“文件或目录损坏且无法读取”的提示。这一提示如同晴天霹雳&#xff0c;让无数用户心急如焚&#xff0c;尤其是当这些文件中存储着重要的…...

python爬虫:小程序逆向实战教程

根据我之前发表的文章&#xff0c;我们进行延伸实战https://blog.csdn.net/weixin_64809364/article/details/146981598?spm1001.2014.3001.5501 1. 想要爬取什么小程序&#xff0c;我们进行搜索 2. 找到我们vx小程序的文件地址&#xff0c;我们就可以进行破解 破解步骤强看…...

第二十节课:python实例五:身体质量指数BMI计算

python实例五&#xff1a;身体质量指数BMI计算 一、问题分析 BMI计算公式&#xff1a; BMI 体重(kg) / 身高(m)^2国际与国内标准对比 分类国际标准国内标准偏瘦<18.5<18.5正常18.5-2518.5-24偏胖25-3024-28肥胖≥30≥28 二、实现要点 输入处理 # 同时接收身高体重…...

八、重学C++—动态多态(运行期)

上一章节&#xff1a; 七、重学C—静态多态&#xff08;编译期&#xff09;-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146999362?spm1001.2014.3001.5502 本章节代码&#xff1a; cpp/dynamicPolymorphic.cpp CuiQingCheng/cppstudy - 码云 - 开源中…...

思维链 Chain-of-Thought(COT)

思维链 Chain-of-Thought&#xff08;COT&#xff09;&#xff1a;思维链的启蒙 3. 思维链 Chain-of-Thought&#xff08;COT&#xff09;存在问题&#xff1f;2. 思维链 Chain-of-Thought&#xff08;COT&#xff09;是思路是什么&#xff1f;1. 什么是 思维链 Chain-of-Thoug…...

React框架的Fiber架构

以下是关于 Fiber 架构 的系统梳理: 一、Fiber 架构的出现背景 React 15 及之前的问题 同步递归渲染:虚拟DOM的diff过程不可中断,导致主线程长时间阻塞。掉帧问题:复杂组件树渲染时,用户交互无法及时响应。无法实现增量渲染:无法拆分任务优先级,无法利用浏览器空闲时间。…...

PCI与PCIe接口的通信架构是主从模式吗?

PCI&#xff08;Peripheral Component Interconnect&#xff09;总线在通信架构上本质是主从模式&#xff0c;但其具体实现和角色分配在不同版本&#xff08;如传统PCI与PCI Express&#xff09;中存在差异。以下是详细分析&#xff1a; 传统PCI总线的主从模式 (1) 基本架构 主…...

【2011】【论文笔记】THz保护文化遗产——

前言 类型 太赫兹 + 文化保护 太赫兹 + 文化保护 太赫兹+文化保护 期刊 I E E E T R A N S A C T I O N S O N T E R A H E R...

状态机思想编程练习

状态机实现LED流水灯 本次实验&#xff0c;我们将利用状态机的思想来进行Verilog编程实现一个LED流水灯&#xff0c;并通过Modelsim来进行模拟仿真&#xff0c;再到DE2-115开发板上进行验证。 ​ 首先进行主要代码的编写。 module led (input sys_clk,input sys_…...

三部门新政力推智能家居 居然智家数智化转型迎利好东风

2025年3月&#xff0c;工业和信息化部、教育部、市场监管总局联合印发《轻工业数字化转型实施方案》&#xff0c;明确提出重点培育智能家居、智能穿戴、智能骑行、智慧养老等消费端场景&#xff0c;深化人工智能技术在家电、家具等领域的应用&#xff0c;推动产业链供应链智能化…...

CCF GESP C++编程 七级认证真题 2025年3月

C 七级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 B A B C B B B A D D A C B B D 一、单选题 第 1 题 下列哪个选项是C中的关键字&#xff1f; A. function B. class C. method D. object 第 2 题 下面代码输出的是&#xff08;&#xff09; int main()…...

【MySQL】navicat16 result字段识别不了

在mysql里面使用result字段 打印出来为空 之后换了个字段命名 使用outcome 成功能打印出来了。。 不知道是不是版本的问题...

【教学类-102-02】自制剪纸图案(留白边、沿线剪)02——Python+PS自动化添加虚线边框

背景需求: 01版本实现了对透明背景png图案边界线的扩展,黑线实线描边 【教学类-102-01】自制剪纸图案(留白边、沿线剪)01-CSDN博客文章浏览阅读974次,点赞15次,收藏7次。【教学类-102-01】自制剪纸图案(留白边、沿线剪)01https://blog.csdn.net/reasonsummer/article…...

CExercise_05_1函数_1.1素数(要对键盘录入的数据做参数校验)

题目&#xff1a; 编写函数实现以下功能&#xff1a; 键盘录入一个正整数&#xff0c;请判断它是否是一个素数&#xff0c;然后控制台输出对应的结果。要对键盘录入的数据做参数校验&#xff0c;素数是一个大于1的自然数&#xff0c;它仅能被1和自身整除。 关键点 分析&#xf…...

运算放大器(五)电压比较器

比较器在最常用的简单集成电路中排名第二&#xff0c;仅次于排名第一的运算放大器。 电压比较器是一种用来比较输入信号电压与参考电压大小&#xff0c;并将比较结果以高电平或低电平形式输出的一种信号处理电路&#xff0c;广泛应用于各种非正弦波的产生和变换电路中&#xf…...

蓝桥杯_PCF8591

目录 一 前言 二 引言 三 PCF8591介绍 &#xff08;1&#xff09;I2C通信 &#xff08;2&#xff09;原理图中的8591 四 代码层面 &#xff08;1&#xff09;根据题目所给的示范代码&#xff0c;实现ADC 1 为什么需要返回值&#xff0c;同时返回值是unsigned char&#x…...

Windows修改hosts文件让向日癸软件联网

Windows修改hosts文件让向日癸软件联网 前言一、查看向日葵软件使用的网址及IP1.清除dns记录2.打开向日葵软件并将dns记录导出txt 二、修改Windows服务器的hosts文件1.winx选择Windows PowerShell(管理员)2.在Windows PowerShell中输入如下内容&#xff1a;3.在hosts文件最后添…...

[MySQL初阶]MySQL数据类型

MySQL数据类型 1. 数据类型分类2. 数值类型2.1 tinyint类型2.2 bit类型2.3 float类型2.4 decimal类型3. 字符串类型3.1 char3.2 varchar3.3 日期和时间类型3.4 enum和set1. 数据类型分类 数据库中的类型决定了在存储位置中,占据的空间大小以及如何识别的问题。 2. 数值类型 2…...

JS用ES6和ES5分别实现:8字节长整数和字节数组的互转

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

【学Rust写CAD】29 Alpha256结构体(alpha256.rs)

源码 #[derive(Clone, Copy)] pub struct Alpha256(u32);impl Alpha256{#[inline]pub fn from(alpha:u32)->Alpha256{Alpha256(alpha1)}// Calculates 256 - (value * alpha256) / 255 in range [0,256],// for [0,255] value and [0,256] alpha256.#[inline]fn alpha_mul_…...

Titanic - Machine Learning from Disaster

数据集 通过网盘分享的文件&#xff1a; 链接: https://pan.baidu.com/s/17TLeF8PW2GSWTbAIJC69-A?pwd4dak 提取码: 4dak 准备工作 # 导入必要的库 import numpy as np # 用于数值计算&#xff08;如矩阵运算、数学函数等&#xff09; import pandas as pd # 用于数据…...

GoFrame框架中Prometheus Metric组件监控的优势与实践

文章摘要 GoFrame 是一款轻量、高效且模块化的 Go 语言全能型框架&#xff0c;在 Go 生态中以其企业级应用能力和简洁设计受到开发者青睐。随着微服务架构的普及&#xff0c;性能监控成为开发中不可或缺的一环&#xff0c;而 Prometheus 凭借其强大的时间序列数据处理能力和灵…...

SQL语言的物联网

以SQL语言的物联网 引言 物联网&#xff08;IoT&#xff0c;Internet of Things&#xff09;作为一个新兴的技术领域&#xff0c;正迅速改变着我们的生活方式和工作模式。它通过将各种物体连接到互联网&#xff0c;实现了设备之间的智能通信与数据交换。随着物联网的普及&…...

戴尔笔记本 ubuntu 22.04 开机后进入initramfs界面

问题 在 Ubuntu 22.04 启动时进入 initramfs 界面&#xff0c;并提示 Gave up waiting for root device. Common problems: - Boot args (cat /proc/cmdline)- Check rootdelay (did the system wait long enough?) - Missing modules (cat /proc/modules; ls /dev) ALERT! …...

JavaScript BOM、事件循环

目录 BOM&#xff08;浏览器对象模型&#xff09; 一、window 对象 1. 窗口控制 2. 定时器 二、location 对象 三、navigator 对象 四、history 对象 五、screen 对象 六、本地存储 1. localStorage 2. sessionStorage 七、BOM 应用场景 八、总结 JavaScript 执行…...

归并排序算啊模板and三道困难级别的归并力扣算法题--LCR170,493,315

目录 归并排序算法模板&#xff1a; 1.1题目链接&#xff1a;LCR.170.交易逆序对的总数 1.2题目描述&#xff1a; 1.3解法(利用归并排序的过程--分治)&#xff1a; 2.1题目链接&#xff1a;315.计算右侧小于当前元素的个数 2.2题目描述&#xff1a; 2.3解法&#xff1a; …...

鸿蒙 harmonyOS:项目实战 :倒计时器

代码&#xff1a; import { promptAction } from kit.ArkUIEntry Component struct Index {State count: number 10 // 初始倒计时秒数State timerId: number -1 // 定时器ID// 开始倒计时startCountdown() {if (this.timerId -1) {this.timerId setInterval(() > {if …...

31--当认证协议开始“选秀“:RADIUS、LDAP、AD与本地认证的C位之争

当认证协议开始"选秀"&#xff1a;RADIUS、LDAP、AD与本地认证的C位之争 引言&#xff1a;认证界的"四大天王" 如果把企业网络比作夜店&#xff0c;那么身份认证就是门口的黑衣保安。不同风格的保安队长各有绝活&#xff1a; RADIUS像特种兵出身的安检专家…...

AI 数理逻辑基础之统计学基本原理(上)

目录 文章目录 目录统计学统计学基本概念描述性统计数据可视化图表工具 汇总统计统计数据的分布情况&#xff1a;中位数、众数、平均值统计数据的离散程度&#xff1a;极差、方差、标准差、离散系数 相关分析Pearson 线性关系相关系数Spearman 单调关系相关系数 回归分析回归模…...

C++容器数据类型定义、测试用例

C11 标准库提供了多种容器类型&#xff0c;每种容器定义了多个成员类型&#xff08;如 value_type、iterator 等&#xff09;&#xff0c;用于与容器交互。以下详细说明各容器的数据类型定义、测试用例及注意事项。 一、顺序容器 1. std::vector<T> 类型定义&#xff1…...

bun 版本管理工具 bum 安装与使用

在使用 node 的过程中&#xff0c;我们可能会因为版本更新或者不同项目的要求而频繁切换 node 版本&#xff0c;或者是希望使用更简单的方式安装不同版本的 node&#xff0c;这个时候我们一般会用到 nvm 或者类似的工具。 在我尝试使用 bun 的时候&#xff0c;安装前第一个想到…...

AI——使用numpy

文章目录 一、numpy的介绍1、ndarray介绍2、ndarray使用1、ndarray的属性2、ndarray生成数组的方法 3、修改数组的形状4、修改数组的类型5、数组去重 二、数组的运算1、逻辑运算2、通用判断函数3、三元运算符4、统计运算 三、数组间运算四、数学&#xff1a;矩阵 一、numpy的介…...

在线追思:一个虚拟扫墓平台,让思念不受时空限制

在线追思&#xff1a;一个虚拟扫墓平台&#xff0c;让思念不受时空限制 &#x1f4e2; 重要分享 今天想与大家分享一个特别的网站——在线追思平台。这是一个让我们能随时随地表达对逝者思念之情的虚拟扫墓平台。 &#x1f31f; 为什么需要在线追思&#xff1f; 在现代生活的…...

Visual Basic语言的网络协议栈

Visual Basic语言的网络协议栈 引言 在当今信息技术高速发展的时代&#xff0c;网络通信已经成为各类应用程序中不可或缺的部分。无论是网页浏览、文件传输&#xff0c;还是即时通讯&#xff0c;网络协议的有效实现都是保证数据顺利传输和信息安全的重要基础。在这种背景下&a…...

python速通小笔记-------4.Pandas库

1.pandas介绍 1.一维数组的创建 1.字典创建法-----------pd.Series(字典&#xff09; 使用pd.Series(),参数为已经创建好了的字典 2.数组创建法-----------pd.Series(列表1&#xff0c;index列表2&#xff09; 2.一维对象的属性 sr.values----------查看所有的vsr.index----…...

P7453 [THUSC 2017] 大魔法师 Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c; b ( b 1 , b 2 , ⋯ , b n ) b(b_1,b_2,\cdots,b_n) b(b1​,b2​,⋯,bn​) 和 c ( c 1 , c 2 , ⋯ , c n ) c(c_1,c_2,\cdots,c_n) c(c1​,c2​,⋯,cn​)&…...

小程序API —— 58 自定义组件 - 创建 - 注册 - 使用组件

目录 1. 基本介绍2. 全局组件3. 页面组件 1. 基本介绍 小程序目前已经支持组件化开发&#xff0c;可以将页面中的功能模块抽取成自定义组件&#xff0c;以便在不同的页面中重复使用&#xff1b;也可以将复杂的页面拆分成多个低耦合的模块&#xff0c;有助于代码维护&#xff1…...

#Liunx内存管理# 在32bit Linux内核中,用户空间和内核空间的比例通常是3:1,可以修改成2:2吗?

在32位Linux内核中&#xff0c;用户空间和内核空间的3:1默认比例可以修改为2:2&#xff0c;但需要权衡实际需求和潜在影响。以下是具体分析&#xff1a; 一、修改可行性 1.技术实现 通过内核启动参数调整虚拟地址空间划分&#xff0c;例如在GRUB配置中添加mem2G参数&#xff0c…...

经济统计常见的同比与环比是啥意思?同比和环比有什么区别?

在经济统计领域&#xff0c;其实大家都会经常性看到同比还有环比&#xff0c;可人们对此就会觉得有些疑惑。到底是什么意思&#xff1f;这两者之间又有什么样的区别呢&#xff1f;下面就为大家来详细的介绍一下。 同比与环比是用于衡量数据变化趋势的关键指标&#xff0c;可以给…...

前端知识点---本地存储(javascript)

localStorage 是浏览器提供的一个 本地存储 API&#xff0c;可以在用户的浏览器中存储数据&#xff0c;数据不会随页面刷新而丢失。 1. 基本用法 (1) 存储数据&#xff08;setItem&#xff09; localStorage.setItem("username", "zhangsan");存储 “use…...

压测工具开发实战篇(二)——构建侧边栏以及设置图标字体

你好&#xff0c;我是安然无虞。 文章目录 构建侧边栏QtAwesome使用调整侧边栏宽度了解: sizePolicy属性伪状态 在阅读本文之前, 有需要的老铁可以先回顾一下上篇文章: 压测工具开发(一)——使用Qt Designer构建简单界面 构建侧边栏 我们要实现类似于下面这样的侧边栏功能: …...

【Java Stream详解】

文章目录 前言一、Stream概述1.1 什么是 Stream&#xff1f;1.2 Stream 和集合的区别 二、Stream的创建方式2.1 基于集合创建2.2 基于数组创建2.3 使用 Stream.generate()2.4 使用 Stream.iterate() 三、Stream常见操作3.1 中间操作&#xff08;Intermediate&#xff09;① fil…...

16进制在蓝牙传输中的应用

在蓝牙传输中&#xff0c;16进制&#xff08;Hexadecimal&#xff09;是一种常用的数据表示方法。它主要用于描述数据包的内容、地址、命令、参数等信息。以下是16进制在蓝牙传输中的具体应用场景和作用&#xff1a; 1. 数据包的表示 蓝牙通信中&#xff0c;所有数据最终都以二…...

TypeConverter

文章目录 基本描述主要功能接口源码主要实现最佳实践与其他组件的关系常见问题 基本描述 TypeConverter接口是Spring框架中用于在SpEL&#xff08;Spring表达式语言&#xff09;中进行类型转换的核心接口&#xff0c;它允许将不同类型的对象相互转换&#xff0c;例如将字符串转…...

优化 Web 性能:压缩 CSS 文件(Unminified CSS)

在 Web 开发中&#xff0c;CSS 文件的大小直接影响页面加载速度和用户体验。Google 的 Lighthouse 工具在性能审计中特别关注“未压缩的 CSS 文件”&#xff08;Unminified CSS&#xff09;&#xff0c;指出未经过压缩的样式表会增加不必要的字节&#xff0c;拖慢页面渲染。本文…...