- 博客(108)
- 收藏
- 关注
原创 【Linux网络】多路转接:select、poll、epoll
多路转接方法是一种高效的网络通信手段,它通过允许单个进程或线程同时监听多个IO事件,实现了在单线程/进程场景下的并发处理。在选择具体的实现方法时,需要根据应用场景和需求进行权衡和选择。
2025-03-10 08:00:00
1175
原创 【Linux网络】NAT技术、DNS系统、五种IO模型
NAT (网络地址转换)技术主要解决 IPv4 地址不够用的问题,是路由器的一个重要功能。它在网络通信过程中将一个IP地址空间的地址转换为另一个IP地址空间的地址,即**私有地址和公有地址之间的转换。**
2025-03-08 10:27:13
1686
3
原创 【Linux网络】网络层IP协议,数据链路层:以太网、ARP协议
网络层IP协议,数据链路层:以太网、ARP协议。交换机的主要工作原理是通过对MAC地址的寻址和转发来实现数据的交换。当交换机接收到一个数据帧时,它会检查帧头中的目的MAC地址,并在自己的MAC地址表中查找匹配的条目。
2025-02-28 15:04:22
1811
2
原创 【Linux网络】序列化、守护进程、应用层协议HTTP、Cookie和Session
GET方法主要用于从服务器获取资源。它通过将请求参数附加在URL之后(即查询字符串)来发送请求。GET请求是幂等的,意味着多次执行相同的GET请求应该总是返回相同的结果,不会对服务器资源产生额外的影响(除了可能的日志记录等无实质影响的操作)。
2025-02-20 22:06:38
1312
2
原创 【Linux网络】认识协议(TCP/UDP)、Mac/IP地址和端口号、网络字节序、socket套接字
Linux网络协议是指在Linux操作系统环境下,用于实现网络通信的一系列规则和约定。这些协议确保了不同设备之间能够高效、准确地传输数据。Linux网络协议栈,通常是基于TCP/IP协议栈构建的,它包含了多个层次的协议,每个层次都有其特定的功能和任务。
2025-02-19 11:20:54
1811
原创 【Linux系统】互斥锁、基于阻塞队列、环形队列的生产消费模型、单例线程池
⼤部分情况,线程使⽤的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线程,其他线程⽆法获得这种变量。
2025-01-27 18:27:57
1796
原创 【Linux系统】线程、线程控制、地址空间布局
对于Linux进程或者说主线程,简单理解就是main函数的栈空间,在fork的时候,实际上就是复制了父亲的`stack`空间地址,然后写时拷贝(cow)以及动态增长。如果扩充超出该上限,则栈溢出会报段错误(发送段错误信号给该进程)。进程栈是唯一可以访问未映射页而不一定会发生段错误⸺超出扩充上限才报。
2025-01-26 23:06:53
1059
原创 【Linux系统】IPC:匿名管道、命名管道、共享内存
在多任务和多进程的操作系统中,进程通常是相互独立的,各自拥有独立的内存地址空间。然而,进程之间经常需要传递数据和信息,以实现某些功能或协调任务。因此,操作系统提供了一系列进程间通信的机制。
2025-01-26 22:04:58
941
原创 【Linux系统】理解Linux中一切皆文件、缓冲区、ext2文件系统、软硬链接
在windows中是文件的东西,在linux中也是文件;其次一些在windows中不是文件的东西,比如进程、磁盘、显示器、键盘这样硬件设备也被抽象成了文件,你可以使用访问文件的方法访问它们获得信息;甚至管道,也是文件;将来我们要学习网络编程中的socket(套接字)这样的东西,使用的接口跟文件接口也是一致的。
2025-01-23 18:48:35
1061
原创 【Linux系统】文件操作、系统IO相关操作、inode和输入输出重定向
文件在磁盘里,磁盘是永久性存储介质,因此文件在磁盘上的存储是永久性的,磁盘是外设(即是输出设备也是输入设备), 对磁盘上所有文件的操作本质都是对外设的输入和输出,简称IO
2025-01-23 18:31:14
1230
原创 【Linux系统】OS、进程PCB、状态、进程的切换和调度,虚拟地址空间
深入理解操作系统(OS)、进程PCB、进程状态、进程的切换和调度,深入理解虚拟地址空间。
2025-01-23 14:19:17
1154
原创 【Linux系统】手搓一个简洁版shell,手都搓烂了
数据在默认不修改的情况下是共享的,不各自拷贝一份是因为**父子进程间的数据大部分是重复的**,一般只有少量数据需要修改,因为各自拷贝一份浪费空间。更新父进程页表项为只读---子进程继承---子进程写入---触发系统错误---系统触发缺页中断---系统检测---判定是否要写时拷贝---拷贝,修改,恢复权限。
2024-12-01 15:27:10
3492
100
原创 【C++】听说了吗,C++引入了四种强制类型转换
如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,转换的前提是类型之间有一定的关联。2、C++中的类型转换上面举的例子都是内置类型之间,而内置类型和自定义类型之间、自定义类型和自定义型之间都是可以通过一定的方式互相转换的。| 内置类型和自定义类型之间:在前面的学习中我们经常说:单参数构造函数支持隐式类型转换,多参数也可以通过加进行隐式类型转换。C++支持内置类型隐式类型转换为类类型对象,需要有相关内置类型为参数的构造函数构造
2024-10-31 07:00:00
3345
170
原创 【C++】特殊类的设计
一个类不能被拷贝的需求还是比较常见的,比如IO流、线程等。拷贝只会发生在两个场景中:**拷贝构造和赋值重载**,所以想让一个类不能被拷贝,只需要让这个类的拷贝构造和赋值重载不能被调用就可。
2024-10-28 07:00:00
3593
130
原创 【C++】unique_ptr、shared_ptr、weak_ptr,傻傻分不清楚
内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。解决内存泄漏的问题,使用智能指针管理是一个很好的选择。
2024-10-26 20:26:28
1964
113
原创 【C++】一文带你深入理解C++异常机制
C++中的异常处理机制是一种强大的工具,但需要在使用时谨慎考虑其优缺点。合理地使用异常处理可以提高代码的健壮性和可读性,但滥用或不当使用则可能导致代码变得复杂且难以维护。
2024-10-25 23:00:00
4255
121
原创 【C++】C++11新特性—可变参数模版、lambda、包装器
可变参数模板、lambda表达式、包装器等。在lambda函数定义中,参数列表和返回值类型都是可选部分,而捕捉列表和函数体可以为空。因此C++11中最简单的lambda函数为:[]{}; 该lambda函数不能做任何事情。
2024-10-23 23:18:27
1891
118
原创 【C++】C++11新特性—右值引用,来看看怎么个事儿
传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以从现在开始我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。
2024-10-21 07:19:30
3917
146
原创 【C++】语法简化和增强,C++11都做了什么?
相比于C++98,C++11在C++98的基础上进行了大量的改进和扩展,包含了很多新特性,也包括对一些缺陷的修正,这些新特性和改进不仅提高了代码的质量和效率,还为开发者提供了更强大的工具和更灵活的编程方式。
2024-10-19 00:15:42
1336
43
原创 【C++】unordered_set、unordered_map详细封装细节
unordered_set和unordered_map的封装相较于set和map的封装还是相对较复杂的,其中复杂之处主要在于模版参数间的对应关系,如果某处做修改一般都会牵扯到多个地方,因此封装时必须时刻清晰各个板块之间的依赖关系。
2024-10-18 22:19:20
2007
114
原创 【C++】处理好哈希冲突我就可以出师了
哈希结构,是一种通过特定函数(哈希函数)将关键码映射到表中的一个位置,那么在查找时通过该函数就可以很快的找到该元素。
2024-10-15 09:41:16
11121
155
原创 【C++】基于红黑树封装set和map
set和map的底层就是依靠红黑树实现的,那么在本文我们将学习如何基于红黑树来封装出set和map。本篇文章会带你深入理解C++的三大特性之一——封装。封装屏蔽底层细节,提供统一访问方式。
2024-10-12 18:06:00
2695
148
原创 【C++】二叉搜索树拿出了另一个召唤器变身红黑树
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。根节点是黑色的每个节点不是红色就是黑色。
2024-10-07 08:43:56
2271
150
原创 【C++】二叉搜索树拿出了召唤器变身AVL树
深入理解AVL树是怎么实现平衡的,怎么通过旋转变换实现保持平衡,以及实现平衡过程中的细节应该怎么处理等。
2024-10-06 10:47:09
2473
104
原创 【Linux系统】包管理器、vim详解及简单配置
包管理器(Package Manager)是一种软件工具,它自动化了安装、更新、配置、移除和管理计算机程序库中软件包的过程。在操作系统和软件开发的上下文中,包管理器使得用户能够轻松管理各种软件包,包括它们的依赖关系、版本和配置,而无需手动处理复杂的安装和更新过程。这里只简单介绍两种常见的包管理器。软件包和包管理器, 就好比 “App” 和 “应用商店” 这样的关系。安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成。
2024-09-28 21:19:55
2764
157
空空如也
富文本编辑器和markdown编辑器的区别
2024-06-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人