大数据学习(121)-sql重点问题

🍋🍋大数据学习🍋🍋

🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞


窗口函数使用技巧

窗口函数是 SQL 中处理复杂数据分析的强大工具,常用于排名、累计计算、同比环比等场景。以下从基础语法、高频函数、性能优化、典型场景四个维度总结核心技巧,并附示例代码和避坑指南。

一、基础语法与核心组件

1. 完整语法结构

sql

<窗口函数> OVER ([PARTITION BY 字段1, 字段2...]  -- 分组依据[ORDER BY 字段1 [ASC/DESC], 字段2...]  -- 排序规则[窗口子句]  -- 可选,定义窗口范围
)

  • 窗口函数分类

    • 排名函数ROW_NUMBER()RANK()DENSE_RANK()
    • 聚合函数SUM()AVG()COUNT()MAX()MIN()
    • 偏移函数LAG()LEAD()FIRST_VALUE()LAST_VALUE()
  • 执行顺序

    1. FROM → WHERE → GROUP BY → HAVING(生成基础结果集)
    2. 窗口函数计算(基于基础结果集)
    3. SELECT → ORDER BY → LIMIT(过滤和排序最终结果)

二、高频窗口函数与典型场景

1. 排名函数:处理排序与去重
函数说明示例(按工资降序)
ROW_NUMBER()强制唯一排名(1,2,3...)ROW_NUMBER() OVER (ORDER BY salary DESC)
RANK()允许并列,跳过后续排名(1,1,3)RANK() OVER (ORDER BY salary DESC)
DENSE_RANK()允许并列,不跳过后续排名(1,1,2)DENSE_RANK() OVER (ORDER BY salary DESC)

典型场景

  • Top N 筛选:查询每个部门工资最高的 3 人。

    WITH ranked_employees AS (SELECT *,ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS rnFROM employees
    )
    SELECT * FROM ranked_employees WHERE rn <= 3;
    
  • 去重:删除表中重复记录,保留主键最小的行。

    WITH duplicates AS (SELECT *,ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rnFROM users
    )
    DELETE FROM duplicates WHERE rn > 1;
    
2. 聚合函数:动态计算分组统计值

典型场景

  • 累计计算:计算每月累计销售额。

    SELECT month,sales_amount,SUM(sales_amount) OVER (ORDER BY month) AS cumulative_sales
    FROM monthly_sales;
    
  • 移动平均:计算近 3 天的平均订单量。

    SELECT order_date,order_count,AVG(order_count) OVER (ORDER BY order_date RANGE BETWEEN 2 PRECEDING AND CURRENT ROW) AS 3_day_avg
    FROM daily_orders;
    
3. 偏移函数:获取前后行数据
函数说明示例(获取前一个月销售额)
LAG(字段, N)当前行向前第 N 行的值LAG(sales, 1) OVER (ORDER BY month)
LEAD(字段, N)当前行向后第 N 行的值LEAD(sales, 1) OVER (ORDER BY month)

典型场景

  • 环比计算

    SELECT month,sales,LAG(sales, 1) OVER (ORDER BY month) AS prev_month_sales,ROUND((sales - LAG(sales, 1) OVER (ORDER BY month)) / LAG(sales, 1) OVER (ORDER BY month) * 100, 2) AS growth_rate
    FROM monthly_sales;
    
  • 异常检测:找出销售额突然变化的月份。

    SELECT month,sales,ABS(sales - LAG(sales, 1) OVER (ORDER BY month)) AS sales_change
    FROM monthly_sales
    WHERE ABS(sales - LAG(sales, 1) OVER (ORDER BY month)) > 1000;  -- 变化超过 1000
    

三、窗口子句(Window Frame)高级技巧

1. 窗口范围定义
-- 语法
<窗口函数> OVER (PARTITION BY ...ORDER BY ...[ROWS/RANGE BETWEEN <起始> AND <结束>]
)

  • ROWS vs RANGE
    • ROWS:按物理行计数(无论值是否相同)。
    • RANGE:按逻辑值范围(相同值视为同一行)。

示例:计算当前行及前两行的累计值。

SUM(sales) OVER (ORDER BY monthROWS BETWEEN 2 PRECEDING AND CURRENT ROW
)
2. 常见窗口范围写法
窗口范围说明
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW从组的第一行到当前行(累计值)
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING当前行 + 前一行 + 后一行(移动窗口)
RANGE BETWEEN 7 PRECEDING AND CURRENT ROW当前值的 7 天前到当前(时间窗口)

四、性能优化与避坑指南

1. 索引优化
  • 为 PARTITION BY 和 ORDER BY 字段创建复合索引

    CREATE INDEX idx_dept_salary ON employees (dept_id, salary);
    
     
    • 适用场景:频繁按部门分组并按工资排序的查询。
  • 覆盖索引:若查询仅需窗口函数结果,可创建覆盖索引避免回表。

    CREATE INDEX idx_month_sales ON monthly_sales (month, sales);
    
2. 避免重复计算
  • 用 CTE 缓存中间结果
    WITH ranked_data AS (SELECT *,ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS rnFROM employees
    )
    SELECT * FROM ranked_data WHERE rn <= 3;  -- 避免重复计算排名
    
3. 窗口函数 vs 自连接
  • 窗口函数更高效
    -- 低效:自连接计算部门平均工资
    SELECT e.emp_id,e.salary,d.avg_salary
    FROM employees e
    JOIN (SELECT dept_id, AVG(salary) AS avg_salary FROM employees GROUP BY dept_id
    ) d ON e.dept_id = d.dept_id;-- 高效:窗口函数直接计算
    SELECT emp_id,dept_id,salary,AVG(salary) OVER (PARTITION BY dept_id) AS avg_salary
    FROM employees;
    

五、高频面试题

问题 1:如何用窗口函数实现用户留存分析?

答案示例

WITH first_login AS (SELECT user_id,MIN(login_date) AS first_dateFROM user_loginGROUP BY user_id
),
login_days AS (SELECT fl.user_id,fl.first_date,ul.login_date,DATEDIFF(ul.login_date, fl.first_date) AS days_since_firstFROM first_login flJOIN user_login ul ON fl.user_id = ul.user_id
)
SELECT first_date,COUNT(DISTINCT user_id) AS new_users,SUM(CASE WHEN days_since_first = 1 THEN 1 ELSE 0 END) AS day1_retained,ROUND(SUM(CASE WHEN days_since_first = 1 THEN 1 ELSE 0 END) / COUNT(DISTINCT user_id) * 100, 2) AS day1_retention_rate
FROM login_days
GROUP BY first_date
ORDER BY first_date;
问题 2:窗口函数中 ORDER BY 的作用是什么?

答案要点

  • 对聚合函数ORDER BY 定义窗口范围的排序规则(如累计值按时间递增)。
  • 对排名函数ORDER BY 决定按哪个字段排名(如按工资降序排名)。
  • 若省略 ORDER BY:窗口范围默认为整个分区(所有行)。
问题 3:LAG() 和 LEAD() 的区别是什么?

答案要点

  • LAG():获取当前行之前的第 N 行数据(用于环比、历史对比)。
  • LEAD():获取当前行之后的第 N 行数据(用于预测、提前预警)。

六、实战建议

  1. 复杂查询分步骤编写

    -- 步骤 1:计算基础数据
    WITH base_data AS (SELECT user_id,order_date,ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_date) AS order_rankFROM orders
    )
    -- 步骤 2:筛选首次订单
    SELECT * FROM base_data WHERE order_rank = 1;
    
  2. 结合业务场景选择窗口函数

    • 排名需求:用 ROW_NUMBER()/RANK()
    • 时间序列分析:用 LAG()/LEAD()
    • 动态聚合:用 SUM() OVER()/AVG() OVER()
  3. 注意窗口范围边界

    -- 错误:未指定 ORDER BY,默认窗口为整个分区
    SUM(sales) OVER (PARTITION BY month)  -- 返回每月总和,而非累计值-- 正确:明确 ORDER BY,计算累计值
    SUM(sales) OVER (PARTITION BY month ORDER BY day)
    

总结:窗口函数使用策略

场景推荐函数关键参数
分组排名ROW_NUMBER()RANK()PARTITION BYORDER BY
累计计算SUM() OVER()AVG() OVER()ORDER BYROWS BETWEEN
时间序列对比LAG()LEAD()ORDER BY, 偏移量(如 1)
移动窗口统计AVG() OVER()MAX() OVER()ORDER BYROWS/RANGE
首尾值获取FIRST_VALUE()LAST_VALUE()ORDER BYROWS BETWEEN

通过灵活组合窗口函数、窗口子句和索引优化,可高效解决各类复杂数据分析需求,提升 SQL 查询的表达能力和执行效率。

用简单的话直接说明partition by 与group by 的主要区别

核心区别

  1. 分组后结果行数

    • GROUP BY:合并分组,结果行数减少(每组1行)。
    • PARTITION BY:保留原始行,结果行数不变(每组多行)。
  2. 功能用途

    • GROUP BY:用于聚合统计(如求和、计数)。
    • PARTITION BY:用于窗口计算(如排名、累计值)。

一句话总结

  • GROUP BY 是“合并同类项”,生成新的汇总行;
  • PARTITION BY 是“分组加特效”,在原数据上叠加计算结果。

在出一些相关的sql上的细节问题

以下是补充的 SQL 细节问题清单,聚焦高频考点中的易错点和细节差异,覆盖 JOIN、聚合函数、NULL 处理、索引优化 等维度,附答案要点和示例代码:

一、JOIN 细节问题

1. LEFT JOIN 与 INNER JOIN 的结果差异

问题
两张表 A (id: 1,2,3) 和 B (id: 2,3,4),执行 A LEFT JOIN B ON A.id = B.id 和 A INNER JOIN B ON A.id = B.id 的结果分别是什么?

答案要点

  • LEFT JOIN:返回 A 的所有行(1,2,3),匹配不上的 B 字段填 NULL
    SELECT A.id, B.id FROM A LEFT JOIN B ON A.id = B.id;
    -- 结果:(1,NULL), (2,2), (3,3)
    
  • INNER JOIN:仅返回匹配的行(2,3)。
    SELECT A.id, B.id FROM A INNER JOIN B ON A.id = B.id;
    -- 结果:(2,2), (3,3)
    
2. ON 与 WHERE 条件的执行顺序

问题
LEFT JOIN 中,ON A.x = B.x AND B.y = 'value' 和 WHERE B.y = 'value' 的区别是什么?

答案要点

  • ON 条件:在连接时过滤右表(B),不影响左表(A)的保留。
    SELECT A.id, B.y FROM A LEFT JOIN B ON A.id = B.id AND B.y = 'active';
    -- 结果:A 的所有行,B 中不满足 y='active' 的行填 NULL
    
  • WHERE 条件:在连接后过滤整个结果集,可能导致左表行被剔除。
    SELECT A.id, B.y FROM A LEFT JOIN B ON A.id = B.id WHERE B.y = 'active';
    -- 结果:仅保留 B.y='active' 的行,等价于 INNER JOIN
    

二、聚合函数细节

3. COUNT 的不同用法

问题
COUNT(*)COUNT(column)COUNT(DISTINCT column) 的区别是什么?

答案要点

  • COUNT(*):统计所有行,包括 NULL 值。
  • COUNT(column):统计 column 非 NULL 的行。
  • COUNT(DISTINCT column):统计 column 非重复且非 NULL 的值。

示例

CREATE TABLE test (id INT, name VARCHAR(10));
INSERT INTO test VALUES (1, NULL), (2, 'Alice'), (3, 'Alice');SELECT COUNT(*) AS count_all,          -- 结果:3COUNT(name) AS count_name,      -- 结果:2(排除 NULL)COUNT(DISTINCT name) AS count_distinct;  -- 结果:1(去重后 'Alice')
4. 聚合函数与 NULL 的关系

问题
SUM(column)AVG(column) 遇到 NULL 值如何处理?

答案要点

  • 聚合函数忽略 NULL
    CREATE TABLE sales (amount INT);
    INSERT INTO sales VALUES (100), (NULL), (200);SELECT SUM(amount) AS total,     -- 结果:300(忽略 NULL)AVG(amount) AS average;   -- 结果:150(计算时排除 NULL)
    
  • 若需包含 NULL:用 COALESCE 转换为 0。
    SELECT SUM(COALESCE(amount, 0)) AS total,  -- 结果:300 + 0 = 300AVG(COALESCE(amount, 0)) AS average;  -- 结果:(100+0+200)/3 = 100
    

三、NULL 处理细节

5. NULL 的比较规则

问题
WHERE column = NULL 和 WHERE column IS NULL 的区别是什么?

答案要点

  • = 无法判断 NULL
    SELECT * FROM users WHERE email = NULL;  -- 永远返回空结果
    
  • 必须用 IS NULL 或 IS NOT NULL
    SELECT * FROM users WHERE email IS NULL;  -- 正确
    
6. COALESCE 与 IFNULL 的区别

问题
COALESCE(value1, value2) 和 IFNULL(value1, value2) 的区别是什么?

答案要点

  • COALESCE:支持多个参数,返回第一个非 NULL 值(标准 SQL)。
    COALESCE(NULL, 1, 2)  -- 结果:1
    
  • IFNULL:仅支持两个参数(MySQL 特有)。
    IFNULL(NULL, 1)  -- 结果:1
    

四、索引优化细节

7. 复合索引的最左匹配原则

问题
索引 (a, b, c) 能加速哪些查询?

答案要点

  • 可加速
    WHERE a = 1              -- 匹配 a
    WHERE a = 1 AND b = 2    -- 匹配 a,b
    WHERE a = 1 AND b = 2 AND c = 3  -- 匹配 a,b,c
    
  • 无法加速
    WHERE b = 2              -- 未从 a 开始
    WHERE a = 1 AND c = 3    -- 跳过 b
    
8. 索引失效的常见场景

问题
哪些操作会导致索引失效?

答案要点

  • 对索引字段使用函数
    WHERE YEAR(create_time) = 2023  -- 索引失效
    
  • 隐式类型转换
    WHERE id = '123'  -- 若 id 为 INT,触发类型转换
    
  • 范围查询后的字段
    WHERE a > 10 AND b = 20  -- 索引 (a, b) 仅 a 生效
    

五、SQL 执行顺序细节

9. SQL 子句的执行顺序

问题
写出 SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT 的执行顺序。

答案要点

  1. FROM → 2. WHERE → 3. GROUP BY → 4. HAVING → 5. SELECT → 6. ORDER BY → 7. LIMIT
10. 子查询与 JOIN 的性能差异

问题
何时使用子查询,何时使用 JOIN?

答案要点

  • 子查询:适用于单行 / 单列的结果(如标量子查询)。
    SELECT name FROM users WHERE id = (SELECT user_id FROM orders WHERE order_id = 1);
    
  • JOIN:适用于多表关联,性能通常更优。
    SELECT u.name FROM users u JOIN orders o ON u.id = o.user_id WHERE o.order_id = 1;
    

六、日期时间处理细节

11. 日期比较的常见陷阱

问题
如何查询 2023-01-01 到 2023-01-31 之间的数据?

答案要点

  • 正确写法
    WHERE date_column >= '2023-01-01' AND date_column < '2023-02-01';
    
  • 错误写法
    WHERE date_column BETWEEN '2023-01-01' AND '2023-01-31';  -- 可能漏掉 23:59:59 的记录
    
12. 不同数据库的日期函数差异

问题
如何获取当前日期?

答案要点

数据库函数
MySQLCURDATE() 或 NOW()
PostgreSQLCURRENT_DATE 或 NOW()
SQL ServerGETDATE()

七、字符串处理细节

13. 字符串拼接的语法差异

问题
如何拼接字符串 'Hello' 和 'World'

答案要点

数据库语法
MySQLCONCAT('Hello', 'World')
PostgreSQL`'Hello''World'`
SQL Server'Hello' + 'World'
14. 字符串截取函数

问题
如何截取字符串 'abcdef' 的前 3 个字符?

答案要点

数据库函数
MySQLSUBSTRING('abcdef', 1, 3)
PostgreSQLSUBSTRING('abcdef', 1, 3)
SQL ServerSUBSTRING('abcdef', 1, 3)

八、业务场景细节

15. 如何实现分页查询?

问题
查询第 10 页(每页 10 条)的数据。

答案要点

  • MySQL/PostgreSQL
    SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 90;  -- 第 10 页
    
  • 优化大分页
    SELECT * FROM users WHERE id > 90 LIMIT 10;  -- 通过主键定位,避免全表扫描
    
16. 如何设计自增主键?

问题
自增主键 vs UUID 的适用场景?

答案要点

  • 自增主键:性能优,适合频繁插入(如订单表)。
    CREATE TABLE orders (id BIGINT AUTO_INCREMENT PRIMARY KEY, ...);
    
  • UUID:分布式场景,避免主键冲突(如用户表)。
    CREATE TABLE users (id UUID PRIMARY KEY DEFAULT gen_random_uuid(), ...);
    

九、面试应答技巧

  1. 分步骤解释复杂问题
    例如解释窗口函数时:

    " 第一步,PARTITION BY 将数据分组;第二步,ORDER BY 确定每组内的排序;第三步,窗口函数对每组数据进行计算。"

  2. 主动对比不同方案
    例如优化慢查询时:

    "我会先分析执行计划,若发现全表扫描,优先添加索引;若索引已存在但仍慢,考虑是否需要拆分大查询或使用覆盖索引。"

  3. 结合业务场景举例
    例如解释反范式化时:

    "在电商订单表中,我们冗余存储了用户姓名,因为订单查询时 90% 的场景需要展示用户信息,这样能减少 JOIN 操作,提升查询速度。"

总结

SQL 面试的细节陷阱主要集中在:

  1. 逻辑差异LEFT JOIN vs INNER JOINON vs WHEREGROUP BY vs PARTITION BY
  2. NULL 处理NULL 不能用 = 比较,聚合函数默认忽略 NULL
  3. 索引优化:复合索引的最左匹配、索引失效场景。
  4. 函数差异:不同数据库的日期 / 字符串函数语法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82422.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【QT】QString和QStringList去掉空格的方法总结

目录 一、QString去掉空格 1. 移除字符串首尾的空格&#xff08;trimmed&#xff09; 2. 移除字符串中的所有空格&#xff08;remove&#xff09; 3. 仅移除左侧&#xff08;开头&#xff09;或右侧&#xff08;结尾&#xff09;空格 4. 替换多个连续空格为单个空格 5. 移…

电脑 IP 地址修改工具,轻松实现异地登陆

在互联网时代&#xff0c;异地登陆需求日益频繁 —— 访问区域限制内容、跨区协作、优化游戏体验等场景&#xff0c;都需要通过修改 IP 地址实现。 一、IP 地址基础认知 IP 地址是设备的网络身份标识&#xff0c;不同地区分配不同 IP 段。通过修改 IP&#xff0c;可模拟目标地…

[BUG]Debian/Linux操作系统中 安装 curl等软件显示无候选安装(E: 软件包 curl 没有可安装候选)

本文内容组织形式 问题描述失效原因解决方案首先修改源列表为国内确认当前系统的版本Debian 11 (Bullseye)Debian 12 (Bookworm) 执行系统升级更新系统重新安装curl 结语 问题描述 日期&#xff1a;20250526 操作系统&#xff1a; debian darkchunkdebian:/home$ sudo apt i…

leetcode hot100刷题日记——12.反转链表

解答&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(n…

JavaSE核心知识点04工具04-01(JDK21)

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

数据库入门:以商品订单系统为例

数据库入门&#xff1a;以商品订单系统为例 一、前言 数据库是现代软件开发中不可或缺的基础&#xff0c;掌握数据库的基本概念和操作&#xff0c;是每个开发者的必经之路。本文将以“商品-品牌-客户-订单-订单项”为例&#xff0c;带你快速入门数据库的核心知识和基本操作。…

UE失落方舟特效学习 笔记01

通过法线扭曲贴图 Begin Object Class/Script/UnrealEd.MaterialGraphNode Name"MaterialGraphNode_0" ExportPath"/Script/UnrealEd.MaterialGraphNode/Engine/Transient.M_RadialUV_01:MaterialGraph_0.MaterialGraphNode_0"Begin Object Class/Script/E…

跨境支付风控失效?用代理 IP 构建「地域 - 设备 - 行为」三维防护网

针对跨境支付风控失效问题&#xff0c;结合代理IP技术构建「地域-设备-行为」三维防护网是当前最有效的解决方案。以下是基于最新实践的技术路径与策略指南&#xff1a; 一、地域维度&#xff1a;IP地理特征精准匹配 IP属地真实性验证 优先选择住宅代理IP&#xff08;Residenti…

AI的“软肋”:架构设计与业务分析的壁垒

尽管人工智能&#xff08;AI&#xff09;在代码生成、数据分析等方面取得了显著进展&#xff0c;但在架构设计和业务分析的核心领域&#xff0c;人类的智慧和经验仍然是不可替代的。这些领域往往涉及高度的抽象思维、战略远见、对复杂商业逻辑的深刻理解以及在模糊不清的环境中…

【Redis实战篇】基于Redis的功能实现附近商铺查询(Geo),用户签到与统计(Bitmap),网站UV统计(HyperLogLog)

文章目录 附近商铺GEOSEARCH 实现语法参数解释 GEORADIUS 实现基本语法参数详解必选参数可选参数参数详解必选参数 代码实现 用户签到BitmapRedis 中 Bitmap 基本操作1. 设置位值2. 获取位值3. 统计位值为 1 的数量4. 位图运算 Spring Data Redis 中操作 Bitmap1. 操作示例(1) …

【C++高阶一】二叉搜索树

【C高阶一】二叉搜索树剖析 1.什么是二叉搜索树2.二叉搜索树非递归实现2.1插入2.2删除2.2.1删除分析一2.2.2删除分析二 2.3查找 3.二叉搜索树递归实现3.1插入3.2删除3.3查找 4.完整代码 1.什么是二叉搜索树 任何一个节点&#xff0c;他的左子树的所有节点都比他小&#xff0c;右…

前端面试热门知识点总结

URL从输入到页面展示的过程 版本1 1.用户在浏览器的地址栏输入访问的URL地址。浏览器会先根据这个URL查看浏览器缓存-系统缓存-路由器缓存&#xff0c;若缓存中有&#xff0c;直接跳到第6步操作&#xff0c;若没有&#xff0c;则按照下面的步骤进行操作。 2.浏览器根据输入的UR…

Swagger | 解决Springboot2.x/3.x不兼容和依赖报错等问题

目录 不兼容报错提醒 1. 修改Spring Boot版本 2. 修改application.yml配置文件 3. 使用其他替代方案 依赖兼容 配置 Yaml 文件 依赖报错提醒 解决方法 1. 选择一个库 2. 移除springfox依赖 3. 添加springdoc依赖 4. 配置springdoc 5. 清理项目 6. 启动项目 示例代…

C++默认构造函数、普通构造函数、拷贝构造、移动构造、委托构造及析构函数深度解析

目录 一、默认构造函数&#xff08;Default Constructor&#xff09;二、普通构造函数&#xff08;General Constructor&#xff09;三、拷贝构造函数&#xff08;Copy Constructor&#xff09;四、移动构造函数&#xff08;Move Constructor&#xff0c;C11&#xff09;五、委…

JVM 深度解析

一、JVM 概述 1.1 什么是 JVM&#xff1f; JVM&#xff08;Java Virtual Machine&#xff0c;Java 虚拟机&#xff09;是 Java 程序运行的核心引擎。它像一个“翻译官”&#xff0c;将 Java 字节码转换为机器能理解的指令&#xff0c;并管理程序运行时的内存、线程等资源。 …

OpenCV CUDA 模块图像过滤-----创建一个计算图像导数的滤波器函数createDerivFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::createDerivFilter 是 OpenCV CUDA 模块中的一个工厂函数&#xff0c;用于创建一个计算图像导数的滤波器。这个滤波器可以用来计算图像…

Spring Boot 接口开发实战指南

Spring Boot 接口开发实战指南 一、基础接口开发步骤 1.1 添加必要依赖 <!-- pom.xml --> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></depen…

题目 3325: 蓝桥杯2025年第十六届省赛真题-2025 图形

题目 3325: 蓝桥杯2025年第十六届省赛真题-2025 图形 时间限制: 2s 内存限制: 192MB 提交: 494 解决: 206 题目描述 小蓝要画一个 2025 图形。图形的形状为一个 h w 的矩形&#xff0c;其中 h 表示图形的高&#xff0c;w 表示图形的宽。当 h 5,w 10 时&#xff0c;图形如下所…

UML 时序图 使用案例

UML 时序图 UML 时序图 (Sequence Diagram)时序图的主要元素消息类型详解时序图示例时序图绘制步骤时序图的应用场景 UML 时序图 (Sequence Diagram) 时序图是UML(统一建模语言)中用于展示对象之间交互行为的动态视图&#xff0c;它特别强调消息的时间顺序。 时序图的主要元素…

PPT连同备注页(演讲者模式)一块转为PDF

首先&#xff0c;进入创建PDF/XPS&#xff1a; 然后进入选项&#xff1a; 发布选项-发布内容里选备注页&#xff1a; 导出的原始结果是这样的&#xff1a; 这个时候裁剪一下&#xff0c;范围为所有页面&#xff1a; 最终结果&#xff1a; 如果导出不选“备注页”而是只勾选“包…