Oracle的学习心得和知识总结(三十三)|Oracle数据库数据库的SQL ID的底层计算原理分析
目录结构
注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下:
1、参考书籍:《Oracle Database SQL Language Reference》
2、参考书籍:《PostgreSQL中文手册》
3、EDB Postgres Advanced Server User Guides,点击前往
4、PostgreSQL数据库仓库链接,点击前往
5、PostgreSQL中文社区,点击前往
1、本文内容全部来源于开源社区 GitHub和以上博主的贡献,本文也免费开源(可能会存在问题,评论区等待大佬们的指正)
2、本文目的:开源共享 抛砖引玉 一起学习
3、本文不提供任何资源 不存在任何交易 与任何组织和机构无关
4、大家可以根据需要自行 复制粘贴以及作为其他个人用途,但是不允许转载 不允许商用 (写作不易,还请见谅 💖)
Oracle数据库数据库的SQL ID的底层计算原理分析
- 文章快速说明索引
- 背景说明案例展示
- 底层实现案例分析
文章快速说明索引
学习目标:
目的:接下来这段时间我想做一些兼容Oracle数据库Real Application Testing (即:RAT)上的一些功能开发,本专栏这里主要是学习以及介绍Oracle数据库功能的使用场景、原理说明和注意事项等,基于PostgreSQL数据库的功能开发等之后 由新博客进行介绍和分享!
学习内容:(详见目录)
1、Oracle数据库数据库的SQL ID的底层计算原理分析
学习时间:
2025年02月09日 18:06:19
学习产出:
1、Oracle数据库数据库的SQL ID的底层计算原理分析
2、CSDN 技术博客 1篇
注:下面我们所有的学习环境是Centos7+PostgreSQL15.0+Oracle19c+MySQL5.7
postgres=# select version();version
-----------------------------------------------------------------------------PostgreSQL 15.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 7.1.0, 64-bit
(1 row)postgres=##-----------------------------------------------------------------------------#SQL> select * from v$version; BANNER BANNER_FULL BANNER_LEGACY CON_ID
--------------------------------------------------------------------------- --------------------------------------------------------------------------- --------------------------------------------------------------------------- ----------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production 0Version 19.3.0.0.0SQL>
#-----------------------------------------------------------------------------#mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.19 |
+-----------+
1 row in set (0.06 sec)mysql>
背景说明案例展示
在使用Oracle数据库的时候经常会看到SQL ID这样的东西,如下:
或者是如下SQL语句:
[oracle@local64 ~]$ sqlplus '/as sysdba'SQL*Plus: Release 11.2.0.1.0 Production on Fri Feb 7 14:10:57 2025Copyright (c) 1982, 2009, Oracle. All rights reserved.Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> select 'SONG BAOBAO' from dual;'SONGBAOBAO
-----------
SONG BAOBAOSQL> select 'SONGBAobao' from DUAL;'SONGBAOBA
----------
SONGBAobaoSQL> select sql_id, sql_text from v$sql where sql_text like '%SONG%';SQL_ID SQL_TEXT
-------------------- ----------------------------------------------------------------------------------------------------
dfrun6x61sj3g select 'SONGBAobao' from DUAL
2fsps80qfadc3 select sql_id, sql_text from v$sql where sql_text like '%SONG%'
dgs6n0z31avcp select 'SONG BAOBAO' from dualSQL>
或者通过package函数,如下:
SQL> select dbms_sqltune_util0.sqltext_to_sqlid('select ''SONG BAOBAO'' from dual'||chr(0)) sql_id from dual;SQL_ID
--------------------
dgs6n0z31avcpSQL> select dbms_sqltune_util0.sqltext_to_sqlid('select ''SONGBAobao'' from DUAL'||chr(0)) sql_id from dual;SQL_ID
--------------------
dfrun6x61sj3gSQL>
如上都是简单SQL语句,下面看一下上面AWR图的一个例子,如下:
7r7636982atn9 UPDATE INVENTORIES SET QUANTITY_ON_HAND = QUANTITY_ON_HAND - :B1 WHERE PRODUCT_ID = :B3 AND WAREHOUSE_ID = :B2
接下来,我们今天分析一下Oracle SQL_ID的生成过程以及相关注意事项,如下:
一、SQL_ID生成过程
-
计算MD5散列值:
- Oracle会对SQL_TEXT计算MD5散列值,并在SQL_TEXT末尾添加一个不可见字符
\0
(空字符)如上所述。 - 这个步骤确保了即使SQL_TEXT内容相同,生成的SQL_ID也会因为末尾的空字符而不同。
- Oracle会对SQL_TEXT计算MD5散列值,并在SQL_TEXT末尾添加一个不可见字符
-
取MD5散列值的低64位(请注意大小端的问题):
- MD5散列值是一个128位的值,Oracle只取其中的低64位(即最后8个字节)。
- 由于MD5是128位的,低64位就是最后64位(即最后8个字节)。
-
将64位分成5位一组(最后一组4位):
- 将这64位分成13组,前12组每组5位,最后一组4位。
- 每组5位的值范围是0到31,最后一组4位的值范围是0到15。
-
Base32编码:
- 使用Base32将每组5位(或4位)的值转换为可见字符。
- Oracle使用的Base32字符集为:
0123456789abcdfghjkmnpqrstuvwxyz
。 - 注意:这个字符集与标准的Base32字符集不同,标准的Base32字符集通常包含字母A-Z和数字2-7。
二、注意事项
(a) MD5散列时的空字符:
- 在计算MD5时,Oracle会在SQL_TEXT末尾添加一个空字符
\0
。这意味着即使两个SQL_TEXT内容相同,生成的SQL_ID也会不同,因为末尾的空字符会导致MD5散列值不同。
(b) Little-endian问题:
- 在处理字节序时,Oracle使用的是小端序(Little-endian)。这意味着在读取字节时,低位字节在前,高位字节在后。
- 在编写程序时,需要确保正确处理字节序,特别是在处理64位值时。
© Base32字符集:
- Oracle使用的Base32字符集为:
0123456789abcdfghjkmnpqrstuvwxyz
。 - 这个字符集与标准的Base32字符集不同,因此在编写程序时需要特别注意使用正确的字符集。
(d) 大数精度问题:
- 在处理64位值时,可能会遇到大数精度问题。特别是在一些编程语言中,默认的整数类型可能无法处理64位值。
- 在Perl、PHP等语言中,可以使用大数处理函数(如
GMP
或BCMath
扩展)来确保精度。
底层实现案例分析
SQL> select dbms_sqltune_util0.sqltext_to_sqlid('select ''SONG BAOBAO'' from dual'||chr(0)) sql_id from dual;SQL_ID
--------------------
dgs6n0z31avcpSQL>
我的环境,如下:
[oracle@local64 mydata]$ lscpu | grep -i byte
Byte Order: Little Endian
[oracle@local64 mydata]$
第一步,计算散列值
- Digest::MD5 相关函数说明,点击前往
先计算一下其md5值,如下:
[oracle@local64 mydata]$ cat mytest3.pl
use Digest::MD5 qw(md5_hex);
$stmt = "select 'SONG BAOBAO' from dual\0";
$hash_hex = md5_hex $stmt;
print "$hash_hex\n";[oracle@local64 mydata]$ perl mytest3.pl
10131690c894385807d4e0d7956d15c6
[oracle@local64 mydata]$10131690c8943858
07d4e0d7956d15c6
- 进制转换在线,点击前往
其二进制转换为:
00010000000100110001011010010000110010001001010000111000010110000000011111010100111000001101011110010101011011010001010111000110
第二步,取低64位
07d4e0d7956d15c60000011111010100111000001101011110010101011011010001010111000110
第三步,转换为易读字符串
Oracle使用了Base32将字节流转换为可见字符,一一对应如下:
字节流十进制 | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
字符 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | f | g |
字节流十进制 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
字符 | h | j | k | m | n | p | q | r | s | t | u | v | w | x | y | z |
注: 这里给大家推荐一个好用的网站(可以直接复制粘贴到markdown):
- 表格转换工具,点击前往
0000011111010100111000001101011110010101011011010001010111000110# 划分一下,如下:
00000111 11010100 11100000 11010111
10010101 01101101 00010101 11000110# 因为是小端11010111 11100000 11010100 00000111
11000110 00010101 01101101 10010101# 合并
1101011111100000110101000000011111000110000101010110110110010101# 其十六进制
d7e0d407c6156d95
然后切分,以及转换 如下:
1101 01111 11000 00110 10100 00000 11111 00011 00001 01010 11011 01100 10101
13 15 24 6 20 0 31 3 1 10 27 12 21
d g s 6 n 0 z 3 1 a v c pdgs6n0z31avcp
最后看一下转换一个SQL的SQLID逻辑,如下:
#!/usr/bin/perl -w
use Digest::MD5 qw(md5 md5_hex md5_base64);
use Math::BigInt;
my $stmt = "select 'SONG BAOBAO' from dual\0";
my $hash = md5 $stmt;
my($a,$b,$msb,$lsb) = unpack("V*",$hash);
print "a is $a, b is $b; msb is $msb, lsb is $lsb\n";my $sqln = $msb*(2**32)+$lsb;
my $stop = log($sqln) / log(32) + 1;
print "sqln is $sqln, stop is $stop\n";my $sqlid = '';
my $charbase32 = '0123456789abcdfghjkmnpqrstuvwxyz';
my @chars = split '', $charbase32;
for($i=0; $i < $stop-1; $i++){my $x = Math::BigInt->new($sqln);my $seq = $x->bdiv(32**$i)->bmod(32);$sqlid = $chars[$seq].$sqlid;
}
print "SQL is:\n $stmt \nSQL_ID is\n $sqlid\n";
执行一下,如下:
[oracle@local64 mydata]$ perl mytest1.pl
a is 2417365776, b is 1480103112; msb is 3621835783, lsb is 3323293077
sqln is 15555666242790845845, stop is 13.7508147978182
SQL is:select 'SONG BAOBAO' from dual
SQL_ID isdgs6n0z31avcp
[oracle@local64 mydata]$
解释一下,上面sqln = 15555666242790845845,该十进制的十六进制转换,如下:
[oracle@local64 mydata]$ cat convert_uint64_to_str.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>int main()
{const char *map = "0123456789abcdfghjkmnpqrstuvwxyz";int i = 0;char str[14] = {0};uint64_t sqlid = (uint64_t)15555666242790845845ULL;for(; i<13;++i){int j = (sqlid >> (60 - i * 5)) & 0x1F;str[i] = map[j];}printf("str is %s\n", str);return 0;
}
[oracle@local64 mydata]$
[oracle@local64 mydata]$ gcc -o convert convert_uint64_to_str.c -g -O0
[oracle@local64 mydata]$
[oracle@local64 mydata]$ ./convert
str is dgs6n0z31avcp
[oracle@local64 mydata]$
若是用C语言实现上面perl的效果,如下:
[oracle@local64 mydata]$ cat mytest2.c
#include <stdio.h>
#include <string.h>
#include <openssl/md5.h>
#include <math.h>
#include <stdint.h>// 用于计算 MD5 的函数
void md5_hash(const unsigned char *input, size_t length, unsigned char *output)
{MD5_CTX mdContext;MD5_Init(&mdContext);MD5_Update(&mdContext, input, length);MD5_Final(output, &mdContext);
}int main()
{int step = 0;// 包含 \0 的原始字节数组const unsigned char stmt[] = "select 'SONG BAOBAO' from dual\0";size_t stmt_len = sizeof(stmt) - 1; // 计算不包括末尾 \0 的实际长度// 用于存放 MD5 哈希结果unsigned char hash[MD5_DIGEST_LENGTH];md5_hash(stmt, stmt_len, hash); // 计算 MD5// 解包 MD5 哈希值uint32_t a = (hash[0] << 0) | (hash[1] << 8) | (hash[2] << 16) | (hash[3] << 24);uint32_t b = (hash[4] << 0) | (hash[5] << 8) | (hash[6] << 16) | (hash[7] << 24);uint32_t msb = (hash[8] << 0) | (hash[9] << 8) | (hash[10] << 16) | (hash[11] << 24);uint32_t lsb = (hash[12] << 0) | (hash[13] << 8) | (hash[14] << 16) | (hash[15] << 24);printf("a is %u, b is %u; msb is %u, lsb is %u\n", a, b, msb, lsb);// 计算 sqln 和 stopuint64_t sqln = ((uint64_t)msb << 32) + lsb;double stop = log((double)sqln) / log(32.0) + 1;printf("sqln is %llu, stop is %.06f\n", sqln, stop);// Base32 字符集char charbase32[] = "0123456789abcdfghjkmnpqrstuvwxyz";char sqlid[100] = {0};step = (int)ceil(stop);// 生成 SQL_IDfor (int i = 0; i < step - 1; i++){unsigned long long pow_result = pow(32, i);unsigned long long x = sqln;unsigned long long div_result = x / pow_result;unsigned int seq = div_result % 32;// 插入到 sqlid 字符串的前面memmove(sqlid + 1, sqlid, strlen(sqlid) + 1);sqlid[0] = charbase32[seq];}printf("SQL is:\n %s\nSQL_ID is\n %s\n", stmt, sqlid);return 0;
}
[oracle@local64 mydata]$ gcc -o test2 mytest2.c -lssl -lcrypto -lm -g -O0
[oracle@local64 mydata]$
[oracle@local64 mydata]$ ./test2
a is 2417365776, b is 1480103112; msb is 3621835783, lsb is 3323293077
sqln is 15555666242790845845, stop is 13.750815
SQL is:select 'SONG BAOBAO' from dual
SQL_ID isdgs6n0z31avcp
[oracle@local64 mydata]$
相关文章:
Oracle的学习心得和知识总结(三十三)|Oracle数据库数据库的SQL ID的底层计算原理分析
目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《Oracle Database SQL Language Reference》 2、参考书籍:《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…...
C# OpenCV机器视觉:智能水果采摘
在一个风景如画的小镇边上,有一座阿强家祖传的果园。每到水果成熟的季节,果园里硕果累累,红彤彤的苹果、黄澄澄的梨子、紫莹莹的葡萄,散发着诱人的香气。然而,这丰收的喜悦却总被一件烦心事笼罩 —— 摘水果。 “哎呀…...
逻辑回归不能解决非线性问题,而svm可以解决
逻辑回归和支持向量机(SVM)是两种常用的分类算法,它们在处理数据时有一些不同的特点,特别是在面对非线性问题时。 1. 逻辑回归 逻辑回归本质上是一个线性分类模型。它的目的是寻找一个最适合数据的直线(或超平面&…...
celery + redis - 入门
文章目录 一、基本使用编写任务启动服务创建生产者获取状态和结果二、多目录结构异步执行编写服务启动服务调用服务获取结果https://www.bilibili.com/video/BV1jg4y13718 https://www.cnblogs.com/pyedu/p/12461819.html 一、基本使用 编写任务 celery_task.py import cel…...
SAP-ABAP:在LOOP循环中 ASSIGNING FIELD-SYMBOL的使用代码详解
在ABAP中,ASSIGNING FIELD-SYMBOL的作用是直接引用内表行的数据,避免不必要的数据复制,从而提升性能和代码效率。以下是其核心作用和优势: 基本语法 LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>)." 处理逻辑 ENDLOOP.i…...
SpringBoot启动流程简略版
启动入口 (main 方法) ↓ SpringApplication 初始化 ↓ 加载配置 (application.properties/yml) ↓ 创建 ApplicationContext ↓ 刷新 ApplicationContext ↓ - 加载 Bean 定义 - 执行自动配置 - 实例化 Bean - 依赖注入 - 调用初…...
Python:凯撒密码
题目内容: 凯撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符,对应关系如下: 原文:A B C D E F G H I J K L M N O P Q R …...
element-plus 解决el-dialog背后的页面滚动问题,及其内容有下拉框出现错位问题
这个问题通常是因为 el‑dialog 默认会锁定 body 的滚动(通过给 body 添加隐藏滚动条的样式),从而导致页面在打开对话框时跳转到顶部。解决方法是在使用 el‑dialog 时禁用锁定滚动功能。 <el-dialogv-model"dialogVisible":lo…...
Android和DLT日志系统
1 Linux Android日志系统 1.1 内核logger机制 drivers/staging/android/logger.c static size_t logger_offset( struct logger_log *log, size_t n) { return n & (log->size - 1); } 写的off存在logger_log中(即内核内存buffer)&am…...
Ubuntu 安装 NVIDIA 驱动实操指南(含卸载)
本文将详细介绍如何在Ubuntu上安装和配置NVIDIA显卡驱动。以下是一步步的操作流程,包括禁用开源驱动的步骤。 步骤 1:安装依赖 首先,确保系统中已安装gcc和make,这些是编译驱动所需的依赖。 sudo apt update sudo apt install …...
在postman中设置环境变量和全局变量以及五大常用响应体断言
一、什么是环境变量和全局变量 环境变量(Environment Variables)和全局变量(Global Variables)是 Postman 中用于存储和管理数据的两种变量类型,它们可以提高 API 测试的灵活性和可维护性。 1、 环境变量(…...
32单片机学习记录1之GPIO
32单片机学习记录1之GPIO 前置 GPIO口在单片机中扮演着什么角色? 在单片机中,GPIO口(General Purpose Input/Output) 是一种通用输入/输出接口,扮演着连接单片机与外部设备的桥梁角色。具体来说,它在单片…...
负载测试和压力测试的原理分别是什么
负载测试和压力测试是性能测试的两种主要类型,它们的原理和应用场景有所不同。 负载测试(Load Testing) 原理: 负载测试通过模拟实际用户行为,逐步增加系统负载,观察系统在不同负载下的表现。目的是评估系…...
openAI官方prompt技巧(二)
1. 赋予 ChatGPT 角色 为 ChatGPT 指定一个角色,让其从特定的身份或视角回答问题。这有助于生成针对特定受众或场景的定制化回答。 例如: 你是一名数据分析师,负责我们的市场营销团队。请总结上个季度的营销活动表现,并强调与未…...
javaEE-11.javaScript入门
目录 一.什么是javaScript 二.快速实现 三.JS引入方式 1.行内引入: 2.内部引入: 3.外部引入: 四.基础语法 1.变量 变量命名规则: 2.数据类型 3.运算符 五.JS对象 1.数组 创建数组: 2.操作数组 3.函数 函数注意事项: 函数参数: 4.对象 1.使用字面量 创建对象:…...
Word成功接入DeepSeek详细步骤
原理 原理是利用Word的VBA宏,写代码接入API。无需下载额外插件。 步骤一、注册硅基流动 硅基流动统一登录 注册这个是为了有一个api调用的api_key,有一些免费的额度可以使用。大概就是这个公司提供token,我们使用这个公司的模型调用deepsee…...
单片机简介
一、单片机简介 电脑和单片机性能对比 二、单片机发展历程 三、CISC VS RISC...
GitCode 助力 Dora SSR:开启游戏开发新征程
项目仓库(点击阅读原文链接可直达) https://gitcode.com/ippclub/Dora-SSR 跨越技术藩篱,构建游戏开发乐园 Dora SSR 是一款致力于打破游戏开发技术壁垒的开源游戏引擎。其诞生源于开发者对简化跨平台游戏开发环境搭建的强烈渴望࿰…...
[python SQLAlchemy数据库操作入门]-25.股票数据可视化:将 SQLAlchemy 数据呈现给用户
哈喽,大家好,我是木头左! 本文将探讨如何利用SQLAlchemy从数据库中提取股票数据,并使用现代数据可视化工具将这些数据以直观的方式呈现给用户。将通过一系列步骤来演示这个过程,包括设置环境、连接数据库、提取数据、处理数据以及最终的可视化展示。 安装必要的库 接下来…...
android的Lifecycle简介
嗯,我现在需要了解Android的Lifecycle组件。Lifecycle是Jetpack的一部分,对吧?听说它帮助管理Activity和Fragment的生命周期,避免内存泄漏。那它具体是怎么工作的呢? 首先,LifecycleOwner和LifecycleObser…...
SQL-leetcode—1327. 列出指定时间段内所有的下单产品
1327. 列出指定时间段内所有的下单产品 表: Products ------------------------- | Column Name | Type | ------------------------- | product_id | int | | product_name | varchar | | product_category | varchar | ------------------------- product_id 是该表主键(具…...
在Uniapp中使用阿里云OSS插件实现文件上传
在开发小程序时,文件上传是一个常见的需求。阿里云OSS(Object Storage Service)是一个强大的云存储服务,可以帮助我们高效地存储和管理文件。本文将介绍如何在Uniapp小程序中使用阿里云OSS插件实现文件上传功能。 1. 准备工作 首…...
C#中的序列化和反序列化
序列化是指将对象转换为可存储或传输的格式,例如将对象转换为JSON字符串或字节流。反序列化则是将存储或传输的数据转换回对象的过程。这两个过程在数据持久化、数据交换以及与外部系统的通信中非常常见 把对象转换成josn字符串格式 这个过程就是序列化 josn字符…...
IGBT的两级关断
IGBT(绝缘栅双极型晶体管)的两级关断(Two-stage turn-off)是一种优化关断过程的方法,主要用于减少关断时的电压过冲和dv/dt(电压变化率)过高的问题,特别是在大功率应用中(…...
TCP/IP 协议图解 | TCP 协议详解 | IP 协议详解
注:本文为 “TCP/IP 协议” 相关文章合辑。 未整理去重。 TCP/IP 协议图解 退休的汤姆 于 2021-07-01 16:14:25 发布 TCP/IP 协议简介 TCP/IP 协议包含了一系列的协议,也叫 TCP/IP 协议族(TCP/IP Protocol Suite,或 TCP/IP Pr…...
PyCharm结合DeepSeek-R1
PyCharm结合DeepSeek-R1,打造专属 AI 编程助手 在程序员的日常工作中,提高编程效率、快速解决代码问题是重中之重。今天给大家分享一个强强联合的组合 ——PyCharm 插件 Continue 与 DeepSeek-R1,它们能帮你打造出强大的个人 AI 编程助手。 …...
深入理解Java对接DeepSeek
其实,整个对接过程很简单,就四步,获取key,找到接口文档,接口测试,代码对接。 1.获取 KEY https://platform.deepseek.com/transactions 直接付款就是了(现在官网暂停充值2025年2月7日…...
【RabbitMQ的x-death头】消息死亡记录头流转示例
Header(name "x-death", required false) List<Map<String,Object>> xDeath 是用于捕获RabbitMQ自动生成的 消息死亡记录头信息。以下是详细解析和实际应用示例: x-death头的作用 死亡原因追踪:记录消息被拒绝/过期的完整生命周…...
【DeepSeek】在本地计算机上部署DeepSeek-R1大模型实战(完整版)
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能(AI)通过算法模拟人类智能,利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络(如ChatGPT&…...
二、通义灵码插件保姆级教学-IDEA(使用篇)
一、IntelliJ IDEA 中使用指南 1.1、代码解释 选择需要解释的代码 —> 右键 —> 通义灵码 —> 解释代码 解释代码很详细,感觉很强大有木有,关键还会生成流程图,对程序员理解业务非常有帮忙,基本能做到哪里不懂点哪里。…...
北斗导航 | 基于多假设解分离(MHSS)模型的双星故障监测算法(MATLAB代码实现——ARAIM)
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 双星故障监测算法 一、多星故障MHSS模型流程1、数据预处理2、构建假设模…...
OpenCV2D 特征框架 (22)人脸检测的一个类cv::FaceDetectorYN的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::FaceDetectorYN 是 OpenCV 中用于人脸检测的一个类,它基于深度学习模型实现。这个类是 OpenCV DNN(Deep Neural Netw…...
微信小程序页面制作——婚礼邀请函(含代码)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
django中间件,中间件给下面传值
1、新建middleware.py文件 # myapp/middleware.py import time from django.http import HttpRequest import json from django.http import JsonResponse import urllib.parse class RequestTimeMiddleware:def __init__(self, get_response):self.get_response get_respons…...
调用DeepSeek官方的API接口
效果 前端样式体验链接:https://livequeen.top/deepseekshow 准备工作 1、注册deepseek官网账号 地址:DeepSeek 点击进入右上角【API开放平台】,并进行账号注册。 2、注册完成后,依次点击【API keys】-【生成API key】&#x…...
C++--iomanip库
目录 1. 设置字段宽度:std::setw() 2. 设置浮点数精度:std::setprecision() 3. 设置填充字符:std::setfill() 4. 控制对齐方式:std::left 和 std::right,std::internal 5. 控制进制输出:std::hex、std…...
程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<8>
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 今天我们复习前面学习的指针知识 目录 关于指针数组和数组指针的区别指针数组(Array of Poi…...
redo和binlog区别
事务是数据库区别于文件系统的最重要功能,数据库事务支持ACID四个特性,其中I:隔离性是通过锁的方式实现的,剩下的A:原子性 C:一致性 D:持久性是通过redo日志、undo日志、binlog日志来实现的。 我…...
2.11学习记录
web——CTFHub XSS学习 学习资料:xss(跨站攻击) 原理 1.黑客发送带有xss恶意脚本的链接给用户 2.用户点击了恶意链接,访问了目标服务器(正常的服务器) 3.目标服务器(正常的服务器)…...
Packer 手动修复安装腾讯云插件
文章目录 Packer [腾讯云插件文档](https://developer.hashicorp.com/packer/integrations/hashicorp/tencentcloud) 提供的版本:v1.2.0,目前 Packer 构建镜像时,不支持现有2种[硬盘类型](https://www.tencentcloud.com/zh/document/product/…...
【探索未来科技】2025年国际学术会议前瞻
【探索未来科技】2025年国际学术会议前瞻 【探索未来科技】2025年国际学术会议前瞻 文章目录 【探索未来科技】2025年国际学术会议前瞻前言1. 第四届电子信息工程、大数据与计算机技术国际学术会议( EIBDCT 2025)代码示例:机器学习中的线性回…...
【Elasticsearch】Bucket Count K-S Test 聚合
Bucket Count K-S Test是 Elasticsearch 中的一种兄弟管道聚合(sibling pipeline aggregation),用于执行双样本柯尔莫哥洛夫-斯米尔诺夫检验(Kolmogorov-Smirnov Test,简称 K-S 检验)。这种聚合主要用于比较…...
LINUX——基础指令
引言 Linux 操作系统以其强大的命令行工具著称,掌握基础指令是高效使用 Linux 的必备技能。无论是文件管理、文本处理还是系统监控,命令行都能以极简的操作完成复杂任务。本文系统梳理 Linux 最核心的 30 基础指令,配合实际场景案例和进阶技…...
Expo运行模拟器失败错误解决(xcrun simctl )
根据你的描述,问题主要涉及两个方面:xcrun simctl 错误和 Expo 依赖版本不兼容。以下是针对这两个问题的解决方案: 解决 xcrun simctl 错误 错误代码 72 通常表明 simctl 工具未正确配置或路径未正确设置。以下是解决步骤: 确保 …...
Spring中常见的设计模式
Spring框架是一个庞大的生态系统,设计模式的应用广泛分布在其各个模块中。以下是针对你提到的设计模式,在Spring源码中的具体应用位置: 单例模式(Singleton Pattern): 在org.springframework.beans.factory…...
502 Bad Gateway 错误详解:从表现推测原因,逐步排查直至解决
502 Bad Gateway 错误通常意味着服务器之间的通信失败,但导致的具体原因往往因场景而异。 场景一:高峰期频繁出现 502 错误 1.1 现象 在流量高峰期间(如促销活动、直播发布等),页面访问变慢甚至出现 502 错误&#…...
【DeepSeek】deepseek可视化部署
目录 1 -> 前文 2 -> 部署可视化界面 1 -> 前文 【DeepSeek】DeepSeek概述 | 本地部署deepseek 通过前文可以将deepseek部署到本地使用,可是每次都需要winR输入cmd调出命令行进入到命令模式,输入命令ollama run deepseek-r1:latest。体验很…...
基于STM32的ADS1230驱动例程
自己在练手项目中用到了ADS1230,根据芯片手册自写的驱动代码,已测可用,希望对将要用到ADS1230芯片的人有所帮助。 芯片:STM32系列任意芯片、ADS1230 环境:使用STM32CubeMX配置引脚、KEIL 部分电路: 代码…...
计算机毕业设计springboot+vue.js就业数据采集分析平台 mybatis-plus(LW文档+PPT+讲解+代码安装)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
关于“#pragma arm section zidata = “mgr_buffer_section“的解析
#pragma arm section zidata “mgr_buffer_section” 是 ARM 编译器特有的指令,用于控制变量在内存中的分配位置。其作用如下: 核心解析 #pragma arm section 这是 ARM 编译器支持的编译指示(pragma),用于指定代码或…...