- 博客(51)
- 收藏
- 关注
原创 Socket编程TCP
如果不关闭文件,那么fd的值就会一直增加,而fd属于有用的、有限的资源,如果不关闭就会导致fd泄漏问题。另外如果客户端很多的话那fd不是会一直增加吗,如果fd只有32、64那不就不够用了吗?确实如此,Linux是支持对文件描述符个数进行扩展的,默认云服务器的fd数量是比较多的。
2025-04-05 09:09:31
1063
原创 Socket编程UDP
首先给出EchoServer目录结构:服务器的类我们实现在UdpServer.hpp中,然后在UdpServerMain.cc中启动服务器。客户端相关代码我们就直接在UdpClientMain.cc中实现了,如果有兴趣后续你可以自己在UdpClient.hpp中封装,常用的部分我们放在Common.hpp中,然后将直接写的策略模式日志拿过来方便测试,最后使用make/makefile来自动化构建项目。1、创建套接字:使用socket创建套接字,第一个参数domain表示域或协议家族,AF_INET表示网
2025-04-02 14:30:38
852
原创 网络基础概念
传输层网络层都是对所有协议的统称,传输层有很多协议比如:TCP、UDP,网络层也有很多,那么这么多协议操作系统要不要管理呢?当然要管理,如何管理?——先描述,再组织。所以协议就是结构体。操作系统使用C语言写的,而网络属于操作系统,因此TCP/IP网络也是用C写的。而Windows和Linux操作系统的源代码是不一样的,但是它们网络部分的代码必须是一样的。那么今天windows上有一个协议struct protocol,里面三个整形变量a,b,c。主机A定义了一个数据data赋值10、20、30。
2025-03-31 20:14:55
902
原创 Linux进程信号
信号的发送本质就是给进程的PCB发送,因此进程PCB内部必定要有结构来保存信号。为什么要保存信号?因为进程收到信号之后可能不会立即处理这个信号。那么信号从发送给进程到开始被处理就会存在一个时间窗口,所以需要保存信号。也就是说task_struct里面会有保存信号的结构,实际上这个结构是个位图,如下图:通过位图来管理信号,上图的第一个位置为1,表示的就是进程收到了1号信号。1、比特位的内容是0还是1,表明进程是否收到了信号。2、比特位的位置(第几个),表示信号的编号。
2025-03-25 16:17:56
609
原创 Linux环境基础开发工具使用
介绍linux下基础开发工具的使用,软件包管理器apt,文本编辑器vim,编译器gcc/g++,调试器gdb、make/makefile、进度条小程序。
2025-03-11 14:04:56
964
原创 C++11智能指针
auto_ptr:管理权转移,会导致被拷贝对象悬空,建议不要使用。unique_ptr:简单粗暴,直接禁止拷贝。日常使用,不需要拷贝的场景就用它。shared_ptr:引用计数支持拷贝,需要拷贝的场景就使用它。但是要小心构成循环引用,循环引用会导致内存泄漏。weak_ptr:不是RAII的智能指针,专门用来处理shared_ptr的循环引用问题。
2025-03-04 09:45:42
841
原创 C++11新特性
详细介绍C++11新特性,包括1、统一的列表初始化{}初始化、声明和类型、范围for、STL中的一些变化、右值引用和移动语义、可变模板参数、lambda、包装器、智能指针、多线程等。
2025-03-01 19:05:15
805
原创 C++哈希扩展
现在我们的数据变成字符串,那么就不能使用位图了,而使用红黑树和哈希表也可能内存空间不足,因此就需要布隆过滤器来解决了。布隆过滤器是由布隆(Burton Howard Bloom)在1970年提出的一种紧凑型的、比较巧妙的概率型数据结构,特点是高效地插入和查询,可以用来告诉你“某样东西⼀定不存在或者可能存在”,它是用多个哈希函数,将一个数据映射到位图结构中。此种方式不仅可以提升查询效率,也可以节省大量的内存空间。
2025-02-28 08:35:12
688
原创 C++模拟实现unordered_map和unordered_set
实现散列表,封装散列表实现unordered_set和unordered_map。
2025-02-27 12:48:40
941
原创 C++STL—unordered_map和unordered_set介绍和使用
介绍C++STL中unordered_set和unordered_map的使用。
2025-02-26 19:48:39
819
原创 C++实现二叉搜索树
二叉搜索树1、二叉搜索树的概念2、二叉搜索树性能分析3、二叉搜索树的实现3.1、结点和成员变量3.2、二叉搜索树的查找3.3、二叉搜索树的插入3.4、二叉搜索树的删除3.5、二叉搜索树的中序遍历3.6、二叉搜索树的拷贝构造函数3.7、二叉搜索树的赋值运算符重载函数3.8、二叉搜索树的析构函数3.9、二叉搜索树完整代码(包含递归和非递归)4、二叉搜索树key和key/value应用场景4.1、key搜索场景4.2、key/value搜索场景4.3、key/value二叉搜索树代
2024-11-21 11:03:39
601
原创 C++多态
1、多态的概念2、多态的定义和实现2.1、多态的构成条件2.2、面试题:析构函数可以是虚函数吗?为什么需要是虚函数?2.3、override和final关键字2.4、重载、重写(覆盖)、重定义(隐藏)对比2.5、多态练习题3、抽象类4、多态的原理4.1、虚函数表4.2、多态条件的深入思考4.3、虚表存储位置4.4、动态绑定和静态绑定5、单继承和多继承关系的虚函数表5.1、单继承中的虚函数表5.2、多继承中的虚函数表5.3、菱形继承中的虚函数表5.4、菱形虚拟继承中的虚函数表
2024-11-17 19:18:12
861
原创 C++继承
C++继承1、继承的概念和定义2、基类和派生类间的转换3、继承中的作用域4、派生类的默认成员函数拓展:实现一个不能被继承的类5、继承与友元6、继承与静态成员7、多继承及其菱形继承问题8、继承和组合
2024-11-13 10:20:04
757
原创 C++模板进阶
C++模板进阶1、模板初阶的补充2、非类型模板参数3、模板的特化3.1、函数模板特化3.2、类模板特化3.2.1、全特化3.2.2、偏特化3.2.3、类模板特化的应用4、模板的分离编译
2024-11-11 19:11:39
832
原创 C++STL—deque、stack、queue、priority_queue介绍使用和模拟实现
deque、stack、queue、priority_queue1、deque2、stack使用介绍3、stack实现4、queue使用介绍5、queue实现6、priority_queue使用介绍7、priority_queue实现8、反向迭代器
2024-11-03 22:18:26
1167
原创 C++模拟实现list
C++模拟实现list1、成员变量2、迭代器3、insert函数4、erase函数5、pop_back、push_front、pop_front函数6、size和clear函数7、析构函数8、拷贝构造函数9、赋值运算符重载完整代码(包含测试代码)
2024-11-01 20:05:40
1118
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人