- 博客(21)
- 问答 (1)
- 收藏
- 关注
原创 如何理解TCP面向字节流协议
当用户消息通过 TCP 协议传输时,消息可能会被操作系统分组成多个的 TCP 报文,也就是一个完整的用户消息被拆分成多个 TCP 报文进行传输。这时,接收方的程序如果不知道发送方发送的消息的长度,也就是不知道消息的边界时,是无法读出一个有效的用户消息的,因为用户消息被拆分成多个 TCP 报文后,并不能像 UDP 那样,一个 UDP 报文就能代表一个完整的用户消息。举个实际的例子来说明。发送方准备发送「Hi.」和「l am Xiaolin」这两个消息。
2024-06-18 20:08:45
432
1
原创 进程间六种通信方式(简单介绍面试用)
管道的实质是一个内核缓冲区,进程以先进先出的方式从缓冲区存取数据:管道一端的进程顺序地将进程数据写入缓冲区,另一端的进程则顺序地读取数据,该缓冲区可以看做一个循环队列,读和写的位置都是自动增加的,一个数据只能被读一次,读出以后再缓冲区都不复存在了。当缓冲区读空或者写满时,有一定的规则控制相应的读进程或写进程是否进入等待队列,当空的缓冲区有新数据写入或满的缓冲区有数据读出时,就唤醒等待队列中的进程继续读写。套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同设备及其间的进程通信.
2024-06-02 18:38:21
282
原创 List与vector的区别(表格对比)
迭代器失效:插入元素不会导致迭代器失效,删除时只会导致当前迭代器失效,其他迭代器不受影响,重新赋值当前迭代器即可。迭代器失效:在插入元素可能会扩容导致原有迭代器失效所有迭代器需要重新赋值,删除时当前迭代器会失效需要重新赋值。在任意位置插入和删除效率低,插入有可能会增容,会导致开辟新空间,拷贝元素释放旧空间使效率更低。需要高效存储,支持随机访问,不关心插入删除效率时使用 vector。有大量插入和删除操作,不关心随机访问使用list。底层结构是带头节点的双向循环链表。底层结构是动态顺序表。
2024-05-26 17:21:34
146
原创 C/C++内存管理方式,内存分配
内存分配方式:在C++中内存分为5个区,分别是堆、栈,自由存储区、全局/静态存储区、常量存储区。 栈:在执行程序过程中,局部作用域出现的一些局部变量可以在栈上创建,等脱离该作用域创建的内存被释放。栈是机器系统提供的数据结构,计算机会在底层对提供支持:分配专门的寄存器存放栈的地址,压出栈都有专门的指令执行,这就决定了栈的效率比较高。 堆:用于程序内存动态分配,用c/c++中的new/malloc分配,delete/free释放 堆的生长空间向上,地址越来越大,栈的生长空间向下,地址越来越小。堆空间因为会
2024-05-17 16:14:14
162
原创 在C++程序中调用被C编译器编译后的函数,为什么要加extern “C“?
首先,作为 extern 是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。 通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern 声明。例如,如果模块 B欲引用该模块 A 中定义的全局变量和函数时只需包含模块 A的头文件即可。这样,模块 B 中调用模块 A中的函数时,在编译阶段,模块 B 虽然找不到该函数,但是并不会报错;它会在连接阶段中从模块 A编译生成的目标代码中找到此函数 exter
2024-05-15 21:54:21
155
原创 C++和C的不同以及面向对象的了解
(1)C语言是面向过程的程序设计,主要考虑如何通过一个过程,对输入进行处理得到一个输出,C++是面向对象的程序设计,对于C++,首先考虑的是如何构造一个对象模型,让这个模型配合对应问题,这样可以获取对象信息状态得到输出。(2)C++比C的增强点在C语言中,输出正常:210;在C++中,运行出错,变量重定义;封装:将一类事物的属性和行为抽象为一个类,使属性私有化,行为公开化,提高数据隐蔽性,复用性高。封装隐藏了类的实现细节和成员数据,实现了代码模块化,如类里面的 private 和public;
2024-05-14 21:16:37
343
原创 [蓝桥杯练习]试题:货物摆放
想要解决此问题,在求有多少种堆放货物的方案满足要求时我们可以利用三层循环遍历给出的n,即(d[i] * d[j] * d[z] == n)。我们可以找出n的所有因子并存储到数组d,这样就可以只遍历因子,同时取n开平方在其中查找因子,因为平方前的因子和平方后的因子相同,节省计算数量。即在长、宽、高的方向上分别堆L、W、H 的货物,满足n=LxWxH。例如,当n=4时,有以下6种方案:1x1x4、1x2x2、1x4x1、2x1x2、2x2x1、4x1x1。给定 n,请问有多少种堆放货物的方案满足要求。
2024-03-22 22:03:31
225
1
原创 vector扩容
因此容器在进行内存的改变时,会导致迭代器失效。(注意,数据删除时并不会导致内存的改变,而是让被删除的数据无法访问,因此迭代器不会失效)3、当使用的是两个参数的有参构造函数创建Vector对象时,初始化容量则为指定的长度,每次扩容,容量 = 原容量 + 指定的扩容长度。2、当使用的是一个参数的有参构造函数创建Vector对象时,初始化容量则为指定的长度,每次扩容,容量 = 原容量 × 2;1、当使用的是无参构造函数创建Vector对象时,默认会初始化容量为10,每次扩容,容量 = 原容量 × 2。
2024-01-17 15:26:27
619
原创 关于智能指针(更新中)
在Java中,其自带垃圾回收机制,但c++不同。c++必须释放掉分配的内存,否则会造成内存泄露。由此c++11引入了智能指针。
2024-01-17 15:13:29
957
原创 new和malloc的区别
(1)对于基本类型而言,没有区别。根据需要new和malloc 可以混用,new[]和malloc 可以混用,delete、 deletel[]和 free 可以混用。(4)对于显式定义析构函数的类,delete[]和new[]必须配套使用,delete和free如果想混用,free需要显式调用析构函数。(3)对于没有显式定义析构函数的类,delete、 delete[]和 free可以混用。(2)对于构造函数没有作用的类,new和malloc可以混用。new/delete 是。
2024-01-15 15:00:58
411
1
原创 虚函数(virtual)可以是内联函数(inline)吗?
解释:内联是在编译期建议编译器内联,而虚函数的多态性在运行期,编译器无法知道运行期调用哪个代码,因此虚函数表现为多态性时(即运行期)不能内联。 inline virtual唯一可以内联的时候是:编译器知道所调用的对象是哪个类(Base::who()),这只在编译器具有实际对象而不是对象的指针或引用时才会发生。
2023-03-05 21:11:42
406
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人