自定义博客皮肤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)
  • 收藏
  • 关注

原创 GDB使用

首先安装gdb工具。

2024-06-18 00:06:02 240

原创 非阻塞IO

我们怎么实现非阻塞io。

2024-06-06 22:01:46 188

原创 腾讯云ip问题

我们跨主机想使用upd进行通信的时候,用的是下面这个ip。但是我们登录腾讯云的ip地址跟这个完全不一样。这里有一个ip地址,是内网IP。我们查看 ifconfig。

2024-05-17 21:49:46 288

原创 计算机网络 1

上面的每一个问题是每一层都必须面对的也都必须要解决的。每一层而且必须要覆盖上面的信息!

2024-05-15 21:54:47 730

原创 linux线程池

这个类的解析:1 我们先定义一个函数类型申明一个返回值是void* 参数是void*的一个函数2 构造函数这个构造函数和之前写的构造函数不一样,这里构造函数只是为了初始化_name属性。Thread()3 start函数,我们把对线程的初始化放到了start函数里面并且通过传递this指针的方式,将本个类的属性传过去。//编译debug的方式发布的时候存在,release方式发布,assert就不存在了,n就是一个定义了,但是没有被使用的变量。

2024-05-14 22:11:41 848

原创 C++类型转换

这里编译器的值变为3了,但是我们终端输出的还是2 .因为这个const ,cp已经把值存在了寄存器了,系统认为你不需要改了,这是编译器优化。所以这里的值会变成3。dynamic_cast用于将一个父类对象的指针/引用转换为子类对象的指针或引用(动态转换)static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用。向下转型:父类对象指针/引用->子类指针/引用(用dynamic_cast转型是安全的)向上转型:子类对象指针/引用->父类指针/引用(不需要转换,赋值兼容规则)

2024-05-14 09:07:01 244

原创 C++特殊类设计

这是我们之前学习的类的写法结果展示我们设计这个类可以吧拷贝构造设置为私有的。这样就涉及成功了C++11写法。

2024-05-13 21:32:57 333

原创 linux线程2

枷锁和解锁是多个线程串行执行的 ,程序变慢了。锁之规定互斥访问,没有规定必须让谁限制性锁就是真的就是让多个执行流竞争的结果。

2024-05-07 21:17:46 734

原创 linux线程

在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。多个task_struct 共享同一份虚拟内存。同时页表也没有这么简单,我们看看上面页表的属性。

2024-05-06 21:22:38 423

原创 linux信号

帮我在键盘中输入ctrl + c的时候。就会发现终止不了进程, 而是Ccatch a sig : 2 打印类似信息。我们的ctrl+c就是二号信号。

2024-04-23 20:29:01 130

原创 linux进程间通信

数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

2024-04-20 11:39:53 536

原创 静态库和动态库

2个小时之前。

2024-04-17 20:23:54 93

原创 C++智能指针

这里内存泄露的情况这里虽然能正常捕捉div的除0错误了,但是却不会执行后面的两个delete释放资源的操作。结果发现没有输出111,这里就造成了a1 和 a2的内存泄漏。

2024-04-16 23:10:24 500

原创 C++异常学习

因此,在 catch 块中,你应该捕获 const char* 类型的异常而不是 std::string。如果你想要用 std::string 来捕获这个异常,你应该在抛出异常时使用 std::string 类型,像这样:throw std::string(“被除数不能为0”);出异常的代码,try 块中的代码被称为保护代码。7. 没有匹配的catch则退出当前函数栈,继续在调用函数的栈中进行查找匹配的catch。异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的。

2024-04-16 00:34:08 783 1

原创 linux文件系统

在这里插入图片描述](https://img-blog.csdnimg.cn/direct/932e98d32d9e454cb75e6f091d478e98.pn。这个文件系统我们先从磁盘讲起,结构体。首先我们要理解,这个是怎么存储的。首先要理解柱面 ,扇区,磁道。

2024-04-15 16:35:38 77

原创 linux文件系统

11111。

2024-04-12 17:14:08 389

原创 linux的io的知识大全

fopen函数,第一个参数是文件的路径,第二个参数是mode 有 r w r+ w+等等.返回值返回的是一个文件指针。r:只读,不存在文件则会报错。w:写文件,不存在文件则会创建一个文件r+:读写文件,不存在文件则会报错w+::读写文件,不存在文件则会创建一个文件fclose,参数是是一个文件指针fwrite参数的意义,第一个是写的消息,第二个是消息的大小,第三个是每一个字符的大小,最后一个是文件指针。结果读文件int main()\n");//{//}

2024-04-11 22:45:09 561

原创 llinux进程控制

在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。分配新的内存块和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程到系统进程列表当中fork返回,开始调度器调度输出结果所以,fork之前父进程独立执行,fork之后,父子两个执行流分别执行。注意,fork之后,谁先执行完全由调度器决定。

2024-04-10 19:47:33 875

原创 浮点数在计算机中的存储

这一段代码的输出是什么?猜想9,9.0,9,9.0.这是猜想的结果实际的结果为什么呢?这我们就要讲讲浮点数额存储规则了。举个例子十进制的5.0,写成二进制是 101.0 ,相当于 1.01×2^2。那么,按照上面V的格式,可以得出S=0,M=1.01,E=2。

2024-04-09 01:22:22 243

原创 C语言面试题

这段代码中出现的死循环是由于使用了 unsigned char 类型的变量 i 作为循环变量,并将其循环条件设置为 i<=255。当 i 的值增加到 255 并再次执行 i++ 时,它会溢出并回绕到 0,而不是变成 256,因为 unsigned char 无法表示大于 255 的数值。当 i 增加到 255 并执行 i++ 时,由于 unsigned char 类型的最大值是 255,i 会溢出并回绕到 0。回到步骤 2,检查循环条件 i<=255,由于 i 又回到了 0,条件依然为真。

2024-04-09 00:48:51 170

原创 linux操作系统的进程状态

我们可以这样想,随着时间的变化,银行升级了,有些老婆婆和大爷无法同步操作,这时候有一个大堂经理,大堂经理就会负责这些人,说你把信息填好,我帮你去办理业务。常见的呢,bash窗口,窗户界面,C语言的库,我们只需要调用就好了,他会帮我们去做一些事,但是我们要自己做好准备,老婆婆和爷爷要去银行才能找大堂经理帮忙,那我们想使用c语言的库方便我们调用也要包含头文件。这里代表的就是软件也可以管理硬件,首先我们要明确一个事实 ,就是说我们的键盘和电脑是分开买的,电脑里面有操作系统,底层硬件相当于是键盘。

2024-04-02 21:23:42 1042

原创 经典面试题

【代码】经典面试题。

2024-04-02 13:22:08 110

原创 linux进程fork函数的讲解。

结果,发现子进程的父节点为原始进程的pid。而父进程的父进程是什么呢 -》bash。这里的返回值的意思是,如果成功,孩子进程的pid会给父亲进程,然后0会给子进程。结果,发现同一个pid有两个不同的值,这是多线程的基础,具体原理后面解释。如果失败,-1 的返回值给父亲,然后孩子进程不会被创建。这里不能说明什么,看下面的代码。通过指令,查看接口的详细信息。makefile文件。

2024-04-01 22:32:03 147

原创 C++ 模板知识大全

我们如何实现一个交换函数我们实现了两种类型的交换函数,但是其实除了类型不一样,其他地方都是一样的。

2024-03-25 22:29:13 265

原创 C++内存分布知识点复习

看看自己是否了解选择题:选项: A.栈 B.堆 C.数据段(静态区) D.代码段(常量区)globalVar在哪里?____ staticGlobalVar在哪里?____staticVar在哪里?____ localVar在哪里?____num1 在哪里?____char2在哪里?____ *char2在哪里?___pChar3在哪里?____ *pChar3在哪里?____ptr1在哪里?____ *ptr1在哪里?____

2024-03-25 22:07:10 694

原创 C++11特性

不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。C++11:C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自。定义的类型,使用初始化列表时,可添加等号(=),也可不添加。

2024-03-22 19:23:54 488

原创 C++面向对象知识大全

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。对于成员函数的内部来说,this指针就是一个指向当前对象的指针,允许函数访问对象的成员变量和其他成员函数。将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。1 确定函数地址:编译器根据对象的类型和调用的成员函数确定函数的具体地址。

2024-03-22 16:56:15 806

原创 C++搜索二叉树,平衡二叉树,红黑树原理

在这里我们是哪个节点的平衡因子被破坏了。我们是在根节点的左边的左边插入的一个节点导致了这个不平衡。就一直向上调整(同样的也是判断假如的节点事左边还是右边,左边–,右边++,一直到根节点)插入平衡因子的调节主要有以下几种情况(平衡因子的大小是右子树的高度-左子树的高度)我们知道搜索二叉树影响搜索次数的是树的高度,那么我们就要想办法把树变平衡。情况二: cur为红,p为红,g为黑,u不存在/u存在且为黑。一个树的根节点比左子树的大,比右子树的小。当节点的平衡因子更新为2或者-2 的时候,就需要考虑旋转了。

2024-03-18 16:58:50 322

原创 C++腾讯面试题

解释一下,我们知道对象比较的是地址(重点)子类对象是包含父类对象的。

2024-03-10 16:02:55 112

原创 C++多态得知识点

多态是在不同继承关系得类对象,去调用同一个函数,产生了不同的行为。比如Student继承了Person.person买票的话是全票,但是student就是半价。1 . 必须通过基类的指针或者引用调用虚函数2 . 被调用的必须是虚函数,且派生类必须对基类的虚函数进行重写。下面是一个代码的实例public:cout << "买票全价" << endl;cout << "买票半价" << endl;Person p;Student s;Func(p);Func(s);

2024-03-10 15:58:11 957

原创 C++继承方面的知识点

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。3 在实际运用中一般使用都是public继承,几乎很少使用protetced/private继承,也不提倡使用protetced/private继承,因为protetced/private继承下来的成员都只能在派生类的类里面使用,实际中扩展维护性不强。派生类对象 可以赋值给 基类的对象 / 基类的指针 / 基类 的引用。

2024-03-07 21:49:14 711

原创 C++的模板进阶的知识

就是我们在每个源文件进行编译的时候,是函数就会生成函数地址,然后函数的链接其实是函数的匹配问题。在func.cpp中,编译器没看到对F2模板函数的实例化,因此不会生成具体的函数。在test.cpp(运行mai函数的cpp)调用的时候才会链接地址,但是这个两个函数没有实例化生成具体的代码,因此链接时候报错。但是接下来我们使用的是两个字符串来比较,我们直接这样传参数是传的两个地址,两个地址肯定是不相等的啊。我们就写了一个模板的特化。这里要注意,传入的模板参数n是一个常量,不然是无法作为初始化数组的参数的。

2024-03-06 09:49:40 233

原创 C++List原理和坑点

list采用的是链表,没错就是数据结构中的链表。但是不是单链表是双向循环链表。接下来我们自己实现一个简化版的的list。紧接着我们就需要构建list类了。这就是list的实现了。

2024-03-01 15:14:13 152

原创 C++运算符重载之前加加和后加加问题

【代码】C++运算符重载之前加加和后加加问题。

2024-02-28 20:27:06 297

原创 C++之vector原理解析以及坑点

resize()方法,resize的效果就是会有一个初始值,并且空间大小是自己定义的,若resize比你原来的空间大,剩下的空间会有一个初始值填补.vector的底层原理是数组,只不过是在数组的基础上多加了几个指针.请看详细的定义.数组的有点就是支持随机访问,但是增删都效率不高.首先vector需要一个泛型来表示容器装入的数据类型.然后迭代器(iterator)其实是(T*).这个泛型指针的别名.这是是我们扩容的时候采用的memcpy是浅拷贝,把它换成深拷贝就行啦.这是对于几个指针的直观表示。

2024-02-28 10:31:43 379

原创 memset的坑点

卧槽奇怪了,为什么不是1.因为是按照字节进行拷贝的。一个字节是8个比特位。我的理解就是一个char长度的来拷贝。当我们使用memset的时候,是按照字节进行拷贝的。当运行到8行的时候,观察所有的值是没有问题的。以下是一个代码例子,我们可以看看问题。

2024-02-27 20:41:29 208

原创 算法题:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

includeclass Sum{public:Sum()_sum+=_i;++_i;private:public:Sum a[n];

2024-01-21 14:14:43 297

原创 C++拷贝构造函数

当你调用一个函数并传递一个对象作为参数时,编译器需要将这个对象传递给函数,而这个过程中需要创建一个临时的副本对象。这个临时的副本对象是通过拷贝构造函数来创建的。这是C++中的常规操作,因为它允许你在函数内部操作参数对象的副本,而不影响原始对象。传递参数的过程中会调用拷贝构造函数的情况是因为在C++中,通常情况下函数参数的传递会导致参数的拷贝。的临时副本对象,这个临时对象的创建过程就涉及到了拷贝构造函数的调用。这个临时对象在函数内部使用,并在函数结束时销毁。对象作为参数,那么在函数内部会创建一个名为。

2024-01-15 22:10:30 314

原创 结构体的占用空间大小计算

如何计算?首先得掌握结构体的对齐规则:第一个成员在与结构体变量偏移量为0的地址处。其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。VS中默认的值为8结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。offsetof 宏的实现

2024-01-03 20:56:14 380

原创 逗号表达式

注意逗号表达式,数组的初始值。

2024-01-02 10:34:36 372 1

空空如也

空空如也

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

TA关注的人

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