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

驱动开发系列57 - Linux Graphics QXL显卡驱动代码分析(四)显示区域更新

一:概述

        前面在介绍了显示模式设置(分辨率,刷新率)之后,本文继续分析下,显示区域的绘制,详细看看虚拟机的画面是如何由QXL显卡绘制出来的。 

二:相关数据结构介绍 

struct qxl_monitors_config {uint16_t count;         // 当前启用的显示器数量(head 数量)uint16_t max_allowed;   // 驱动允许的最大显示器数量,如果为 0,表示没有固定限制,由驱动动态决定struct qxl_head heads[]; // 每个显示器的配置数组(实际大小为 count)
};
struct qxl_head {uint32_t id;           // 显示头(显示器)IDuint32_t surface_id;   // 绑定的 QXLSurface IDuint32_t width;        // 显示区域的宽度(像素)uint32_t height;       // 显示区域的高度(像素)uint32_t x;            // 在绑定 surface 上的 X 偏移(起始坐标)uint32_t y;            // 在绑定 surface 上的 Y 偏移uint32_t flags;        // 标志位,用于额外配置(比如是否启用、旋转等)
};
struct qxl_surface_id {uint32_t surface_id; // 表示 QXL 表面(Surface)的唯一标识符。每个表面都会有一个唯一的 ID,用于区分和识别不同的表面。
};
struct qxl_image {struct qxl_image_descriptor descriptor;  // 图像的描述符,包含图像的基本信息(例如图像类型、大小等)union {  /* 可变长度的数据,根据图像类型选择使用 */struct qxl_bitmap bitmap;        // 图像数据,作为位图(bitmap)表示struct qxl_encoder_data quic;    // 图像数据,作为 QUIC 编码数据表示(用于高效传输)struct qxl_surface_id surface_image; // 图像数据,作为表面图像的 ID 表示(指向一个渲染表面)} u;
};
struct qxl_image_descriptor {uint64_t id;           // 图像的唯一标识符,用于标识该图像在系统中的位置uint8_t type;          // 图像类型,用于指示该图像的具体格式或用途(例如位图、编码图像等)uint8_t flags;         // 图像的标志位,通常用于表示图像的特定属性(例如是否是透明图像等)uint32_t width;        // 图像的宽度,以像素为单位uint32_t height;       // 图像的高度,以像素为单位
};
struct qxl_encoder_data {uint32_t data_size;   // 编码数据的大小,单位是字节。uint8_t data[];       // 可变长度的编码数据,存储编码后的图像或图形数据。
};
struct qxl_palette {uint64_t unique;      // 唯一标识符,用于区分不同的调色板。每个调色板都会有一个唯一的 ID。uint16_t num_ents;    // 调色板条目的数量,即调色板中包含的颜色数。uint32_t ents[];      // 可变长度数组,存储调色板中的颜色值。每个条目代表一个颜色,通常是32位颜色值(例如 RGBA)。
};
struct qxl_bitmap {uint8_t format;        // 位图的格式,表示图像数据的颜色深度或编码方式。uint8_t flags;         // 位图的标志字段,指示位图的附加属性或状态。uint32_t x;            // 位图的 X 坐标,表示位图左上角的位置。uint32_t y;            // 位图的 Y 坐标,表示位图左上角的位置。uint32_t stride;       // 位图每行的字节数,即图像数据的跨度。用于访问像素数据时的步长。QXLPHYSICAL palette;   // 调色板的物理地址,用于与调色板相关的数据。通常这是指向 `qxl_palette` 结构体的指针。QXLPHYSICAL data;      // 图像数据的物理地址。指向存储位图像素数据的内存区域。
};
struct qxl_surface {uint32_t format;      // 图形表面的格式(例如 RGBA,BGRA 等)uint32_t width;       // 表面的宽度uint32_t height;      // 表面的高度int32_t stride;       // 行跨度,表示表面每行数据占用的字节数QXLPHYSICAL data;     // 指向表面数据的物理地址
};
struct qxl_surface_cmd {union qxl_release_info release_info;  // 用于释放的额外信息uint32_t surface_id;                  // 表面ID,标识一个具体的图形表面uint8_t type;                         // 命令类型,指示是创建表面还是销毁表面uint32_t flags;                       // 命令标志,可能用于控制命令的行为union {struct qxl_surface surface_create;  // 创建表面时的相关信息} u;
};
struct qxl_clip_rects {uint32_t num_rects;       // 包含的矩形数量struct qxl_data_chunk chunk;  // 包含矩形数据的内容
};
struct qxl_drawable {// 释放信息,用于释放渲染资源时的管理union qxl_release_info release_info;// 该可绘制对象使用的表面IDuint32_t surface_id;// 绘制效果类型,用于标识渲染操作的效果类型(例如:透明、混合等)uint8_t effect;// 绘制对象类型,定义该对象的类型(例如:填充、文本、复制等)uint8_t type;// 标记是否是自带位图数据,如果是,则会直接使用该位图uint8_t self_bitmap;// 如果是自带位图,定义位图的有效区域struct qxl_rect self_bitmap_area;// 可绘制对象的边界框,定义了渲染的边界范围struct qxl_rect bbox;// 裁剪区域,定义了在渲染时应考虑的区域,超出该区域的部分将被裁剪掉struct qxl_clip clip;// 内存管理时间戳,用于标识该对象的渲染时间uint32_t mm_time;// 目标表面数组,最多支持三个目标表面int32_t surfaces_dest[3];// 每个目标表面的渲染区域矩形struct qxl_rect surfaces_rects[3];// 根据绘制类型选择不同的绘制操作,这里使用联合体来支持多种操作union {// 填充操作,例如使用颜色填充区域struct qxl_fill fill;// 不透明操作,可能表示不透明的填充区域struct qxl_opaque opaque;// 复制操作,将源区域复制到目标区域struct qxl_copy copy;// 透明操作,可能表示透明背景或区域struct qxl_transparent transparent;// alpha混合操作,支持透明度的混合效果struct qxl_alpha_blend alpha_blend;// 复制位图操作,支持特定的位图复制struct qxl_copy_bits copy_bits;// 复制操作的另一种形式struct qxl_copy blend;// 3元逻辑操作,用于图像处理中基于位的像素操作struct qxl_rop_3 rop3;// 描边操作,用于绘制路径的边框struct qxl_stroke stroke;// 文本渲染操作,用于绘制文本struct qxl_text text;// 黑色掩码操作,支持黑色掩码效果struct qxl_mask blackness;// 反转掩码操作,用于像素的反色效果struct qxl_mask invers;// 白色掩码操作,支持白色掩码效果struct qxl_mask whiteness;// 合成操作,用于合成多个图像层struct qxl_composite composite;} u;
};
struct qxl_cursor_header {uint64_t unique;          // 唯一标识符,标识一个光标uint16_t type;            // 光标类型(例如:标准光标、自定义光标)uint16_t width;           // 光标的宽度(以像素为单位)uint16_t height;          // 光标的高度(以像素为单位)uint16_t hot_spot_x;      // 热点位置的 X 坐标(相对于光标左上角)uint16_t hot_spot_y;      // 热点位置的 Y 坐标(相对于光标左上角)
};
struct qxl_cursor {struct qxl_cursor_header header;  // 光标的基本信息uint32_t data_size;              // 光标数据的大小struct qxl_data_chunk chunk;     // 包含光标数据的内容(例如:像素数据)
};
struct qxl_cursor_cmd {union qxl_release_info release_info;  // 释放信息,用于同步或更新uint8_t type;                         // 光标操作类型(例如:设置、移动、隐藏)union {struct {  struct qxl_point_1_6 position;   // 光标的新位置uint8_t visible;                 // 光标是否可见QXLPHYSICAL shape;               // 光标形状数据} set;                              // 设置光标操作struct {  uint16_t length;                 // 光标轨迹的长度uint16_t frequency;              // 光标轨迹的频率} trail;                            // 设置光标轨迹操作struct qxl_point_1_6 position;      // 光标的新位置(在移动或其他命令中使用)} u;uint8_t device_data[QXL_CURSOR_DEVICE_DATA_SIZE];  // 设备特定数据,大小为 128 字节
};
struct qxl_ram_header {uint32_t magic;                            // 魔术数字,用于验证数据结构是否正确uint32_t int_pending;                      // 当前挂起的中断uint32_t int_mask;                         // 中断屏蔽uint8_t log_buf[QXL_LOG_BUF_SIZE];         // 日志缓冲区,用于记录日志struct qxl_ring_header cmd_ring_hdr;       // 命令环头,用于管理命令队列struct qxl_command cmd_ring[QXL_COMMAND_RING_SIZE]; // 命令环,用于存储具体的命令struct qxl_ring_header cursor_ring_hdr;    // 光标环头,用于管理光标队列struct qxl_command cursor_ring[QXL_CURSOR_RING_SIZE]; // 光标环,用于存储光标命令struct qxl_ring_header release_ring_hdr;   // 释放环头,用于管理释放命令uint64_t release_ring[QXL_RELEASE_RING_SIZE]; // 释放环,用于存储释放命令struct qxl_rect update_area;               // 更新区域,表示图形更新的区域/* appended for qxl-2 */uint32_t update_surface;                   // 更新的表面 ID,用于指定目标表面struct qxl_mem_slot mem_slot;              // 内存槽,用于分配图形内存struct qxl_surface_create create_surface;  // 表面创建结构,表示新创建的图形表面uint64_t flags;                            // 标志位,用于存储相关的配置信息/* appended for qxl-4 *//* used by QXL_IO_MONITORS_CONFIG_ASYNC */QXLPHYSICAL monitors_config;               // 显示器配置,用于存储显示器相关的配置信息uint8_t guest_capabilities[64];            // 客户端能力,存储与虚拟机环境相关的信息
};
/* qxl-1 compat: append only */
struct qxl_rom {uint32_t magic;                         // 魔术数,用于验证这是一个有效的 QXL ROMuint32_t id;                            // ROM 的唯一标识符uint32_t update_id;                     // 更新标识符,用于标记 ROM 版本或更新次数uint32_t compression_level;             // 压缩级别,可能指示 ROM 数据的压缩程度uint32_t log_level;                     // 日志级别,控制 QXL 驱动的日志输出详细程度uint32_t mode;                          // 驱动的工作模式(qxl-1 特定)uint32_t modes_offset;                  // 显示模式的偏移量,指向模式数据的位置uint32_t num_io_pages;                  // I/O 页的数量,表示 ROM 中的 I/O 页数量uint32_t pages_offset;                  // 页面的偏移量,指向页面数据的位置(qxl-1 特定)uint32_t draw_area_offset;              // 绘制区域的偏移量,表示绘制区域在 ROM 中的位置(qxl-1 特定)uint32_t surface0_area_size;            // 表面0区域的大小,用于描述第一个图形表面的内存大小(qxl-1 特定,名为 draw_area_size)uint32_t ram_header_offset;             // RAM 头部的偏移量,指向 RAM 头部数据的位置uint32_t mm_clock;                      // 内存时钟频率,控制 RAM 访问的时序,影响性能/* qxl-2 特有字段 */uint32_t n_surfaces;                   // 表面数量,表示支持的图形表面数量uint64_t flags;                         // 标志位,存储驱动的配置特性uint8_t slots_start;                    // 起始槽位,内存槽位的起始位置uint8_t slots_end;                      // 结束槽位,内存槽位的结束位置uint8_t slot_gen_bits;                  // 槽生成位数,用于标识槽位的生成位uint8_t slot_id_bits;                   // 槽 ID 位数,表示槽位的唯一标识符的位数uint8_t slot_generation;                // 槽代号,用于表示槽位的代次(内存管理、版本控制)/* qxl-4 特有字段 */uint8_t client_present;                 // 客户端存在标志,指示客户端是否存在uint8_t client_capabilities[58];        // 客户端的能力位图,描述客户端支持的功能或特性uint32_t client_monitors_config_crc;    // 客户端显示配置的 CRC 校验和,用于验证配置的有效性struct {uint16_t count;                     // 显示器配置的数量uint16_t padding;                   // 填充,保持对齐struct qxl_urect heads[64];         // 显示器配置,最多支持 64 个显示器} client_monitors_config;               // 客户端监视器配置,描述显示器的位置和尺寸
};

相关文章:

驱动开发系列57 - Linux Graphics QXL显卡驱动代码分析(四)显示区域更新

一:概述 前面在介绍了显示模式设置(分辨率,刷新率)之后,本文继续分析下,显示区域的绘制,详细看看虚拟机的画面是如何由QXL显卡绘制出来的。 二:相关数据结构介绍 struct qxl_moni…...

疗愈服务预约小程序源码介绍

基于ThinkPHP、FastAdmin和UniApp开发的疗愈服务预约小程序源码,这款小程序在功能设计和用户体验上都表现出色,为疗愈行业提供了一种全新的服务模式。 该小程序源码采用了ThinkPHP作为后端框架,保证了系统的稳定性和高效性。同时&#xff0c…...

力扣118,1920题解

记录 2525.5.6 题目: 思路: 用一个二维数组dp[numRows][numRows]保存每一次动态规划的结果 1.令dp[0][0]1(第一列) 2.找规律 3.得到如下规律(以下情况均为列数大于1) if(col0){ dp[row][col]1 } else { dp[row][col]dp[row-1][col-1]dp[row-1][col] }…...

电池热管理CFD解决方案,为新能源汽车筑安全防线

在全球能源结构加速转型的大背景下,新能源汽车产业异军突起,成为可持续发展的重要驱动力。而作为新能源汽车 “心脏” 的电池系统,其热管理技术的优劣,直接决定了车辆的安全性、续航里程和使用寿命。电池在充放电过程中会产生大量…...

(一)毛子整洁架构(Domain Layer/Repository Pattern/Result Pattern/Error Pattern)

文章目录 项目地址一、整洁架构概念1.1 各个分层的功能1. Domain核心部件2. Application Layer3. Infrastructure layer3. Presenetation layer1.2 项目数据库二、Domain Layer2.1 Apartments 实体1. Current Value Obj2. Money Value Obj3. Apartment 类2.2 User 实体1. User类…...

XSS ..

Web安全中的XSS攻击详细教学,Xss-Labs靶场通关全教程(建议收藏) - 白小雨 - 博客园跨站脚本攻击(XSS)主要是攻击者通过注入恶意脚本到网页中,当用户访问该页面时,恶意脚本会在用户的浏览器中执行…...

Github Action部署node项目

Github Action部署node项目 个人学习的时候,作为前端感觉这个CICD基本流程还是有必要了解的,这里记录一下Github Action部署node项目的流程,也算是一个学习的过程 首先肯定是要有一个可运行的node项目 编写部署文件 部署文件放置在.githu…...

高频面试题:设计秒杀系统,用Redis+Lua解决超卖

高频面试题:设计秒杀系统,用RedisLua解决超卖 **1. 问题背景****2. 解决方案:Redis Lua****为什么选择Redis Lua?****核心代码逻辑****Java调用示例(Spring Boot)** **3. 方案优势****4. 面试回答话术***…...

2、Kafka Replica机制与ISR、HW、LEO、AR、OSR详解

Kafka 作为分布式高可用消息队列,其副本(Replica)机制是实现高可靠性和数据一致性的核心。本文将系统介绍 Kafka 的 Replica 机制,并详细解释 ISR、HW、LEO、AR、OSR 等关键概念。 一、Kafka Replica机制概述 在分布式系统中&am…...

生成式 AI:从工具革命到智能体觉醒,2025 年的质变与突破

在上海胸科医院的手术室里,一束全息投影正精准勾勒出患者肺部的三维血管模型。主刀医生手持机械臂的瞬间,AI 导航系统已同步完成 200 次路径演算,将毫米级误差控制在 0.3 毫米以内 —— 这个真实发生在 2025 年的临床场景,标志着生…...

安卓基础(拖拽)

当用户长按或拖拽某个视图(如按钮、图片)时,需要提供视觉反馈(即阴影)。这行代码通常在拖拽事件的处理逻辑中,例如: view.setOnLongClickListener(v -> {// 创建拖拽阴影DragShadowBuilder …...

IoTDB磁盘I/O性能监控与优化指南

一、磁盘I/O性能观测核心指标 在现代计算机系统中,磁盘I/O性能对整体系统表现至关重要。为有效监控和优化磁盘I/O性能,需关注以下核心指标: ‌I/O读写延迟‌:衡量从发起I/O请求到接收响应的时间间隔。‌IOPS(Input/O…...

java每日精进 5.06【框架之功能权限】

0.概述 0.1 整体架构概述 这个RBAC权限系统基于Spring Security和Token认证机制,主要包含以下核心组件: 用户-角色-菜单的多对多关系模型 基于Token的认证流程 细粒度的权限控制(菜单权限、按钮权限) 灵活的权限配置方式 1…...

静态NAT

实验需求 PC1和PC2通过静态NAT去访问服务器 实验拓扑 图13-1 静态NAT 实验步骤 步骤1&#xff1a;IP地址的配置 PC1的配置 PC2的配置 R1的配置 <Huawei>system-view [Huawei]undo info-center enable [Huawei]sysname R1 [R1]interface g0/0/0 [R1-GigabitEt…...

RabbitMQ-api开发

前言 MQ就是接收并转发消息 核心概念 admin是用户 每个虚拟机上都有多个交换机 快速入门 引入依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.22.0</version></dependen…...

const MachineTree getMachineTree() ; MachineTree getMachineTree() const; 区别?

这两个函数声明在语法和语义上有明显的区别&#xff0c;它们的用途和行为也不同。让我们逐一分析它们的区别&#xff1a; 1. const MachineTree &getMachineTree(); 这个函数声明表示&#xff1a; 返回类型&#xff1a;const MachineTree &&#xff0c;即返回一个 M…...

使用DevTools工具调试前端页面,便捷脚本,鸿蒙调试webView

参考官方文章 便捷脚本 创建文本&#xff0c;复制修改后缀为bat 建立bat文件 echo off setlocal enabledelayedexpansion:: Initialize port number and PID list set PORT9222 set PID_LIST:: Get the list of all forwarded ports and PIDs for /f "tokens2,5 delims…...

浏览器存储 Cookie,Local Storage和Session Storage

什么是Cookie&#xff1f; 存储容量&#xff1a;一般限制在 4KB 以内。数据有效期&#xff1a;可以设置过期时间&#xff0c;若未设置&#xff0c;则在浏览器关闭时失效。数据共享&#xff1a;在同一域名下&#xff0c;不同页面可以共享cookie数据。并且在每次 HTTP 请求时&am…...

校内周赛题(思维题)

这次周赛的题目没有什么很难的代码实现&#xff0c;基本上都是对思路的把握。 与君共勉&#x1f339; 选取x个数&#xff0c;看能不能使得这x个数相加的结果是奇数。 如果x是偶数&#xff0c;他的分布肯定是一个奇数一个偶数若干个两两配对的奇数若干个两两配对的偶数。 如果…...

在 GitLab 中部署Python定时任务

在 GitLab 中部署定时任务(如每天早8点运行Python脚本并存储结果)可以通过 GitLab CI/CD 结合 计划任务(Scheduled Pipelines) 实现。以下是详细步骤和准备工作: 1. 准备工作 (1) 项目结构准备 确保项目包含: Python脚本(如 main.py):执行核心算法逻辑。 结果存储模…...

学习黑客Windows权限体系

已思考 24 秒 借着 Week 2 Day 4 的号角&#xff0c;我们把权限系统这条「双持长枪」摆上擂台&#xff1a;一边是 Windows DACL/icacls&#xff0c;另一边是 Linux sudoers。你将看到二者在授权语法、常见配置漏洞与提权打法上的一一对照——尤其关注 可写服务&#xff08;Wr…...

DXFViewer进行中2 -> 直线 解析+渲染 ✅已完成

DXFViewer进行中 : -&#xff1e;封装OpenGL -&#xff1e; 解析DXF直线-CSDN博客https://blog.csdn.net/qq_25547755/article/details/147723906 上篇博文 解析dxf直线635条 1. DXFViewer.h #pragma once #include "Application.h" #include <stdio.h> #inc…...

当智能科技遇上医疗行业会帮助疫苗如何方便管理呢?

​ 随着科技的发展&#xff0c;智能科技在医疗行业的应用日益广泛&#xff0c;在疫苗管理方面&#xff0c;温湿度监控设备的安装可以简化管理流程&#xff0c;提高监测效率&#xff0c;降低疫苗损坏的风险。 疫苗管理面临着诸多挑战和需求。疫苗的存储、运输、接种等环节都…...

Excel 数据 可视化 + 自动化!Excel 对比软件

各位Excel小能手们&#xff01;你们有没有过要对比两个Excel表格数据差异&#xff0c;却看得眼睛都花了的经历&#xff1f;其实啊&#xff0c;现在有专门的Excel文件比较软件能帮咱解决这大难题。这软件就是用来快速找出两个或多个Excel表格数据不同之处&#xff0c;还能把修改…...

Selenium模拟人类行为,操作网页的方法(全)

看到有朋友评论问&#xff0c;用selenium怎么模仿人类行为&#xff0c;去操作网页的页面呢&#xff1f; 我想了想&#xff0c;这确实是一个很大的点&#xff0c;不应该是一段代码能解决的&#xff0c; 就像是,如果让程序模拟人类的行为。例如模拟人类买菜&#xff0c;做饭&am…...

LVS负载均衡群集解析:理解LVS-NAT的工作原理

目录 一、LVS群集应用基础 1.群集技术概述 2.LVS虚拟服务器 3.NFS共享存储服务 二、案例&#xff1a;地址转换模式&#xff08;LVS-NAT&#xff09; 1.资源清单 2.修改主机名 3.配置负载调度器&#xff08;LVS上&#xff09; 4.配置节点服务器(web1、web2) 5.测试LVS…...

Leetcode Hot 100最长连续序列

题目描述 思路 思路1 我们对数组进行排序&#xff0c;通过遍历数组&#xff0c;如果前一个数组的值1等于当前数组的值&#xff0c;计数count&#xff0c;如果中断了&#xff0c;计算当前最大连续长度的值ans&#xff0c;并且统计值count重新置为1&#xff0c;最后返回count与…...

【东枫科技】代理英伟达产品:交换机系统

文章目录 总体详细&#xff1a;NVIDIA Spectrum SN5000详细&#xff1a;NVIDIA Spectrum SN2100详细&#xff1a;NVIDIA Spectrum SN4700详细&#xff1a;NVIDIA Spectrum SN2010详细&#xff1a;NVIDIA Spectrum SN4600详细&#xff1a;NVIDIA Spectrum SN3700详细&#xff1a…...

[前端]Javascript获取元素宽度

元素宽度属性对比示意图 ---------------------------------- | 外边距&#xff08;margin&#xff09; | -------------------------------- | | 边框&#xff08;border&#xff09; | | | -------------------------- | | | …...

MySQL + Qwen3-0.5B + Flask + Dify 工作流部署指南

1. 安装MySQL和PyMySQL 安装MySQL # 在Ubuntu/Debian上安装 sudo apt update sudo apt install mysql-server sudo mysql_secure_installation# 启动MySQL服务 sudo systemctl start mysql sudo systemctl enable mysql 安装PyMySQL pip install pymysql 使用 apt 安装 My…...

项目三 - 任务3:学生多态方式喂养宠物

在本次实战中&#xff0c;我们通过创建动物类及其子类&#xff08;猫、狗、鸟&#xff09;&#xff0c;并设计学生类的喂养方法&#xff0c;深入学习了Java中的多态和方法重载。学生类通过重载方式为每种动物提供专门的喂养方法&#xff0c;而通过多态方式则仅用一个方法即可喂…...

TypeScript速成

1、类型推断 这里的str已经推断为string类型&#xff0c;不能像JavaScript一样直接给str赋值number类型 2、类型注解 let str:stringabc 或者 let str:string strabc 3、类型断言 因为typescript会判定这个item可能为undefined类型&#xff0c;但是我们人为可以确定item一…...

CompletableFuture的底层ForkJoinPool

什么是 ForkJoinPool&#xff1f;它和普通线程池&#xff08;ThreadPoolExecutor&#xff09;有什么区别&#xff1f; 答案要点&#xff1a; ForkJoinPool 是 Java 7 引入的线程池&#xff0c;专为 分治任务 设计&#xff0c;支持递归任务拆分&#xff08;Fork&#xff09;和…...

高等数学第五章---定积分(§5.1定积分的概念、性质和应用)

5.1 定积分的概念及性质 一、引例 在学习定积分之前&#xff0c;我们先通过两个具体的例子来感受其思想和方法。 例1 曲边梯形的面积 定义&#xff1a;曲边梯形 由连续曲线 y f ( x ) y f(x) yf(x)&#xff08;假设 f ( x ) ≥ 0 f(x) \ge 0 f(x)≥0 在所讨论的区间上&…...

Java基础学完,继续深耕(0506)SQL--多表关系

多表关系 一对多(多对一) 一对一 多对多 一对多 场景&#xff1a;部门与员工的关系 &#xff08;一个部门下有多个员工&#xff09;。 实现&#xff1a;在数据库表中多的一方&#xff0c;添加字段&#xff0c;来关联一的一方的主键。 现在只是在语法上关联了&#xff0c;…...

python打卡day17

聚类的基础知识 知识点 聚类的指标聚类常见算法&#xff1a;kmeans聚类、dbscan聚类、层次聚类三种算法对应的流程 实际在论文中聚类的策略不一定是针对所有特征&#xff0c;可以针对其中几个可以解释的特征进行聚类&#xff0c;得到聚类后的类别&#xff0c;这样后续进行解释也…...

洛谷---P1629 邮递员送信

题目描述 有一个邮递员要送东西&#xff0c;邮局在节点 1。他总共要送 n−1 样东西&#xff0c;其目的地分别是节点 2 到节点 n。由于这个城市的交通比较繁忙&#xff0c;因此所有的道路都是单行的&#xff0c;共有 m 条道路。这个邮递员每次只能带一样东西&#xff0c;并且运…...

第11次:用户注册(简要版)

1、定义模板 在templates文件夹下边新建register.html&#xff0c;代码如下&#xff1a; <html lang"en"> <head><meta charset"UTF-8"><title>注册</title> </head> <body><!--{%是模板标签&#xff0c; …...

【IP101】图像特征提取技术:从传统方法到深度学习的完整指南

&#x1f31f; 特征提取魔法指南 &#x1f3a8; 在图像处理的世界里&#xff0c;特征提取就像是寻找图像的"指纹"&#xff0c;让我们能够识别和理解图像的独特性。让我们一起来探索这些神奇的特征提取术吧&#xff01; &#x1f4da; 目录 基础概念 - 特征的"体…...

对windows的简单介绍

目录 一、Windows 操作系统概述 1. 定义与定位 2. 核心目标 二、历史与版本演变 1. 早期阶段&#xff08;1985–1995&#xff09; 2. NT 内核时代&#xff08;1996–2009&#xff09; 3. 现代操作系统&#xff08;2012–至今&#xff09; 三、系统架构与技术特性 1. 内…...

Waymo公司正在加快其位于亚利桑那州新工厂的无人驾驶出租车(robotaxi)生产进度

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

JavaSE核心知识点01基础语法01-03(流程控制:顺序、分支、循环)

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 JavaSE核心知识点01基础语法01-03&#xff0…...

信息论01:从通信到理论的飞跃

信息论01&#xff1a;从通信到理论的飞跃 1. 信息论的诞生与发展 1.1 前信息论时代&#xff08;1920s之前&#xff09; 信息与消息的混淆&#xff1a;传统认知中将信息等同于消息本身先驱者奠基&#xff1a; 哈里奈奎斯特 (1924)&#xff1a;提出《影响电报速度的某些因素》…...

Pandas 的透视与逆透视

目录 1. 透视 1.1 pivot 1.2 pivot_table 2.逆透视 1. 透视 透视是长表变宽表。 pivot() 和 pivot_table()两个函数都可以做到&#xff0c;后者可以聚合前者不行。 特性df.pivot()df.pivot_table()重复值处理要求索引和列的组合唯一&#xff0c;否则报错 ValueError允许…...

AI大模型驱动的智能座舱研发体系重构

随着AI大模型&#xff08;如LLM、多模态模型&#xff09;的快速发展&#xff0c;传统智能座舱研发流程面临巨大挑战。传统座舱研发以需求驱动、功能固定、架构封闭为特点&#xff0c;而AI大模型的引入使得座舱系统向自主决策、动态适应、持续进化的方向发展。 因此思考并提出一…...

【东枫科技】代理英伟达产品:DPU

NVIDIA BlueField-3 DPU 400Gb/s 基础设施计算平台 NVIDIA BlueField -3 数据处理单元 (DPU) 是第三代基础设施计算平台&#xff0c;使企业能够构建从云端到核心数据中心再到边缘的软件定义、硬件加速的 IT 基础设施。借助 400Gb/s 以太网或 NDR 400Gb/s InfiniBand 网络连接…...

【KWDB 创作者计划】一文掌握KWDB的时序表管理

前言 本文是在对时序数据库有一定了解&#xff0c;并且KWDB的数据库操作了解后进行学习的文章安排&#xff0c;如果对时序数据库与KWDB的数据库操作还不怎么了解的可以查阅官网的文档进行提前学习&#xff0c;当有了这些基础后&#xff0c;本文就是对时序数据表的一个管理操作…...

《算法导论(第4版)》阅读笔记:p9-p9

《算法导论(第4版)》学习第 6 天&#xff0c;p9-p9 总结&#xff0c;总计 1 页。 一、技术总结 1. data structure A data structure is a way to store and organize data in order to facilitate access and modifications(数据结构是一种存储和组织数据的方式&#xff0c…...

Facebook隐私保护措施的优缺点解析

在这个数字化的时代&#xff0c;隐私保护已成为公众关注的热点话题。Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;其隐私保护措施自然也受到了广泛的关注和讨论。本文将对Facebook的隐私保护措施进行解析&#xff0c;探讨其优点与缺点&#xff0c;并探讨如…...

深入了解linux系统—— 进程地址空间

前言 程序地址空间 在之前&#xff0c;我们学习C/C时&#xff0c;多多少少都看过这样的一张图 我们现在通过下面这一段代码看一下&#xff1a; #include <stdio.h> #include <unistd.h> #include <stdlib.h> int g_unval; int g_val 100; int main(int…...