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

十二、Hive 函数

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

数据处理广阔天地中,我们常常需要对数据进行转换、计算、清洗提取特定信息。Hive 提供了强大内置运算符丰富的内置函数库,它们就像魔法师手中的魔法棒,能帮助我们灵活高效操控数据挖掘深层价值

思维导图

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

一、Hive 内置运算符概览

深入函数之前,我们先快速回顾一下 Hive 支持的常见内置运算符,这些是构成表达式基本组件

  1. 算术运算符+, -, *, /, %, DIV
  2. 关系运算符=, <>, !=, <, >, <=, >=, IS NULL, IS NOT NULL, BETWEEN, IN, NOT IN, LIKE, RLIKE, REGEXP
  3. 逻辑运算符AND ( && ), OR ( || ), NOT ( ! )
  4. 位运算符&, |, ^, ~
  5. 复杂类型构造器MAP(), STRUCT(), ARRAY(), NAMED_STRUCT()
  6. 复杂类型访问运算符A[key], A.col

二、Hive 内置函数详解

我们可以通过 SHOW FUNCTIONS; 查看所有可用函数,DESC FUNCTION [EXTENDED] <function_name>; 查看特定函数详情。

1. 数值函数 (Mathematical Functions)

  • round(DOUBLE a): 四舍五入为BIGINT。
SELECT round(3.14159); -- 输出: 3
  • round(DOUBLE a, INT d): 四舍五入到小数点后d位。
SELECT round(3.14159, 2); -- 输出: 3.14
  • floor(DOUBLE a): 不大于a的最大整数。
SELECT floor(3.7); -- 输出: 3
  • ceil(DOUBLE a)ceiling(DOUBLE a): 不小于a的最小整数。
SELECT ceil(3.1); -- 输出: 4
  • abs(DOUBLE a): 绝对值。
SELECT abs(-5.5); -- 输出: 5.5
  • pow(DOUBLE a, DOUBLE p)power(DOUBLE a, DOUBLE p): a的p次方。
SELECT pow(2, 3); -- 输出: 8.0
  • sqrt(DOUBLE a): 平方根。
SELECT sqrt(16); -- 输出: 4.0
  • rand()rand(INT seed): 0到1之间的随机数。
SELECT rand(); -- 输出: (一个随机小数)
  • bin(BIGINT a): 二进制字符串。
SELECT bin(10); -- 输出: 1010
  • hex(BIGINT a)hex(STRING a): 十六进制字符串。
SELECT hex(255); -- 输出: FF
  • conv(BIGINT num, INT from_base, INT to_base): 进制转换。
SELECT conv('A', 16, 10); -- 输出: 10

2. 字符串函数 (String Functions)

  • length(STRING a): 字符串长度。
SELECT length('hello'); -- 输出: 5
  • concat(STRING|BINARY a, STRING|BINARY b...): 连接字符串。
SELECT concat('Hi, ', 'Hive'); -- 输出: Hi, Hive
  • concat_ws(STRING separator, STRING a, STRING b...): 带分隔符连接。
SELECT concat_ws('-', 'A', 'B', 'C'); -- 输出: A-B-C
  • lower(STRING a)lcase(STRING a): 转小写。
SELECT lower('HELLO'); -- 输出: hello
  • upper(STRING a)ucase(STRING a): 转大写。
SELECT upper('world'); -- 输出: WORLD
  • trim(STRING a): 去两端空格。
SELECT trim('  Hive  '); -- 输出: Hive
  • substring(STRING a, INT start[, INT len]): 取子串。
SELECT substring('HelloWorld', 1, 5); -- 输出: Hello
  • replace(STRING a, STRING old, STRING new): 替换子串。
SELECT replace('banana', 'na', 'PA'); -- 输出: baPAPA
  • instr(STRING str, STRING substr): 子串首次出现位置。
SELECT instr('apple-banana-orange', 'banana'); -- 输出: 7
  • split(STRING str, STRING pat): 按正则分割,返回数组。
SELECT split('a,b,c', ','); -- 输出: ["a","b","c"]
  • lpad(STRING str, INT len, STRING pad): 左填充。
SELECT lpad('hi', 5, '*'); -- 输出: ***hi
  • rpad(STRING str, INT len, STRING pad): 右填充。
SELECT rpad('hi', 5, '*'); -- 输出: hi***
  • regexp_extract(STRING subject, STRING pattern, INT index): 正则提取。
SELECT regexp_extract('user_123_name', 'user_(\\d+)_name', 1); -- 输出: 123
  • regexp_replace(STRING initial_string, STRING pattern, STRING replacement): 正则替换。
SELECT regexp_replace('100-200', '-', ':'); -- 输出: 100:200

3. 日期函数 (Date Functions)

  • current_date(): 当前日期。
SELECT current_date(); -- 输出: (类似 2023-10-27)
  • current_timestamp(): 当前日期时间。
SELECT current_timestamp(); -- 输出: (类似 2023-10-27 10:30:00.123)
  • unix_timestamp(): 当前Unix时间戳。
SELECT unix_timestamp(); -- 输出: (当前秒级时间戳)
  • unix_timestamp(STRING date[, STRING pattern]): 日期转Unix时间戳。
SELECT unix_timestamp('2023-10-27', 'yyyy-MM-dd'); -- 输出: (对应时间戳)
  • from_unixtime(BIGINT unixtime[, STRING format]): Unix时间戳转日期字符串。
SELECT from_unixtime(1698381000, 'yyyy/MM/dd HH:mm'); -- 输出: 2023/10/27 10:30
  • to_date(STRING timestamp): 提取日期部分。
SELECT to_date('2023-10-27 10:30:00'); -- 输出: 2023-10-27
  • date_format(STRING/TIMESTAMP/DATE ts, STRING fmt): 格式化日期。
SELECT date_format(current_date(), 'yyyy年MM月dd日'); -- 输出: (类似 2023年10月27日)
  • year(STRING date), month(STRING date), day(STRING date): 提取年/月/日。
SELECT year('2023-10-27'), month('2023-10-27'); -- 输出: 2023, 10
  • date_add(STRING/TIMESTAMP/DATE startdate, INT days): 日期加天数。
SELECT date_add('2023-10-27', 3); -- 输出: 2023-10-30
  • date_sub(STRING/TIMESTAMP/DATE startdate, INT days): 日期减天数。
SELECT date_sub('2023-10-27', 3); -- 输出: 2023-10-24
  • datediff(STRING enddate, STRING startdate): 日期天数差。
SELECT datediff('2023-10-30', '2023-10-27'); -- 输出: 3

4. 条件函数 (Conditional Functions)

  • if(boolean testCondition, T valueTrue, T valueFalseOrNull): IF判断。
SELECT if(1 > 0, 'Yes', 'No'); -- 输出: Yes
  • CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END: 标准CASE WHEN。
SELECT
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
ELSE 'C'
END AS grade
FROM (SELECT 85 AS score) t; -- 输出: B
  • COALESCE(T v1, T v2, ...): 返回首个非NULL值。
SELECT COALESCE(NULL, 'Default1', 'Default2'); -- 输出: Default1
  • NVL(T value, T default_value): value非NULL则返回value,否则返回default_value。
SELECT NVL(NULL, 'Is Null'); -- 输出: Is Null

5. 类型转换函数 (Type Conversion Functions)

  • cast(expr AS type): 强制类型转换。
SELECT cast('123' AS INT) + cast('7' AS INT); -- 输出: 130

6. 聚合函数 (Aggregate Functions) (常与 GROUP BY 联用)

  • count(*)count(expr)count(DISTINCT expr): 计数。
SELECT count(*) FROM my_table;
SELECT count(DISTINCT user_id) FROM user_logs;
  • sum(col)sum(DISTINCT col): 求和。
SELECT sum(sales_amount) FROM sales_data;
  • avg(col)avg(DISTINCT col): 平均值。
SELECT avg(score) FROM student_scores;
  • min(col): 最小值。
SELECT min(price) FROM products;
  • max(col): 最大值。
SELECT max(temperature) FROM weather_records;

7. 集合函数 (Collection Functions) (处理ARRAY, MAP, STRUCT)

  • size(MAP<K,V> m)size(ARRAY<T> a): 返回Map或Array的大小。
SELECT size(array(1, 2, 3)); -- 输出: 3
SELECT size(map('a', 1, 'b', 2)); -- 输出: 2
  • array_contains(ARRAY<T> a, value): 判断Array是否包含指定值。
SELECT array_contains(array('apple', 'banana'), 'apple'); -- 输出: true
  • map_keys(MAP<K,V> m): 返回Map的所有键组成的Array。
SELECT map_keys(map('name', 'Alice', 'age', 30)); -- 输出: ["name","age"] (顺序可能不同)
  • map_values(MAP<K,V> m): 返回Map的所有值组成的Array。
SELECT map_values(map('name', 'Alice', 'age', 30)); -- 输出: ["Alice","30"] (顺序可能不同)
  • sort_array(ARRAY<T> a): 对Array进行排序。
SELECT sort_array(array(3, 1, 2)); -- 输出: [1,2,3]

8. 表生成函数 (Table-Generating Functions - UDTF)

  • explode(ARRAY<T> a): 将数组每个元素转为一行。
SELECT explode(array('A', 'B')) AS item;
-- 输出:
-- A
-- B
  • explode(MAP<K,V> m): 将Map每个键值对转为一行两列。
SELECT explode(map('key1', 'val1')) AS (my_key, my_value);
-- 输出:
-- key1  val1
  • posexplode(ARRAY<T> a): 类似 explode(array),额外输出元素在数组中的位置(从0开始)。
SELECT posexplode(array('X', 'Y')) AS (pos, val);
-- 输出:
-- 0  X
-- 1  Y
  • inline(ARRAY<STRUCT<f1:T1, f2:T2, ...>> a): 将结构体数组展开,每个结构体的字段成为独立的列。
-- 假设table t有列 arr_struct: ARRAY<STRUCT<name:STRING, age:INT>>
-- 且某行 arr_struct 值为 [named_struct('name','Tom','age',20), named_struct('name','Jerry','age',18)]
-- SELECT inline(arr_struct) FROM t;
-- 输出 (对于该行会产生两行结果):
-- Tom   20
-- Jerry 18

9. 数据脱敏函数 (Data Masking/Anonymization - 通过组合或UDF实现)

Hive 内置的直接、专用的脱敏函数较少。通常通过组合现有字符串函数来实现,或者编写用户自定义函数 (UDF) 来完成复杂的脱敏逻辑。

  • 示例:部分屏蔽手机号 (组合字符串函数)
-- 假设 phone_number 是 '13812345678'
SELECT concat(substring(phone_number, 1, 3), '****', substring(phone_number, 8)) AS masked_phone
FROM (SELECT '13812345678' AS phone_number) t;
-- 输出: 138****5678
  • 示例:屏蔽邮箱用户名 (组合字符串函数)
-- 假设 email 是 'user_example@domain.com'
SELECT concat(substring(email, 1, 1), -- 第一个字符'****',                  -- 屏蔽符substring(email, locate('@', email) - 1, 1), -- @前一个字符substring(email, locate('@', email)) -- @及之后的部分
) AS masked_email
FROM (SELECT 'user_example@domain.com' AS email) t;
-- 输出: u****e@domain.com (这是一个简化示例,更复杂的正则UDF效果更好)

对于更复杂或通用的脱敏需求(如身份证号、银行卡号按规则屏蔽,或基于角色的动态脱敏),通常推荐开发 UDF

10. 用户自定义函数 (拓展)

内置函数无法满足特定的业务逻辑时,Hive 允许用户使用 Java (或其他语言,但Java最常见) 编写自己的函数。

  • UDF (User-Defined Function): 一对一或多对一函数,输入一行中的一个或多个值,输出一个值。

    • 例如,创建一个 to_uppercase(string_col) 函数,将输入字符串转为大写(虽然已有内置upper)。
    • 创建和使用步骤 (简要)
      1. 编写 Java 类继承 org.apache.hadoop.hive.ql.exec.UDF
      2. 实现 evaluate() 方法。
      3. 将 Java 项目打成 JAR 包。
      4. 在 Hive 中注册 JAR 包: ADD JAR /path/to/your.jar;
      5. 创建临时或永久函数: CREATE TEMPORARY FUNCTION my_upper AS 'com.example.MyUpperUDF';
      6. 使用函数: SELECT my_upper(name) FROM my_table;
  • UDAF (User-Defined Aggregate Function): 多对一函数,类似 SUM(), COUNT(),对分组数据进行聚合。编写 UDAF 相对复杂。

  • UDTF (User-Defined Table-Generating Function): 一对多函数,类似 explode(),输入一行,输出多行。

练习题

  1. 将字符串 “hive is great” 中的所有空格替换为下划线 _
  2. 计算日期 “2023-01-15” 之后45天的日期。
  3. 有一个用户评分表 ratings (user_id INT, score INT),如果用户评分低于60则标记为 “不及格”,否则标记为 “及格”。写出查询。
  4. 将字符串 “ID:123,Name:Alice,Age:30” 按逗号分割,然后对每个部分按冒号分割,提取出 Name 的值 “Alice”。
  5. 有一个字段 tags 其值为 ARRAY 类型,如 ['TagA', 'TagB', 'TagC']。检查该数组是否包含 ‘TagB’。
  6. 将一个包含用户月消费金额的数组 monthly_spend ARRAY<INT> (例如 [100, 150, 120]) 展开成多行,每行显示一个月的消费金额。
  7. 假设有一个字段 ip_address 存储IP地址字符串,请使用内置函数(如果可能)将其最后一个点之后的部分替换为 ‘XXX’ (例如 ‘192.168.1.100’ -> ‘192.168.1.XXX’)。如果内置函数难以实现,请描述UDF的思路。
  8. 将 Unix 时间戳 1672531200 (代表 2023-01-01 00:00:00 UTC) 格式化为 “YYYY年MM月DD日 HH时mm分ss秒” 的形式。
  9. 从字符串 “apple,banana,orange,apple” 中提取出所有不重复的水果名称,并计算不重复水果的数量。
  10. 如何使用 COALESCE 函数处理一个可能为NULL的 middle_name 字段,如果它为NULL,则在拼接全名时用空字符串代替?例如,first_name, middle_name, last_name

练习题答案

  1. 将字符串 “hive is great” 中的所有空格替换为下划线 _
SELECT replace('hive is great', ' ', '_');
  1. 计算日期 “2023-01-15” 之后45天的日期。
SELECT date_add('2023-01-15', 45);
  1. 有一个用户评分表 ratings (user_id INT, score INT),如果用户评分低于60则标记为 “不及格”,否则标记为 “及格”。写出查询。
SELECT user_id, score, if(score < 60, '不及格', '及格') AS status FROM ratings;
-- 或者使用 CASE WHEN
-- SELECT user_id, score, CASE WHEN score < 60 THEN '不及格' ELSE '及格' END AS status FROM ratings;
  1. 将字符串 “ID:123,Name:Alice,Age:30” 按逗号分割,然后对每个部分按冒号分割,提取出 Name 的值 “Alice”。
SELECT split(kv[1], ':')[1] AS name_value
FROM (SELECT split('ID:123,Name:Alice,Age:30', ',') AS kv_array
) t
LATERAL VIEW explode(kv_array) exploded_table AS kv_pair_str
WHERE split(kv_pair_str, ':')[0] = 'Name';
-- 更简洁的方式如果知道Name总在第二个位置:
SELECT split(split('ID:123,Name:Alice,Age:30', ',')[1], ':')[1];
  1. 有一个字段 tags 其值为 ARRAY 类型,如 ['TagA', 'TagB', 'TagC']。检查该数组是否包含 ‘TagB’。
SELECT array_contains(tags, 'TagB') FROM (SELECT array('TagA', 'TagB', 'TagC') AS tags) t;
  1. 将一个包含用户月消费金额的数组 monthly_spend ARRAY<INT> (例如 [100, 150, 120]) 展开成多行,每行显示一个月的消费金额。
SELECT spend
FROM (SELECT array(100, 150, 120) AS monthly_spend) t
LATERAL VIEW explode(monthly_spend) exploded_table AS spend;
  1. 假设有一个字段 ip_address 存储IP地址字符串,请使用内置函数(如果可能)将其最后一个点之后的部分替换为 ‘XXX’ (例如 ‘192.168.1.100’ -> ‘192.168.1.XXX’)。如果内置函数难以实现,请描述UDF的思路。
    使用内置函数比较复杂,需要多次使用 instrsubstringregexp_replace
SELECT regexp_replace(ip_address, '\\.[^.]+$', '.XXX') AS masked_ip
FROM (SELECT '192.168.1.100' AS ip_address) t;
-- 或者更精确控制,找到最后一个点的位置
-- SELECT concat(substring(ip_address, 1, instr(reverse(ip_address), '.') * -1 + length(ip_address) -1), '.XXX') ... (这种方式更复杂且易错)

UDF思路:编写一个Java UDF,输入IP字符串。在Java中使用 lastIndexOf('.') 找到最后一个点的位置,然后使用 substring() 截取前面的部分,并拼接上 “.XXX”。

  1. 将 Unix 时间戳 1672531200 (代表 2023-01-01 00:00:00 UTC) 格式化为 “YYYY年MM月DD日 HH时mm分ss秒” 的形式。
SELECT from_unixtime(1672531200, 'yyyy年MM月dd日 HH时mm分ss秒');
  1. 从字符串 “apple,banana,orange,apple” 中提取出所有不重复的水果名称,并计算不重复水果的数量。
SELECT collect_set(fruit) AS unique_fruits, size(collect_set(fruit)) AS unique_fruit_count
FROM (SELECT explode(split('apple,banana,orange,apple', ',')) AS fruit
) t_fruits;
  1. 如何使用 COALESCE 函数处理一个可能为NULL的 middle_name 字段,如果它为NULL,则在拼接全名时用空字符串代替?例如,first_name, middle_name, last_name
SELECT concat_ws(' ', first_name, COALESCE(middle_name, ''), last_name) AS full_name
FROM (SELECT 'John' AS first_name, NULL AS middle_name, 'Doe' AS last_nameUNION ALLSELECT 'Jane' AS first_name, 'M' AS middle_name, 'Smith' AS last_name
) t_names;
-- 对于 'John', NULL, 'Doe' 会输出 "John  Doe" (注意concat_ws对空字符串的处理)
-- 如果希望中间没有多余空格,可以这样:
-- SELECT trim(concat(first_name, ' ', COALESCE(concat(middle_name, ' '), ''), last_name)) AS full_name ...

更优雅的方式是针对 concat_ws 的特性,如果 COALESCE(middle_name, NULL) 结果是 NULL,concat_ws 会跳过它。但如果希望它是空字符串而不是被跳过(比如为了保持名字间的空格),上面的 COALESCE(middle_name, '') 是对的。

相关文章:

十二、Hive 函数

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月17日 专栏&#xff1a;Hive教程 在数据处理的广阔天地中&#xff0c;我们常常需要对数据进行转换、计算、清洗或提取特定信息。Hive 提供了强大的内置运算符和丰富的内置函数库&#xff0c;它们就像魔法师手中的魔法棒&…...

DeepSeek 赋能社会科学:解锁研究新范式

目录 一、DeepSeek&#xff1a;大语言模型中的新力量1.1 DeepSeek 技术亮点1.2 与其他模型对比 二、DeepSeek 在社会科学研究中的应用领域2.1 经济学研究2.2 社会学研究2.3 历史学研究2.4 法学研究 三、DeepSeek 应用案例深度剖析3.1 案例一&#xff1a;社会学研究中社会舆情分…...

java函数内的变量问题

public class VendingMachine {//设计一个类叫做VendingMachine,用这个类制造一个对象vmint price 80;int balance;//三个属性int total;void showprompt(){System.out.println("Welcome");}void insertmoney(int amount){balance balance amount;}void showBalan…...

docker部署第一个Go项目

1.前期准备 目录结构 main.go package mainimport ("fmt""github.com/gin-gonic/gin""net/http" )func main() {fmt.Println("\n .::::.\n .::::::::.\n :::::::::::\n …...

【读代码】端到端多模态语言模型Ultravox深度解析

一、项目基本介绍 Ultravox是由Fixie AI团队开发的开源多模态大语言模型,专注于实现音频-文本的端到端实时交互。项目基于Llama 3、Mistral等开源模型,通过创新的跨模态投影架构,绕过了传统语音识别(ASR)的中间步骤,可直接将音频特征映射到语言模型的高维空间。 核心优…...

管理前端项目依赖版本冲突导致启动失败的问题的解决办法

管理前端项目依赖版本冲突导致启动失败的问题&#xff0c;可按照以下步骤系统解决&#xff1a; 1. 定位冲突来源 查看错误日志&#xff1a;启动失败时的控制台报错通常会指出具体模块或版本问题&#xff0c;例如 Module not found 或 TypeError。检查依赖树&#xff1a;npm l…...

北京市工程技术人才职称评价基本标准条件解读

北京市工程技术人才职称评价基本标准条件 北京市工程技术人才之技术员 北京市工程技术人才之助理工程师 北京市工程技术人才之工程师 北京市工程技术人才之高级工程师 北京市工程技术人才之高级工程师&#xff08;破格&#xff09; 北京市工程技术人才之正高级工程师 北京市工程…...

MUSE Pi Pro 开发板 Imagination GPU 利用 OpenCL 测试

视频讲解&#xff1a; MUSE Pi Pro 开发板 Imagination GPU 利用 OpenCL 测试 继续玩MUSE Pi Pro&#xff0c;今天看下比较关注的gpu这块&#xff0c;从opencl看起&#xff0c;安装clinfo指令 sudo apt install clinfo 可以看到这颗GPU是Imagination的 一般嵌入式中gpu都和hos…...

Mysql数据库之集群进阶

一、日志管理 5.7版本自定义路径时的文件需要自己提前创建好文件&#xff0c;不会自动创建&#xff0c;否则启动mysql会报错 错误日志 rpm包(yum) /var/log/mysql.log 默认错误日志 ###查询日志路径 [rootdb01 ~]# mysqladmin -uroot -pEgon123 variables | grep -w log_e…...

JavaScript防抖与节流全解析

文章目录 前言:为什么需要防抖和节流基本概念与区别防抖(Debounce)节流(Throttle)关键区别防抖(Debounce)详解1. 基本防抖函数实现2. 防抖函数的使用3. 防抖函数的工作流程4. 防抖函数进阶 - 立即执行选项节流(Throttle)详解1. 基本节流函数实现时间戳法(第一次会立即执行)定…...

大模型学习:Deepseek+dify零成本部署本地运行实用教程(超级详细!建议收藏)

文章目录 大模型学习&#xff1a;Deepseekdify零成本部署本地运行实用教程&#xff08;超级详细&#xff01;建议收藏&#xff09;一、Dify是什么二、Dify的安装部署1. 官网体验2. 本地部署2.1 linux环境下的Docker安装2.2 Windows环境下安装部署DockerDeskTop2.3启用虚拟机平台…...

在RK3588上使用NCNN和Vulkan加速ResNet50推理全流程

在RK3588上使用NCNN和Vulkan加速ResNet50推理全流程 前言:为什么需要关注移动端AI推理一、环境准备与框架编译1.1 获取NCNN源码1.2 安装必要依赖1.3 编译NCNN二、模型导出与转换2.1 生成ONNX模型2.2 转换NCNN格式三、模型量化加速3.1 生成校准数据3.2 执行量化操作四、性能测试…...

Web安全基础:深度解析与实战指南

一、Web安全体系架构的全面剖析 1.1 分层防御模型(Defense in Depth) 1.1.1 网络层防护 ​​防火墙技术​​: 状态检测防火墙(SPI):基于连接状态跟踪,阻断非法会话(如SYN Flood攻击)下一代防火墙(NGFW):集成IPS、AV、URL过滤(如Palo Alto PA-5400系列)配置示例…...

Uniapp开发鸿蒙应用时如何运行和调试项目

经过前几天的分享&#xff0c;大家应该应该对uniapp开发鸿蒙应用的开发语法有了一定的了解&#xff0c;可以进行一些简单的应用开发&#xff0c;今天分享一下在使用uniapp开发鸿蒙应用时怎么运行到鸿蒙设备&#xff0c;并且在开发中怎么调试程序。 运行 Uniapp项目支持运行到…...

Python海龟绘图(Turtle Graphics)核心函数和关键要点

以下是Python海龟绘图&#xff08;Turtle Graphics&#xff09;的核心函数和关键要点整理&#xff1a; 一、画布设置 函数/方法说明参数说明备注turtle.setup(width, height, x, y)设置画布尺寸和位置width宽度&#xff0c;height高度&#xff0c;x/y窗口左上角坐标默认尺寸80…...

如何在Cursor中高效使用MCP协议

1、Cursor介绍 Cursor是一个功能强大的开发工具&#xff0c;内置了聊天助手、代码自动补全和调试工具&#xff0c;能够与多种外部工具和服务&#xff08;如数据库、文件系统、浏览器等&#xff09;进行深度集成。借助MCP&#xff08;Multiverse Communication Protocol&#x…...

典籍知识问答模块AI问答bug修改

一、修改流式数据处理问题 1.问题描述&#xff1a;由于传来的数据形式如下&#xff1a; event:START data:350 data:< data:t data:h data:i data:n data:k data:> data: data: data: data: data:嗯 data:&#xff0c; 导致需要修改获取正常的当前信息id并更…...

Redis 发布订阅模式深度解析:原理、应用与实践

在现代分布式系统架构中&#xff0c;实时消息传递机制扮演着至关重要的角色。Redis 作为一款高性能的内存数据库&#xff0c;其内置的发布订阅(Pub/Sub)功能提供了一种轻量级、高效的消息通信方案。本文将全面剖析 Redis 发布订阅模式&#xff0c;从其基本概念、工作原理到实际…...

通义千问-langchain使用构建(三)

目录 序言docker 部署xinference1WSL环境docker安装2拉取镜像运行容器3使用的界面 本地跑chatchat1rag踩坑2使用的界面2.1配置个前置条件然后对话2.2rag对话 结论 序言 在前两天的基础上&#xff0c;将xinference调整为wsl环境&#xff0c;docker部署。 然后langchain chatcha…...

c++ 仿函数

示例代码&#xff1a; void testFunctor() {using Sum struct MyStruct {int operator() (int a, int b) const { // 重载&#xff08;&#xff09;运算符return a b;}};Sum sum;std::cout << sum(9528, -1) << std::endl; } 打印&#xff1a; 仿函数意思是&am…...

hyper-v 虚拟机怎么克隆一台一样的虚拟机?

环境&#xff1a; hyper-v Win10专业版 问题描述&#xff1a; hyper-v 虚拟机怎么克隆一台一样的虚拟机&#xff1f; 解决方案&#xff1a; 以下是在 Hyper-V 中克隆虚拟机的几种方法&#xff1a; 方法一&#xff1a;使用导出和导入功能 导出虚拟机&#xff1a; 打开 H…...

操作系统:os概述

操作系统&#xff1a;OS概述 程序、进程与线程无极二级目录三级目录 程序、进程与线程 指令执行需要那些条件&#xff1f;CPU内存 需要数据和 无极 二级目录 三级目录...

【技巧】GoogleChrome浏览器开发者模式查看dify接口

回到目录 GoogleChrome浏览器开发者模式查看dify接口 1.搭建本地dify开发环境 参考 《 win10的wsl环境下调试dify的api后端服务(20250511发布)》 2.打开dify首页&#xff0c;进入开发者模式&#xff0c;Network页 勾选 Preserve log [图1] 3.填好用户名和密码&#xff0c;…...

Ocean: Object-aware Anchor-free Tracking

领域&#xff1a;Object tracking It aims to infer the location of an arbitrary target in a video sequence, given only its location in the first frame 问题/现象&#xff1a; Anchor-based Siamese trackers have achieved remarkable advancements in accuracy, yet…...

java中的循环结构

文章目录 流程控制顺序结构if单选择结构if双选择结构if多选择结构嵌套的if结构switch多选择结构 循环结构while循环do...while循环 for循环增强for循环 break continue练习案例 流程控制 顺序结构 java的基本结果就是顺序结构&#xff0c;除非特别指明&#xff0c;否则就按照…...

数学复习笔记 16

前言 例题真是经典。 background music 《青春不一样》 2.28 算一个行列式&#xff0c;算出来行列式不等于零&#xff0c;这表示矩阵式可逆的。但是这个算的秩是复合的&#xff0c;感觉没啥好办法了&#xff0c;我直接硬算了&#xff0c;之后再看解析积累好的方法。算矩阵…...

PySide6 GUI 学习笔记——常用类及控件使用方法(常用类颜色QColor)

文章目录 一、概述二、核心功能三、常用函数及方法四、代码示例五、注意事项 一、概述 QColor 是用于处理颜色的类&#xff0c;支持 RGB、HSV、HSL、CMYK 等多种颜色模型&#xff0c;提供颜色创建、转换、分量操作及格式转换功能。支持透明度设置&#xff0c;可通过颜色名称或…...

【Closure-Hayd】

RNA序列本身存在结构上的物理信息&#xff0c;因此可以利用文献提供的相关方法来对RNA序列的物理特征进行更加细致的提取。 几何向量编码&#xff08;GVP模块&#xff09;​借鉴Rhodesign模型中的GVP&#xff08;Geometric Vector Perceptron&#xff09;模块&#xff0c;将每个…...

MySQL高可用架构

一、读写分离在高可用架构中的核心作用 1.读写分离与高可用的协同价值 在MySQL高可用架构中&#xff0c;读写分离不仅是性能优化的手段&#xff0c;更是提升系统容错能力的关键策略。通过将写操作&#xff08;INSERT、UPDATE、DELETE&#xff09; 集中到主节点&#xff0c;读…...

粒子群算法(PSO算法)

粒子群算法概述 1.粒子群优化算法&#xff08;Particle Swarm Optimization&#xff0c;简称PSO&#xff09;。粒子群优化算法是在1995年由Kennedy博士和Eberhart博士一起提出的&#xff0c;它源于对鸟群捕食行为的研究。 2.基本核心是利用群体中的个体对信息的共享从而使得整…...

信道编码技术介绍

信息与通信系统中的编码有4 种形式&#xff1a;信源编码、信道编码、密码编码和多址编码。 其中信道编码的作用是对信源经过压缩后的数据加一定数量受到控制的冗余&#xff0c;使得数据在传输中或接收中发生的差错可以被纠正或被发现&#xff0c;从而可以正确恢复出原始数据信息…...

JavaScript【4】数组和其他内置对象(API)

1.数组: 1.概述: js中数组可理解为一个存储数据的容器,但与java中的数组不太一样;js中的数组更像java中的集合,因为此集合在创建的时候,不需要定义数组长度,它可以实现动态扩容;js中的数组存储元素时,可以存储任意类型的元素,而java中的数组一旦创建后,就只能存储定义类型的元…...

【背包dp-----分组背包】------(标准的分组背包【可以不装满的 最大价值】)

通天之分组背包 题目链接 题目描述 自 01 01 01 背包问世之后&#xff0c;小 A 对此深感兴趣。一天&#xff0c;小 A 去远游&#xff0c;却发现他的背包不同于 01 01 01 背包&#xff0c;他的物品大致可分为 k k k 组&#xff0c;每组中的物品相互冲突&#xff0c;现在&a…...

docker-compose——安装mongo

编写docker-compose.yml version : 3.8services:zaomeng-mongodb:container_name: zaomeng-mongodbimage: mongo:latestrestart: alwaysports:- 27017:27017environment:- MONGO_INITDB_ROOT_USERNAMEroot- MONGO_INITDB_ROOT_PASSWORDpssw0rdvolumes:- ./mongodb/data:/data/…...

day 28

类 一个常见的类的定义包括了&#xff1a; 1. 关键字class 2. 类名 3. 语法固定符号冒号(:) 4. 一个初始化函数__init__(self) Pass占位符和缩进 Python 通过缩进来定义代码块的结构。当解释器遇到像 def, class, if, for 这样的语句&#xff0c;并且后面跟着冒号 : 时&…...

JavaScript入门【1】概述

1.JavaScript是什么? <font style"color:rgb(38,38,38);">Javascript &#xff08;简称“JS”&#xff09;是⼀种直译式脚本语⾔&#xff0c;⼀段脚本其实就是⼀系列指令&#xff0c;计算机通过这些指令来达成⽬标。它⼜是⼀种动态类型的编程语⾔。JS⽤来在⽹…...

MySQL 中 JOIN 和子查询的区别与使用场景

目录 一、JOIN:表连接1.1 INNER JOIN:内连接1.2 LEFT JOIN:左连接1.3 RIGHT JOIN:右连接1.4 FULL JOIN:全连接二、子查询:嵌套查询2.1 WHERE 子句中的子查询2.2 FROM 子句中的子查询2.3 SELECT 子句中的子查询三、JOIN 和子查询的区别3.1 功能差异3.2 性能差异3.3 使用场…...

DeepSeek 大模型部署全指南:常见问题、优化策略与实战解决方案

DeepSeek 作为当前最热门的开源大模型之一&#xff0c;其强大的语义理解和生成能力吸引了大量开发者和企业关注。然而在实际部署过程中&#xff0c;无论是本地运行还是云端服务&#xff0c;用户往往会遇到各种技术挑战。本文将全面剖析 DeepSeek 部署中的常见问题&#xff0c;提…...

Python 3.11详细安装步骤(包含安装包)Python 3.11详细图文安装教程

文章目录 前言Python 3.11介绍Python 3.11安装包下载Python 3.11安装步骤 前言 作为当前最热门的编程语言之一&#xff0c;Python 3.11 不仅拥有简洁优雅的语法&#xff0c;还在性能上实现了飞跃&#xff0c;代码运行速度提升显著。无论是初入编程的小白&#xff0c;还是经验丰…...

虚拟主播肖像权保护,数字时代的法律博弈

首席数据官高鹏律师团队 在虚拟主播行业蓬勃发展的表象之下&#xff0c;潜藏着一场关乎法律边界的隐形战争。当一位虚拟偶像的3D模型被非法拆解、面部数据被批量复制&#xff0c;运营方惊讶地发现——传统的肖像权保护体系&#xff0c;竟难以完全覆盖这具由代码与数据构成的“…...

硬件工程师笔记——二极管Multisim电路仿真实验汇总

目录 1 二极管基础知识 1.1 工作原理 1.2 二极管的结构 1.3 PN结的形成 1.4 二极管的工作原理详解 正向偏置 反向偏置 multisim使用说明链接 2 二极管特性实验 2.1 二极管加正向电压 2.2 二极管加反向电压 2.3 二极管两端的电阻 2.4 交流电下二级管工作 2.5 二极…...

学习笔记(C++篇)—— Day 6

1.内部类 如果一个类定义在另一个类的内部&#xff0c;就叫做内部类。 例如下面一个代码示例&#xff1a; class A { private:static int _k;int _h 1; public:class B // B默认就是A的友元{public:void foo(const A& a){cout << _k << endl; //OKcout <&…...

常见的实时通信技术(轮询、sse、websocket、webhooks)

1. HTTP轮询&#xff1a;最老实的办法 刚开始做实时功能时&#xff0c;我第一个想到的就是轮询。特别简单直白&#xff0c;就像你每隔5分钟就刷新一次朋友圈看看有没有新消息一样。 短轮询&#xff1a;勤快但费劲 短轮询就是客户端隔三差五地问服务器&#xff1a;"有新…...

2025年第三届盘古石杯初赛(智能冰箱,监控部分)

前言 所以去哪里可以取到自己家里的智能家居数据呢&#xff1f;&#xff1f;&#xff1f;&#xff1f; IOT物联网取证 1、分析冰箱&#xff0c;请问智能冰箱的品牌&#xff1f; [答案格式&#xff1a;xiaomi] Panasonic2、请问智能冰箱的型号&#xff1f; [答案格式&#x…...

[强化学习的数学原理—赵世钰老师]学习笔记02-贝尔曼方程

本人为强化学习小白&#xff0c;为了在后续科研的过程中能够较好的结合强化学习来做相关研究&#xff0c;特意买了西湖大学赵世钰老师撰写的《强化学习数学原理》中文版这本书&#xff0c;并结合赵老师的讲解视频来学习和更深刻的理解强化学习相关概念&#xff0c;知识和算法技…...

基于STM32的INA226电压电流检测仪

系统总体框图 功率检测装置原理图功能及模块连接说明 一、系统功能概述 该装置以STM32F103C8T6微控制器为核心&#xff0c;集成功率检测、数据交互、状态显示和用户提示功能&#xff0c;通过模块化设计实现稳定运行。 二、各模块功能及连接方式 按键模块 功能&#xff1a…...

Android7 Input(七)App与input系统服务建立连接

概述 本文主要讲述Android 系统创建窗口时与输入管理系统服务通过InputChannel通道建立通信桥梁的过程。 本文涉及的源码路径 frameworks/native/libs/input/InputTransport.cpp frameworks/base/core/java/android/view/InputChannel.java frameworks/base/core/java/andr…...

1.2 C++第一个程序

第一个程序&#xff1a;Hello World 教程 目标 用 cout 输出文字&#xff0c;学会用 endl 换行。理解程序的基本结构&#xff0c;明白 main 函数的作用。 一、程序是什么&#xff1f;——像“魔法食谱” 比喻&#xff1a;写程序就像写一份做蛋糕的食谱&#xff01; 食材&am…...

Hi3516DV500刷写固件

hi3516DV500刷固件 1、硬件连接 2、软件准备 3、刷固件步骤 一、硬件连接 特别注意的是&#xff0c;串口的接线顺序 通过网线连接好笔记本和开发板后&#xff0c;需要确认一下网口水晶头是否闪烁&#xff0c;以确认网络物理是否连通 二、软件资源准备 固件包准备 打开工具…...

完整卸载 Fabric Manager 的方法

目录 ✅ 完整卸载 Fabric Manager 的方法 1️⃣ 停止并禁用服务 2️⃣ 卸载 Fabric Manager 软件包 3️⃣ 自动清理无用依赖&#xff08;可选&#xff09; 4️⃣ 检查是否卸载成功 ✅ 补充&#xff08;仅清除服务&#xff0c;不删包&#xff09; ✅ 完整卸载 Fabric Mana…...