自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 ssh中公钥和私钥怎么生成

ssh-keygen是一个用于生成 SSH 密钥对的工具,通常用于 SSH(Secure Shell)协议的密钥认证。SSH 密钥对包括一个公钥和一个私钥,用于增强 SSH 登录的安全性,避免使用明文密码登录服务器。以下是关于ssh-keygen。

2025-02-06 22:20:28 1561 1

原创 git reset 命令

-soft:只移动HEAD,保留暂存区和工作区。--mixed:移动HEAD,重置暂存区,保留工作区。--hard:移动HEAD,重置暂存区和工作区。

2025-02-05 00:28:58 352

原创 git中文件的状态&状态切换

在 Git 中,文件的状态是指文件相对于 Git 仓库的当前情况。这是新创建的文件或从其他位置复制过来的文件,Git 还没有开始跟踪这些文件的更改。这些文件不会出现在git status命令的 "Changes to be committed" 部分,而是出现在 "Untracked files" 部分。文件已经被修改,但还没有添加到暂存区。这些文件出现在git status命令的 "Changes not staged for commit" 部分。

2025-02-03 21:40:57 916

原创 win32

• 地址范围:在64位系统中,虚拟地址空间的大小是\(2^{64}\)字节,理论上可以达到18.4EB(Exabytes).然而,实际使用的地址空间通常会小得多,因为物理内存的限制和操作系统的实现.• 64位系统:地址范围是0x0000000000000000到0xFFFFFFFFFFFFFFFF,用户区通常是0x0000000000000000到0x00007FFFFFFFFF.• 32位系统:地址范围是0x00000000到0xFFFFFFFF,用户区通常是0x00000000到0x7FFFFFFF.

2025-01-07 01:53:37 184

原创 ssh中公钥和私钥是具体作用,以及通俗解释

这样,你就可以安全地允许特定的人访问你的远程服务器,而不需要分享你的私钥。- **公钥**:这是一把可以公开的钥匙,就像你家门上的锁孔,任何人都可以试图用钥匙来开锁,但是只有正确的钥匙才能打开它。- **私钥**:这是一把必须保密的钥匙,就像你家门上的钥匙,只有你拥有它,而且你不会把它给别人。1. **生成新的密钥对**:让想要访问服务器的人在自己的计算机上生成一对新的SSH密钥(公钥和私钥)。这种方式的好处是,即使有人偷走了你的公钥(因为公钥本来就是公开的),他们也无法打开盒子,因为他们没有你的私钥。

2024-11-11 00:12:01 743

原创 文件指针对于

每个文件描述符都有一个与之关联的文件状态标志(file status flags),这些标志包括文件的打开模式(如只读、只写、读写等)和文件状态(如文件指针位置、文件是否处于非阻塞模式等)。如果您在写操作后进行读操作,文件指针将从上次写操作后的位置开始读取,而不是从文件的开头或末尾开始。的影响,写操作会自动从文件末尾开始。函数显式地将文件指针移动到文件的开头,因为读操作的文件指针位置不受。标志,文件描述符都会创建一个新的文件状态标志集合。标志的作用是,当您使用该文件描述符进行写操作时,文件指针会。

2024-10-31 14:24:30 171

原创 linux的文件IO操作---read函数如何退出

如果文件描述符指向的文件没有数据可读,且文件描述符设置为阻塞模式, read 函数会阻塞调用进程,直到有数据可读或者文件被关闭。当 read 函数从普通文件中读取数据,到达文件末尾时,没有更多的数据可以读取, read 函数会返回0,表示 EOF。当 read 函数被调用,并且文件描述符指向的文件还有数据可读时, read 会读取数据并返回实际读取的字节数。,且写端没有更多的数据可供读取时,读端(read end)的 read 函数会返回0,表示 EOF。,而不是仅仅因为没有数据可读。

2024-10-31 09:54:57 713

原创 lambda 表达式的——原理

在这个调用中,`lambda(5)` 实际上是调用了 `lambda` 变量所持有的对象的 `operator()`,传递了参数 `5`,然后返回了该 lambda 表达式计算的结果。这里的 `lambda` 变量名并不是 lambda 表达式的函数名,因为 lambda 表达式是匿名的。,lambda表达式里面的()就是相当于这个临时类里面对()运算符的重载,而 `lambda` 变量实际上保存的是这个类的实例。在这个例子中,`lambda` 是一个变量名,它存储了一个 lambda 表达式的对象。

2024-10-26 23:25:33 244

原创 C++中 右值引用 的用处

在C++中,函数用于将一个对象转换为右值引用,这通常用于触发移动语义,特别是在资源转移(如动态分配的内存)的场景中,以避免不必要的拷贝操作。

2024-10-23 17:24:59 196

原创 C++中函数指针的调用

定义函数指针时,需要指定它指向的函数的返回类型、函数名以及参数列表(包括参数的类型和顺序)。在这里,我们使用 `using` 定义了一个名为 `AddFunc` 的函数指针类型,它指向接受两个 `int` 参数并返回 `int` 的函数。在定义函数指针时,必须确保函数指针的类型与它指向的函数的签名完全匹配,包括返回类型和所有参数的类型。在这里,`printPtr` 是一个函数指针,指向 `printArray` 函数。在这里,`addPtr` 是一个函数指针,指向 `add` 函数。

2024-10-23 16:40:52 470

原创 多线程-读写锁的一些理解

6. **线程的无限循环**:你的代码中,线程函数包含一个无限循环(`while(1)`),这意味着线程会一直运行,直到被外部条件(如程序结束或线程被取消)终止。7. **线程的终止**:在你的代码中,写线程在执行一次写操作后会退出(通过`pthread_exit(NULL)`),而读线程则会继续运行。当一个写线程获取写锁时,它会阻止其他所有线程(包括其他写线程和所有读线程)获取任何类型的锁。5. **锁的释放**:在你的代码中,写线程在完成写操作后会释放写锁,这允许其他等待的线程(如果有的话)获取锁。

2024-10-21 21:59:51 329

原创 memset的用法

sizeof(buf)` 计算 `buf` 数组的大小(字节数),`0` 是要填充的值,所以这行代码将 `buf` 数组的每个字节都初始化为 0。在你的例子中,`memset` 被用来清空 `buf` 数组,以便在下一次从管道读取数据时,`buf` 数组不会包含上一次读取留下的任何数据。`memset` 是 C 语言标准库中的一个函数,用于将一块内存区域设置为特定的值。`memset` 函数会将 `n` 个字节的内存区域从地址 `s` 开始设置为值 `c`。- `s` 参数是要被填充的内存块的起始地址。

2024-10-17 23:01:27 260

原创 using关键字的用法

这行代码定义了一个别名 `dday`,代表一个表示天数的 `duration` 类型。这样,你就可以使用 `dday` 来创建表示天数的持续时间,而不需要每次都写出完整的 `duration<int, ratio<60 * 60 * 24>>` 类型。这里,`MyInt` 就成为了 `int` 类型的别名。1. **简化复杂类型**:对于模板和复杂的类型定义,使用 `using` 可以简化类型名,使其更易于理解和使用。这里,`SmartPtr` 成为了 `std::shared_ptr<T*>` 的别名。

2024-10-15 16:05:21 180

原创 移动构造函数和拷贝构造函数的使用

先理解左值和右值左值可以被多次使用,它们代表的对象在程序中有一个持久的存在。

2024-10-13 19:01:58 674

原创 shell脚本中for循环的用法

请注意,在处理命令的输出时,通常建议使用 `while` 循环和 `read` 命令,因为这样可以更好地处理空格和特殊字符。在 Bash 脚本中,`for` 循环是一种常见的循环结构,用于重复执行一系列命令。`for` 循环是 Bash 脚本中常用的控制结构之一,它提供了多种方式来迭代和执行重复的任务。### 使用 C 风格的 `for` 循环。### 使用命令输出的 `for` 循环。### 使用序列的 `for` 循环。### 遍历数组的 `for` 循环。### 基本的 `for` 循环。

2024-10-07 17:03:38 559

原创 Linux中test命令详解

test` 命令在 shell 脚本中广泛使用,尤其是在条件语句 `if`、`while`、`until` 中。请注意,`test` 命令在现代 shell 脚本中通常被 `[` 命令替换,因为 `[` 是 `test` 的一个别名,并且具有相同的功能。- `expr1 -o expr2`:检查 `expr1` 或 `expr2` 是否至少有一个为真。- `expr1 -a expr2`:检查 `expr1` 和 `expr2` 是否都为真。- `-c file`:检查文件是否存在且为字符特殊文件。

2024-10-07 16:29:23 844

原创 shell脚本字符串变量的操作

{variable/pattern/replacement} :替换 variable 中的第一个匹配 pattern 的部分为 replacement。${variable//pattern/replacement} :替换 variable 中所有匹配 pattern 的部分为 replacement。${variable:%pattern} :如果 variable 的值匹配 pattern ,则返回不匹配的部分。这些是 Bash 脚本中常用的一些操作符和它们的用法。

2024-10-07 13:54:23 479

原创 lsblk和df和du和free的区别

两者可以互补使用,以获得系统的完整磁盘信息。- 常用参数包括 `-h`(以人类可读的格式显示),`-i`(显示 inode 使用情况),`-t`(仅显示指定类型的文件系统)等。- 常用参数包括 `-a`(显示所有设备,包括空设备),`-f`(显示文件系统信息),`-o`(定制输出列)等。- `-h` 或 `--human-readable`:以易读的格式(例如 KB、MB、GB)显示大小。- `-s` 或 `--summarize`:仅显示总计的磁盘使用量,而不显示子目录的详细使用情况。

2024-10-06 15:01:50 790

原创 帧是如何在互联网中转发的呢

以太网mac帧是知道对面主机的IP地址的,所以在IP数据报中,目的主机和源主机的IP地址在网络中转播是不变的,在同一局域网中,比如说是交换机构成的交互式以太网,通过自学习算法知道自己的转发表(MAC地址和转发端口的映射关系),既然知道了目的主机的IP地址,就把目的主机的IP地址和自己的IP地址的网络前缀作比较,发现不是在一个局域网下的话,就把此MAC帧发送给自己的局域网的网关(就是路由器的接口IP地址,这个是以及知道的,配置的时候会进行默认网关的配置),如果不知道自己网关的MAC地址的话就会通过一个地址解析

2024-10-04 19:09:55 739 1

原创 SQL中如何进行 ‘’撤销‘’ 操作-详解

在 SQL 中,撤销已经执行的操作通常涉及两个主要的概念:事务控制和回滚操作。### 1. 事务控制在支持事务的数据库管理系统(如 MySQL 的 InnoDB 引擎)中,您可以使用事务来确保数据的完整性。事务可以确保一系列的操作要么全部成功,要么全部失败。COMMIT;ROLLBACK;### 2. 回滚操作如果您已经执行了一些更改(例如,通过 `INSERT`、`UPDATE` 或 `DELETE` 语句),并且希望撤销这些更改,您可以使用 `ROLLBACK` 语句。

2024-10-03 22:24:33 2387

原创 数据库中 级联 详解

一:创建完成表之后添加外键并设置 级联 行为在 MySQL 中,当您向一个表中添加外键约束时,这个外键会引用另一个表(称为父表)中的唯一值(通常是主键)。外键约束的主要目的是维护引用完整性,确保在子表(包含外键的表)中的数据在父表(被引用的表)中都有对应的值。如果您在添加外键时没有指定特定的 `ON UPDATE` 和 `ON DELETE` 行为,那么默认的行为将是:1. **`ON DELETE NO ACTION`** 或 **`ON DELETE RESTRICT`**:这意味着如果您尝

2024-10-03 20:37:05 1465

原创 内连接的两种写法

这个查询会返回`table1`的所有记录,如果`table2`中有匹配的记录,则一并返回;这个查询会返回`table2`的所有记录,如果`table1`中有匹配的记录,则一并返回;这个查询会返回`table1`和`table2`的所有记录,无论是否有匹配的记录。- 如果一行在其中一个表中有匹配的行,而在另一个表中没有匹配的行,则结果集中该行的另一个表的字段将为NULL。- **可读性**:`INNER JOIN`的写法更清晰,更易于理解,尤其是对于复杂的查询和多表连接。

2024-09-30 19:56:17 668

原创 结构体命名的几种方式

在这个例子中,`Employee` 就是结构体的标签,你可以在其他结构体定义中再次使用 `struct Employee` 来引用这个类型。在定义结构体时,可以给结构体一个标签(也就是结构体的名称),然后在不同的结构体定义中使用相同的标签来表示相同的数据类型。在这个例子中,`Employee` 就是结构体的新类型名,之后你可以使用 `Employee` 来声明变量。在这个例子中,结构体没有标签,因此它只能在定义它的范围内使用,例如作为数组的元素或另一个结构体的成员。

2024-09-09 15:09:12 493

原创 二级指针-详解

【代码】二级指针-详解。

2024-09-08 16:44:50 120

原创 匿名对象-详解

这里 `{"apple", "banana", "cherry"}` 是一个初始化列表,它创建了匿名的 `std::string` 对象。在这个例子中,`getName()` 函数返回的是一个匿名的 `std::string` 对象,它被拷贝到变量 `name` 中。这里的 `lambda` 是一个匿名函数对象,它捕获了外部作用域中的变量,并在定义它的地方立即使用。临时对象是在表达式中创建的,没有名字的对象。在这里,构造函数使用一个匿名 `std::string` 对象来初始化成员变量 `data`。

2024-09-07 18:29:09 292

原创 内联函数-详解

内联函数的代码在调用点展开,这意味着在调试时,你可以在调用点直接查看函数内部的变量和逻辑,这有助于调试和理解代码。对于类的成员函数,尤其是那些只访问或修改成员变量的简单函数,使用内联可以提高访问效率。- 内联函数并不总是提高性能,如果函数体较大,内联可能会导致代码膨胀,反而降低缓存命中率,影响性能。### 2. **提高访问成员变量的效率**### 3. **避免函数调用的额外开销**### 1. **减少函数调用开销**### 4. **模板函数的内联**### 5. **简化调试过程**

2024-09-07 16:25:51 288

原创 STL中for_each() 函数详解

例如,如果你的容器是 `std::deque`,那么 `_func` 应该接受一个 `int` 类型的参数。在每种情况下,`std::for_each` 都会遍历 `std::deque` 中的每个元素,并将每个元素作为参数传递给 `_func`。- 一个函数对象 `Print`,它重载了 `operator()` 并打印传入的 `int` 参数。- 一个普通的函数 `print`,它接受一个 `int` 参数并打印它。- 一个 Lambda 表达式,它接受一个 `int` 参数并打印它。

2024-09-06 22:22:50 457

原创 内部连接性和外部链接性

在C++中,全局变量和静态全局变量的连接性(Linkage)决定了它们在不同编译单元(通常是不同的源文件)中的可见性。- 如果一个全局变量或函数在头文件中声明,并且没有使用`static`关键字,那么它具有外部连接性,可以在多个源文件中被引用。- 使用`static`关键字声明的全局变量或函数具有内部连接性,这意味着它们只能在定义它们的编译单元内被访问。- 使用`static`关键字的全局变量具有内部连接性,只能在定义它们的编译单元中访问。- 全局变量默认具有外部连接性,可以在多个编译单元中访问。

2024-09-01 16:46:52 217

原创 C++中变量初始化规则

全局变量和静态全局变量(在函数外部声明的变量)会被自动初始化为零值。对于基本数据类型,这意味着整型和枚举类型会被初始化为0,浮点类型会被初始化为0.0,`bool`类型会被初始化为`false`,而指针类型会被初始化为`nullptr`。- 静态局部变量只会在程序的第一次执行到声明它们的代码块时被初始化一次,并且它们的生命周期会持续到程序结束。在C++中,为了确保变量的值是可预测的,最好总是显式地初始化变量。- 类的静态成员变量在程序启动时初始化,并且它们的生命周期贯穿整个程序的运行期间。

2024-09-01 16:39:13 313

原创 声明,初始化,赋值三者之间的区别

在不同的编程语言中,声明、初始化和赋值的语法可能会有所不同,但基本概念是通用的。` 声明并初始化了一个名为 `x` 的整型变量,其初始值为 `5`。` 声明了一个名为 `x` 的整型变量,但此时 `x` 的值是未定义的。` 是一个赋值操作,它将变量 `x` 的值设置为 `10`。- **声明**:告诉程序变量的类型和名称,为变量分配内存空间。- **初始化**:在声明变量时或声明后立即给变量一个初始值。- **赋值**:在变量声明后,根据需要给变量赋予新的值。- 赋值是给已经声明的变量赋予一个新的值。

2024-09-01 16:37:24 382

原创 extern关键字的用法

使用`extern`的目的是在当前的文件中告知编译器该变量或函数的定义存在于程序的其他地方,这样编译器在编译当前文件时就能够识别并链接到这些外部定义。- `extern`关键字是可选的,如果一个变量或函数在当前文件中没有定义,但编译器知道它在其他地方定义,那么即使不使用`extern`,编译器也会链接到正确的定义。- 在头文件中使用`extern`是常见的做法,这样所有包含该头文件的源文件都会知道变量或函数的存在,而实际的定义只需在一个源文件中进行。- `extern`声明不能指定初始化。

2024-08-25 20:34:52 207

原创 条件编译的用法

作用:如果前面的`#if`或`#elif`表达式为假,且当前的`#elif`表达式为真,则编译`#elif`和`#endif`之间的代码块。- 作用:如果前面的所有`#if`和`#elif`表达式都为假,则编译`#else`和`#endif`之间的代码块。- 作用:标记`#if`、`#ifdef`、`#ifndef`或`#elif`条件编译块的结束。- 作用:如果指定的宏已经被定义,则编译`#ifdef`和`#endif`之间的代码块。- 语法:`#pragma 编译器指令`

2024-08-25 16:10:24 436

原创 C语言的宏定义

宏定义是C语言中一种预处理指令,它使用`#define`关键字来创建一个宏名,并将其关联到一系列的替换文本上。宏定义允许你将一段代码或常量值定义为一个单一的标识符,这样在代码中就可以通过使用这个标识符来代替较长的表达式或代码块。宏定义是C语言中一个强大的工具,可以提高代码的可读性、可维护性和灵活性。- 宏定义不应该包含函数调用或复杂的表达式,因为这可能导致意外的行为或难以调试的问题。- 使用宏时要注意避免重复定义和未定义宏的使用。定义一段代码,以简化重复代码的使用。定义类似函数的宏,可以接受参数。

2024-08-25 16:07:40 475

原创 为什么要配置环境变量

配置环境变量是一种让操作系统知道如何找到和使用软件及其依赖项的方法。通俗来说,环境变量就像是操作系统的“备忘录”,里面记录了一些重要的信息,帮助操作系统和软件程序知道去哪里找它们需要的东西。6. 跨平台兼容性:不同的操作系统可能有不同的路径格式和环境变量设置方式,配置环境变量有助于软件在不同平台上的兼容性。5. 简化命令行操作:通过设置环境变量,可以在命令行中使用简短的命令来执行复杂的操作,而不需要每次都输入完整的路径。8. 灵活性和可配置性:环境变量提供了一种灵活的方式来配置软件的行为,而无需修改代码。

2024-08-09 17:24:55 1273

原创 c++编程 在函数的调用或返回值为对象时如何优化

2. 引用返回(Return by Reference): 返回对象的引用通常不是一个好的做法,因为它可能会引起悬挂引用问题(如果返回的是一个局部对象的引用,那么在函数返回后,局部对象的生命周期就结束了)。3. 指针返回(Return by Pointer): 返回一个指向对象的指针可以避免拷贝构造函数的调用,但这需要额外的内存分配(使用 new 操作符)和后续的内存释放(使用 delete 操作符)。如果函数的返回值是一个临时对象,并且该对象可以被“移动”,编译器将调用移动构造函数来避免不必要的复制。

2024-08-09 00:11:08 415

原创 什么是镜像

3. 容器镜像:在容器技术中,容器镜像是一个轻量级的、可执行的软件包,包含了运行一个应用程序所需的所有内容(代码、运行时、库、环境变量和配置文件)。Docker 镜像就是一个常见的容器镜像例子。2. 虚拟机镜像:在虚拟化技术中,虚拟机镜像是一个预配置的虚拟机环境,包含了操作系统、应用程序和配置设置。5. 软件分发镜像:在软件开发和分发中,软件镜像可以是一个服务器上的软件包集合,用于快速分发软件更新或安装包。4. 备份镜像:在数据备份和恢复领域,备份镜像是数据的副本,可以在原始数据丢失或损坏时使用。

2024-08-05 21:10:28 838

原创 C++内存分配模型

每种存储区都有其特定的用途和特性,程序员需要根据需要选择合适的存储区来存储数据。例如,全局变量和静态变量通常用于在函数之间共享数据,而局部变量则用于存储只在单个函数调用期间需要的数据。- 生存周期:由程序员控制,使用 `new` 或 `malloc` 等分配,使用 `delete` 或 `free` 释放。在C和C++程序中,代码数据可以存储在多个不同的内存区域,每个区域都有其特定的用途、生存周期和读写权限。- 读写权限:可写(初始化时通常设置为0),不可读(未初始化前)。

2024-07-25 14:47:34 302 1

原创 数组和指针的区别

在这个例子中,`dynamicCharArray` 是一个指针,指向在堆上分配的内存。如果指针指向的是字符串字面量,那么这个字符串是存储在只读内存区域的,不能被修改。你可以修改这个数组中的字符,因为栈内存是可写的。- 字符数组存储的是实际的字符数据,而不是字符数据的引用。因此,当你修改数组中的字符时,你是在修改实际存储在内存中的字符。- 当你使用字符数组时,你实际上是在操作一个存储实际字符数据的内存区域,因此可以修改它。- 由于栈和堆上的内存都是可写的,字符数组可以存储可修改的字符串。

2024-07-25 14:45:50 650

原创 QEvent类在Qt框架中的作用与特性(ai对话)

Kimi: 是的,当Qt中的事件被产生后,`QApplication` 类的 `notify` 方法会被调用。这个方法是 `QCoreApplication` 类中的一个虚函数,`QApplication` 继承了 `QCoreApplication` 并重写了 `notify` 方法。1. **事件类型**:QEvent类定义了一个枚举类型`Type`,列出了所有可能的事件类型,例如`QEvent::MouseButtonPress`、`QEvent::KeyPress`等。

2024-06-19 09:53:13 398

原创 Qt中的事件处理器

Qt中的事件处理器是自动调用的。Qt 使用事件驱动的编程模型,这意味着应用程序的执行流程是由各种事件(如键盘敲击、鼠标点击、定时器事件等)触发的。当这些事件发生时,Qt 事件系统会自动捕获它们,并将它们分派给相应的事件处理器。你可以通过重写基类中的事件处理器方法来处理特定的事件。例如,如果你想要自定义键盘事件的处理,你可以在你的类中重写。这种自动的事件分派机制是Qt框架的核心特性之一,它使得编写响应用户输入和其他事件的应用程序变得更加容易和高效。方法启动)负责接收事件,并将它们分派给适当的事件处理器。

2024-06-18 09:47:02 297

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除