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

dpm_sysfs_add

这段代码是 Linux 内核中**设备电源管理(PM)子系统**与 **sysfs 文件系统**交互的核心实现,主要功能是为设备创建电源管理相关的 sysfs 属性文件。以下从五个关键维度进行深度解析:

---

### 一、功能架构全景
```mermaid
graph TD
    A[dpm_sysfs_add] --> B[创建基础PM属性组]
    B --> C{运行时PM支持?}
    C -->|是| D[合并运行时PM属性组]
    C -->|否| E{支持唤醒?}
    D --> E
    E -->|是| F[合并唤醒属性组]
    E -->|否| G{支持延迟容忍?}
    F --> G
    G -->|是| H[合并QoS延迟属性组]
    G -->|否| I[完成]
```

---

### 二、核心机制解析

#### 1. **属性组分层管理**
| 属性组类型                  | 作用域               | 典型属性文件                | 触发条件                     |
|----------------------------|----------------------|---------------------------|----------------------------|
| `pm_attr_group`            | 所有设备             | `async`/`control`         | 强制添加                    |
| `pm_runtime_attr_group`    | 支持运行时PM的设备    | `runtime_enabled`/`status`| `pm_runtime_callbacks_present()`|
| `pm_wakeup_attr_group`     | 可唤醒设备           | `wakeup`/`wakeup_count`   | `device_can_wakeup()`       |
| `pm_qos_latency_tolerance` | 支持延迟控制的设备    | `latency_tolerance`       | `dev->power.set_latency_tolerance`|

#### 2. **sysfs操作关键区别**
| 操作类型             | 函数                  | 特点                                                                 |
|----------------------|-----------------------|----------------------------------------------------------------------|
| **创建新组**         | `sysfs_create_group`  | 严格创建新目录和文件,若已存在则报错                                 |
| **合并到现有组**     | `sysfs_merge_group`   | 将新属性追加到已有目录,原子性操作(全部成功或全部回滚)             |

#### 3. **错误处理策略**
采用**阶梯式回滚**:
```c
err_wakeup:
    sysfs_unmerge_group(..., &pm_wakeup_attr_group);
err_runtime:
    sysfs_unmerge_group(..., &pm_runtime_attr_group);
err_out:
    sysfs_remove_group(..., &pm_attr_group);
```

---

### 三、内核对象关联
```mermaid
classDiagram
    class device {
        +struct kobject kobj
        +struct dev_pm_info power
    }
    class attribute_group {
        +struct attribute **attrs
        +is_visible()
    }
    class kernfs_node {
        +umode_t mode
        +const struct kernfs_ops *ops
    }
    device "1" --> "*" attribute_group : 包含
    attribute_group --> kernfs_node : 实例化为
```

---

### 四、关键代码路径

#### 1. **属性文件创建深度调用链**
```plaintext
dpm_sysfs_add()
  → sysfs_create_group()
    → internal_create_group()
      → kernfs_create_dir()      # 创建属性组目录
      → create_files()
        → sysfs_add_file_mode_ns()
          → __kernfs_create_file() # 最终创建文件节点

  → sysfs_merge_group()
    → kernfs_find_and_get()      # 查找已存在目录
    → sysfs_add_file()           # 追加新属性
```

#### 2. **权限控制实现**
```c
// 在 create_files() 中的权限处理
mode = grp->is_visible(kobj, *attr, i); // 回调决定最终mode
WARN(mode & ~(SYSFS_PREALLOC | 0664), ...); // 权限位检查
mode &= SYSFS_PREALLOC | 0664; // 强制有效权限
```

---

### 五、设计亮点与约束

#### 1. **动态属性可见性**
通过 `is_visible` 回调实现条件属性:
```c
// 示例:仅当设备支持休眠时才显示相关属性
static umode_t dev_pm_is_visible(struct kobject *kobj, struct attribute *attr, int n)
{
    if (!dev->power.sleep_ops && (attr == &dev_attr_hibernation.attr))
        return 0;
    return attr->mode;
}
```

#### 2. **原子性保证**
- `sysfs_merge_group` 在添加多个属性时,要么全部成功,要么全部回滚
- 通过错误处理中的 `while (--i >= 0)` 循环实现逆向删除

#### 3. **性能优化**
- **懒加载**:只有设备具备相应功能时才添加对应属性组(如运行时PM)
- **预分配标记**:`SYSFS_PREALLOC` 优化频繁访问的属性文件

#### 4. **安全约束
- 强制限制权限不超过 `0664`(防止危险权限设置)
- 锁依赖检查(`CONFIG_DEBUG_LOCK_ALLOC`)避免死锁

---

### 六、典型应用场景

#### 1. **PCI设备电源管理**
```bash
# 查看所有PCI设备的运行时PM状态
ls /sys/bus/pci/devices/*/power/control

# 启用自动挂起
echo auto > /sys/bus/pci/devices/0000:00:1f.2/power/control
```

#### 2. **USB设备唤醒功能**
```bash
# 检查唤醒能力
cat /sys/bus/usb/devices/1-1/power/wakeup

# 启用唤醒
echo enabled > /sys/bus/usb/devices/1-1/power/wakeup
```

#### 3. **延迟敏感型设备配置**
```bash
# 设置最大延迟容忍
echo 100 > /sys/devices/platform/i8042/serio0/power/latency_tolerance
```

---

### 七、扩展思考

#### 1. **为什么需要分组管理?**
- **模块化**:不同驱动可以按需添加PM功能
- **安全性**:敏感操作(如强制休眠)需要明确权限
- **性能**:避免为不支持的功能创建无用文件

#### 2. **合并组 vs 创建组的抉择**
| 场景               | 选择                | 原因                                                                 |
|--------------------|---------------------|----------------------------------------------------------------------|
| 基础PM功能         | `create_group`      | 必须存在且唯一                                                       |
| 可选功能扩展       | `merge_group`       | 可能被多个子系统扩展(如同时支持唤醒和运行时PM)                     |
| 驱动私有属性       | 单独`create_file`   | 不需要分组管理                                                       |

这段代码展现了 Linux 如何通过精巧的 sysfs 抽象,将复杂的电源管理功能以文件接口的形式暴露给用户空间,同时保持内核架构的灵活性和安全性。
 

这段代码实现了 Linux 内核中一个关键机制:**向已存在的 sysfs 属性组动态合并新属性**。以下从五个维度深入解析其设计精髓:

---

### 一、核心机制图解
```mermaid
sequenceDiagram
    participant User
    participant sysfs_merge_group
    participant kernfs
    User->>sysfs_merge_group: 调用(指定kobj和grp)
    sysfs_merge_group->>kernfs: kernfs_find_and_get(查找父目录)
    alt 父目录不存在
        kernfs-->>sysfs_merge_group: 返回-ENOENT
    else 父目录存在
        loop 遍历属性列表
            sysfs_merge_group->>kernfs: sysfs_add_file(逐个添加属性)
            alt 某个属性添加失败
                kernfs-->>sysfs_merge_group: 返回错误码
                sysfs_merge_group->>kernfs: 逆向删除已添加属性(kernfs_remove_by_name)
            end
        end
    end
    sysfs_merge_group->>kernfs: kernfs_put(释放父节点引用)
```

---

### 二、关键设计思想

#### 1. **原子性操作保证**
- **全有或全无**:要么全部属性添加成功,要么完全回滚(通过 `while (--i >= 0)` 逆向删除)
- **错误处理**:在第一个错误发生时立即终止,避免部分成功状态

#### 2. **引用计数管理**
```c
parent = kernfs_find_and_get(...);  // 增加引用
...
kernfs_put(parent);                 // 减少引用
```
- 防止目录在操作过程中被意外删除

#### 3. **分层权限控制**
- 实际文件创建由底层 `sysfs_add_file` 实现
- 当前函数专注处理属性组的逻辑关系

---

### 三、与相关函数的对比

| 函数                | 特点                                                                 | 典型应用场景                     |
|---------------------|----------------------------------------------------------------------|----------------------------------|
| `sysfs_create_group` | 创建全新的属性组目录                                                 | 设备首次注册时的基础属性         |
| `sysfs_merge_group`  | 向已有目录追加属性                                                   | 动态功能扩展(如PM子系统的扩展) |
| `sysfs_add_file`     | 添加单个属性文件                                                     | 驱动私有属性的添加               |

---

### 四、实际应用案例
#### 1. **电源管理扩展**
```c
// 当设备支持运行时PM时,动态添加相关属性
if (pm_runtime_callbacks_present(dev))
    sysfs_merge_group(&dev->kobj, &pm_runtime_attr_group);
```

#### 2. **调试接口延迟加载**
```c
// 仅在开启调试模式时添加调试属性
#ifdef CONFIG_DEBUG_FEATURE
    sysfs_merge_group(&dev->kobj, &debug_attr_group);
#endif
```

---

### 五、安全与稳定性设计

#### 1. **错误检测**
```c
if (!parent) return -ENOENT;  // 严格检查目录存在性
```

#### 2. **权限过滤**
- 实际文件创建时会强制限制权限模式(见 `create_files()` 中的 `mode &= ...`)

#### 3. **竞争防护**
- 通过 `kernfs_find_and_get` 获取的节点引用可防止并发删除

#### 4. **内存安全**
```c
for ((i = 0, attr = grp->attrs); *attr && !error; (++i, ++attr))
```
- 自动终止于属性数组末尾(NULL 指针)

---

### 六、性能考量

#### 1. **优化点**
- **批量操作**:单次遍历完成多个属性添加
- **快速失败**:遇到错误立即终止,减少无效操作

#### 2. **潜在瓶颈**
- **线性搜索**:`kernfs_find_and_get` 需要遍历子节点查找目录
- **锁竞争**:内核全局 `kernfs_mutex` 可能成为并发瓶颈

---

### 七、扩展思考

#### 为什么需要合并机制?
1. **模块化设计**:允许不同子系统独立添加属性
   - 例如:ACPI 和 PCI 子系统可能分别向设备添加电源管理属性
2. **动态功能**:设备能力可能运行时变化(如热插拔功能)
3. **减少冗余**:避免为每个功能创建独立目录

#### 典型调用栈示例
```plaintext
device_add()
  → device_pm_add()
    → dpm_sysfs_add()
      → sysfs_merge_group(&dev->kobj, &pm_wakeup_attr_group)
        → kernfs_find_and_get("power")
        → sysfs_add_file("wakeup")
        → sysfs_add_file("wakeup_count")
```

这段代码完美体现了 Linux 内核"渐进式功能添加"的设计哲学,通过精巧的引用管理和原子性操作,实现了 sysfs 属性系统的动态扩展能力。

相关文章:

dpm_sysfs_add

这段代码是 Linux 内核中**设备电源管理(PM)子系统**与 **sysfs 文件系统**交互的核心实现,主要功能是为设备创建电源管理相关的 sysfs 属性文件。以下从五个关键维度进行深度解析: --- ### 一、功能架构全景 mermaid graph TD …...

【AI论文】Phi-4-reasoning技术报告

摘要:我们引入了Phi-4-reasoning,这是一种拥有140亿参数的推理模型,在复杂的推理任务中表现出了强大的性能。 通过监督式微调Phi-4,在精心策划的“可教”提示集上进行训练,这些提示集是根据复杂性和多样性的适当水平选…...

Android ART运行时无缝替换Dalvik虚拟机的过程分析

目录 一,概述 二,dex文件优化 一,概述 Android 4.4发布了一个ART运行时,准备用来替换掉之前一直使用的Dalvik虚拟机,希望籍此解决饱受诟病的性能问题。老罗不打算分析ART的实现原理,只是很有兴趣知道ART是如何无缝替换掉原来的Dalvik虚拟机…...

node.js为什么产生?

从官网得知介绍如下 https://nodejs.org/zh-cn/learn/getting-started/introduction-to-nodejs Node.js是一个开源和跨平台的JavaScript运行时环境。 Node.js在浏览器之外运行V8 JavaScript引擎,这是Google Chrome的核心。这使得Node.js具有很高的性能。 Node.js应…...

智能工厂边缘计算:从数据采集到实时决策

智能工厂边缘计算:从数据采集到实时决策 引言 在智能制造场景中,传统云计算架构面临三大核心挑战:平均200ms的网络延迟无法满足实时控制需求,90%的工业数据未被有效利用,以及每月高达15TB的数据传输成本。边缘计算技术通过将计算能力下沉到数据源头,正在构建"端-边…...

个人健康中枢的多元化AI网络革新与精准健康路径探析

引言 随着数字化转型的深入推进,个人健康中枢作为集成化健康管理系统,正在从传统的单一功能向多元化的AI驱动方向快速发展。在这一背景下,新兴网络硬件技术,特别是DPU(数据处理单元)和全光网络的出现,为个人健康中枢的革新提供了前所未有的机遇。本研究将深入探讨这些技…...

前端面试宝典---性能优化

一、加载优化 1. 第三方模块放在CDN 例如 leaflet通过cdn引入,这样就不会占用打包体积了 2. prefetch 预加载 例如,之后马上有个场景需要一个图片,我们就可以通过link 的 prefetch 对资源进行预先加载 再例如,我们公司是无网络开…...

【Springboot进阶】springboot+mybatis+jsqlparser实现数据权限控制

文章目录 SpringBoot JSqlParser MyBatis 数据权限实现方案一、环境准备1. 添加依赖 二、用户上下文管理1. 用户上下文持有类 三、数据权限拦截器实现1. MyBatis拦截器核心类 四、Spring Security集成1. 用户信息注入 五、配置项示例application.yml 六、使用示例1. 业务查询…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】2.3 窗口函数与高级聚合(ROW_NUMBER()/RANK()/SUM() OVER())

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL窗口函数与高级聚合:从排序到动态分析的全场景应用1. 窗口函数核心概念解析1.1 窗口函数语法结构1.2 核心组成要素2. 排名窗口函数深度解析2.1 ROW_NUMBER():唯一顺序排名示例演示2.2 `RANK…...

python全自动爬取m3u8网页视频(各类网站都通用)

当前人工智能,大语言模型的火热,使得python这门编程语言的使用越来越广泛。最近也开始学习了python,发现它在自动化方面的确有得天独厚的优势。python的简单易用,丰富的开源库,完善的生态,使得它有可能成为…...

C++负载均衡远程调用学习之上报功能与存储线程池

目录 1. Lars-reportV0.1 report模块介绍 2.Lars-reporterV0.1 reporter项目目录构建 3.Lars-ReporterV0.1 数据表和proto协议环境搭建 4.Lars-ReporterV0.1上报请求业务处理 5.Lars-ReporterV0.1上报请求模块的测试 6.Lars-ReporterV0.2开辟存储线程池-网络存储分离 1. L…...

今天python练习题

目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 不要害怕失败,失败可能成为我们前进的动力! 二、练习题 有列表lst [[1,2,3],[4,5,6],[7,8,9]],取出其中的元素1/5/9组成新的列表 # 有列表lst [[1,2,3],[4,5,6],[…...

【leetcode100】最长递增子序列

1、题目描述 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 …...

R绘图|3分钟复现瑞士“苏黎世大学”Nature全球地图——基于R包ggplot2+sf等

一、引言 本文我们复现苏黎世大学团队Franois Keck等在Nature最新文章“The global human impact on biodiversity”中的全球地图。 之前的图纸是在平面坐标系里面进行绘制,本次我们在罗宾逊投影中进行绘制。整体代码逻辑非常简单,就是采样点坐标系的转换…...

百度系列产品学习

1.react-bmapgl封装逻辑 Map 分析react-bmapgl库中Map组件的封装流程,并以mermaid图展示。首先分析Map组件的核心实现,包括生命周期方法和子组件渲染逻辑。然后研究WrapperHOC和Component基类的封装模式,理解事件绑定和属性处理的通用逻辑。…...

高等数学第三章---微分中值定理与导数的应用(3.4~3.5)

3.4 函数的单调性与曲线的凹凸性 一、函数的单调性 1. 函数单调性定义回顾 设函数 f ( x ) f(x) f(x) 的定义域为 D D D&#xff0c;区间 I ⊆ D I \subseteq D I⊆D。 如果对任意 x 1 , x 2 ∈ I x_1, x_2 \in I x1​,x2​∈I&#xff0c;当 x 1 < x 2 x_1 < x…...

idea结合CopilotChat进行样式调整实践

一、前言&#xff1a; 本文主要分享在前端开发中借助AI能力调整样式&#xff0c;提高开发效率 对应视频【idea结合CopilotChat进行样式调整实践-哔哩哔哩】 二、实践&#xff1a; 2-1、现状确认&#xff1a; 表格上方新增了button、swtich、select组件&#xff0c;需要调整…...

668SJBH报刊发行系统

1 前言 随着我国信息产业的迅猛发展&#xff0c;手工管理方式已不适应社务管理的要求&#xff0c;报社的日常管理正面临着信息化的挑战&#xff0c;采用计算机管理以提高服务质量和管理水平势在必行。发行管理是社务管理的一个重要组成部分&#xff0c;是报社和客户联系的纽带…...

格式化字符串漏洞

原理 在c中&#xff0c;printf函数在打印输出变量时通常不是直接输出&#xff0c;而是用一个占位符如%s printf("the number is %d\n",a);//通常用 printf(a);//而不是直接输出 虽然直接输出也没有太大的问题&#xff0c;但如果用格式化输出&#xff0c;没有给后面…...

如何查看电脑IP地址和归属地:全面指南

在数字化时代&#xff0c;了解自己电脑的IP地址和归属地信息变得越来越重要。无论是进行网络故障排查、远程办公设置&#xff0c;还是出于网络安全考虑&#xff0c;掌握这些基本信息都很有必要。本文将详细介绍如何查看电脑的公网IP、内网IP以及归属地信息&#xff0c;并提供常…...

深入解析 MQTT 协议:物联网通信的基石

在当今物联网蓬勃发展的时代&#xff0c;设备之间高效、可靠的通信变得至关重要。MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议&#xff0c;作为一种轻量级的消息传输协议&#xff0c;正逐渐成为物联网通信的基石&#xff0c;广泛应用于各种场景中。 …...

48变现干货:分销裂变方式提高销量

产品运营活动中,我们可以根据对产品属性和特性,进行选择特定的方法,分销便是一种低成本各方获利的行为之一,但并不一定100%适用所有产品。 分销及裂变的概念 “分销”是指通过用户、达人、KOL等非官方渠道,参与产品的推广与销售,并获得相应收益的机制。它是一种以奖励为…...

AI入门:Prompt提示词写法

提示词&#xff08;Prompt&#xff09;是人与AI沟通的桥梁&#xff0c;它不是冰冷的代码指令&#xff0c;而是一场充满智慧与温度的对话。掌握精妙的提示词撰写技巧&#xff0c;能让AI更精准地理解需求&#xff0c;高效输出理想结果。其核心就在于——将AI视作身边真实的朋友、…...

MySQL复合查询全解析:从基础到多表关联与高级技巧

前言&#xff1a; 本文主要讲解了在MySQL中的复合查询&#xff0c;下面是关于本文章所需要数据的建表语句 创建表的语句&#xff1a; DROP database IF EXISTS scott; CREATE database IF NOT EXISTS scott DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;USE scott;D…...

移动 Trae 目录到 E 盘 - 解决 C 盘空间不足问题

移动 Trae 目录到 E 盘 - 解决 C 盘空间不足问题 1️⃣ 准备工作2️⃣ 移动原始文件夹3️⃣ 创建符号链接4️⃣ 清理原始文件夹5️⃣ 验证操作📝 注意事项🔄 常见问题排查1️⃣ 准备工作 关闭 Trae 程序:确保所有 Trae 相关进程已完全退出(包括后台服务)。创建目标文件夹…...

【AI论文】COMPACT:从原子级到复杂级的组合式视觉能力调优

摘要&#xff1a;多模态大语言模型&#xff08;MLLM&#xff09;擅长简单的视觉语言任务&#xff0c;但在面对需要多种能力的复杂任务时却很吃力&#xff0c;例如同时识别物体、计算数量和理解它们的空间关系。 这可能部分是由于视觉指令调整&#xff08;VIT&#xff09;这一ML…...

【leetcode】队列 + 宽搜,树形结构层序遍历的基础与变化

前言 &#x1f31f;&#x1f31f;本期讲解关于力扣的几篇题解的详细介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…...

Spring AI聊天模型API:轻松构建智能聊天交互

Spring AI聊天模型API&#xff1a;轻松构建智能聊天交互 前言 在当今数字化时代&#xff0c;智能聊天功能已成为众多应用程序提升用户体验、增强交互性的关键要素。Spring AI的聊天模型API为开发者提供了一条便捷通道&#xff0c;能够将强大的AI驱动的聊天完成功能无缝集成到…...

力扣-链表-2 两数相加

思路 两个指针同时遍历&#xff0c;维护一个进位值&#xff0c;同时还要维护第一个链表的前序&#xff0c;如果第二个链表比第一个长的时候&#xff0c;利用这个前序指针把第二个链表多余的内容&#xff0c;添加到第一个链表的末尾 代码 class Solution {public ListNode ad…...

leetcode 59. 螺旋矩阵 II

题目描述 代码&#xff1a; class Solution { public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> res(n,vector<int>(n,0));int num 1;int len n;int start 0;while(len > 0){int row start;int column start;if…...

【操作系统】深入理解内存管理:从虚拟内存到OOM Killer

引言 在现代计算机系统中&#xff0c;内存管理是操作系统最核心的功能之一。本文将围绕内存管理的几个关键概念展开讨论&#xff0c;包括虚拟内存机制、内存分配原理、OOM Killer的工作机制以及不同系统架构下的内存限制。 虚拟内存&#xff1a;突破物理限制的关键技术 虚拟…...

《政治最后的日子》章节

政治与中世纪教会的类比性衰落 作者提出现代民族国家正重复中世纪教会的衰落轨迹&#xff1a; 两者均曾作为社会组织核心存在约5个世纪 晚期都成为生产力阻碍&#xff08;中世纪教会税收负担/现代国家官僚低效&#xff09; 末期均出现管理者普遍腐败与公众蔑视&#xff08;…...

Rust Trait 学习

概述 特征&#xff08;trait&#xff09;是rust中的概念&#xff0c;类似于其他语言中的接口&#xff08;interface&#xff09;。特征定义了一个可以被共享的行为&#xff0c;只要实现了特征&#xff0c;你就能使用该行为。 如果不同的类型具有相同的行为&#xff0c;那么我们…...

基于开源链动2+1模式AI智能名片S2B2C商城小程序的爆品力构建研究

摘要&#xff1a;在兴趣电商生态中&#xff0c;爆品力已成为品牌实现指数级增长的核心竞争力。本文以开源链动21模式AI智能名片S2B2C商城小程序为技术载体&#xff0c;结合抖音平台的内容传播特性&#xff0c;提出“需求挖掘-技术赋能-内容转化”三位一体的爆品力构建模型。通过…...

【SimSession 】2:PacedReceiver:支持与 PacedVideoSender 本地联调

单独的基于libuv的发送能力,如何进一步在SimSession内集成使用?打算进行本地模拟俩线程,发送和接收,进行测试: 单独的发送测试 【SimSession】1:将视频发送逻辑与 libuv 事件循环集成是一个典型的并发设计问题 分析后,D:\XTRANS\thunderbolt\ayame\zhb-bifrost\player-…...

5 什么情况下需要微调

这个问题其实很重要&#xff0c;因为现代大模型训练出来已经非常强大&#xff0c;可能真的不需要微调。 我们可以通过 RAG 或提示词工程来实现目标。 需要微调的场景与替代方案分析 微调(Fine-tuning)确实不是所有场景都必需的&#xff0c;特别是考虑到现代大型语言模型(LLM…...

Docker 渡渡鸟镜像同步站 使用教程

Docker 渡渡鸟镜像同步站 使用教程 &#x1f680; 介绍 Docker.aityp.com&#xff08;渡渡鸟镜像同步站&#xff09;是一个专注于为国内开发者提供 Docker 镜像加速和同步服务的平台。它通过同步官方镜像源&#xff08;如 Docker Hub、GCR、GHCR 等&#xff09;&#xff0c;为…...

位图的实现和拓展

一&#xff1a;位图的介绍 ①&#xff1a;需要位图的场景 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中&#xff1f; 要判断一个数是否在某一堆数中&#xff0c;我们可能会想到如下方法&#xff1a; A…...

字符串问题c++

题目描述 小 Z 有一个字符串 s&#xff0c;他对这个字符串会进行如下两个操作&#xff1a; 1 p c 把字符串的第 p 个字符改成 c2 l r 把 s 的第 l 个字符到第 r 个字符按顺序输出。 这里『第 i 个字符』的下标计数从 1 开始&#xff0c;例如&#xff0c;a 是字符串 abc 的第…...

Redis事务

Redis中的事务是指提供一种将多个命令打包到一起&#xff0c;一次性按照顺序执行的机制。Redis在执行事务期间&#xff0c;不会接收处理其他操作命令。 Redis事务有以下局限性 无回滚机制&#xff1a;如果某个命令执行失败&#xff0c;不会影响其他命令的执行&#xff0c;因此…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.3 异常值识别(Z-score法/IQR法/业务规则法)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 PostgreSQL数据分析实战&#xff1a;数据质量分析之异常值识别&#xff08;Z-score法 / IQR法 / 业务规则法&#xff09;3.3 异常值识别3.3.1 Z-score法3.3.2 IQR法3.3.3 业…...

MCP底层协议完整通信过程

2025 年是智能体的元年, 也注定是智能体集中爆发的一年! 两个互联领域的重大挑战: 第一、 Agent 与 Tools (工具)的交互 Agent 需要调用外部工具和 API...

C语言 指针(5)

目录 1.冒泡排序 2.二级指针 3.指针数组 4.指针数组模拟二级数组 1.冒泡排序 1.1 基本概念 冒泡排序&#xff08;Bubble Sort&#xff09; 是一种简单的排序算法&#xff0c;它重复地遍历要排序的数列&#xff0c;一次比较两个元 素&#xff0c;如果它们的顺序错误就把它…...

MYSQL-联合查询

经过上节课&#xff0c;我们学会了如何设计表以及了解到各种范式&#xff0c;这节课就请大家和小L一起来学习设计表之后如何使用 1.为什么要使用联合查询 在数据设计时由于范式的要求&#xff0c;数据被拆分到多个表中&#xff0c;那么要查询⼀个条数据的完整信息&#xff0c…...

一篇撸清 Http,SSE 与 WebSocket

HTTP,SSE 和WebSocket都是网络传输的协议,本篇快速介绍三者的概念和比较。 SSE(Server-Sent Events) 是什么? SSE(Server-Sent Events),服务器发送事件, 是一种基于 HTTP 的轻量级协议,允许服务器主动向客户端(如浏览器)推送实时数据。它设计用于单向通信(服务器到…...

系统架构设计师:设计模式——行为设计模式

一、行为设计模式 行为模式涉及算法和对象间职责的分配。行为模式不仅描述对象或类的模式&#xff0c;还描述它们之间的通信模式。这些模式刻画了在运行时难以跟踪的、复杂的控制流。它们将用户的注意力从控制流转移到对象间的联系方式上来。 行为类模式使用继承机制在类间分…...

OpenCV入门指南:从环境搭建到第一个图像处理程序

引言 你是否想让计算机"看懂"世界&#xff1f;OpenCV&#xff08;Open Source Computer Vision Library&#xff09;正是打开计算机视觉大门的钥匙。本文将带你从零开始搭建开发环境&#xff0c;理解图像处理核心概念&#xff0c;并完成第一个OpenCV程序。无论你是想…...

基于STM32的温湿度光照强度仿真设计(Proteus仿真+程序设计+设计报告+讲解视频)

这里写目录标题 **1.****主要功能****2.仿真设计****3.程序设计****4.设计报告****5.下载链接** 基于STM32的温湿度光照强度仿真设计(Proteus仿真程序设计设计报告讲解视频&#xff09; 仿真图Proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;C语言 设计编号…...

4个纯CSS自定义的简单而优雅的滚动条样式

今天发现 uni-app 项目的滚动条不显示&#xff0c;查了下原来是设置了 ::-webkit-scrollbar {display: none; } 那么怎么用 css 设置滚动条样式呢&#xff1f; 定义滚动条整体样式‌ ::-webkit-scrollbar 定义滚动条滑块样式 ::-webkit-scrollbar-thumb 定义滚动条轨道样式‌…...

修复笔记:SkyReels-V2项目中的 from_config 警告

#工作记录 Windows避坑部署SkyworkAI/SkyReels-V2昆仑万维电影生成模型_skyreels-v2本地部署-CSDN博客 一、项目背景 项目名称&#xff1a;SkyReels-V2 项目简介&#xff1a;由昆仑万维开源的全球首个无限时长电影生成模型&#xff0c;支持文本到视频、图像到视频等多种生成方…...