- 博客(26)
- 收藏
- 关注
原创 2.TCP三次握手、四次挥手
本文系统介绍了TCP协议的核心机制。主要内容包括:1)TCP三次握手和四次挥手的详细流程,解释了为何需要三次握手而非两次,以及四次挥手中的状态转换;2)TCP可靠性保障机制,包括滑动窗口流量控制、拥塞控制算法(慢启动、拥塞避免等)和超时重传;3)TCP与UDP的头部结构差异;4)TCP相关问题的解决方案,如粘包处理(定长消息、分隔符等方法)、长连接维护等;5)KCP协议基于UDP实现可靠传输的原理;等等
2026-01-12 22:56:53
740
原创 1. OSI七层模型和TCP/IP模型
本文摘要介绍了计算机网络的核心概念:1)对比了OSI七层模型与TCP/IP四层模型的结构与功能;2)分析了TCP与UDP在连接方式、可靠性、速度等方面的差异;3)区分了MAC地址与IP地址的特性;4)阐述了网络带宽的定义及优化方法;5)解释了丢包和延迟现象及其处理措施;6)说明了端口号的分类范围,包括系统保留端口、用户端口和动态端口。这些内容涵盖了计算机网络体系结构、传输协议、地址标识、性能优化等基础知识。
2026-01-10 21:53:12
503
1
原创 12.STL容器基础
摘要:本文总结了C++ STL容器的关键知识点。vector是动态数组,扩容机制为1.5或2倍增长;map基于红黑树,unordered_map基于哈希表;哈希表通过拉链法或开放地址法解决冲突;红黑树具有自平衡特性,时间复杂度为O(logn)。Linux调度器CFS使用红黑树管理进程。vector和list的区别在于内存布局和访问效率,前者随机访问高效,后者插入删除高效。迭代器失效情况因容器而异。priority_queue基于堆实现,适用于优先任务处理。STL排序算法包括快速排序和归并排序变种。
2026-01-07 23:52:26
581
原创 11.C++11常用新特性
C++11新特性摘要:auto实现自动类型推导;范围for循环简化容器遍历;lambda表达式提供匿名函数功能;using定义类型别名;atomic支持线程安全原子操作;nullptr解决空指针歧义;移动语义(std::move)优化资源转移;thread支持多线程编程;enum class强化枚举类型;chrono提供时间处理;default/delete控制函数生成;列表初始化统一语法;shared_ptr通过引用计数管理内存。这些特性显著提升了C++的开发效率和安全性。
2026-01-06 12:24:24
689
原创 10.深拷贝和浅拷贝的区别?
本文摘要: C++内存管理技术对比分析:1) 浅拷贝仅复制指针,易导致double free;深拷贝复制内存内容,资源类必须实现深拷贝或禁用拷贝。2) 零拷贝技术(如sendfile、mmap)通过避免用户态-内核态数据拷贝提升IO性能。3) 关键函数区别:strlen计算字符串长度,sizeof计算内存大小;memcpy支持任意数据拷贝,strcpy仅限字符串。4) 对象处理机制:重载是同名函数不同参数,重写是子类覆盖虚函数;临时对象产生于返回值、类型转换等场景,C++17优化可消除。5) static变
2026-01-05 14:10:08
1022
原创 9.野指针和悬空指针
摘要:本文介绍了C++编程中的关键概念:1)野指针和悬空指针的区别与联系;2)虚继承解决菱形继承问题;3)extern关键字的作用;4)C++编译流程;5)重载实现原理;6)函数调用压栈过程;7)回调函数机制及应用场景;8)内联函数使用准则。这些知识点涵盖了指针安全、继承机制、编译原理、函数调用等核心内容,对深入理解C++编程具有重要价值。
2026-01-04 22:56:56
317
原创 8.什么是虚函数?
本文摘要:虚函数通过动态绑定实现多态,运行时通过虚函数表(vtable)解析调用。每个对象包含指向vtable的指针(vptr),构造函数初始化vptr。虚函数表在编译时生成,存放在只读数据段,同类对象共享同一vtable。构造函数和静态函数不能为虚函数,析构函数建议设为虚函数以确保正确资源释放。纯虚函数定义接口强制派生类实现,使类成为抽象类。虚函数机制支持在不修改现有代码情况下扩展功能,通过继承和重写实现模块化设计。
2026-01-02 23:03:37
754
原创 7.new和malloc申请的是哪里的内存?如何减少内存碎片?
摘要:本文对比了C++中new和malloc的内存分配机制,new在堆区分配并调用构造函数,malloc在栈区分配需手动初始化。分析了内存碎片产生原因及解决方法,如使用内存池。讨论了栈溢出问题及应对措施,如限制递归深度。重点介绍了RAII思想,通过构造函数获取资源、析构函数释放资源来避免内存泄漏,并列举了标准库中的RAII封装类。智能指针等RAII工具能确保异常时资源正确释放,提高代码安全性。
2025-12-31 23:38:32
389
原创 6.const、static的区别
本文主要分析了C++中const和static关键字的用法。const用于定义常量,包括变量、指针、参数、返回值和类成员,强调只读特性;static则用于控制变量和函数的作用域与生命周期,包括静态局部变量、全局变量、类成员变量和成员函数。重点对比了二者在全局变量和类成员中的应用差异:const全局变量默认内部链接,存储在只读段;static成员属于类而非对象,需特殊初始化方式。通过代码示例展示了static在计数器、类成员统计等场景的实际应用。
2025-12-31 22:39:22
462
原创 5.智能指针有什么缺点?
智能指针存在以下缺点:1.性能开销,shared_ptr的原子引用计数操作会产生额外消耗;2.循环引用问题,可能导致内存泄漏,需配合weak_ptr解决;3.内存管理复杂化,make_shared会将对象和控制块绑定,可能延迟内存释放。智能指针适用于需要自动资源管理的场景,而裸指针更适合性能敏感或简单临时对象的情况。shared_ptr提供共享所有权和线程安全的引用计数,但管理的对象本身仍需同步机制;weak_ptr则用于打破循环引用而不增加引用计数。
2025-12-30 19:12:46
492
原创 4.常量指针和指针常量的区别?
本文总结了C++中的几个重要概念:1)常量指针与指针常量的区别在于指针可变性和指向数据的可变性;2)全局变量和局部变量在作用范围、生命周期、存储位置和初始值等方面存在差异;3)引用作为函数参数的优势包括避免拷贝、直接修改原对象和提高大对象传输效率;4)模板在编译期实例化,可通过自动或显式方式实现;5)模板通常放在头文件中以确保编译器能获取完整定义,避免链接错误。这些知识点对理解C++核心特性具有重要意义。
2025-12-30 18:07:42
198
原创 3.空类可以实例化吗?大小是多少?
本文摘要:C++中空类可实例化且占用1字节内存。子类无法继承父类的构造函数、析构函数、拷贝构造函数、赋值运算符和私有成员函数。构造函数初始化顺序为:基类构造→成员变量初始化→构造函数主体;析构顺序相反。C++提供6种构造函数:默认构造、参数化构造、拷贝构造、移动构造、委托构造和显式构造,其中显式构造可防止隐式类型转换。
2025-12-29 23:00:26
373
原创 2.区分C++中相似但不同的类型
本文对比了C++中三种重要概念的区别:1. 结构体(struct)与类(class):struct默认public访问和继承,用于简单数据结构;class默认private,用于严格封装。2. 结构体与联合体(union):结构体成员独立存储,联合体成员共享内存。3. 指针与引用:指针存储地址可变,引用是别名不可变;指针用于内存管理,引用用于参数传递。这些区别涉及默认行为、内存使用和应用场景等关键方面,反映了C++不同特性的设计目的和使用方法。
2025-12-29 22:16:29
201
原创 1.C++三大特性
摘要:面向对象编程的三大特性包括封装、继承和多态。封装将变量和方法组合在类中;继承允许派生类复用基类成员并重写方法;多态表现为同一接口的不同形态。访问修饰符public、private和protected控制成员可见性:public成员在外部可访问,protected仅子类可访问,private仅类内可访问。不同继承方式会改变基类成员的访问权限:public继承保持原权限,protected继承将public降为protected,private继承将所有基类成员变为private。
2025-12-28 21:59:02
327
原创 malloc函数底层原理(4)
在freelist中找到内存大小合适的内存块,并有多种查找策略,如首次适配(first fit)、最佳适配(best fit)、最差适配(worst fit)。若找不到合适大小的内存块,再次向操作系统申请内存,申请大小小于128kb使用break,申请大小大于128kb使用mmap。:若找到的内存块远大于所需要的大小,要进行内存块切割分半,一半用于满足当前需要,另一部保留在freelist中为以后使用。:malloc返回内存块地址,但此时的内存块可能未初始化,需要在使用前进行适当初始化操作。
2025-01-11 23:53:54
334
原创 IO多路复用模型Select
IO多路复用模型是一种同步IO模型,其原理在于使用一个线程完成在集合内的多个文件句柄的监视,若在集合中发现句柄,则进行读写操作,反之这一直处于阻塞状态,直至在集合中发现句柄。
2024-08-11 19:28:43
635
原创 TCP文件传输(客户端的文件上传)
TCP传输的流程、TCP传输的流程在应用程序当中调用Winsock API 函数,首先通过函数完成对Winsock服务的初始化,因此需要调用函数,使用Socket的程序在使用Socket之前必须调用函数。2.socket()套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。
2024-08-08 00:25:43
1482
原创 堆排序算法
堆的含义:堆的本质是二叉树;堆排序就是将给定的数组构建除二叉树。对该数组进行调整。对调整后数组进行排序、调整。相关概念:与排序二叉树的区别、满二叉树、完全二叉树
2024-06-25 22:15:35
1231
原创 桶排序算法
什么是桶排序?桶排序就是把数据放到一个桶(容器)中,在这个桶中进行一系列的排序操作,再将桶中的数据传回原处的过程叫做桶排序。例如:把数组的内容放到一个桶中,在桶中进行排序,类似于哈希查找的拉链法,可参考哈希拉链法的操作处理。
2024-06-24 15:36:10
847
原创 归并排序算法
例如将一个数组分成多块组成,通过递归完成对每一部分的排序,判断条件:Start>=End时即分完一部分,进行return跳出操作。此时对0,1位置进行排序,需要临时开辟一个空间即一个长度为(end-start+1)的数组,利用该数组对原数组的分块进行排序,类似于快速排序,但有别与快排,归并排序使用了分治(即分开治理)的思想。Start初始为0,End初始为9,mid为(0+9)/2。Step1:通过递归进行拆分;以一个长度为10的数组为例。Step2:进行归并排序;直至归并排序全部排序完毕。
2024-06-23 14:59:24
374
原创 哈希查找(按个位取余的方式)
按个位取余发现有两个或多个数重复,如:会发现15,25,55,重叠了,对此进行冲突处理,冲突处理有三种:以上图为例,将和25按个位取余后重复的数填到25后面的位置,如果相邻的位置满了,在向后填。再次使用哈希法,直至填充完毕。以上图为例,像拉链一样将重叠数据以拉链形式挂在下面,示例代码
2024-06-18 15:07:04
764
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅