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

DRM系列六:Drm之KMS

KMS(Kernel Mode Setting)是负责显示输出的核心组件,它处理与plane、crtc、encoder和connector相关的各项任务。简单来说,KMS就是结构体drm_mode_config、drm_mode_object和组件(object)的结合。

KMS=drm_mode_config + drm_mode_object + 组件(object)

一、drm_mode_config、drm_mode_object和组件(object)的关系

object是由drm_mode_object描述,通过type来确定对象类型,由 dev->mode_config.object_idr 申请过来的 idr来获取object的id。

struct drm_mode_object {uint32_t id;  // 由 dev->mode_config.object_idr 申请过来的 idr, 本质是查找object的索引uint32_t type;  // obj 类型, 不同的 type 表示不同的对象.struct drm_object_properties *properties; // 最多支持 24 个 propertiesstruct kref refcount;void (*free_cb)(struct kref *kref);  // 释放回调接口
};

drm_mode_config、drm_mode_object以及object的关系如下图所示:
在这里插入图片描述

二、代码中组件间的联系

2内核驱动中的初始化

/* 初始化 DRM 设备*/
drm_mode_config_init(dev);/* 注册 CRTC*/
dev->mode_config.funcs = &my_crtc_funcs;
drm_crtc_init(dev, &my_crtc, &my_crtc_helper_funcs);/* 注册 Encoder*/
drm_encoder_init(dev, &my_encoder, &my_encoder_funcs, DRM_MODE_ENCODER_TMDS);/* 注册 Connector*/
drm_connector_init(dev, &my_connector, &my_connector_funcs, DRM_MODE_CONNECTOR_HDMIA);/* 注册 Plane*/
drm_plane_init(dev, &my_plane, DRM_PLANE_TYPE_PRIMARY);

2.1drm_mode_config_init

作用主要是初始化 drm_device->mode_config 结构体和设置资源管理机制,确保资源能够自动释放。

static inline int drm_mode_config_init(struct drm_device *dev)
{return drmm_mode_config_init(dev);
}int drmm_mode_config_init(struct drm_device *dev)
{mutex_init(&dev->mode_config.mutex);drm_modeset_lock_init(&dev->mode_config.connection_mutex);mutex_init(&dev->mode_config.idr_mutex);mutex_init(&dev->mode_config.fb_lock);mutex_init(&dev->mode_config.blob_lock);INIT_LIST_HEAD(&dev->mode_config.fb_list);INIT_LIST_HEAD(&dev->mode_config.crtc_list);INIT_LIST_HEAD(&dev->mode_config.connector_list);INIT_LIST_HEAD(&dev->mode_config.encoder_list);INIT_LIST_HEAD(&dev->mode_config.property_list);INIT_LIST_HEAD(&dev->mode_config.property_blob_list);INIT_LIST_HEAD(&dev->mode_config.plane_list);INIT_LIST_HEAD(&dev->mode_config.privobj_list);idr_init(&dev->mode_config.object_idr);idr_init(&dev->mode_config.tile_idr);ida_init(&dev->mode_config.connector_ida);spin_lock_init(&dev->mode_config.connector_list_lock);init_llist_head(&dev->mode_config.connector_free_list);INIT_WORK(&dev->mode_config.connector_free_work, drm_connector_free_work_fn);drm_mode_create_standard_properties(dev);/* Just to be sure */dev->mode_config.num_fb = 0;dev->mode_config.num_connector = 0;dev->mode_config.num_crtc = 0;dev->mode_config.num_encoder = 0;dev->mode_config.num_total_plane = 0;if (IS_ENABLED(CONFIG_LOCKDEP)) {struct drm_modeset_acquire_ctx modeset_ctx;struct ww_acquire_ctx resv_ctx;struct dma_resv resv;int ret;dma_resv_init(&resv);drm_modeset_acquire_init(&modeset_ctx, 0);ret = drm_modeset_lock(&dev->mode_config.connection_mutex,&modeset_ctx);if (ret == -EDEADLK)ret = drm_modeset_backoff(&modeset_ctx);ww_acquire_init(&resv_ctx, &reservation_ww_class);ret = dma_resv_lock(&resv, &resv_ctx);if (ret == -EDEADLK)dma_resv_lock_slow(&resv, &resv_ctx);dma_resv_unlock(&resv);ww_acquire_fini(&resv_ctx);drm_modeset_drop_locks(&modeset_ctx);drm_modeset_acquire_fini(&modeset_ctx);dma_resv_fini(&resv);}return drmm_add_action_or_reset(dev, drm_mode_config_init_release,NULL);
}
2.1.1drm_mode_create_standard_properties

作用是提供一组通用的属性接口,方便用户空间程序和内核驱动之间的交互,属性通常有blob、range、enum、object等,例如属性enum的“SRC_W”,“SRC_H”等。

static int drm_mode_create_standard_properties(struct drm_device *dev)
{struct drm_property *prop;int ret;ret = drm_connector_create_standard_properties(dev);if (ret)return ret;prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE,"type", drm_plane_type_enum_list,ARRAY_SIZE(drm_plane_type_enum_list));if (!prop)return -ENOMEM;dev->mode_config.plane_type_property = prop;prop = drm_property_create_range(dev, DRM_MODE_PROP_ATOMIC,"SRC_X", 0, UINT_MAX);if (!prop)return -ENOMEM;dev->mode_config.prop_src_x = prop;prop = drm_property_create_range(dev, DRM_MODE_PROP_ATOMIC,"SRC_Y", 0, UINT_MAX);if (!prop)return -ENOMEM;dev->mode_config.prop_src_y = prop;prop = drm_property_create_range(dev, DRM_MODE_PROP_ATOMIC,"SRC_W", 0, UINT_MAX);if (!prop)return -ENOMEM;dev->mode_config.prop_src_w = prop;prop = drm_property_create_range(dev, DRM_MODE_PROP_ATOMIC,"SRC_H", 0, UINT_MAX);if (!prop)return -ENOMEM;dev->mode_config.prop_src_h = prop;...}

2.2组件之间的关联

组件之间的关联通过以下方式建立

CRTC 和 Encoder:

drm_mode_connector_attach_encoder(&my_connector, &my_encoder);
drm_encoder_helper_add(&my_encoder, &my_encoder_helper_funcs);

Encoder 和 Connector:

drm_connector_attach_encoder(&my_connector, &my_encoder);

Plane 和 CRTC:

drm_plane_helper_add(&my_plane, &my_plane_helper_funcs);

2.3用户空间配置 KMS 组件

用户空间程序(如 Wayland 或 Xorg)通过 DRM API 配置 KMS 组件。例如:

使用 drmModeSetCrtc 设置 CRTC 的显示模式。

使用 drmModeSetPlane 配置 Plane 的显示内容。

使用 drmModeConnectorSetProperty 设置 Connector 的属性(如分辨率、刷新率)。

2.4 KMS 的数据流

KMS 的数据流如下:

a.用户空间渲染:用户空间程序将渲染好的图像放入 Framebuffer。b.配置显示模式:用户空间程序通过 DRM API 配置 CRTC、Encoder 和 Connector 的显示模式。c.提交 Framebuffer:用户空间程序将 Framebuffer 的内容提交给 Plane。d.显示图像:CRTC 从 Plane 中读取 Framebuffer 的内容,生成显示时序信号。Encoder 将信号转换为物理接口支持的格式。Connector 将信号发送到显示器。

一个简单的KMS配置实例

/* 获取 Connector*/
drmModeConnector *connector = drmModeGetConnector(fd, connector_id);/* 获取 Encoder*/
drmModeEncoder *encoder = drmModeGetEncoder(fd, connector->encoder_id);/* 获取 CRTC*/
drmModeCrtc *crtc = drmModeGetCrtc(fd, encoder->crtc_id);/* 设置显示模式*/
drmModeSetCrtc(fd, crtc->crtc_id, fb_id, 0, 0, &connector->connector_id, 1, &connector->modes[0]);/* 提交 Framebuffer*/
drmModeSetPlane(fd, plane_id, crtc->crtc_id, fb_id, 0, 0, 0, width, height, 0, 0, width << 16, height << 16);

相关文章:

DRM系列六:Drm之KMS

KMS&#xff08;Kernel Mode Setting&#xff09;是负责显示输出的核心组件&#xff0c;它处理与plane、crtc、encoder和connector相关的各项任务。简单来说&#xff0c;KMS就是结构体drm_mode_config、drm_mode_object和组件&#xff08;object&#xff09;的结合。 KMSdrm_m…...

前端 Vue 性能提升策略

一、引言 前端性能优化是确保 Web 应用快速响应和流畅用户体验的关键。对于使用 Vue.js 构建的应用,性能优化不仅涉及通用的前端技术,还包括针对 Vue 特性的特定优化措施。本文将从多个方面探讨如何全面提升前端和 Vue 应用的性能。 二、前端性能优化基础 1. 减少初始加载…...

【C语言】static关键字的三种用法

【C语言】static关键字的三种用法 C语言中的static关键字是一个存储类说明符&#xff0c;它可以用来修饰变量和函数。static关键字的主要作用是控制变量或函数的生命周期和可见性。以下是static关键字的一些主要用法和含义&#xff1a; 局部静态变量&#xff1a; 当static修饰…...

数仓实战项目,大数据数仓实战(离线数仓+实时数仓)

1.课程目标 2.电商行业与电商系统介绍 3.数仓项目整体技术架构介绍 4.数仓项目架构-kylin补充 5.数仓具体技术介绍与项目环境介绍 6.kettle的介绍与安装 7.kettle入门案例 这个连线是点击shift键&#xff0c;然后鼠标左键拖动 ctrls保存一下 csv输入配置 Excel输出配置 配置完 …...

Unity安装教学与相关问题

文章目录 1. 前言2.Unity Hub2.1 下载Unity Hub2.2 安装Unity Hub2.3 注册Unity账号2.4 在Hub上登录账号2.5 在Hub上获取许可证 3. 下载并安装Unity3.1 从Unity Hub下载&#xff08;推荐&#xff09;3.1.1 选择下载版本3.1.2 选择下载组件3.1.3 安装Visual Studio Community 20…...

Linux_线程同步生产者消费者模型

同步的相关概念 同步&#xff1a;在保证数据安全的前提下&#xff0c;让线程能够按照某种特定的顺序访问临界资源&#xff0c;从而有效避免饥饿问题&#xff0c;叫做同步竞态条件&#xff1a;因为时序问题&#xff0c;而导致程序异常&#xff0c;我们称之为竞态条件。 同步的…...

边缘检测算法(candy)

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 Canny 边缘检测的步骤 1. 灰度转换 如果输入的是彩色图像&#xff0c;则需要先转换为 灰度图像&#xff0c;因为边缘检测通常在单通道图像上进行。 2. 高斯滤波&#xff08;Gaussian Blur&#xff09; 由于边缘…...

Hot100之双指针

283移动零 题目 思路解析 那我们就把不为0的数字都放在数组前面&#xff0c;然后数组后面的数字都为0就行了 代码 class Solution {public void moveZeroes(int[] nums) {int left 0;for (int num : nums) {if (num ! 0) {nums[left] num;// left最后会变成数组中不为0的数…...

租房管理系统实现智能化租赁提升用户体验与运营效率

内容概要 在当今快速发展的租赁市场中&#xff0c;租房管理系统的智能化转型显得尤为重要。它不仅帮助房东和租客之间建立更高效的沟通桥梁&#xff0c;还优化了整个租赁流程。通过智能化技术&#xff0c;这套系统能够自动处理资产管理、合同签署、财务管理等所有关键环节。这…...

spring和Mybatis的逆向工程

在现代企业级开发中&#xff0c;使用Spring和MyBatis进行快速、高效的数据库操作是非常常见的。本文将深入探讨如何使用Spring和MyBatis进行逆向工程&#xff0c;帮助开发者自动生成数据库相关的代码&#xff0c;提高开发效率和代码质量。 一、什么是逆向工程 逆向工程是指从…...

计算机网络 IP 网络层 2 (重置版)

IP的简介&#xff1a; IP 地址是互联网协议地址&#xff08;Internet Protocol Address&#xff09;的简称&#xff0c;是分配给连接到互联网的设备的唯一标识符&#xff0c;用于在网络中定位和通信。 IP编制的历史阶段&#xff1a; 1&#xff0c;分类的IP地址&#xff1a; …...

松灵机器人 scout ros2 驱动 安装

必须使用 ubuntu22 必须使用 链接的humble版本 #打开can 口 sudo modprobe gs_usbsudo ip link set can0 up type can bitrate 500000sudo ip link set can0 up type can bitrate 500000sudo apt install can-utilscandump can0mkdir -p ~/ros2_ws/srccd ~/ros2_ws/src git cl…...

【Leetcode 每日一题】541. 反转字符串 II

问题背景 给定一个字符串 s s s 和一个整数 k k k&#xff0c;从字符串开头算起&#xff0c;每计数至 2 k 2k 2k 个字符&#xff0c;就反转这 2 k 2k 2k 字符中的前 k k k 个字符。 如果剩余字符少于 k k k 个&#xff0c;则将剩余字符全部反转。如果剩余字符小于 2 k…...

掌握API和控制点(从Java到JNI接口)_35 JNI开发与NDK 03

3、 如何载入 .so档案 VM的角色 由于Android的应用层级类别都是以Java撰写的&#xff0c;这些Java类别转译为Dex型式的Bytecode之后&#xff0c;必须仰赖Dalvik虚拟机器(VM: Virtual Machine)来执行之。 VM在Android平台里&#xff0c;扮演很重要的角色。此外&#xff0c;在执…...

解锁豆瓣高清海报(二) 使用 OpenCV 拼接和压缩

解锁豆瓣高清海报(二): 使用 OpenCV 拼接和压缩 脚本地址: 项目地址: Gazer PixelWeaver.py pixel_squeezer_cv2.py 前瞻 继上一篇“解锁豆瓣高清海报(一) 深度爬虫与requests进阶之路”成功爬取豆瓣电影海报之后&#xff0c;本文将介绍如何使用 OpenCV 对这些海报进行智…...

【C/C++】Windows SAPI自实现文字转语音

本文通过封装Windows SAPI&#xff08;Speech Application Programming Interface&#xff09;&#xff0c;提供了一个现代化的C接口实现文字转语音功能。主要特性包括支持同步/异步语音合成、可调节语速&#xff08;-10到10&#xff09;和音量控制&#xff08;0-100%&#xff…...

openmv的端口被拆分为两个 导致电脑无法访问openmv文件系统解决办法 openmv USB功能改动 openmv驱动被更改如何修复

我之前误打误撞遇到一次&#xff0c;直接把openmv的全部端口删除卸载然后重新插上就会自动重新装上一个openmv端口修复成功&#xff0c;大家可以先试试不行再用下面的方法 全部卸载再重新插拔openmv 要解决OpenMV IDE中出现的两个端口问题&#xff0c;可以尝试以下步骤&#x…...

8.攻防世界Web_php_wrong_nginx_config

进入题目页面如下 尝试弱口令密码登录 一直显示网站建设中&#xff0c;尝试无果&#xff0c;查看源码也没有什么特别漏洞存在 用Kali中的dirsearch扫描根目录试试 命令&#xff1a; dirsearch -u http://61.147.171.105:53736/ -e* 登录文件便是刚才登录的界面打开robots.txt…...

音叉模态分析

目录 0 序言 1 自由状态下模态求解 1.1 添加模态项目 1.2 生成网格 1.3 设置最大模态阶数 1.4 求解 1.5 结果查看 1.6 结果分析 2 音叉能否释放频率440Hz的音调 3 预应力模态求解 3.1 静态结构分析 3.1.1 添加静态结构项目 3.1.2生成网格 3.1.3添加边界条件 3.1…...

智慧园区系统集成解决方案引领未来城市管理的智能化转型

内容概要 在现代城市管理的背景下&#xff0c;“智慧园区系统集成解决方案”正扮演着越来越重要的角色。这种解决方案不仅仅是技术上的创新&#xff0c;更是一种全新的管理理念&#xff0c;它旨在通过高效的数据整合与分析&#xff0c;优化资源配置&#xff0c;提升运营效率。…...

(即插即用模块-特征处理部分) 二十、(TPAMI 2022) Permute-MLP 置换MLP模块

文章目录 1、Permute-MLP layer2、代码实现 paper&#xff1a;Vision Permutator: A Permutable MLP-Like Architecture for Visual Recognition Code&#xff1a;https://github.com/Andrew-Qibin/VisionPermutator 1、Permute-MLP layer 传统的 MLP-like 模型&#xff08;如…...

FBX SDK的使用:基础知识

Windows环境配置 FBX SDK安装后&#xff0c;目录下有三个文件夹&#xff1a; include 头文件lib 编译的二进制库&#xff0c;根据你项目的配置去包含相应的库samples 官方使用案列 动态链接 libfbxsdk.dll, libfbxsdk.lib是动态库&#xff0c;需要在配置属性->C/C->预…...

爬虫基础(二)Web网页的基本原理

一、网页的组成 网页由三部分构成&#xff1a;HTML、JavaScript、CSS。 &#xff08;1&#xff09;HTML HTML 相当于网页的骨架&#xff0c;它通过使用标签来定义网页内容的结构。 举个例子&#xff1a; 它把图片标签为img、把视频标签为video&#xff0c;然后组合到一个界面…...

1.4 Go 数组

一、数组 1、简介 数组是切片的基础 数组是一个固定长度、由相同类型元素组成的集合。在 Go 语言中&#xff0c;数组的长度是类型的一部分&#xff0c;因此 [5]int 和 [10]int 是两种不同的类型。数组的大小在声明时确定&#xff0c;且不可更改。 简单来说&#xff0c;数组…...

爬虫基础(三)Session和Cookie讲解

目录 一、前备知识点 &#xff08;1&#xff09;静态网页 &#xff08;2&#xff09;动态网页 &#xff08;3&#xff09;无状态HTTP 二、Session和Cookie 三、Session 四、Cookie &#xff08;1&#xff09;维持过程 &#xff08;2&#xff09;结构 正式开始说 Sessi…...

hive:基本数据类型,关于表和列语法

基本数据类型 Hive 的数据类型分为基本数据类型和复杂数据类型 加粗的是常用数据类型 BOOLEAN出现ture和false外的其他值会变成NULL值 没有number,decimal类似number 如果输入的数据不符合数据类型, 映射时会变成NULL, 但是数据本身并没有被修改 创建表 创建表的本质其实就是在…...

Maya软件安装步骤与百度网盘链接

软件简介&#xff1a; MAYA软件是Autodesk旗下的著名三维建模和动画软件。maya软件功能更为强大&#xff0c;体系更为完善&#xff0c;因此国内很多的三维动画制作人员都开始转向maya&#xff0c;maya软件已成为三维动画软件的主流。 百度网盘链接: https://pan.baidu.com/s…...

error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054

Descriptions&#xff1a; Solutions&#xff1a;...

PID算法的数学实现和参数确定方法

目录 概述 1 算法描述 1.1 PID算法模型 1.2 PID离散化的图形描述 1.3 PID算法的特点 2 离散化的PID算法 2.1 位置式PID算法 2.2 增量式PID算法 2.3 位置式PID与增量式PID比较 3 控制器参数整定 3.1 PID参数确定方法 3.1.1 凑试法 3.1.2 临界比例法 3.1.3 经验法…...

【已解决】ECharts 没有在页面生效

元素高度问题&#xff1a; ECharts 需要一个具有明确高度的容器来渲染图表&#xff0c;也就是说 echartsRef 元素需要一个明确的 div 高度。我项目中的问题就是在 .base-echarts&#xff08;我项目中的最外层元素&#xff09; 上设置了高度为 300px&#xff0c;但没有为 .echar…...

三角函数正交性应用--以信号分离为例

三角函数的正交性的应用 引言 在信号处理、通信等众多领域中&#xff0c;三角函数的正交性发挥着至关重要的作用。它不仅是理论分析的基础&#xff0c;更是实际应用中解决各种问题的有力工具。本文将详细介绍三角函数正交性的定义、证明&#xff0c;并通过一个具体的信号处理…...

ASP.NET Core 中使用依赖注入 (DI) 容器获取并执行自定义服务

目录 一、ASP.NET Core 中使用依赖注入 (DI) 容器获取并执行自定义服务 1. app.Services 2. GetRequiredService() 3. Init() 二、应用场景 三、依赖注入使用拓展 1、使用场景 2、使用步骤 1. 定义服务接口和实现类 2. 注册服务到依赖注入容器 3. 使用依赖注入获取并…...

一个数如果恰好等于他的因子之和,这是就成为“完数“,例如6=1+2+3.编程找出1000以内的所有完数

from sys import stdoutfor i in range(2,1001):k[] #用于存储因子si #初始化s为当前数字ifor j in range(1,i):if i%j0: #如果j是i的因子s-j #从s中减去银子jk.append(j) #将因子j加入列表kif s0:#如果s最终为0,说明i是一个完数print(i)for j in range(len(k)): #遍历银子列表…...

理解 InnoDB 如何处理崩溃恢复

在数据库领域&#xff0c;数据的一致性与可靠性至关重要。InnoDB 存储引擎的崩溃恢复机制是保障数据安全的核心&#xff0c;其中 Doublewrite Buffer 和 Redo Log 发挥着关键作用。下面&#xff0c;我们将详细探讨 InnoDB 从写入到崩溃恢复的全过程。 一、写入流程 修改页面&…...

Linux-CentOS的yum源

1、什么是yum yum是CentOS的软件仓库管理工具。 2、yum的仓库 2.1、yum的远程仓库源 2.1.1、国内仓库 国内较知名的网络源(aliyun源&#xff0c;163源&#xff0c;sohu源&#xff0c;知名大学开源镜像等) 阿里源:https://opsx.alibaba.com/mirror 网易源:http://mirrors.1…...

Redis复制

一、Redis复制&#xff1a; 1.为了解决分布式中单点故障问题&#xff0c;通常会把数据复制多个副本部署到其他机器上来解决故障恢复和负载均衡等需求。 2.建立复制 参与复制的redis实例划分为主节点&#xff08;master&#xff09;和从节点&#xff08;slave&#xff09;,每个从…...

小白怎样部署和使用本地大模型DeepSeek ?

1 安装Ollama &#xff08;1&#xff09; 下载Ollama 从https://ollama.com/download 下载, 根据你的系统下载对应的版本&#xff0c;支持Win, Mac ,Linux&#xff1a; 如果下载不了&#xff0c;右键复制链接地址&#xff0c;贴到迅雷&#xff0c;指定可以下载下来。 (2) 安…...

ECharts 样式设置

ECharts 样式设置 引言 ECharts 是一款功能强大的可视化库&#xff0c;广泛用于数据可视化。样式设置是 ECharts 中的重要一环&#xff0c;它能够帮助开发者根据需求调整图表的视觉效果&#xff0c;使其更加美观和易于理解。本文将详细介绍 ECharts 的样式设置&#xff0c;包…...

Java synchronized关键字和锁分类

专栏系列文章地址&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标&#xff1a; 关于synchronized已经有很多博主很细致的讲解了&#xff0c;本文主要是通过代码例子再次理解下&#xff0c;并要求能头脑反射出相关知识点主要是锁分类的知识…...

Vue.js 新的生命周期钩子:`onMounted`, `onUpdated` 等

Vue.js 新的生命周期钩子&#xff1a;onMounted, onUpdated 等 今天我们来聊聊 Vue 3 中的生命周期钩子&#xff0c;特别是 onMounted、onUpdated 等。如果你对如何在 Vue 3 的组合式 API&#xff08;Composition API&#xff09;中使用这些钩子感到困惑&#xff0c;那么这篇文…...

OpenCV:闭运算

目录 1. 简述 2. 用膨胀和腐蚀实现闭运算 2.1 代码示例 2.2 运行结果 3. 闭运算接口 3.1 参数详解 3.2 代码示例 3.3 运行结果 4. 闭运算的应用场景 5. 注意事项 相关阅读 OpenCV&#xff1a;图像的腐蚀与膨胀-CSDN博客 OpenCV&#xff1a;开运算-CSDN博客 1. 简述…...

Android 音视频编解码 -- MediaCodec

引言 如果我们只是简单玩一下音频、视频播放&#xff0c;那么使用 MediaPlayer SurfaceView 播放就可以了&#xff0c;但如果想加个水印&#xff0c;加点其他特效什么的&#xff0c;那就不行了&#xff1b; 学习 Android 自带的硬件码类 – MediaCodec。 MediaCodec 介绍 Med…...

移动互联网用户行为习惯哪些变化,对小程序的发展有哪些积极影响

一、碎片化时间利用增加 随着生活节奏的加快&#xff0c;移动互联网用户的碎片化时间越来越多。在等公交、排队、乘坐地铁等间隙&#xff0c;用户更倾向于使用便捷、快速启动的应用来满足即时需求。小程序正好满足了这一需求&#xff0c;无需下载安装&#xff0c;随时可用&…...

数据分析系列--②RapidMiner导入数据和存储过程

一、下载数据 二、导入数据 1. 在本地计算机中创建3个文件夹 2. 从本地选择.csv或.xlsx 三、界面说明 四、存储过程 1.保存 Congratulations, you are done. 一、下载数据 点击下载AssociationAnalysisData.xlsx数据集 二、导入数据 1. 在本地计算机中创建3个文件夹 2. 从…...

Prometheus 中的 Exporter

在 Prometheus 生态系统中,Exporter 扮演着至关重要的角色,它们负责从不同的服务或系统中收集和暴露度量数据。本文将详细介绍 Exporter 的概念、类型以及如何有效使用它们将 Prometheus 集成到各种系统中进行监控。 什么是 Exporter? Exporter 是一段软件,它从应用程序或…...

从 HTTP/1.1 到 HTTP/3:如何影响网页加载速度与性能

一、前言 在最近使用Apipost时&#xff0c;突然注意到了http/1.1和http/2&#xff0c;如下图&#xff1a; 在我根深蒂固的记忆中&#xff0c;对于http的理解还停留在TCP协议、三次握手。由于我的好奇心&#xff0c;于是触发了我被动“开卷”&#xff0c;所以有了这篇文章&…...

GenAI 在金融服务领域的应用:2025 年的重点是什么

作者&#xff1a;来自 Elastic Karen Mcdermott GenAI 不是魔法 我最近参加了 ElasticON&#xff0c;我们与纽约 Elastic 社区一起度过了一天&#xff0c;讨论了使用检索增强生成 (retrieval augmented generation - RAG) 为大型语言模型 (large language models - LLMs) 提供…...

小红书文案生成器(基于openai API和streamlit)

prompt_text.py&#xff1a; # 专门用来放提示文本&#xff08;系统提示、用户提示&#xff09;system_prompt_text """ 你是小红书爆款写作专家&#xff0c;请你遵循以下步骤进行创作&#xff1a;首先产出5个标题&#xff08;包含适当的emoji表情&#xff09…...

Spring AOP 入门教程:基础概念与实现

目录 第一章&#xff1a;AOP概念的引入 第二章&#xff1a;AOP相关的概念 1. AOP概述 2. AOP的优势 3. AOP的底层原理 第三章&#xff1a;Spring的AOP技术 - 配置文件方式 1. AOP相关的术语 2. AOP配置文件方式入门 3. 切入点的表达式 4. AOP的通知类型 第四章&#x…...

力扣面试150 快乐数 循环链表找环 链表抽象 哈希

Problem: 202. 快乐数 &#x1f469;‍&#x1f3eb; 参考题解 Code public class Solution {public int squareSum(int n) {int sum 0;while(n > 0){int digit n % 10;sum digit * digit;n / 10;}return sum;}public boolean isHappy(int n) {int slow n, fast squa…...