自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 结构体内存对齐的原因(3)

结构体的内存对齐可以提高cpu的读取效率、避免硬件平台的限制、增加可移植性、提高了空间利用率、简化编译器等功能。

2025-01-11 18:10:37 280

原创 内存分区(2)

内存分区介绍

2025-01-10 23:43:07 279

原创 计算机如何存储浮点数(1)

在C语言中,浮点数储存分为:单精度(float),双精度(double)

2025-01-10 20:22:46 531

原创 IO多路复用模型Select

IO多路复用模型是一种同步IO模型,其原理在于使用一个线程完成在集合内的多个文件句柄的监视,若在集合中发现句柄,则进行读写操作,反之这一直处于阻塞状态,直至在集合中发现句柄。

2024-08-11 19:28:43 635

原创 TCP文件传输(服务端的文件下载)

TCP协议传输,文件的服务端接收。

2024-08-08 11:32:03 2029

原创 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

原创 数据结构_二分查找

二分查找:在有序数组中查找某个数的下表。

2024-06-11 09:59:41 261 1

空空如也

空空如也

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

TA关注的人

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