自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 问答 (1)
  • 收藏
  • 关注

原创 【iptables】修改规则和保存规则

如果上图中的命令没有使用-s指定对应规则中原本的源地址,那么在修改完成后,你修改的规则中的源地址对应的原本的匹配条件会自动变成0.0.0.0/0(此IP表示所以网段的IP地址),而此时,-j对应的动作又为REJECT,所以在执行上述命令时,如果没有指明规则原本的源地址,那么所有IP的请求都被拒绝了(因为没有指定原本的源地址,当前规则的源地址自动变成0.0.0.0/0),如果你正在使用ssh远程到服务器上进行iptables设置,那么你的ssh请求也将会被阻断。iptables -t 表名。

2023-12-28 16:41:24 700

原创 【iptables】增加规则和删除规则

看来顺序很重要,如果报文已经被前面的规则匹配到,iptables则会对报文执行对应的动作,即使后面的规则也能匹配到当前报文,很有可能也没有机会再对报文执行相应的动作了,就以上图为例,报文先被第一条规则匹配到了,于是当前报文被”放行”了,因为报文已经被放行了,所以,即使上图中的第二条规则即使能够匹配到刚才”放行”的报文,也没有机会再对刚才的报文进行丢弃操作了。-F选项为flush之意,即冲刷指定的链,即删除指定链中的所有规则,但是注意,此操作相当于删除操作,在没有保存iptables规则的情况下,请慎用。

2023-12-28 09:03:05 2096

原创 【iptables】规则查询

当需要禁止某个IP地址访问我们主机时,则需要在INPUT链上定义规则,因为报文发往本机时,会经过PREROUTING链与INPUT链,所以如果我们想禁止某些报文发往主机,只能在PREROUTING链与INPUT链中定义规则,但是PREROUTING链并不存在与filter表中,换句话说,PREROUTING关卡天生就没有过滤能力,所以只能在INPUT链中定义。target 表示规则对应的target,往往表示规则对应的动作,即规则匹配成功后需要采取的措施。条件匹配用于指定对符合什么样条件的数据包进行处理;

2023-12-27 16:53:59 1227

原创 【Linux基础】GDB的详细介绍

core file size 就是 core 文件的大小,默认是 0,所以它肯定不会自动生成,我们就需要去改 core file size。一个电脑或者主机,它是多人共享的,会对当前的shell或者用户做一些限制,core 文件比较大,不会默认生成,想要去调资源的一些设置。表达式:简记为 p ,其中“表达式”可以是任何当前正在被测试程序的有效表达式,比如当前正在调试C语言的程序,GDB,GNU项目调试器允许您查看另一个程序在执行时“内部”发生了什么,或者另一程序在崩溃时正在做什么。

2023-12-26 09:24:36 422

原创 【基础知识】C++左值右值

C++中,并不是所有情况下 && 都代表右值引用,在模板和自动类型推导(auto)中,如果是模板参数,想要指定为 T&&,如果是自动类型推导,需要指定为 auto&&,这两种情况下,&& 被称作“未定的引用类型”。C++11 添加了右值引用,却不能左值初始化右值引用,在一些特定的情况下免不了需要左值初始化右值引用(用左值调用移动构造),如果想要用左值初始化一个右值引用,想要借助 std::move() 函数,move() 函数可以。当 T 不是左值引用类型时,t 将会被转换为 T 类型的右值。

2023-08-11 15:07:42 1374 2

原创 【网络基础】TCP的三次握手和四次挥手

数据传输完毕后,就释放了连接,客户端共发出了两个连接请求报文段,其中第一个丢失,第二个到达了服务器,但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达服务端,此时服务端误以为客户端又发出一次新的连接请求,于是就想客户端发出确认报文段,同意建立连接,不采用三次握手,只要服务端发出确认,就建立新的连接了,此时客户端忽略服务端发来的确认,也不发送数据,则服务端一直等待客户端发送数据,浪费网络资源。:服务器收到客户端连接后,需要确认客户端的报文段。

2023-08-02 15:15:38 135

原创 【基础知识】智能指针shared_ptr、weak_ptr、unique_ptr

C++ 不像 Java 自带垃圾回收机制,必须释放掉分配的内存,否则就会造成内存泄漏。因此 C++11 引入了智能指针。定义:智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在区域时,自动地销毁分配的对象,防止内存泄漏。智能指针的核心实现技术是引用技术,每使用它一次,内部引用计数加 1,每析构一次内部引用计数减 1,减为 0 时,删除原始指针指向的堆区内存,使用智能指针需要引用头文件。std::shared_ptr 共享的智能指针。

2023-07-24 16:39:02 291

原创 【基础知识】二进制与十进制的转换(整数)

再用商去除 2,又会得到一个商和余数,如此进行,直到商为 0 为止,然后把得到的余数作为二进制的地位有效位,后得到的余数作为二进制的高位有效位,依次逆序排列组合成二进制数。,二进制下的每一位对应 1 比特大小空间。也就是说,如果一个 int 类型的数据转换成二进制进行存储对应是 32(4*8)位。以下是一个示例代码,演示如何在C语言中将二进制数转换为十进制整数。例如,整数 42 转成二进制对应的是 101010。例如,二进制 110,它的十进制数值为 6。例如,整数15转成二进制对应的是1111。

2023-07-03 16:05:40 201

原创 【基础知识】typedef和#define的区别

typedef 是 C语言的关键字,用于创建类型别名,它需要使用标识符和现有的类型进行配合;#define 是预处理指令,用于创建宏定义,它可以定义任意的标识符和文本替换。typedef 有作用域限定,#define 不受作用域约束,只要是在 #define声明后的引用都是正确的。typedef 定义是语句,因为句尾要加上分号,而 #define 不是语句,千万不能在句尾加分号。的部分,其发生在编译之前,只是简单地进行字符串的替换,不进行类型检查。的一部分,有类型检查的功能;#define 是宏定义,是。

2023-07-02 17:48:39 637

原创 【基础知识】#define和const的区别

而 const 更适合定义具有类型和作用域的常量,它具有类型安全性,可以进行类型检查,并且在内存中分配存储空间。而 #define 是简单的文本替换,没有类型检查,容易出现潜在的类型错误。const 有作用域限制,它的作用范围可以是函数内部、代码块或文件内部,具体取决与它的定义位置。#define 是预处理指令,它在编译之前进行文本替换,将符号替换为相应的文本;const 是编译时定义的常量,在编译过程中进行类型检查和符号解析。#define 是简单的文本替换,它将符号替换成相应的文本,没有内存分配;

2023-07-02 16:33:13 464

原创 【基础知识】如何理解指针作为函数参数的输入和输出特性

函数‘func’只是在主调函数分配的内存中进行操作,不会分配新的内存。在‘main’函数中,我们将‘num’的地址传递给‘updateValue’函数,从而在函数内部可以修改‘num’的值,导致‘main’函数中第二个‘printf’输出了修改后的值。在上面的示例中,‘printValue’函数接受一个指向‘int’类型的指针作为参数,并通过解引用操作符‘*’来读取指针指向的变量的值。在‘main’函数中,我们将‘num’的地址传递给‘printValue’函数,从而在函数内部可以访问到‘num’的值。

2023-04-23 15:44:16 1095

原创 【基础知识】结构体(struct)和联合体(union)

目录1. 结构体(Struct)1.1 C++ 结构体和 C 语言结构体的区别1.2 结构体的对齐方式2. 联合体(Union)2.1 联合体特性3. 结构体和联合体的区别 在 C 语言中,结构体是一种自定义的复合数据类型,允许将不同数据类型的变量组合成一个单一的实体。结构体可以包含多个成员,每个成员可以是不同的数据类型,如整数、浮点数、字符、数组等。 结构体的定义通常在函数外部,并且在函数内部可以声明和使用结构体类型的变量。结构体的定义包含了结构体的名称和结构体成员的列表,每个

2023-04-12 14:38:51 4682

原创 【基础知识】深拷贝和浅拷贝

在实现类的拷贝构造函数和赋值操作符时,根据具体情况选择深拷贝还是浅拷贝,以确保对象拷贝行为的正确性和安全性。深拷贝是一种对象拷贝方式,它会创建一个新的对象,并将原始对象中的所有数据成员复制到新的对象中,包括多态分配内存。浅拷贝是一种对象拷贝方式,它只是简单地将原始对象的内存内容按位复制到新的对象中,包括指针的复制,而不会创建新的内存空间。浅拷贝和深拷贝的区别在于,两个指针变量指向的是同一块空间还是指向不同的空间,如果没有创建内存的操作就是浅拷贝,否则就是深拷贝;3. 深拷贝和浅拷贝的区别。

2023-04-11 14:25:59 826

原创 【基础知识】普通局部变量、普通全局变量、静态局部变量、静态全局变量的区别

4、全局变量和静态变量都是保存在静态存储区中,生命期和程序一样,但是不同的是全局变量的作用域是整个项目,而静态全局变量是当前程序文件,静态局部变量则是当前函数体内。3、如果 外部变量在文件开头定义,则在整个文件范围内都可以使用该外部变量,如果不在文件开头定义,按上面规定作用范围,只限于定义点到文件终了,如果定义点之前的函数想引用该外部变量,则应该在该函数中用关键字 extern ,作外部变量说明;1、静态变量的作用范围要看静态变量的位置,如果在函数里,则就是静态局部变量,作用范围就是这个函数;

2023-04-11 13:26:28 947

原创 【基础知识】函数参数的默认值

出现二义性错误的原因是因为在C++中,函数调用时,如果省略某些参数,则编译器会按照参数的位置进行匹配,但是如果出现参数缺失的情况,编译器无法确定这个参数是应该被赋予默认值还是作为后续的参数传递,从而导致二义性错误。因此,为了避免出现二义性错误,如果为函数的某个参数指定了默认值,那么在该参数的右边的所有参数都必须有默认值,或者在调用函数时显式指定所有参数的值。在 C++ 中,函数的参数默认值是指在函数定义时,为参数指定一个默认值,当调用该函数时,如果没有给参数传递值,则会使用该参数的默认值。

2023-04-02 16:14:05 2945

原创 【基础知识】vector

上述代码中,我们使用 resize 函数来将 vector 中元素的数量修改为 10,如果 vector 中现有元素的个数小于 10,则会在尾部插入足够多的元素,使得 vector 中的元素个数达到 10;当我们向 vector 中添加元素时,其大小会增加,而当元素数量超过当前容量时,vector 会重新分配内存,将其容量扩大一定的倍数(通常是原来容量的两倍),以便存储更多的元素。vector 内部实现使用动态数组,也就是在内存中申请一块连续的空间,存储元素,并提供了相应的方法来管理数组大小和元素的存取。

2023-04-01 15:22:02 591

原创 【基础知识】虚继承

在多重继承中,如果一个类同时继承自多个基类,而这些基类中又有共同的基类,那么在最终派生类中就会出现多个相同的基类对象,这就导致了“菱形继承”问题(Diamond Inheritance),即同一个基类在派生类中出现了多次。虚继承的使用场景通常是在多重继承中,当某个类需要继承自多个基类,并且这些基类之间存在继承关系时,可以考虑使用虚继承来避免菱形继承问题。然而多重继承也会带来一些问题,其中一个主要的问题就是菱形继承问题,即同一个基类在派生类中出现了多次,这导致了内存占用的增加以及代码调用二义性问题。

2023-03-31 14:11:22 2075

原创 【C++基础】字节顺序:大端存储顺序、小端存储顺序

需要注意的是,结构体对其规则可能因编译器和编译选项而异,因此在使用结构体来判断字节序时需要特别小心,最好使用特定的类型定义和编译选项来确保对其规则的一致性。也就是说,最低位的字节存储在最低的地址上,而最高位的字节存储在最高位的地址上。在小端存储中,结构体的最后一个成员变量的地址和整个结构体的地址相同。可以利用结构体来判断系统的字节序,其基本原理是利用结构体的对齐规则来判断不同字节序下结构体的大小和成员变量的内存地址。也就是说,最高位的字节存储在最低的地址上,而最低位的字节存储在最高的地址上。

2023-03-28 16:20:04 1241

原创 【Linux基础】软链接和硬链接

软链接创建的链接和原始文件或目录是不同的,它们有不同的 inode 和文件权限等属性。删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软链接被称为死链接(即dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)硬链接是 Linux 和 Unix 系统中用于创建文件或目录的一种方式,它是一个指向原始文件或目录的另一个文件或目录。软链接创建时会创建一个新的文件,在该文件中记录了指向另一个文件或目录的路径,因此软链接可以跨越不同的文件系统。

2023-03-28 14:50:45 755

原创 【基础知识】函数指针

函数指针通常用于函数回调的场景,也就是将一个函数作为参数传递给另一个函数,让后者在适当的时候调用前者。例如,可以将一个排序算法的比较函数作为参数传递给排序函数,让后者根据比较函数的结果对数据进行排序。这里的‘(*func_ptr)’表示对函数指针解引用,获取其指向的函数地址所对应的函数。下面分别介绍两种方法。这里‘func_ptr’是指向函数的指针变量,它可以指向任何返回‘int’类型、带有两个‘int’参数的函数。指向函数的指针变量,它可以指向某个函数的入口地址,使得程序可以通过该指针变量调用该函数。

2023-03-25 20:45:53 9017 3

原创 【基础知识】函数重载

在 C++中,编译器编译函数的过程中,会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名,这就能实现根据输入的参数类型不同,进而选择调用相应的函数名相同的函数;所以如果 C 程序里有两个相同名字的函数,那么在编译的时候,它们生成的修饰名一样,调用时编译器找的时候就不知道用哪一个,也就解释了为什么 C 不支持函数重载。在 main 函数的指令中,有两句指令 call,call 后面所跟的就是函数的地址,函数的名字和函数的地址。需要注意的是,函数重载是在编译时进行决策的,而不是在运行时进行决策的。

2023-03-24 14:45:59 3941

原创 【基础知识】引用是什么?

根据我们引用原则知道,对原变量的引用,权限是不能放大的,这就是为什么这段代码会报错的原因。换句话说,当我们声明一个引用变量时,它只是为原变量起了一个别名,引用变量和原变量指向同一个内存地址,因此引用变量不需要分配额外的内存空间。,因此,当我们使用引用时,实际上是在使用底层指针所指向的对象,而不是引用本身。用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为 const ,达到了引用的安全性.在类中,可以使用引用类型的成员变量来避免复制对象的副本,节省内存,提高程序的执行效率。

2023-03-23 16:06:22 1152

原创 【基础知识】什么是哈希冲突?

哈希冲突(Hash Collision)是指在使用哈希表存储数据时,两个或多个不同的键(Key)被哈希函数映射到同一个位置的情况。因此,在设计哈希表时,应尽量选择合适的哈希函数和哈希表大小,并合理控制装载因子,以减少冲突的发生。因此,在设计哈希表时,应尽量选择合适的哈希函数和哈希表大小,并合理控制装载因子,以减少冲突的发生。是一种解决哈希冲突的方法,它的基本思想是,当发生哈希冲突时,按照某种规则寻找下一个空闲的位置来存储数据。在发生冲突的时候,再用另一个哈希函数算出哈希值,直到算出的哈希值不同为止。

2023-03-15 21:05:25 8470 2

原创 【基础知识】C语言和C++的区别

3、C 程序中如果函数没有任何参数,需要将参数定义为 void,以此来限定函数不可传递任何参数,如果不进行限定,让参数表默认为空,其意义是可以传递任何参数。C 语言是面向过程的语言,而C++的面向对象的语言,所以 C 语言自然没有面向对象的封装、继承和多态等特性,也不支持面向对象的一些语法;4、C 语言 struct 中不能有函数,而 C++ 语言 struct 中可以有函数,且允许函数是虚函数;9、C 语言中只有局部和全局两个作用域,而 C++ 中有局部、全局、类、名称空间作用域。

2023-03-15 19:03:43 230

原创 【基础知识】数组首元素地址和数组地址

"&数组名[0]”表示的是数组的首元素地址,要注意的是,这个首元素地址是第一个元素数组的首地址。,就是数组元素的首地址,该值是一个常量,不能被修改,一定程度上等同于常量指针;)如果是p,则p+1就跳过这个数组而指向这个数组中最后一个元素。若 &p+1,则值为 p 的地址 + 40字节。若 p+1,则值为 p 的地址 + 4字节。)如果是p,则p+1指向第二个元素的地址。1、它们的地址值是一样的。

2023-03-02 16:44:28 3752

原创 【基础知识】普通局部变量、普通全局变量、静态全局变量和静态局部变量

这两者的区别在于,非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态全局变量在各个源文件中都是有效的。3、如果外部变量在文件开头定义,则在整个文件范围内都可以使用该外部变量,如果不在文件开头定义,按上面规定作用范围,只限于定义点到文件终了,如果定义点之前的函数想引用该外部变量,则应该在该函数中用关键字 extern ,作外部变量说明;它是定义存储因型为静态型的外部变量,其作用域是从定义点到程序结束,所不同的是存储类型决定了存储地点,静态型变量是存放在内存的数据区中的,

2023-03-02 16:12:33 570

原创 【Linux基础】stat函数

buf :为传出参数,传出文件的解析结果,buf为struct stat*类型,需要进一步解析,获取到的文件属性信息,就记录在struct stat结构体中。pathname :为待解析文件的路径名,可以为绝对路径,也可以为相对路径。表示文件的类型和存取的权限,为16位整数。输出结果:查看text.x文件的大小。(1)stat获取文件的大小。(2)stat获取文件类型。

2022-12-17 17:01:52 1956

原创 【基础知识】野指针和悬挂指针

指针是C/C++语言中一种特殊的数据类型,它的值是一块内存区域的地址。使用指针要求,它的值必须是指向一块分配给你使用的地址,且使用的内存不能超过它分配时的大小。例如:这样的代码就给p分配一块有10个字节的内存,并把这块内存的开始地址放在p中。用户在使用时,必须保证引用的内存必须在以p开始到这块内存结束的范围内。 野指针是指尚未初始化的指针,它指向的地址是未知的、不确定的、随机的。 释放内存后指针没有及时置空,依然指向该内存,有可能会出现非法访问的错误。简单的示例:

2022-12-07 10:54:47 1748

原创 LeetCode——27.移除元素

27.移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。算法分析: 在看到这道题的时候你可能会想,直接将多余元素删除不就行了吗,但是你得知道,数组的元素在内存中的地址是连续的,不能单独删除数组中的某个元素,只是进行覆盖,只有当数组容量不够的时候,才会重新申请另一

2022-12-04 19:32:54 143

原创 【基础知识】BSS段,数据段,代码段,堆栈段

在了解BSS段他们之前,我们先来看一下他们在内存中的位置。

2022-12-02 20:15:55 3540 2

原创 LeetCode——977.有序数组的平方(C++)

给你一个按排序的整数数组nums,返回组成的新数组,要求也按排序。

2022-11-28 16:09:46 354

原创 关于VS2019打开aspx页面设计视图界面假死的解决方法

VS2019在打开项目的时候可以正常运行,没有什么问题,但是在切换设计视图或者拆分视图的时候界面就会卡死,整个屏幕一动不动

2022-10-20 20:42:28 1105 2

原创 Linux新手上路,进入man 2 +某函数页面时,该如何退出?

Linux进入man 2 之后该如何退出

2022-07-12 15:55:54 205

空空如也

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

TA关注的人

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