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 std

void EnumValue()
{
	// 遍历HKEY_CURRENT_USER\SOFTWARE\360se6

	// 打开键
	HKEY hKey360se6  = NULL;
	LONG lRet  = RegCreateKey(HKEY_CURRENT_USER, "SOFTWARE\\360se6", &hKey36
		0se6);
	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", &hKey
		720);
	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, sizeo
		f(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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ssm的“魅力”西安宣传网站(有报告)。Javaee项目。

演示视频&#xff1a; ssm的“魅力”西安宣传网站(有报告)。Javaee项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMvc MybatisVueLayuiElemen…

电大搜题:开启你的学习新篇章

广西开放大学&#xff0c;作为一所具有悠久历史和丰富经验的广播电视大学&#xff0c;在教育领域享有盛誉。如今&#xff0c;随着科技的迅猛发展&#xff0c;广西开放大学推出了电大搜题微信公众号&#xff0c;为广大学子提供了一个便捷、高效的学习工具。 电大搜题微信公众号…

漏刻有时百度地图API实战开发(7)个性化地图加载瓦片空白和Echarts加载bmap元素跟踪重影

一、地图瓦片加载缓慢或者空白 在使用百度个性化地图时&#xff0c;出现地图瓦片加载缓慢或者空白 解决方案 1.替换百度地图API引入方式 <script type"text/javascript" src"https://api.map.baidu.com/api?v3.0&akI2428Rc4FDz00LSGUYfISLcbPsxOfjx…

Linux 命令stat

命令作用 stat命令用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。 查看的信息内容: File 显示文件名 Size 显示文件大小 Blocks 文件使用的数据块总数 IO Block IO块大小 regular file 文件类型&#xff08;常规文件&#xff09; Device …

嵌入式WIFI芯片通过lwip获取心知天气实时天气信息(包含完整代码)

一、天气API 1. 心知天气的产品简介 HyperData 是心知天气的高精度气象数据产品&#xff0c;通过标准的 Restful API 接口&#xff0c;提供标准化的数据访问。无论是 APP、智能硬件还是企业级系统都可以轻松接入心知的精细化天气数据。 HyperData API V4版是当前的最新…

SQL Server 2016(创建数据表)

1、需求描述。 在名为“class”的数据库中创建表&#xff0c;表名称为“course”&#xff0c;其中要包含序号、课程、课程编号、学分、任课教师、上课地点、开始时间、结束时间、备注等列。 设置各个字段的数据类型。其中&#xff0c;"序号"列为标识列&#xff0c;从…

domain参数错误导致讯飞星火大模型:发生错误,错误码为:10404

问题 开通讯飞星火大模型api调用后&#xff0c;使用官方demo调用报错10404&#xff0c;最终发现是domain参数需要跟调用的版本保持一致&#xff0c;1.5&#xff0c;2&#xff0c;3版本分别传general,generalv2,generalv3&#xff0c;传错了还报错10404&#xff0c;感觉真没这必…

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明

上一个虚拟项目ICer萌新入职虚拟项目完成之后更了一段时间的脚本教程IC萌新的脚本培训教程又重新把那个700行RTL代码的risc处理器重新写了一遍&#xff0c;可以说是非常的忙碌啊&#xff08;主要是还得上班呢嗷&#xff0c;工作才是第一生产力&#xff01;&#xff09; 然后闲着…

sqlMap

url&#xff1a;https://sqlmap.org/ git&#xff1a;https://github.com/sqlmapproject/sqlmap.git git中文&#xff1a;https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-zh-CN.md use url&#xff1a;https://github.com/sqlmapproject/sqlmap…

【NeurIPS 2023】PromptIR: Prompting for All-in-One Blind Image Restoration

PromptIR: Prompting for All-in-One Blind Image Restoration&#xff0c; NeurIPS 2023 论文&#xff1a;https://arxiv.org/abs/2306.13090 代码&#xff1a;https://github.com/va1shn9v/promptir 解读&#xff1a;即插即用系列 | PromptIR&#xff1a;MBZUAI提出一种基…

排序算法总结(Python、Java)

Title of Content 1 冒泡排序 Bubble sort概念排序可视化代码实现Python - 基础实现Python - 优化实现Java - 优化实现C - 优化实现C - 优化实现 2 选择排序 Selection sort概念排序可视化代码实现PythonJava 3 插入排序 Insertion sort概念 1 冒泡排序 Bubble sort 概念 解释…

面试就是这么简单,offer拿到手软(二)—— 常见65道非技术面试问题

面试系列&#xff1a; 面试就是这么简单&#xff0c;offer拿到手软&#xff08;一&#xff09;—— 常见非技术问题回答思路 面试就是这么简单&#xff0c;offer拿到手软&#xff08;二&#xff09;—— 常见65道非技术面试问题 文章目录 一、前言二、常见65道非技术面试问题…

算法题-统计字符个数(Python题解)

文章目录 前言思路code 前言 先前笔试做了一道算法题&#xff0c;题目是这样子的&#xff1a;&#xff08;PS&#xff1a;不用惊讶&#xff0c;是的&#xff0c;我不打算24今年考研了&#xff0c;一是&#xff0c;当初填报的学校不是我想要去的学校&#xff08;当初想一战成硕…

CAPL通过ethernetPacket发送以太网报文

文章目录 ethernetPacketCANoe帮助文档车载以太网协议函数CAPL通过ethernetPacket发送以太网报文例子ethernetPacket CANoe中,ethernetPacket类似于CAN的message. CANoe帮助文档 CANoe的帮助文档是很好的学习资料,后面会结合CANoe帮助文档来介绍车载以太网的相关内容。 车…

竞赛选题 : 题目:基于深度学习的水果识别 设计 开题 技术

1 前言 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/pos…

3_企业级Nginx使用-day2

企业级Nginx使用-day2 学习目标和内容 1、能够编译安装并使用第三方模块 2、能够理解location语法的作用 3、能够了解URL的rewrite重写规则 4、能够理解防盗链原理和实现 一、第三方模块使用 Nginx官方没有的功能&#xff0c;开源开发者定制开发一些功能&#xff0c;把代码公…

Linux中文件的打包压缩、解压,下载到本地——zip,tar指令等

目录 1 .zip后缀名&#xff1a; 1.1 zip指令 1.2 unzip指令 2 .tar后缀名 3. sz 指令 4. rz 指令 5. scp指令 1 .zip后缀名&#xff1a; 1.1 zip指令 语法&#xff1a;zip [namefile.zip] [namefile]... 功能&#xff1a;将目录或者文件压缩成zip格式 常用选项&#xff1a…

百度智能云文字识别使用问题解决合集

1.创建试用程序时需要16位的签名MD5 解决方法&#xff1a;使用Java8 201版本及以下的jdk创建签名 下载地址&#xff1a;http://www.codebaoku.com/jdk/jdk-oracle-jdk1-8.html#jdk8u201 生成签名代码&#xff1a;keytool -genkeypair -v -keystore D:\key.jks -storetype PKC…

Android实验:启动式service

目录 实验目的实验内容实验要求项目结构代码实现结果展示 实验目的 充分理解Service的作用&#xff0c;与Activity之间的区别&#xff0c;掌握Service的生命周期以及对应函数&#xff0c;了解Service的主线程性质&#xff1b;掌握主线程的界面刷新的设计原则&#xff0c;掌握启…

Java研学-配置文件

一 配置文件 1 作用–解决硬编码的问题 在实际开发中,有时将变量的值直接定义在.java源文件中;如果维护人员想要修改数据,无法完成(因为没有修改权限),这种操作称之为硬编码 2 执行原理: 将经常需要改变的数据定义在指定类型的文件中,通过java代码对指定的类型的文件进行操作…