- 博客(48)
- 收藏
- 关注
原创 Linux系统--进程信号
打个⽐⽅,某⼈要⼩睡⼀觉,设定闹钟为30分钟之后响,20分钟后被⼈吵醒了,还想多睡⼀会⼉,于是重新设定闹钟为15分钟之后响,“以前设定的闹钟时间还余下的时间”就是10分钟。当代码在用户态运行时,当出现中断,异常或系统调用的时候会由用户态进入内核态,在内核处理完异常之后,会检测当前有没有可以递达的信号,此时就会进行处理,如果信号的处理方法是默认或忽略时,由内核完成,若是处理方法为自定义,则需要从内核态先返回到用户态进行自定义处理方法的运行,在信号处理之后,要在内核态统一返回用户态继续代码的执行。
2025-09-25 16:40:09
622
原创 Linux系统--进程间通信
大家好,好久不见,今天我们来继续学习Linux的系统部分,今天我们来学习进程间通信进程间通信1. 进程间通信介绍什么是通信?进程间通信是指运行在同一台计算机或不同计算机上的多个进程之间进行数据交换和通信的技术。因为每个进程都有自己独立的地址空间,无法直接访问彼此的数据,所以得依靠特定机制来实现通信。它在操作系统和多进程编程里是重要概念,广泛应用于分布式系统、多任务操作系统以及各类应用程序之间。1-1 进程间通信⽬的为什么要有进程间通信呢?数据传输:⼀个进程需要将它的数据发送给另⼀个进程。
2025-09-11 16:26:21
666
原创 Linux系统--文件系统
记录的信息主要有:bolck 和 inode的总量,未使⽤的block和inode的数量,⼀个block和inode的⼤⼩,最近⼀次挂载的时间,最近⼀次写⼊数据的时间,最近⼀次检验磁盘的时间等其他⽂件系统的相关信息。那个C,D,E就是分区。到这我们要思考⼀个问题,⽂件数据都储存在”块”中,那么很显然,我们还必须找到⼀个地⽅储存⽂件的元信息(属性信息),⽐如⽂件的创建者、⽂件的创建⽇期、⽂件的⼤⼩等等。⼀个”块”的⼤⼩是由格式化的时候确定的,并且不可以更改,最常⻅的是4KB,即连续⼋个扇区组成⼀个 ”块”。
2025-08-08 17:32:52
664
原创 Linux系统--基础I/O
pathname:要打开或创建的⽬标⽂件flags:打开⽂件时,可以传⼊多个参数选项,⽤下⾯的⼀个或者多个常量进⾏或运算,构成flags。参数O_RDONLY: 只读打开。
2025-08-07 16:38:41
1026
原创 Linux系统--进程控制
大家好,今天我们来继续学习Linux的系统部分,上一次我们学到了进程的概念,接下来我们来进一步学习进程的控制进程控制1. 进程创建1-1 fork函数初识在linux中fork函数是⾮常重要的函数,它从已存在进程中创建⼀个新进程。新进程为⼦进程,⽽原进程为⽗进程。进程调⽤fork,当控制转移到内核中的fork代码后,内核做:1. 分配新的内存块和内核数据结构给⼦进程2. 将⽗进程部分数据结构内容拷⻉⾄⼦进程3. 添加⼦进程到系统进程列表当中4. fork返回,开始调度器调度。
2025-07-23 18:19:24
1062
原创 Linux系统--进程概念
大家好,好久不见,我们今天来继续Linux系统的学习。今天我们来认识一下操作系统中重要的一部分:进程。那么话不多说,我们开始今天的学习。
2025-07-21 15:45:14
1065
原创 Linux系统--开发工具
大家好,我们今天来继续学习Linux的内容,今天我们来学习一些在Linux中使用的工具。基础开发⼯具本节⽬标学习yum⼯具,进⾏软件安装掌握vim编辑器使⽤,学会vim的简单配置掌握gcc/g++编译器的使⽤,并了解其过程,原理掌握简单的Makefile编写,了解其运⾏思想编写⾃⼰的第⼀个Linux 程序:进度条学习 git 命令⾏的简单操作, 能够将代码上传到 Github 上掌握简单gdb使⽤于调试。
2025-07-01 19:59:40
1150
原创 Linux系统--指令基础
大家好,在之前我们学完了c++的初阶和进阶部分,今天我们来进行新一部分的学习:LinuxLinux我在学习时也分为两部分:Linux系统和Linux网络。那么话不多说,我们开始进入今天的学习。
2025-06-18 14:45:42
372
原创 c++进阶--智能指针
weak_ptr⽀持expired检查指向的资源是否过期,use_count也可获取shared_ptr的引⽤计数,weak_ptr想访问资源时,可以调⽤lock返回⼀个管理资源的shared_ptr,如果资源已经被释放,返回的shared_ptr是⼀个空对象,如果资源没有释放,则通过返回的shared_ptr访问资源是安全的。RAII在获取资源时把资源委托给⼀个对象,接着控制对资源的访问,资源在对象的⽣命周期内始终保持有效,最后在对象析构的时候释放资源,这样保障了资源的正常释放,避免资源泄漏问题。
2025-04-10 22:29:41
1048
原创 c++进阶--异常
1. 异常处理机制允许程序中独⽴开发的部分能够在运⾏时就出现的问题进⾏通信并做出相应的处理,异常使得我们能够将问题的检测与解决问题的过程分开,程序的⼀部分负责检测问题的出现,然后解决问题的任务传递给程序的另⼀部分,检测环节⽆须知道问题的处理模块的所有细节。1. 抛出异常后,程序暂停当前函数的执⾏,开始寻找与之匹配的catch⼦句,⾸先检查throw本⾝是否在try块内部,如果在则查找匹配的catch语句,如果有匹配的,则跳到catch的地⽅进⾏处理。异常时抛出⼀个对象,这个对象可以函数更全⾯的各种信息。
2025-04-09 14:01:24
616
原创 c++进阶--c++11
3. 对于像string/vector这样的深拷⻉的类或者包含深拷⻉的成员变量的类,移动构造和移动赋值才有意义,因为移动构造和移动赋值的第⼀个参数都是右值引⽤的类型,他的本质是要“窃取”引⽤的右值对象的资源,⽽不是像拷⻉构造和拷⻉赋值那样去拷⻉资源,从提⾼效率。那么编译器会⾃动⽣成⼀个默认移动构造。1. 对于⼀个参数包,我们除了能计算他的参数个数,我们能做的唯⼀的事情就是扩展它,当扩展⼀个包时,我们还要提供⽤于每个扩展元素的模式,扩展⼀个包就是将它分解为构成的元素,对每个元素应⽤模式,获得扩展后的列表。
2025-04-06 21:30:09
925
原创 c++进阶--unordered_set和unordered_map的实现
但是SGI-STL30实现了哈希表,只容器的名字是hash_map和hash_set,他是作为⾮标准的容器出现的,⾮标准是指⾮C++标准规定必须实现的,源代码在hash_map/ hash_set/ stl_hash_map/ stl_hash_set/ stl_hashtable.h中。1. iterator实现的⼤框架跟list的iterator思路是⼀致的,⽤⼀个类型封装结点的指针,再通过重载运算符实现,迭代器像指针⼀样访问的⾏为,要注意的是哈希表的迭代器是单向迭代器。
2025-03-26 20:05:47
984
原创 c++进阶--哈希表的实现
1.5.1 除法散列法/除留余数法1. 除法散列法也叫做除留余数法,顾名思义,假设哈希表的⼤⼩为M,那么通过key除以M的余数作为映射位置的下标,也就是哈希函数为:h(key) = key % M。2. 当使⽤除法散列法时,要尽量避免M为某些值,如2的幂,10的幂等。如果是 ,那么key %本质相当于保留key的后X位,那么后x位相同的值,计算出的哈希值都是⼀样的,就冲突了。
2025-03-25 22:43:29
1118
原创 c++进阶--unordered_set和unordered_map的使用
3. unordered_set和set的第⼆个差异是迭代器的差异,set的iterator是双向迭代器,unordered_set是单向迭代器,其次set底层是红⿊树,红⿊树是⼆叉搜索树,⾛中序遍历是有序的,所以set迭代器遍历是有序+去重。4. unordered_set和set的第三个差异是性能的差异,整体⽽⾔⼤多数场景下,unordered_set的增删查改更快⼀些,因为红⿊树增删查改效率是 ,⽽哈希表增删查平均效率是 ,具体可以参看下⾯代码的演⽰的对⽐差异。
2025-03-24 20:02:48
1018
原创 c++进阶--红黑树
大家好,今天我们继续来学习c++的进阶部分,今天我们要学习的内容是红黑树。1. 红⿊树的概念红⿊树是⼀棵⼆叉搜索树,他的每个结点增加⼀个存储位来表⽰结点的颜⾊,可以是红⾊或者⿊⾊。通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束,红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍,因⽽是接近平衡的。1.1 红⿊树的规则:1. 每个结点不是红⾊就是⿊⾊2. 根结点是⿊⾊的3. 如果⼀个结点是红⾊的,则它的两个孩⼦结点必须是⿊⾊的,也就是说任意⼀条路径不会有连续的红⾊结点。
2025-03-17 23:42:25
995
原创 c++进阶--AVL树
3. 更新后parent的平衡因⼦等于2 或 -2,更新前更新中parent的平衡因⼦变化为1->2 或者 -1->-2,说明更新前parent⼦树⼀边⾼⼀边低,新增的插⼊结点在⾼的那边,parent所在的⼦树⾼的那边更⾼了,破坏了平衡,parent所在的⼦树不符合平衡要求,需要旋转处理,旋转的⽬标有两个:1、把parent⼦树旋转平衡。通过图7和图8可以看到,左边⾼时,如果插⼊位置不是在a⼦树,⽽是插⼊在b⼦树,b⼦树⾼度从h变成h+1,引发旋转,右单旋⽆法解决问题,右单旋后,我们的树依旧不平衡。
2025-03-13 22:57:17
667
原创 c++进阶--map和set的使用
大家好,昨天我们学习了二叉搜索树,今天我们来学习一下map和set容器的使用。1. map和set的使⽤1.1 序列式容器和关联式容器今天我们学习的map和set是一种新容器:1. 前⾯我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间⼀般没有紧密的关联关系,⽐如交换⼀下,他依旧是序列式容器。
2025-03-05 21:51:21
922
原创 c++进阶--二叉搜索树
大家好,今天我们来学习在c++中更深奥的数据结构,二叉搜索树。1. ⼆叉搜索树的概念⼆叉搜索树⼜称⼆叉排序树,它或者是⼀棵空树,或者是具有以下性质的⼆叉树:1. 若它的左⼦树不为空,则左⼦树上所有结点的值都⼩于等于根结点的值2. 若它的右⼦树不为空,则右⼦树上所有结点的值都⼤于等于根结点的值3. 它的左右⼦树也分别为⼆叉搜索树。
2025-03-04 20:06:03
847
原创 c++进阶--多态
大家好,今天我们来学习c++进阶的第二课:多态。c++的三大特性就是封装,继承和多态。那么今天我们就来学习一下多态。1. 多态的概念多态(polymorphism)的概念:通俗来说,就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态),这⾥我们重点讲运⾏时多态,编译时多态(静态多态)和运⾏时多态(动态多态)。
2025-03-03 21:56:58
1082
原创 c++进阶--继承
1.2.1 定义格式上面我们看到Person是基类,也称作⽗类。Student是派⽣类,也称作⼦类。(因为翻译的原因,所以既叫基类/派⽣类,也叫⽗类/⼦类)。继承有三种继承方式:1. public继承2. protected继承3. private继承。
2025-03-02 19:49:42
925
原创 c++初阶--模板进阶
1. 对于一个数组的越界检查,一个数组如果越界读,可以进行,但读出的结果是随机值;如果进行越界写,系统对于一个数组,在数组后面有两位标志位,这两位有一个默认值,当写的是这两位时,会判断是越界并进行报错,但写的若不是这两位,则不会进行报错。// 定义一个模板类型的静态数组public:private:但由于我们使用非类型模板参数定义的静态数组是在类中进行定义的,所以该静态数组有迭代器(指针),无论对于读还是写,只要越界就会进行报错。
2025-03-01 16:19:43
627
原创 c++初阶--Stack,Queue和PriorityQueue的实现
但对于官方库中,Stack和Queue的这个容器参数缺省值给了一个容器deque,那么deque是哪种容器呢?1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。
2025-02-27 19:39:04
666
原创 c++初阶--vector的实现
大家好,欢迎再次来到我的博客,今天我们来学习一下c++中的vector类。和string类一样,我们先学习它的使用,再学习它的实现。由于模板类的使用和实现都是类似的,所以我们只对和我们之前string类中有补充的或不同的地方进行说明,还请见谅。
2024-11-06 18:40:51
277
原创 c++初阶--string类的实现
大家好,今天我们来实现一下string类,只给出代码,就不进行讲解了。string.cpp文件。string.h文件。test.cpp文件。
2024-11-06 18:17:12
177
原创 c++初阶--string类(使用)
大家好,许久不见,今天我们来学习c++中的string类,在这一部分,我们首先应该学习一下string类的用法,然后再试着自己去实现一下string类。在这里,我使用的是这个网站来查找的string类,这里面的内容比较全面,很适合我们查找一些东西,
2024-10-22 00:34:51
292
1
原创 c++初阶--内存管理
那么对于new和delete来说,它们与malloc和free最大的区别就是它们在对自定义类型进行内存申请时可以调用类的构造函数和析构函数。
2024-09-23 08:36:17
822
原创 c++初阶--c++类和对象(下)
大家好,今天我们来继续学习类和对象这里最后一部分知识,今天的学习内容少而且简单一点,那么话不多说,让我们开始吧。
2024-09-19 11:50:29
743
原创 c++初阶--c++类和对象(中)
大家好,我们今天来继续学习c++的类和对象,今天我们来着重学习一下c++中的运算符重载这一部分的知识。那话不多说,这就开始我们今天的学习吧。
2024-09-18 10:50:37
980
2
原创 c++初阶--c++类和对象(上)
c++中类的定义与C语言中的结构体十分相似,像结构体一样,class是类的关键字,Date是类的名字,类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或 者成员函数。int _month;int _day;_day = day;注意类定义结束时后⾯分号不能略。同时,c++中也将结构体升级成了类,在结构体中一样可以定义函数,但⼀般情况下我们还是推荐⽤class定义类。
2024-09-10 15:04:01
880
原创 c++初阶--c++基础
我们先来看一看namespace定义的规则:定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响。
2024-08-06 11:16:46
776
2
原创 C语言-文件操作
大家好,今天我们来继续学习C语言中的文件操作,所谓文件是磁盘(硬盘)上的⽂件是⽂件。那为什么要使用文件呢:如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤⽂件。
2024-07-15 21:33:54
1115
7
原创 C语言自定义类型(结构体,枚举,联合):
位段的声明和结构是类似的,有两个不同:1.位段的成员必须是int或signed int,在C99中位段成员的类型也可以选择其他类型。2.位段的成员名后边有⼀个冒号和⼀个数字。例如下面是一个位段:structAint_a:2;int_b:5;int_c:10;int_d:30;位段与结构体十分相似,那么位段的大小又是多少呢?下面我们来学习一下位段的内存分配。
2024-07-01 12:48:54
972
9
原创 C语言内存函数
在上一篇文章中我们学习了C语言字符函数和字符串函数,今天我们继续来学习一下C语言中的内存函数,本章内容较少,那么让我们开始今天的学习。1. memcpy 使⽤和模拟实现voidmemcpyvoidconst void* source,size_tnum );memcpy函数用法是:从source的位置开始向后复制num个字节的数据到destination指向的内存位置。看到这里,大家可能会有疑惑,这个复制不是和上次学习的带长度的复制strncpy一样了吗?
2024-05-09 02:18:42
2595
8
原创 C语言字符函数和字符串函数
今天我们来学习一下C语言中的一些字符函数和字符串函数。在编程的过程中,我们经常要处理字符和字符串,为了⽅便操作字符和字符串,C语⾔标准库中提供了⼀系列库函数,接下来我们就学习⼀下这些函数。
2024-05-07 01:01:28
2069
8
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人