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

Windows核心编程 注册表

目录

注册表概述

打开关闭注册表

创建删除子健

查询写入删除键值

子健和键值的枚举

常用注册表操作


注册表概述

注册表是Windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心"数据库",也可以说是一个非常巨大的树状分层结构的数据库系统

注册表是一个存储计算机配置信息的数据库,用于存储计算机上的硬件、安装的软件、系统设置以及用户账户配置等重要信息。对注册表的编辑不当可能会影响计算机的正常运行。应用程序可以调用API函数来对注册表进行增、删等操作。

注册表记录了用户安装在计算机上的软件和每个程序的相互关联信息,它包括了计算机的硬件配置,包括自动配置的即插即用的设备和已有的各种设备说明、状态属性以及各种状态信息和数据。利用一个功能强大的注册表数据库来统一集中地管理系统硬件设施、软件配置等信息,从而方便了管理,增强了系统的稳定性

早期的注册表以ini为扩展名的文本文件的配置文件。

自Windows95操作系统开始,注册表真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用:

  • 注册表数据库由多个文件组成
  • Windows提供了注册表编辑器

与INI文件不同的是:

  • 注册表采用了二进制形式登录数据;
  • 注册表支持子键,各级子关键字都有自己的“键值”;
  • 注册表中的键值项可以包含可执行代码,而不是简单的字串;
  • 在同一台计算机上,注册表可以存储多个用户的特性。

特点:

  • 注册表允许对硬件、系统参数、应用程序和设备驱动程序进行跟踪配置,这使得修改某些设置后不用重新启动成为可能。
  • 注册表中登录的硬件部分数据可以支持高版本Windows的即插即用特性。当Windows检测到机器上的新设备时,就把有关数据保存到注册表中,另外,还可以避免新设备与原有设备之间的资源冲突。
  • 管理人员和用户通过注册表可以在网络上检查系统的配置和设置,使得远程管理得以实现。

注册表查看:Win + R 运行 regedit 。可以改动的区域 - HKEY_CURRENT_USER - SOFTWARE

注册表以树状结构进行呈现。

注册表根键说明:

值:

  • 字符串值(REG_Sz):固定长度的文本字符串
  • 二进制值(REG_BINARY):原始二进制数据。多数硬件组件信息都以二进制数据存储
  • DWORD值(REG_DWORD):数据由4字节长的数表示。设备驱动程序和服务的很多参数都是这种类型
  • QWORD值(REG_QwORD):数据由8字节长的数表示
  • 多字符串值(REG_MULTl_SZ):多重字符串。包含列表或多值的值通常为该类型
  • 可扩充字符串值(REG_EXPAND_Z):长度可变的数据串。该数据类型包含在程序或服务使用该数据时解析的变量

打开关闭注册表

RegOpenKeyEx           打开注册表

RegOpenKeyExA是Windows API函数之一,用于打开一个指定的注册表项。

LSTATUS RegOpenKeyExA(HKEY   hKey,LPCSTR lpSubKey,DWORD  ulOptions,REGSAM samDesired,PHKEY  phkResult
);

下面是对该函数参数的解释:

  • hKey:表示要打开的注册表项的父项句柄。常见的父项句柄包括HKEY_LOCAL_MACHINEHKEY_CURRENT_USER等,可以使用这些常量来表示。

  • lpSubKey:表示相对于父项的子项路径。字符串类型,使用 ANSI 编码。

  • ulOptions:指定打开注册表项的选项。可以使用零或者REG_OPTION_NON_VOLATILE(非易失性注册表项)。

  • samDesired:指定打开注册表项时的访问权限。使用KEY_READKEY_WRITE等常量来表示。

  • phkResult:指向一个HKEY类型的指针,用于接收打开的注册表项的句柄。

函数返回值:返回一个LSTATUS类型的值,代表函数执行的结果状态码。如果函数成功执行,返回值将是ERROR_SUCCESS

RegCloseKey   关闭已打开的注册表句柄

LSTATUS RegCloseKey(HKEY hKey
);

hKey:要关闭的键句柄,即RegOpenKeyExphkResult

测试代码

#include <Windows.h>
#include <iostream>int main()
{// 打开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion注册表项HKEY hKey;LPCSTR lpSubKey = "Software\\Microsoft\\Windows\\CurrentVersion";LSTATUS result = RegOpenKeyExA(HKEY_CURRENT_USER, lpSubKey, 0, KEY_READ, &hKey);if (result == ERROR_SUCCESS){std::cout << "成功打开注册表项!" << std::endl;// 在这里可以使用其他注册表API函数来读取或修改注册表项的键值对// 关闭注册表项句柄RegCloseKey(hKey);}else{std::cout << "无法打开注册表项,错误代码:" << result << std::endl;}return 0;
}

创建删除子健

RegCreateKeyEx         创建一个子键

RegCreateKeyExA是Windows API函数之一,用于创建或打开一个指定的注册表项。

LSTATUS RegCreateKeyExA(HKEY                        hKey,LPCSTR                      lpSubKey,DWORD                       Reserved,LPSTR                       lpClass,DWORD                       dwOptions,REGSAM                      samDesired,const LPSECURITY_ATTRIBUTES lpSecurityAttributes,PHKEY                       phkResult,LPDWORD                     lpdwDisposition
);

下面是对该函数参数的解释:

  • hKey:表示要创建或打开的注册表项的父项句柄。常见的父项句柄包括HKEY_LOCAL_MACHINEHKEY_CURRENT_USER等,可以使用这些常量来表示。

  • lpSubKey:表示相对于父项的子项路径。字符串类型,使用 ANSI 编码。

  • Reserved:保留参数,必须为零。

  • lpClass:为新创建的注册表项指定一个类别。该参数可以为NULL。

  • dwOptions:指定创建或打开注册表项时的选项。

  • samDesired:指定创建或打开注册表项时的访问权限。

  • lpSecurityAttributes:指定注册表项的安全性设置。可以为NULL。

  • phkResult:指向一个HKEY类型的指针,用于接收创建或打开的注册表项的句柄。

  • lpdwDisposition:指定一个DWORD类型的指针,用于接收返回的操作结果信息。

函数返回值:返回一个LSTATUS类型的值,代表函数执行的结果状态码。如果函数成功执行,返回值将是ERROR_SUCCESS

使用RegCreateKeyExA函数可以创建或打开一个注册表项后,可以使用其他注册表API函数来读取或修改注册表项的键值对。

RegDeleteKey    删除子键

LSTATUS RegDeleteKeyA(HKEY   hKey,LPCSTR lpSubKey
);

测试代码

#include <Windows.h>
#include <iostream>int main()
{// 创建或打开HKEY_CURRENT_USER\Software\MyApp注册表项HKEY hKey;LPCSTR lpSubKey = "Software\\MyApp";LSTATUS result = RegCreateKeyExA(HKEY_CURRENT_USER, lpSubKey, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hKey, NULL);if (result == ERROR_SUCCESS){std::cout << "成功创建或打开注册表项!" << std::endl;// 在这里可以使用其他注册表API函数来读取或修改注册表项的键值对// 关闭注册表项句柄RegCloseKey(hKey);}else{std::cout << "无法创建或打开注册表项,错误代码:" << result << std::endl;}return 0;
}

查询写入删除键值

RegQueryValueEx   读取键名称中的数据或查询键名称的属性

LSTATUS RegQueryValueExA(HKEY    hKey,LPCSTR  lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE  lpData,LPDWORD lpcbData
);

下面是对该函数参数的解释:

  • hKey:表示要查询的注册表项的句柄。

  • lpValueName:表示要查询的注册表项中的值的名称。字符串类型,使用 ANSI 编码。

  • lpReserved:保留参数,必须为NULL。

  • lpType:指向一个DWORD类型的指针,用于接收查询的值的数据类型。

  • lpData:指向一个缓冲区,用于接收查询到的值的数据。

  • lpcbData:指向一个DWORD类型的指针,用于指定缓冲区的大小,并返回实际写入缓冲区的字节数。

函数返回值:返回一个LSTATUS类型的值,代表函数执行的结果状态码。如果函数成功执行,返回值将是ERROR_SUCCESS

RegSetValueEx         写入键值项

LSTATUS RegSetValueExA(HKEY       hKey,LPCSTR     lpValueName,DWORD      Reserved,DWORD      dwType,const BYTE *lpData,DWORD      cbData
);

下面是对该函数参数的解释:

  • hKey:表示要设置的注册表项的句柄。

  • lpValueName:表示要设置的注册表项中的值的名称。字符串类型,使用 ANSI 编码。

  • Reserved:保留参数,必须为0。

  • dwType:表示要设置的值的数据类型。可以使用预定义的常量,如REG_SZ表示字符串类型。

  • lpData:指向要设置的数据的缓冲区的指针。

  • cbData:表示要设置的数据的大小,以字节为单位。

函数返回值:返回一个LSTATUS类型的值,代表函数执行的结果状态码。如果函数成功执行,返回值将是ERROR_SUCCESS

使用RegSetValueExA函数可以设置注册表项中指定值的数据。通过指定dwType参数来确定数据的类型,并将要设置的数据存储在lpData缓冲区中

RegDeleteValue      删除键值项

LSTATUS RegDeleteValueA(HKEY   hKey,LPCSTR lpValueName
);

下面是对该函数参数的解释:

  • hKey:表示要删除值的注册表项的句柄。

  • lpValueName:表示要删除的注册表项中的值的名称。字符串类型,使用 ANSI 编码。

函数返回值:返回一个LSTATUS类型的值,代表函数执行的结果状态码。如果函数成功执行,返回值将是ERROR_SUCCESS

使用RegDeleteValueA函数可以删除注册表项中指定的值。通过指定hKey参数来确定要删除值的注册表项的位置,通过指定lpValueName参数来指定要删除的值的名称。

测试代码

#include <Windows.h>
#include <iostream>int main() {// 打开注册表项HKEY hKey;if (RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\MyApp", 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS) {std::cout << "Failed to open registry key." << std::endl;return 1;}// 查询注册表项中的值DWORD dwType;DWORD dwValue;DWORD dwSize = sizeof(DWORD);if (RegQueryValueExA(hKey, "MyValue", nullptr, &dwType, reinterpret_cast<LPBYTE>(&dwValue), &dwSize) == ERROR_SUCCESS) {std::cout << "Value found: " << dwValue << std::endl;} else {std::cout << "Value not found." << std::endl;}// 设置注册表项中的值DWORD dwNewValue = 123;if (RegSetValueExA(hKey, "MyValue", 0, REG_DWORD, reinterpret_cast<const BYTE*>(&dwNewValue), sizeof(DWORD)) == ERROR_SUCCESS) {std::cout << "Value set successfully." << std::endl;} else {std::cout << "Failed to set value." << std::endl;}// 删除注册表项中的值if (RegDeleteValueA(hKey, "MyValue") == ERROR_SUCCESS) {std::cout << "Value deleted successfully." << std::endl;} else {std::cout << "Failed to delete value." << std::endl;}// 关闭注册表项RegCloseKey(hKey);return 0;
}

子健和键值的枚举

RegEnumKeyEx         子键枚举函数

LSTATUS RegEnumKeyExA(HKEY      hKey,DWORD     dwIndex,LPSTR     lpName,LPDWORD   lpcchName,LPDWORD   lpReserved,LPSTR     lpClass,LPDWORD   lpcchClass,PFILETIME lpftLastWriteTime
);

下面是对该函数参数的解释:

  • hKey:表示要枚举子项的注册表项的句柄。

  • dwIndex:表示要枚举的子项的索引。使用0开始的索引。

  • lpName:指向一个缓冲区,用于存储返回的子项名称。

  • lpcchName:指向一个变量,用于指定lpName缓冲区的大小。在调用函数之前,应将其设置为缓冲区大小(以字节为单位),并在函数调用后,它将被设置为实际写入到lpName缓冲区中的字节数(不包括终止null字符)。

  • lpReserved:保留参数,必须为NULL。

  • lpClass:指向一个缓冲区,用于存储返回的子项的类名(可选)。可以将该参数设置为NULL,如果不需要子项的类名。

  • lpcchClass:指向一个变量,用于指定lpClass缓冲区的大小。在函数调用之前,应将其设置为缓冲区大小(以字节为单位),并在函数调用后,它将被设置为实际写入到lpClass缓冲区中的字节数(不包括终止null字符)。

  • lpftLastWriteTime:指向一个FILETIME结构体的指针,用于存储子项的最后修改时间。

函数返回值:返回一个LSTATUS类型的值,代表函数执行的结果状态码。如果函数成功执行,返回值将是ERROR_SUCCESS

使用RegEnumKeyExA函数可以枚举注册表项中的子项。通过指定hKey参数来确定要枚举子项的注册表项的位置,通过指定dwIndex参数来指定要枚举的子项的索引,然后将子项名称存储在lpName缓冲区中。

RegEnumValue     枚举键值

LSTATUS RegEnumValueA(HKEY    hKey,DWORD   dwIndex,LPSTR   lpValueName,LPDWORD lpcchValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE  lpData,LPDWORD lpcbData
);

下面是对该函数参数的解释:

  • hKey:表示要枚举值的注册表项的句柄。

  • dwIndex:表示要枚举的值的索引。使用0开始的索引。

  • lpValueName:指向一个缓冲区,用于存储返回的值的名称。

  • lpcchValueName:指向一个变量,用于指定lpValueName缓冲区的大小。在调用函数之前,应将其设置为缓冲区大小(以字节为单位),并在函数调用后,它将被设置为实际写入到lpValueName缓冲区中的字节数(不包括终止null字符)。

  • lpReserved:保留参数,必须为NULL。

  • lpType:指向一个变量,用于接收值的类型。可以将该参数设置为NULL,如果不需要值的类型。

  • lpData:指向一个缓冲区,用于存储值的数据。

  • lpcbData:指向一个变量,用于指定lpData缓冲区的大小。在函数调用之前,应将其设置为缓冲区大小(以字节为单位),并在函数调用后,它将被设置为实际写入到lpData缓冲区中的字节数。

函数返回值:返回一个LSTATUS类型的值,代表函数执行的结果状态码。如果函数成功执行,返回值将是ERROR_SUCCESS

使用RegEnumValueA函数可以枚举注册表项中的值。通过指定hKey参数来确定要枚举值的注册表项的位置,通过指定dwIndex参数来指定要枚举的值的索引,然后将值的名称存储在lpValueName缓冲区中,并将值的数据存储在lpData缓冲区中。

测试代码


#include <iostream>
#include <windows.h>using namespace stdvoid EnumValue()
{// 遍历HKEY_CURRENT_USER\SOFTWARE\360se6// 打开键HKEY hKey360se6  = NULL;LONG lRet  = RegCreateKey(HKEY_CURRENT_USER, "SOFTWARE\\360se6", &hKey360se6);if (lRet  != ERROR_SUCCESS){MessageBox(NULL, "打开结点失败", "提示", MB_OK);return;}// 获取值的个数DWORD dwValCnt  = 0;lRet  = RegQueryInfoKey(hKey360se6, NULL, NULL, NULL, NULL, NULL, NULL,&dwValCnt, NULL, NULL, NULL, NULL);// 遍历值for (DWORD dwIdx  = 0; dwIdx  < dwValCnt; dwIdx++){char szBuff[MAXWORD] = {};DWORD dwNameLen  = sizeof(szBuff);RegEnumValue(hKey360se6, dwIdx, szBuff, &dwNameLen, NULL, NULL, NULL, NULL);cout  << szBuff  << endl;}RegCloseKey(hKey360se6);
}int main()
{// 枚举值EnumValue();// 创建结点(项)HKEY hKey720  = NULL;LONG lRet  = RegCreateKey(HKEY_CURRENT_USER, "SOFTWARE\\360\\720", &hKey720);if (lRet  != ERROR_SUCCESS){MessageBox(NULL, "创建结点失败", "提示", MB_OK);return 0;}// 删除key‐value对lRet  = RegDeleteValue(hKey720, "测试");if (lRet  != ERROR_SUCCESS){MessageBox(NULL, "删除key‐value对失败", "提示", MB_OK);return 0;}// 删除指定键lRet  = RegDeleteKey(HKEY_CURRENT_USER, "SOFTWARE\\360\\720");if (lRet  != ERROR_SUCCESS){MessageBox(NULL, "删除子键720失败", "提示", MB_OK);return 0;}// 添加新的key‐value对char szBuff[] = { "hello register" };lRet  = RegSetValueEx(hKey720, "测试", 0, REG_SZ, (PBYTE)szBuff, sizeof(szBuff));if (lRet  != ERROR_SUCCESS){MessageBox(NULL, "添加新的key‐value对失败", "提示", MB_OK);return 0;}DWORD dwVal  = 0x12345678;lRet  = RegSetValueEx(hKey720, "数值", 0, REG_DWORD, (PBYTE)&dwVal, sizeof(dwVal));if (lRet  != ERROR_SUCCESS){MessageBox(NULL, "添加新的key‐value对失败", "提示", MB_OK);return 0;}RegCloseKey(hKey720);std::cout  << "Hello World!\n";return 0;
}

常用注册表操作

禁用快捷菜单的”发送到“菜单项

打开计算机\HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\SendTo 删除默认值。如果要恢复,将默认值设置为 {7BA4C740-9E81-11CF-99D3-00AA004AE837}

删除快捷方式箭头

打开计算机\HKEY_CLASSES_ROOT\lnkfile,删除IsShortcut键值

隐藏桌面图标

打开计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer,新建名称为NoSetFolders键值,并设置数据为1

禁止访问任务管理器

打开计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System,修改DisableTaskmgr键值的数据为1。如果没有DisableTaskmgr键值,就创建一个。

在桌面显示Windows版本

打开计算机\HKEY_CURRENT_USER\Control Panel\Desktop,修改PaintDesktopVersion键值的数据为1

隐藏”重新启用“、”睡眠”和“休眠”命令

打开计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer,新建一个NoClose键值,并设置数据为1

禁用计算机中的USB端口

打开计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR,修改Start键值数据为4

配置开机启动项

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

相关文章:

Windows核心编程 注册表

目录 注册表概述 打开关闭注册表 创建删除子健 查询写入删除键值 子健和键值的枚举 常用注册表操作 注册表概述 注册表是Windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心"数据库"&#xff0c;也可以说是一个非常巨大的树状分层结构的…...

【算法专题】二分查找

二分查找 二分查找1. 二分查找2. 在排序数组中查找元素的第一和最后一个位置3. 搜索插入位置4. x 的平方根5. 山脉数组的峰顶索引6. 寻找峰值7. 寻找旋转排序数组中的最小值8. 点名 二分查找 1. 二分查找 题目链接 -> Leetcode -704.二分查找 Leetcode -704.二分查找 题…...

中国消费电子行业发展趋势及消费者需求洞察|徐礼昭

一、引言 近年来&#xff0c;随着科技的飞速发展&#xff0c;消费电子行业面临着前所未有的挑战与机遇。本文将从行业发展趋势、消费者需求洞察以及企业数字化转型的方向和动作三个方面&#xff0c;对消费电子行业进行深入剖析。 二、消费电子行业发展趋势 5G技术的普及和应…...

UE学习C++(1)创建actor

创建新C类 在 虚幻编辑器 中&#xff0c;点击 文件&#xff08;File&#xff09; 下拉菜单&#xff0c;然后选择 新建C类...&#xff08;New C Class...&#xff09; 命令&#xff1a; 此时将显示 选择父类&#xff08;Choose Parent Class&#xff09; 菜单。可以选择要扩展的…...

【CTA认证】Android8实现android6以下的应用运行时也要申请权限

需求 CTA入网认证&#xff0c;要求低版本比如Android6以下的应用&#xff0c;运行时&#xff0c;也需要有运行时权限(Runtime Permission)功能&#xff0c;不能默认就取到权限&#xff0c;必须人工在设置中打开才可。 环境 Android 8 实现 frameworks 修改思路是所有APP都…...

gRPC Java、Go、PHP使用例子

文章目录 1、Protocol Buffers定义接口1.1、编写接口服务1.2、Protobuf基础数据类型 2、服务器端实现2.1、生成gRPC服务类2.2、Java服务器端实现 3、java、go、php客户端实现3.1、Java客户端实现3.2、Go客户端实现3.3、PHP客户端实现 本文例子是在Window平台测试&#xff0c;Ja…...

前端知识笔记(十九)———px,em,rem,vw,vh之间的区别

一&#xff0c;px&#xff08;像素&#xff09;&#xff1a;像素是屏幕上显示的最小单位&#xff0c;它是固定的&#xff0c;不随页面缩放而改变大小。在响应式设计中&#xff0c;使用像素单位可能会导致布局在不同屏幕尺寸上显示不一致。例如&#xff1a;现在在你电脑上一个字…...

docker部署frp穿透内网

文章目录 &#xff08;1&#xff09;部署frps服务器&#xff08;2&#xff09;部署frpc客户端&#xff08;3&#xff09;重启与访问frp&#xff08;4&#xff09;配置nginx反向代理 &#xff08;1&#xff09;部署frps服务器 docker安装参考文档&#xff1a;docker基本知识 1…...

使用pytorch从零开始实现迷你GPT

生成式建模知识回顾: [1] 生成式建模概述 [2] Transformer I&#xff0c;Transformer II [3] 变分自编码器 [4] 生成对抗网络&#xff0c;高级生成对抗网络 I&#xff0c;高级生成对抗网络 II [5] 自回归模型 [6] 归一化流模型 [7] 基于能量的模型 [8] 扩散模型 I, 扩散模型 II…...

tp6框架 万级数据入库 php函数优化

将万级数据入库并判断有无 没有则新增 上篇是用mysql的replace into实现 本篇是另一种方法 这是我的数据格式&#xff1a; $data [ [ KCH > value1, other_column1 > value_other1_1, other_column2 > value_other2_1, ], [ KCH > value2, other_column…...

TwinCAT3一个PLC设备里多个程序工程之间通讯

目录 1、创建TwinCAT3工程&#xff0c;再分别创建两个PLC程序工程 2、PLC1工程中添加如下代码&#xff0c;然后编译重新生成PLC1工程 3、PLC2工程中添加如下代码&#xff0c;然后编译重新生成PLC2工程 4、变量关联 5、一个PLC运行多个PLC工程设置 7、工程下载链接 1、创建…...

python弹球小游戏

import pygame import random# 游戏窗口大小 WIDTH 800 HEIGHT 600# 定义颜色 WHITE (255, 255, 255) BLACK (0, 0, 0) RED (255, 0, 0) GREEN (0, 255, 0) BLUE (0, 0, 255)# 球的类 class Ball:def __init__(self):self.radius 10self.speed [random.randint(2, 4),…...

mongoose学习记录

mongoose安装和连接数据库 npm i mongoose导入mongoose const mongoose require(mongoose) mongoose.set("strictQuery",true)连接数据库 mongoose.connect(mongodb:127.0.0.1:27017/test)设置回调 mongoose.connection.on(open,()>{console.log("连接成…...

边缘与云或边缘加云:前进的方向是什么?

边缘计算使数据处理更接近数据源&#xff0c;以及由此产生的行动或决策的对象。通过设计&#xff0c;它可以改变数十亿物联网和其他设备存储、处理、分析和通信数据的方式。 边缘计算使数据处理更接近数据源&#xff0c;以及由此产生的行动或决策的对象。这与传统的体系结构形成…...

蓝桥杯第1037题子串分值和 C++ 字符串 逆向思维 巧解

题目 思路和解题方法 方案一——遍历哈希表 仅能过60%样例,大多数同学都用的该方法&#xff0c;就不过多赘述 #include <iostream> #include <unordered_map> using namespace std; int main() {string s;cin >> s;int n s.size();int res n;for (int i 0…...

力扣题:字符串的反转-11.23

力扣题-11.23 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;557. 反转字符串中的单词 III 解题思想&#xff1a;先读取单词&#xff0c;然后将单词进行翻转即可 class Solution(object):def reverseWords(self, s):""":type s…...

【软件测试】盘一盘工作中遇到的 Redis 异常测试

在测试工作中&#xff0c;涉及到与 redis 交互的场景变的越来越多了。关于redis本身就不作赘述了&#xff0c;网上随便搜&#xff0c;本人也做过一些整理。 今天只来复盘一下&#xff0c;在测试过程中与 redis 的二三事儿。其中提到的案例是经过抽象化的&#xff0c;用作辅助说…...

14.Oracle中RegExp_Like 正则表达式基本用法

--基本用法&#xff0c;是否包含某字符串 like %36% select * from k_micfo where regexp_like(loginid,36);if regexp_like(str,^[0-9\.]$) --只包含数字0-9&#xff0c;,小数点.--oracle判断字段是否是纯数字 (四种写法结果一样&#xff09; select * from k_micfo where r…...

Docker Swarm总结+Jenkins安装配置与集成(5/5)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…...

docker安装Sentinel zipkin

文章目录 引言I Sentinel安装1.1 运行容器1.2 DOCKERFILE 参考1.3 pom 依赖1.4 .yml配置(整合springboot)II 资源保护2.1 Feign整合Sentinel2.2 CommonExceptionAdvice:限流异常处理类III zipkin引言 消息服务和请求第三方服务可不配置Sentinel。 </...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...