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

十、HQL:排序、联合与 CTE 高级查询

作者:IvanCodes
日期:2025年5月15日
专栏:Hive教程

Apache Hive 作为大数据领域主流的数据仓库解决方案,其查询语言 HQL (Hive Query Language) 是数据分析师和工程师日常工作的核心。除了基础的 SELECT-FROM-WHERE,HQL 还提供了强大的排序、数据合并以及组织复杂查询的机制。本文将深入探讨 HQL 中的排序操作 (SORT BY, ORDER BY, CLUSTER BY, DISTRIBUTE BY)联合查询 (UNION, UNION ALL) 以及公用表表达式 (CTE),并通过代码示例丰富的练习题助您全面掌握这些高级查询技巧

在这里插入图片描述
在这里插入图片描述

一、HQL 中的数据排序艺术

排序是数据分析中最常见的需求之一。HQL 提供了多种排序子句,它们在执行方式适用场景上有所区别

(一) ORDER BY:全局排序的标杆

ORDER BY 会对查询的最终结果进行全局排序。这意味着所有数据都会被发送到一个 Reducer 任务中进行统一排序。因此,对于非常大的数据集ORDER BY 可能会非常耗时消耗资源,甚至导致Reducer 内存溢出

  • 使用场景:当需要确保最终输出结果完全有序时使用,通常用于结果集较小最终展示的场景。

  • 语法
    SELECT col1, col2 FROM table_name ORDER BY col1 [ASC|DESC] [, col2 [ASC|DESC] ...];

  • 示例:查询员工信息,并按薪水降序排列。
    假设我们有表 employees (id INT, name STRING, salary DECIMAL)。

SELECT id, name, salary
FROM employees
ORDER BY salary DESC;
(二) SORT BY:Reducer 内的局部排序

SORT BY 则执行局部排序。数据在进入 Reducer 之前,会先在各自的 Reducer 内部进行排序。如果只有一个 ReducerSORT BY 的效果等同于 ORDER BY。如果有多个 Reducer,则每个 Reducer 输出的数据是有序的,但全局来看,数据可能不是完全有序的。

  • 使用场景:通常与 DISTRIBUTE BY 结合使用,或者当后续处理步骤(如聚合)需要局部有序数据时。比 ORDER BY 效率更高

  • 语法
    SELECT col1, col2 FROM table_name SORT BY col1 [ASC|DESC] [, col2 [ASC|DESC] ...];

  • 示例:按部门ID分区,然后按薪水在每个部门内排序(假设已有机制或后续操作使数据按部门进入不同 Reducer)。

SELECT id, name, department_id, salary
FROM employees
SORT BY salary DESC;
-- 注意:如果 Reduce 个数 > 1,全局可能无序。
(三) DISTRIBUTE BY:控制数据流向

DISTRIBUTE BY 用于控制 Map 阶段的输出如何分配不同的 Reducer 任务。它确保具有相同 DISTRIBUTE BY 列值的行会被发送到同一个 Reducer 进行处理。

  • 使用场景:常与 SORT BY 结合,实现分组后组内排序。例如,先按用户ID分发,再在每个用户内部按时间排序。

  • 语法
    SELECT col1, col2 FROM table_name DISTRIBUTE BY col1 [, col2 ...];

  • 示例:将员工数据按部门ID分发到不同的 Reducer,然后每个 Reducer 内按薪水降序排序。

SELECT id, name, department_id, salary
FROM employees
DISTRIBUTE BY department_id
SORT BY salary DESC;

上述查询会保证同一个部门的员工数据进入同一个 Reducer,并且在该 Reducer 内按薪水降序排列

(四) CLUSTER BY:分发与排序的便捷组合

CLUSTER BYDISTRIBUTE BYSORT BY 功能的一个便捷组合,但前提分发键和排序键相同的,并且排序顺序只能是升序 (ASC)

  • 使用场景:当需要按某些列进行数据分区,并且在每个分区内按这些相同的列进行升序排序时。

  • 语法
    SELECT col1, col2 FROM table_name CLUSTER BY col1 [, col2 ...];
    它等价于:
    SELECT col1, col2 FROM table_name DISTRIBUTE BY col1 [, col2 ...] SORT BY col1 ASC [, col2 ASC ...];

  • 示例:将员工数据按部门ID分发,并在每个部门内按部门ID升序排序(虽然按部门ID排序意义不大,但演示了语法)。

SELECT id, name, department_id, salary
FROM employees
CLUSTER BY department_id;

二、合并查询结果:UNIONUNION ALL

有时,我们需要将多个 SELECT 语句结果集合并一个结果集。HQL 提供了 UNIONUNION ALL 来实现这一目的。

(一) UNION ALL:简单追加,保留重复

UNION ALL简单地将所有查询的结果行追加在一起,不会进行任何去重操作。

  • 使用场景:当确定合并的结果集之间没有重复,或者需要保留所有重复行时。效率比 UNION 高。

  • 语法
    SELECT_statement1 UNION ALL SELECT_statement2 [UNION ALL SELECT_statement3 ...];
    注意:所有 SELECT 语句选择的列数、列的数据类型必须一致或兼容

  • 示例:合并两个部门(假设为 dept_Adept_B 表)的员工列表。

SELECT id, name, 'DepartmentA' AS department_source FROM dept_A
UNION ALL
SELECT emp_id, emp_name, 'DepartmentB' AS department_source FROM dept_B;
(二) UNION:合并并去重

UNION 操作符首先合并所有查询结果,然后移除结果集中重复行

  • 使用场景:当需要确保最终结果集没有重复记录时。

  • 语法
    SELECT_statement1 UNION SELECT_statement2 [UNION SELECT_statement3 ...];

  • 示例:合并两个产品列表(products_store1, products_store2),并确保没有重复的产品。

SELECT product_id, product_name FROM products_store1
UNION
SELECT item_id, item_name FROM products_store2;

三、化繁为简:公用表表达式 (CTE)

公用表表达式 (Common Table Expression, CTE) 是一种强大的 SQL 特性,它允许你在单个 SQL 语句执行范围定义一个或多个 临时的、命名的结果集。这些命名的结果集可以在后续的查询部分(如主 SELECT 语句或其他 CTE)中被引用

  • 核心优势

    • 提高可读性:将复杂查询分解为多个逻辑清晰小步骤
    • 代码复用:一个 CTE 可以在同一查询中多次引用
    • 支持递归查询(虽然 HQL 对递归 CTE 的支持可能有限或有特定语法)。
  • 语法
    WITH cte_name1 AS ( SELECT_statement1 ), cte_name2 AS ( SELECT_statement2 -- 可以引用 cte_name1 ) SELECT ... FROM cte_name1 JOIN cte_name2 ON ... WHERE ...;

  • 示例:计算每个部门的平均工资,然后找出工资高于其所在部门平均工资的员工。
    假设 employees 表有 id, name, department_id, salary 列。

WITH department_avg_salary AS (SELECTdepartment_id,AVG(salary) AS avg_salFROM employeesGROUP BY department_id
)
SELECTe.id,e.name,e.department_id,e.salary,das.avg_sal AS department_average_salary
FROM employees e
JOIN department_avg_salary das ON e.department_id = das.department_id
WHERE e.salary > das.avg_sal;

四、练习与巩固

为了更好地掌握以上知识点,请尝试完成以下练习。假设我们有以下几张表:

  • students 表:student_id INT, student_name STRING, class_id INT, score DECIMAL, gender STRING, birth_date DATE
  • class_info 表:class_id INT, class_name STRING, teacher_name STRING
  • employees_asia 表: emp_id INT, emp_name STRING, region STRING, salary DECIMAL
  • employees_europe 表: emp_id INT, emp_name STRING, region STRING, salary DECIMAL
  • orders 表: order_id INT, customer_id INT, order_date DATE, total_amount DECIMAL

练习题1:
查询所有学生的信息,要求最终结果首先按 class_id 升序排列,然后在每个班级内部score 降序排列。

练习题2:
合并亚洲区员工表 employees_asia 和欧洲区员工表 employees_europe所有员工信息,并确保结果中没有重复的员工 (基于 emp_id)。

练习题3 (使用 CTE):
查询每个班级的最高分,并列出获得该班级最高分学生姓名、分数以及班级名称

练习题4:
将学生数据按性别 (gender) 分发到不同的 Reducer,然后在每个性别分组内部birth_date 升序排列,输出学生姓名和出生日期。

练习题5:
找出所有订单总金额 (total_amount) 高于 1000 的订单,并按订单日期 (order_date) 降序排列显示其 order_idtotal_amount

练习题6 (使用 UNION ALL):
假设有两个课程表 courses_fall (course_id, course_name) 和 courses_spring (course_id, course_name) 分别记录秋季和春季开设的课程。请列出所有开设过的课程(允许重复,如果一个课程在两学期都开设)。

练习题7:
使用 CLUSTER BYclass_idstudents 表进行分区和排序(升序),查询 student_idclass_id

练习题8 (CTE 与聚合):
找出每个客户 (customer_id) 的订单总数总订单金额

练习题9 (多重排序):
查询 employees_asia 表,先按 region 升序,再按 salary 降序,最后按 emp_name 升序排列。

练习题10 (CTE 嵌套或多步):
首先找出每个班级平均分。然后,基于此结果,找出所有成绩高于所在班级平均分学生姓名、班级ID和他们的分数

五、练习题答案

答案1:

SELECT student_id, student_name, class_id, score
FROM students
ORDER BY class_id ASC, score DESC;

答案2:

SELECT emp_id, emp_name, region, salary FROM employees_asia
UNION
SELECT emp_id, emp_name, region, salary FROM employees_europe;

答案3:

WITH class_max_score AS (SELECTclass_id,MAX(score) AS max_scoreFROM studentsGROUP BY class_id
)
SELECTs.student_name,s.score,cms.class_id,ci.class_name
FROM students s
JOIN class_max_score cms ON s.class_id = cms.class_id AND s.score = cms.max_score
JOIN class_info ci ON s.class_id = ci.class_id;

答案4:

SELECT student_name, birth_date
FROM students
DISTRIBUTE BY gender
SORT BY birth_date ASC;

答案5:

SELECT order_id, total_amount
FROM orders
WHERE total_amount > 1000
ORDER BY order_date DESC;

答案6:

SELECT course_id, course_name FROM courses_fall
UNION ALL
SELECT course_id, course_name FROM courses_spring;

答案7:

SELECT student_id, class_id
FROM students
CLUSTER BY class_id;

答案8:

WITH customer_order_summary AS (SELECTcustomer_id,COUNT(order_id) AS order_count,SUM(total_amount) AS total_spentFROM ordersGROUP BY customer_id
)
SELECT customer_id, order_count, total_spent
FROM customer_order_summary;

或者直接查询:

SELECTcustomer_id,COUNT(order_id) AS order_count,SUM(total_amount) AS total_spent
FROM orders
GROUP BY customer_id;

答案9:

SELECT emp_id, emp_name, region, salary
FROM employees_asia
ORDER BY region ASC, salary DESC, emp_name ASC;

答案10:

WITH class_avg_scores AS (SELECTclass_id,AVG(score) AS avg_class_scoreFROM studentsGROUP BY class_id
),
students_above_avg AS (SELECTs.student_name,s.class_id,s.score,cas.avg_class_scoreFROM students sJOIN class_avg_scores cas ON s.class_id = cas.class_idWHERE s.score > cas.avg_class_score
)
SELECT student_name, class_id, score
FROM students_above_avg;

结语

掌握 HQL 中的排序机制、联合查询以及公用表表达式 (CTE),能够显著提升处理和分析大数据的能力和效率ORDER BY 提供了全局有序的保证,而 SORT BYDISTRIBUTE BYCLUSTER BY 则为更细致的性能调优分布式处理逻辑提供了灵活的控制UNIONUNION ALL 使得数据整合变得简单直接。CTE 更是组织复杂查询提升代码可读性利器。通过不断练习,你会越来越熟练地运用这些高级特性解决实际数据问题

相关文章:

十、HQL:排序、联合与 CTE 高级查询

作者:IvanCodes 日期:2025年5月15日 专栏:Hive教程 Apache Hive 作为大数据领域主流的数据仓库解决方案,其查询语言 HQL (Hive Query Language) 是数据分析师和工程师日常工作的核心。除了基础的 SELECT-FROM-WHERE,HQ…...

数据结构—排序(斐波那契数列,冒泡,选择,插入,快速,归并,图,广度优先算法)

目录 一 斐波那契数列(递归算法) 定义 原理 二 冒泡排序 定义 排序思路 函数原型 参数详解: 算法分析: 1. 使用函数库的qsort函数 2. 自定义冒泡排序 三 选择排序 定义 排序思路 四 插入排序 定义 排序思路 五 快速…...

NetSuite CSV导入Item Fulfillment的功能测试

上一篇我们说过如何通过CSV导入更新IF上的Department/Class信息,这篇是来测试一下如果SO在Pending Fulfillment的状态下通过CSV导入IF,这个新版本的一个功能,刚好将测试的过程与结果与大家分享~ 准备文件 External ID是外部ID; …...

网络原理 | 网络基础概念复习

目录 网络中的重要概念 IP地址 端口号 协议 五元组 协议分层 OSI七层网络模型 TCP/IP 五层(四层)模型 网络设备所在的分层 封装和分用 网络中的重要概念 IP地址 IP地址主要用于标识网络主机、其他网络设备的网络地址。在网络数据传输中&#…...

Vsan数据恢复——Vsan上虚拟机不可用,虚拟机组件信息破坏的数据恢复

Vsan数据恢复环境: 一台采用VsSAN分布式文件系统的存储设备由于未知原因关机重启。管理员发现上层的虚拟机不可用,存储内的数据丢失。 Vsan数据恢复过程: 1、将故障存储设备断电,将存储内的硬盘编号后取出。硬件工程师检测后没有发…...

V837s-LAN8720A网口phy芯片调试

目录 前言 一、LAN8720A 芯片概述 二、硬件连接 三、设备树配置 四、内核配置 五、网口调试 总结 前言 在嵌入式系统开发中,网络连接是至关重要的一部分。v837s开发板搭载了LAN8720A系列的网口PHY芯片,用于实现以太网连接。在开发过程中,对于网口的稳定性和性能的调试至…...

C++(12):using声明

目录 一、定义 二、核心用法示例 示例 1:单独引入 std::string 和 std::coun 示例 2:在局部作用域中使用 using 声明 三、对比 using namespace std(不推荐) 四、关键注意事项 1. 名称冲突问题 2. 作用域规则 3. 头文件中的陷阱 五、最佳实践总结 六、完整安全示…...

Xinference 命令大全:从模型部署到管理

Xinference 是一个高性能、分布式的模型推理框架,支持多种大语言模型(LLM)、嵌入模型(Embedding)和图像生成模型。本文将详细介绍 Xinference 的常用命令,涵盖模型启动、管理、监控及 API 调用,帮助你快速掌握其核心功能。 1. 安装与启动 Xinference 1.1 安装 Xinferen…...

如何在线免费压缩PDF文档?

PDF文件太大,通常是因为内部嵌入字体和图片。怎么才能将文件大小减减肥呢,主要有降低图片清晰度和去除相关字体两个方向来实现文档效果。接下来介绍三个免费压缩PDF实用工具。 (一)iLoveOFD在线转换工具 iLoveOFD在线转换工具&a…...

在Rocky Linux 9.5上部署MongoDB 8.0.9:从安装到认证的完整指南

mongodb 的部署 #安装依赖 yum -y install libcurl openssl #安装mongodb yum -y install https://repo.mongodb.org/yum/redhat/9/mongodb-org/8.0/x86_64/RPMS/mongodb-org-server-8.0.9-1.el9.x86_64.rpm #启动服务 systemctl start mongod.service && system…...

Unix Bourne Shell

本文来源 : 腾讯元宝 Unix Bourne Shell(简称sh)是Unix系统中最经典的命令行解释器(shell),由Stephen Bourne于1977年在贝尔实验室开发,并成为后续众多shell(如bash、ksh等&#xff…...

如何在 AWS 上构建支持 AVIF 的前端图片优化方案

一、为什么使用 AVIF 图片格式? 优势点 说明 高压缩率 在相似质量下,AVIF 文件比 JPEG/PNG/WebP 更小,能有效节省带宽和存储空间。 更高画质 即使在低码率下也能保持清晰细节,减少压缩带来的马赛克或模糊问题。 支持透明度 …...

Linux系统进行环境开发环境配置

一. 使用fishros(鱼香肉丝)配置开发环境 对于初学者来说,最难的关卡莫非是开发环境的的搭建,特别是在Ubuntu系统上ROS系统安装时后出现的各种报错以及失败,本篇博客讲述了ROS系统的一键安装过程,适用于18.04及以后的Ubuntu系统版本…...

前端npm的核心作用与使用详解

一、npm是什么? npm(Node Package Manager) 是 Node.js 的默认包管理工具,也是全球最大的开源代码库生态系统。虽然它最初是为 Node.js 后端服务设计的,但如今在前端开发中已成为不可或缺的基础设施。通过npm,开发者可以轻松安装、管理和共享代码模块。 特性: 依赖管理…...

软考软件评测师——软件工程之系统维护

一、系统质量属性 可维护性 衡量软件系统适应修改的难易程度,包括修复缺陷、扩展功能或调整规模的效率。计算公式为:系统可用时间占比 1/(1平均修复时间),其中平均修复时间(MTTR)指排除故障所需的平均耗时。 可靠性 vs 可用性 可靠性&…...

CSRF攻击 + 观测iframe加载时间利用时间响应差异侧信道攻击 -- reelfreaks DefCamp 2024

参考: https://0x90r00t.com/2024/09/30/3708/ 题目信息 有些事情最好还是保持低调。当然,除非你是个真正的怪胎。 注意:该网站通过HTTPS提供服务 标志格式:DCTF{}题目实现了一个类似视频网站的东西 在其提供的数据库中…...

火山RTC 8 SDK集成进项目中

一、SDK 集成预备工作 1、SDK下载 https://www.volcengine.com/docs/6348/75707 2、解压后 3、放在自己项目中的位置 1)、include 2)、lib 3)、dll 暂时,只需要VolcEngineRTC.dll RTCFFmpeg.dll openh264-4.dll, 放在intLive2…...

spring boot Controller 和 RestController 的区别

spring boot Controller 和 RestController 的区别 5.3.1常用注解 Spring MVC控制器中常使用的注解有如下几种。 Controller Controller 标记在类上。使用Controller 标记的类表示是Spring MVC的Controller对象。分发处理器将会扫描使用了该注解的类,并检测其中的…...

mavgenerate 在 win11 下环境搭建注意问题

开发随笔 mavgenerate 是mavlink配套的协议生成工具,mavgenerate 在 win11 下环境搭建注意问题: 1、Python 就使用文件包当中的版本,由于python 版本能与 future 及 pip 之间存在特定的组合关系,故不推荐下载使用最新版本 2、安…...

SSM项目集成redis、Linux服务器安装redis

在SSM(Spring Spring MVC MyBatis)项目中引入Redis主要分为以下步骤,确保配置正确并能在业务中灵活使用: 1. 添加Redis依赖​​ 在Maven的pom.xml中添加Spring Data Redis和Jedis(或Lettuce)依赖&#…...

sqli-labs靶场第七关——文件导出注入

一:目标 通过sql注入将php代码写入网站目录,通过这个php文件执行命令 二:确认前置条件 %secure_file_priv% 首先我们需要Mysql是否允许导出文件 先尝试在网页中sql注入,检查导出权限 ?id1)) union select 1,secure_file_pr…...

python使用matplotlib无法显示中文字体报错

python使用matplotlib字体报错 当我们使用python使用matplotlib总是出现报错,图片中文变成方框 findfont: Font family WenQuanYi Micro Hei not found. findfont: Font family Heiti TC not found. findfont: Font family [SimHei] not found. Falling back to De…...

VTEP是什么

VTEP(VXLAN Tunnel Endpoint,VXLAN 隧道端点)是 VXLAN(Virtual Extensible LAN)网络中的关键组件,用于处理 VXLAN 流量的封装和解封装。以下以可读的 Markdown 格式详细解释 VTEP 的定义、功能、实现方式以…...

React Native简介

React Native 是由 Meta(原 Facebook)开源的跨平台移动应用开发框架,基于 React 和 JavaScript,允许开发者使用同一套代码库构建 iOS 和 Android 原生应用。通过 JavaScript 调用原生组件实现高性能渲染。 跨平台开发 共享 80%-9…...

边缘计算模块

本文来源 :腾讯元宝 边缘计算模块是一种部署在网络边缘(靠近数据源)的集成化硬件/软件设备,用于实时处理本地数据,减少云端依赖,提升响应速度与安全性。以下是其核心要点: ​​1. 核心组成​​ …...

策略模式-枚举实现

策略模式的实现方法有很多,可以通过策略类if,else实现。下面是用枚举类实现策略模式的方法。 定义一个枚举类,枚举类有抽象方法,每个枚举都实现抽象方法。这个策略,实现方法是工具类的很实现,代码简单好理解 枚举实现…...

C++算法(22):二维数组参数传递,从内存模型到高效实践

引言 在C程序设计中,二维数组的参数传递是许多开发者面临的棘手问题。不同于一维数组的相对简单性,二维数组在内存结构、类型系统和参数传递机制上都存在独特特性。本文将深入探讨静态数组、动态数组以及STL容器三种实现方式,通过底层原理分…...

LeetCode LCR 015. 找到字符串中所有字母异位词 (Java)

LCR 015. 找到字符串中所有字母异位词 题目描述 给定两个字符串 s 和 p,要求找到 s 中所有是 p 的变位词(字母相同但排列不同)的子串,并返回这些子串的起始索引。例如: 输入 s "cbaebabacd", p "a…...

幼儿学前教育答辩词答辩技巧问题答辩自述稿

### 📘《幼儿园大班活动开展存在的问题及解决策略》📝 我的论文题目是《幼儿园大班活动开展存在的问题及解决策略》📖。我将从论文框架、研究内容、需要解决的问题、研究结论这四部分来阐述我的论文📝。 论文框架由绪论&#x1f4…...

双目立体视觉

文章目录 1,前言2,原理3,组成部分3.1,数字图像采集。3.2 ,相机标定。3.3,图像预处理与特征提取。3.4 ,图像校正。3.5 ,立体匹配。3.6 ,三维重建。 4,主要的算…...

机器人弧焊二八混合气体节约

焊接技术在现代工业生产中作为关键环节之一,其效率和成本直接影响到整个制造流程的经济性与环保性。近年来,随着节能减排理念深入人心,各行业都在积极探索绿色制造方案。在焊接领域,二八混合气体的应用结合WGFACS智能流量调节系统…...

Linux进程通讯和原子性

在Linux系统中,进程间通信(IPC)和原子性是并发编程中的核心问题。以下是对这些概念的详细分步解释: 一、进程间通信(IPC)方法 1. 管道(Pipe) 匿名管道:用于父子进程等有…...

深度学习之用CelebA_Spoof数据集搭建一个活体检测-一些模型训练中的改动带来的改善

实验背景 在前面的深度学习之用CelebA_Spoof数据集搭建一个活体检测-模型搭建和训练,我们基于CelebA_Spoof数据集构建了一个用SqueezeNe框架进行训练的活体2D模型,采用了蒸馏法进行了一些简单的工作。在前面提供的训练参数中,主要用了以下几…...

Oracle APEX IR报表列宽调整

1. 问题:如何调整Oracle APEX IR报表列宽 1-1. 防止因标题长而数据短,导致标题行的文字都立起来了,不好看。 1-2. 防止因数据太长而且中间还没有空格,把列撑开的太宽也不换行,不好看。 2. 解决办法 针对如上问题解…...

6大核心记忆方法

以下是结合脑科学原理和高效学习策略总结的 6大核心记忆方法,帮助你摆脱“学完就忘”的困境: 一、间隔重复与分散学习 遵循艾宾浩斯遗忘曲线:学习后20分钟遗忘58%,1天后遗忘66%。通过设定复习节点(如学后1天、3天、1周…...

conda更换清华源

1、概览 anaconda更换速度更快、更稳定的下载源,在linux环境测试通过。 2、conda源查看 在修改之前可以查看下现有conda源是什么,查看conda配置信息,如下: cat ~/.condarc 可以看到你的conda源,以我的conda源举例&am…...

5月15日星期四今日早报简报微语报早读

5月15日星期四,农历四月十八,早报#微语早读。 1、中国至越南河内国际道路运输线路正式开通; 2、免签国1,中乌(兹别克斯坦)互免签证协定6月生效; 3、杭州“放大招”支持足球发展:足…...

网络损伤仪功能介绍与应用场景剖析

以下是关于 网络损伤仪(Network Impairment Emulator) 的核心功能介绍及其应用场景的详细说明: 一、网络损伤仪的核心功能 带宽限制(Bandwidth Throttling) 模拟不同网络带宽(如从1Mbps到10Gbps&#xff09…...

超时检测机制和心跳包机制(Heartbeat)

一、超时检测机制 1. I/O 函数超时设置 1.1 select/poll/epoll 的超时参数 select c struct timeval timeout {3, 0}; // 3秒超时 int n select(maxfd1, &readfds, NULL, NULL, &timeout); if (n 0) printf("select timeout\n"); // 超时无事件poll c …...

经典卷积神经网络

目录 经典卷积神经网络 一、卷积神经网络基础回顾 二、LeNet:开启 CNN 先河 三、AlexNet:突破性进展 四、ZFNet:继承与优化 五、GoogLeNet:引入 Inception 模块 六、VggNet:深度与简单结构的融合 七、ResNet&a…...

Reactor模型详解与C++实现

Reactor模型详解与C实现 一、Reactor模型核心思想 Reactor模式是一种事件驱动的并发处理模型,核心通过同步I/O多路复用实现对多个I/O源的监听,当有事件触发时,派发给对应处理器进行非阻塞处理。 关键特征: 非阻塞I/O&#xff…...

观测云产品更新 | 安全监测、事件中心、仪表板AI智能分析等

观测云更新 安全监测 新增 SIEM 功能模块:实时分析企业各类系统(如服务器、应用、网络设备)的日志和事件数据,自动发现潜在威胁,帮助团队迅速定位异常,充分发挥安全监控中枢的作用。 注意:目…...

【HTML】个人博客页面

目录 页面视图​编辑 页面代码 解释&#xff1a; HTML (<body>): 使用了更加语义化的HTML5标签&#xff0c;例如<header>, <main>, <article>, <footer>。文章列表使用了<article>包裹&#xff0c;结构清晰。添加了分页导航。使用了Font…...

OrangePi Zero 3学习笔记(Android篇)10 - SPI和从设备

目录 1. 配置内核 2. 修改设备数 3. 修改权限 4. 验证 Zero 3的板子有2个SPI Master接口&#xff0c;其中SPI0接的是板载16MB大小的SPI Nor Flash&#xff0c;SPI1则是导出到26pin的接口上。 spi和i2c有点不同&#xff0c;spi是直接生成spi虚拟设备&#xff0c;所以在dev里…...

《Java 大视界——Java 大数据在智能电网分布式能源协同调度中的应用与挑战》

随着风电、光伏等分布式能源大规模接入电网&#xff0c;传统调度系统面临数据规模激增、响应延迟显著、多源异构数据融合困难等核心问题。本文聚焦Java生态下的大数据技术体系&#xff0c;深入探讨其在智能电网实时监测、负荷预测、资源优化配置等场景中的落地实践。通过分析Sp…...

基于正点原子探索者开发板的简易音乐播放器

1、概述 本次实验的名称叫做“基于正点原子探索者开发板的简易音乐播放器”。本实验的功能框图如下&#xff1a; 从图上我们可以清晰的看到本实验所需的实现的功能、以及每个功能需要怎么实现。 这次实验使用的是正点原子的探索者开发板&#xff0c;此开发板采用的MCU是STM32F4…...

【CF】Day59——Codeforces Round 914 (Div. 2) D

D. Set To Max 题目&#xff1a; Easy 思路&#xff1a; 简单题 由于题目的数据给的很小&#xff0c;所以我们可以用 n 的复杂度过&#xff0c;那我们来观察一下我们应该怎么操作 显然&#xff0c;如果 a[i] > b[i] 时是无法构造的&#xff0c;同时 a[i] b[i] 时就不用管…...

【Linux专栏】Linux进程间关系和守护进程

文章目录 1、进程间关系1.1 进程组1.2 组长进程 2、会话&#xff1f;2.1 查看会话2.2 创建会话 3、控制终端4、作业控制4.1 前台/后台进程 5、守护进程5.1 如何创建守护进程&#xff1f;5.2 杀掉守护进程 1、进程间关系 主要描述两个名称概念&#xff1a;即进程组和组长进程。…...

AutoVACUUM (PostgreSQL) 与 DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC (Oracle) 对比

AutoVACUUM (PostgreSQL) 与 DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC (Oracle) 对比 核心功能对比 特性PostgreSQL AutoVACUUMOracle GATHER_DATABASE_STATS_JOB_PROC主要目的空间回收 统计信息更新仅优化器统计信息收集底层机制MVCC(多版本并发控制)维护CBO(基于成本的…...

go依赖查询工具之godepgraph(分析main.go的依赖树)

文章目录 go依赖查询工具之godepgraph&#xff08;分析main.go的依赖树&#xff09;什么是服务间的隐式耦合&#xff1f;分析main.go的依赖树方法1. godepgraph (配合 Graphviz 可视化) - 最直观【推荐】方法2. go list go依赖查询工具之godepgraph&#xff08;分析main.go的依…...