- 博客(35)
- 收藏
- 关注
原创 Linux——网络概念
本文系统介绍了计算机网络的基本概念与协议体系。主要内容包括:1)局域网和广域网的定义与特点;2)OSI七层模型和TCP/IP四层模型的各层功能、关键设备及协议;3)网络传输的基本流程,包括数据封装与分用、IP地址与MAC地址的作用区别;4)Socket编程基础知识,包括端口号、网络字节序、常用API接口等。文章详细阐述了TCP和UDP协议的特性差异,以及数据在网络中的传输原理,为理解计算机网络通信机制提供了全面的基础知识框架。
2025-12-14 11:10:38
812
原创 Linux:线程池
本文介绍了线程池的设计与实现过程,主要包括三个核心模块:线程封装、锁和条件变量封装以及日志系统。首先实现了Thread类封装线程操作,Mutex类封装互斥锁,Cond类封装条件变量。然后设计了基于策略模式的日志系统Logger,支持控制台和文件两种输出方式。最后采用单例模式实现了固定数量的线程池ThreadPool,包含任务队列管理、线程调度等功能。测试结果表明,该系统能够正确处理并发任务,日志输出规范完整。整个设计通过模块化封装和组合,实现了线程安全、高效的任务处理机制。
2025-12-05 09:34:57
931
原创 生产者消费者模型
321原则”3:3种关系:生产者之间,消费者之间,生产者和消费者之间2:2种角色:生产者和消费者1:一个交易场合生产者和消费者模型就好比去超市买东西:有了交易场所,生产者就可以把生产多的货,存储到交易场所中,即使生产者不生产了,只要交易场所中有货,那么消费者可以直接从交易场所中取货。生产者-消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列。
2025-12-03 17:20:05
851
原创 线程同步与互斥
本文介绍了线程互斥和同步的相关概念及实现方法。首先解释了共享资源、临界资源、临界区等基本概念,通过抢票案例演示了多线程环境下资源竞争的问题。重点讲解了互斥量(mutex)的实现原理和使用方法,包括初始化、加锁解锁操作,并分析了硬件层面如何保证原子性。随后引入条件变量解决线程同步问题,详细解释了pthread_cond_wait的工作原理和注意事项,强调其必须与互斥量配合使用。文章还探讨了线程安全与可重入性的区别,以及死锁产生的四个必要条件及预防策略。最后指出STL容器和智能指针的线程安全性问题。
2025-11-30 11:10:41
765
原创 Linux:线程概念及控制
Linux线程是进程内部的执行流,共享进程资源但拥有独立的栈和上下文。线程比进程更轻量级,创建和切换开销更小。Linux通过轻量级进程(LWP)实现线程,内核使用struct page结构体管理物理内存页。线程共享进程地址空间但拥有私有数据,如线程ID、寄存器、栈等。线程终止可通过return、pthread_exit或pthread_cancel实现,需用pthread_join回收资源以避免泄漏。线程可分离开启自动回收,此时不可再join。pthread库维护的线程ID实质是进程地址空间中的内存地址。
2025-11-15 16:34:04
587
原创 Linux进程信号
本文详细介绍了Linux系统中的信号机制及其应用。首先解释了信号的概念与分类(62种信号,前31种为普通信号),介绍了信号产生方式(键盘、kill命令、系统调用等)和信号处理过程(递达、未决、阻塞)。文章深入讲解了信号在内核中的表示方式和操作函数(sigprocmask、sigpending等),以及用户态与内核态的切换机制。通过具体代码示例演示了信号处理流程、可重入函数问题和volatile关键字的作用。最后介绍了sigaction函数的强大功能和信号处理中的注意事项.
2025-11-05 19:50:11
674
原创 进程间通信(IPC)
本文介绍了进程间通信(IPC)的主要方法和实现原理,重点分析了管道和SystemV共享内存两种机制。首先阐述了进程通信的四大目的:数据传输、资源共享、事件通知和进程控制。随后详细讲解了管道技术,包括匿名管道的特性(单向通信、生命周期随进程、自带同步机制)和命名管道的创建方法。特别通过代码示例展示了父子进程如何通过匿名管道实现通信。然后深入探讨了SystemV共享内存机制,包括其数据结构、关键函数(shmget、shmat、shmdt等)和完整通信流程,并通过实例演示了两个进程通过共享内存实现数据交互。
2025-10-26 15:09:20
964
原创 Linux:库制作与原理
文章摘要:本文系统介绍了编程中库的概念与使用。库是预先编译好的可重用代码集合,分为静态库(.a/.lib)和动态库(.so/.dll)。静态库在编译时链接到可执行文件,动态库则在运行时加载。文章详细讲解了如何创建、打包和使用两种库,包括Makefile编写、库路径配置等。同时深入分析了ELF文件格式,解释了程序头表和节头表的作用,对比了静态链接和动态链接的区别,重点阐述了动态链接通过GOT表实现函数地址重定位的机制。最后还介绍了目标文件的组成和链接过程,以及如何通过readelf等工具查看文件结构。
2025-10-19 20:04:25
1320
原创 Ext系列文件系统
本文系统介绍了计算机存储系统的层级关系与磁盘结构原理。主要内容包括:1)存储设备层级关系:磁盘→服务器→机柜→机房;2)磁盘物理结构:详细解析扇区、磁头、磁道等组件及其容量计算;3)数据寻址方法:CHS与LBA两种寻址方式;4)文件系统管理:阐述块、分区、inode等概念及其运作机制;5)目录结构与文件操作原理;6)软硬链接的区别与应用场景。文章通过类比磁带、卷纸等日常物品,形象解释了磁盘的逻辑存储结构,并深入分析了ext2文件系统的组织方式,包括超级块、块组描述符等核心组件。最后还探讨了文件时间属性和路径
2025-10-11 16:50:43
626
原创 Linux:基础IO
本文深入探讨了Linux系统中文件操作的核心概念和实现机制。首先从狭义和广义两个角度理解文件概念,指出Linux下"一切皆文件"的抽象设计理念。文章详细解析了文件描述符(fd)的分配规则、重定向原理及缓冲区机制,包括标准I/O提供的全缓冲、行缓冲和无缓冲三种类型。通过代码示例演示了文件I/O系统调用(open/read/write)与C库函数(fopen/fread/fwrite)的关系,并剖析了FILE结构体内核实现。最后设计了一个简易的libc库原型,展示用户级缓冲区的实现原理。
2025-10-07 14:17:29
1065
原创 进程控制
本文摘要:本文深入探讨了Linux系统中的进程管理相关概念与技术,主要包括以下内容:1. fork函数的实现原理和写时拷贝机制,解析父子进程共享资源的实现方式;2. 进程终止的三种场景和常见退出方法,比较了_exit、exit和return的区别;3. 进程等待的必要性及实现方法,详细介绍了wait和waitpid函数的使用;4. 进程程序替换原理及exec函数族的使用;5. 自主Shell的实现原理,包括命令行解析、内建命令执行和外部程序执行。
2025-09-28 20:36:50
802
原创 初相识进程
本文摘要:文章系统介绍了操作系统进程管理的核心概念,包括进程定义、进程控制块(PCB)、进程状态(运行、睡眠、僵尸等)、进程优先级调度算法,以及Linux内核中的进程调度队列实现。重点讲解了进程地址空间、虚拟内存管理机制,分析了父子进程的数据隔离原理和写时拷贝技术。同时详细阐述了命令行参数和环境变量的工作机制,包括PATH等常见环境变量的作用与设置方法。文章通过代码示例和Linux命令操作演示了进程创建、状态监控、优先级调整等实际应用,揭示了操作系统如何通过虚拟地址空间和分页机制实现进程间的内存隔离与管理。
2025-09-22 07:15:00
830
原创 Linux基础开发工具(gcc/g++,yum,vim,make/makefile)
本文介绍了Linux开发中的常用工具和基本概念,包括yum软件包管理器、vim编辑器、gcc编译器、make构建工具、进度条程序实现以及gdb调试器。重点讲解了yum的软件包管理操作、vim三种模式的切换与常用命令、gcc编译的四个阶段(预处理-编译-汇编-链接)、makefile的编写规则,并通过实例演示了进度条程序的实现方法。最后详细说明了gdb调试器的使用技巧,包括断点设置、变量监视、条件断点等调试方法,为Linux环境下的C/C++开发提供了全面的工具使用指南。
2025-09-14 13:15:11
1240
原创 Linux权限
Linux权限管理摘要:Linux系统权限管理主要涉及用户分类(root超级用户和普通用户)、文件访问者角色(User/Group/Others)和基本权限(读/写/执行)。文件权限可通过chmod命令修改,支持字符表示法(u/g/o/a)和八进制数值表示法。chown和chgrp命令分别用于修改文件所有者和所属组。umask权限掩码影响新建文件的默认权限(如root默认为0022)。目录权限中,x权限控制进入目录,w权限控制文件操作,r权限控制查看内容。通过设置粘滞位(chmod +t)可限制目录下的文件
2025-09-09 16:54:41
767
原创 C++之set和map的运用
map的声明如下,Key就是map底层关键字的类型,T是map底层value的类型,set默认要求Key⽀持⼩于⽐较,如果不⽀持或者需要的话可以⾃⾏实现仿函数传给第⼆个模版参数,map底层存储数据的内存是从空间配置器申请的。⼀般情况下,我们都不需要传后两个模版参数。map底层是⽤红⿊树实现,增删查改效率是 O(logN) ,迭代器遍历是⾛的中序,所以是按key有序顺序遍历的。map底层的红⿊树节点中的数据,使⽤pair<Key, T>存储键值对数据。T1 first;T2 second;{}
2025-05-08 20:01:57
648
原创 C++之红黑树
分析:因为p和u都是红⾊,g是⿊⾊,把p和u变⿊,左边⼦树路径各增加⼀个⿊⾊结点,g再变红,相当于保持g所在⼦树的⿊⾊结点的数量不变,同时解决了c和p连续红⾊结点的问题,需要继续往上更新是因为,g是红⾊,如果g的⽗亲还是红⾊,那么就还需要继续处理;c为红,p为红,g为⿊,u不存在或者u存在且为⿊,u不存在,则c⼀定是新增结点,u存在且为⿊,则c⼀定不是新增,c之前是⿊⾊的,是在c的⼦树中插⼊,符合情况1,变⾊将c从⿊⾊变成红⾊,更新上来的。他这⾥所指的叶⼦结点不是传统的意义上的叶⼦结点,⽽是我们说的。
2025-04-20 19:31:58
921
原创 C++之AVL树
在前面学习的二叉搜索树中,我们了解到二叉搜索树节点的成员有数据和它的左右孩子,但今天我们学习到的AVL树不仅有二叉搜索树的成员,还多了两个成员——parent(节点的父亲)和平衡因子。int _bf;//平衡因子:_kv(kv),_bf(0){}
2025-04-16 20:13:46
1175
原创 C++之二叉搜索树
定义一个二叉树节点类,包含节点的值、左子节点指针和右子节点指针。T _data;//初始化节点,定义成有参的,后面新增节点需要调用。
2025-04-14 21:40:53
941
原创 c++的特性——多态
1.基类对象的虚函数表中存放基类所有虚函数的地址。同类型的对象共用一张虚表,不同对象各自有独立的虚表。2.派生类由两部分组成,继承下来的基类和自己的成员,一般情况下,继承下来的基类中有虚函数表指针,自己就不会在生成虚函数表指针。但是继承下来的基类部分虚函数表指针和基类对象的虚函数表指针不是同一个。3.派生类中重写的基类的虚函数,派生类的虚函数表中对应的虚函数就会被覆盖成派生类重写的虚函数地址。
2025-03-30 20:43:52
866
1
原创 C++之继承
C++有三大特性,分别是封装,继承,多态。在前面的学习中我们已经学习了封装(其实就是把数据(属性)和操作数据的方法(行为)绑定在一起,形成一个独立的对象(类))。今天我们就开始学习C++的另一个特性——继承。
2025-03-24 08:00:00
706
原创 C++之模板进阶
我们常说头文件里面放声明,源文件中放定义。在string类模拟的时候,我们确实发现string类头文件中放声明,而源文件中放定义。但在学习了list类和vector类的模拟实现的时候,我们发现全部内容都放在了一个文件中,而且它们有共同点——都用了类模板。那么到底类模板有什么特别的地方呢?下面我们开始学习今天的内容,在文章中找到答案。一个程序包含若干个源文件,而每个源文件单独编译生成目标文件,最后经过链接把所有目标文件连接起来形成一个单一的可执行文件的过程。
2025-03-21 16:51:45
795
原创 C++之list类及模拟实现
(1)list类其实就是链表,但是它是双向链表。在数据结构中我们了解过双向链表的特点。下面我们回忆一下。1.节点中具有两个指针。一个指针指向该节点的前一个节点,另一个指针指向该节点的下一个节点。2.存在哨兵位。初始化的时候节点里的下一个节点和上一个节点都指向自己。(2)STL中list的底层结构我们先定义双向链表的节点并初始化。T _data;, _data(x)vectorlist底层结构动态顺序表,一段连续空间带头结点的双向循环链表随机访问。
2025-03-17 20:13:57
918
原创 stack/queue/priority_queue类
1.在数据结构中我们学习过stack(栈),我们知道栈的特点是先进后出的。2.该底层容器至少支持以下操作:push :入栈pop:出栈empty:检测栈是否为空size:返回队列中有效个数top:返回栈顶元素3.STL标准库中stack的底层结构1.在数据结构中我们了解了queue(队列)的特点是先进先出(即在队尾入数据在队头出数据)。2.该底层容器应至少支持以下操作:empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用。
2025-03-14 21:44:14
1078
原创 vector类及模拟实现
是 C++ STL 中最常用的容器之一,而使用STL的三个境界:第一境界是熟用,第二境界是了解泛型技术的内涵与STL的学理乃至实作,第三境界是能扩展STL。那么接下来我们学习vector也需要按照这种方法学习。
2025-03-10 20:12:35
903
1
原创 程序内存管理知多少
new:1.调用operator new函数申请空间2.在申请的空间上调用构造函数delete:1.在空间上执行析构函数,清理对象中的资源。2.调用operator delete函数释放对象空间。new[N]:1.调用operator new[]函数,在operator new[]中实际调用operator new函数实行对N个对象申请空间。2.调用N次构造函数。delete[N]:1.在空间上调用N次析构函数,清理N个对象中的资源。
2025-02-24 15:18:49
1057
原创 类与对象(下)
无论是否写初始化列表,每个构造函数都存在初始化列表。无论是否在初始化列表显示初始化(还没开空间),每个成员变量都要走初始化列表。
2024-12-01 10:00:00
1995
原创 类和成员(中)
如果没有拷贝构造函数,编译器只会值拷贝/浅拷贝,不会进行深拷贝,但是代码中的st1、st都指向同一块空间,当st中尾删了两位时,top=3,但是st1的top还指向之前被尾删掉的5的位置,而且在后面对象st、对象st1调用析构的时候会调用两次,由于重复释放一块内存空间,程序就会崩溃。7.重载++运算符时,有前置++和后置++,运算符重载函数名都是operator++,无法很好区分,C++规定,后置++重载时,增加一个int形参,跟前置++构成函数重载,方便区分。但是三个函数有且只有一个存在,不能同时存在。
2024-11-24 21:26:59
1116
1
原创 c++类和对象(上)
1.class为定义类的关键字,注意类定义结束是后面的分号不可省略。class Stack//Stak为类的名字,{}内为类的主体public:void Init(int n = 4)//类中的函数称为类的方法或者成员函数exit(1);top = 0;//类中的变量称为类的属性或成员变量size_t top;st.Init();2.为了区分成员变量,一般习惯上成员变量会加一个特殊标识。
2024-11-18 19:47:25
1006
1
原创 C++入门基础知识
要使上面的代码运行成功就要使用到namespace关键字。由上面的代码可以看出(1.namespace的用法:namespace+命名空间的名字,然后再接一对{}即可,{}中即为命名空间中的成员。命名空间中可以定义变量/函数/类型等。(2.namespace本质是定义出另一个域,这个域跟全局变量各自独立,不同的域可以定义同名变量,所以上面代码中rand不冲突了。(3.C++中的域有函数局部域,全局域,空间命名域,类域;
2024-11-16 22:01:35
719
1
原创 【数据结构】顺序表
1.顺序表的底层结构是数组。2.顺序表是线性表(具有相同特性的数据结构的集合)的一种,物理结构并不一定连续,逻辑结构一定连续。
2024-11-02 13:29:06
375
1
原创 用C语言写扫雷,你学会了吗?
(1)遇到雷,游戏结束。(2)剩余没点的格数等于雷的个数,游戏通过。(3)点到不是雷的格子,格子会显示附近(周围八个格子)雷的个数。1.假设弄个9x9且有十个雷的扫雷游戏。2.初始化棋盘(InitBoard)。我们需要建立两个数组:一个棋盘来展示(‘*’),另一个来用来埋雷(‘0’)。注:两个数组不是9x9,而是11x11。3.打印棋盘(DisplayBoard)。运用for循环。为了更好打出准确的坐标,我们可以美化一下棋盘,在棋盘周围加上数字。4.埋雷(SetMine)。
2024-08-01 08:39:23
573
1
原创 关于结构体
(2)其他成员变量要对齐到对齐数(编译器默认的一个对齐数与该成员变量大小的量的最小值)的整数倍,注:vs中对齐数是八,而gcc没有。对于编译器中默认的对齐数是可以被修改的,需要运用#pragma pack(修改后的对齐数)(4)嵌套的结构成员对齐到自己成员中最大对齐数的整数倍。规则:(1)第一个成员对齐偏移量为0的地址处;(3)结构体总大小为最大对齐数的整数倍。1.结构体的创建和初始化。
2024-06-06 22:36:42
297
2
原创 指针的运用
(6)函数指针数组(数组中元素的类型相同,即函数的返回值和函数的参数类型相同),例如int(*pf[4])(int ,int )={add,sub ,mul,div}即pf数组指针中包含四个函数指针。2.void(*single(int ,void(* )(int )))(int)//该式子为single函数的声明,它的参数类型有int ,函数指针类型,返回类型为函数指针类型。(1.书写方式:类型+(*函数指针)(形参 ,形参),例如int (*p)(int ,int )=&add。
2024-05-26 20:39:24
1208
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅