- 博客(57)
- 收藏
- 关注
原创 【Linux】进程间通信
信号量的本质是一个计数器,用来描述临界资源中,资源数量的多少对资源的预定信号量本身就是共享资源,所以申请资源,计数器--,P操作。释放资源,计数器++,V操作。通过PV操作来完成对资源的预定机制二元信号量只有1或者0两态,就是互斥8. 内核是如何组织管理IPC资源的内核里有3 个全局的结构体数组共享内存shm_ids消息队列msg_ids信号量sem_ids所有IPC 都共用一个ipc_perm结构体,存放权限信息key_t key;// 用户指定的键值uid_t uid;// 属主 UID。
2026-03-14 20:58:40
379
原创 【Linux】库原理
静态链接就是把库中的.o进行合并,和上述过程⼀样所以链接其实就是将编译之后的所有目标文件连用到的一些静态库运行时库组合,拼装成⼀个独立的可执行文化。其中就包括地址修正,当所有模块组合在一起之后,链接器会根据 .o 文件或者静态库中的重定位表找到那些需要被重定位的函数全局变量,从而修正它们的地址。这其实就是静态链接的过程静态重定位 = 链接器给程序里的函数 / 变量 “分配最终的虚拟地址”,并把所有调用处的地址改成这个固定值静态链接的出现,提高了程序的模块化水平。
2026-02-25 15:03:20
906
原创 Linux文件系统
本文摘要: 本文系统介绍了磁盘存储结构与文件系统原理。首先阐述了磁盘物理结构,包括CHS三维寻址方式和LBA线性寻址方式及其转换方法。其次分析了文件系统的基本概念,重点说明"块"作为最小存取单位(通常4KB)、分区以柱面为单位划分、以及inode存储文件属性的机制。最后详细解析了ext2文件系统的结构,包括超级块、块组描述符、位图、inode表和数据块等功能模块,以及目录通过"文件名-inode号"映射实现文件访问的原理。文章通过对比物理寻址与逻辑寻址方式,揭示了操作
2026-01-25 18:21:55
631
原创 【Linux】基础IO
5 pathname: 要打开或创建的⽬标⽂件6 flags: 打开⽂件时,可以传⼊多个参数选项,⽤下⾯的⼀个或者多个常量进⾏“或”运算,构成flags。7 参数:8 O_RDONLY: 只读打开9 O_WRONLY: 只写打开10 O_RDWR : 读,写打开11 (这三个常量,必须指定⼀个且只能指定⼀个12 O_CREAT : 若⽂件不存在,则创建它。需要使⽤mode选项,来指明新⽂件的访问权限13 O_APPEND: 追加写14 返回值:15 成功:新打开的⽂件描述符。
2026-01-20 23:41:05
686
原创 MySQL索引
Page分为目录页和数据页。目录页只放各个下级Page的最小键值查找的时候,自定向下找,只需要加载部分目录页到内存,即可完成算法的整个查找过程,大大减少了IO次数。
2026-01-10 18:20:45
826
原创 MySQL事务管理
其中隔离级别越严格,安全性越高,但数据库的并发性能也就越低,往往需要在两者之间找一个平 衡点不可重复读的重点是修改和删除:同样的条件, 你读取过的数据,再次读取出来发现值不一样了幻读的重点在于新增:同样的条件, 第1次和第2次读出来的记录数不一样说明: mysql 默认的隔离级别是可重复读,一般情况下不要修改上面的例子可以看出,事务也有长短事务这样的概念。事务间互相影响,指的是事务在并行执行的 时候,即都没有commit的时候,影响会比较大。
2025-12-21 11:45:36
983
原创 MySQL复合查询(重要)
多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号。相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的。返回多行记录的子查询。
2025-12-17 18:22:46
691
原创 MySQL内置函数
length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数 (utf-8中文算三个字节)
2025-12-14 11:56:11
770
原创 MySQL表的增删改查
用于筛选 “分组级数据”(比如:筛选平均工资 > 2000 的部门)。在select中使用group by 子句可以对指定列进行分组查询。:用于筛选 “行级数据”(比如:筛选工资 > 2000 的员工)。注:WHERE 条件中使用表达式 --(也可以用原始列,但通常配合聚合函数)。因为是先筛选出数据然后再排序。对应的值已经存在而导致插入失败。,只保留符合条件的行参与分组。_ 匹配严格的一个任意字符。,只保留符合条件的分组。
2025-12-13 17:30:39
957
原创 MySQL表的约束
可以看到a的值由原来的1变成00001,这就是zerofill属性的作用,如果宽度小于设定的宽度,自动填充0。要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是1。:当对应的字段不给值,自动的被系统触发,系统会从当前字段中已经有的最大值 +1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA 来进行了解。默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值。
2025-12-11 17:03:39
892
原创 MySQL数据类型
该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的。该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些。:时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节。字符串,L是可以存储的长度,单位为字符,最大长度值可以为255。: M指定显示长度,d指定小数位数,占用空间4个字节。
2025-12-09 21:12:12
995
原创 MySQL数据库操作
查看当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。说明: 对数据库的修改主要指的是修改数据库的字符集,校验规则。创建一个数据库,校验规则使用。创建一个数据库,校验规则使用。
2025-12-08 17:01:33
923
原创 【Linux】进程概念(二)
由于每个不同质的虚 拟内存区域功能和内部机制都不同,因此一个进程使用多个vm_area_struct结构来分别表示不同类型的虚拟内存区域。每个进程只有一个mm_struct结构,在每个进程的task_struct结构中,有一个指向该进程的结构。每一个进程都会有自己独立的mm_struct,这样每一个进程都会有自己独立的地址空间才能互不干扰。这张图就显示了,当堆在添加数据扩展时因为堆是向上增长的,地址空间起始都被存在vm里,就不会发混乱。描述linux下进程的地址空间的所有的信息的结构体是。
2025-11-02 18:36:29
752
1
原创 【C++】智能指针
当有抛异常场景时,又可能导致后面的delete没有得到执行,所以就内存泄漏了,所以需要new以后捕获异常,捕获到异常后delete内存,再把异常抛出,但是因为new本身也可能抛异常,连续的两个new场景也都可能会抛异常,处理起来很麻烦烦。智能指针放到这样的场景里面就让问题简单多了。
2025-09-25 20:45:50
1032
原创 【C++】C++11(一)
C++11以后,分别重载左值引用、const左值引用、右值引用作为形参的f函数,那么实参会分别匹配。是一个表示数据的表达式(如变量名或解引用的指针),一般是有持久状态,存储在内存中,我 们。等,右值可以出现在赋值符号的右边,但是不能出现出现在赋值符号的左边,右值。,左值可以出现赋值符号的左边,也可以出现在赋值符号右边。移动构造本质是将ret对象移动str的资源,再将str置空。进行拷贝,将对象拷贝到容器空间中的对象。,右值对象的资源到容器空间的对象上。也是一个表示数据的表达式,要么是。
2025-09-16 17:31:25
706
原创 哈希表封装myunordered_map和myunordered_set
unordered_map要支持[]主要需要修改insert返回值支持,修改HashTable中的insert返回值为。_ables,则可以把Iterator实现为哈希表的。类模板成为友元函数需要加上模板参数。此处实现迭代器需要访问哈希表中。
2025-09-11 21:15:52
618
原创 【C++】哈希表实现
哈希(hash)又称散列,是⼀种组织数据的方式。从译名来看,有散乱排列的意思。本质就是通过哈希 函数把关键字Key跟存储位置建立一个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进行快速查找。
2025-09-08 22:22:04
983
原创 【C++】红黑树
红黑树是一棵二叉搜索树,它的每个结点增加一个存储位来表示结点的颜色,可以是红色或者黑色通过对任何一条从根到叶子结点的路径上各个结点的颜色进行约束,红黑树确保没有一条路径会比其它路径长出两倍,因而是接近平衡的。
2025-08-30 15:47:30
732
原创 【C++】异常
异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理, 异常使得我们能够将问题的检测与解决问题的过程分开,程序的一部分负责检测问题的出现,然后 解决问题的任务传递给程序的另一部分,检测环节无须知道问题的处理模块的所有细节。
2025-08-11 22:19:10
743
原创 【C++】set和map使用
T就是set底层关键字的类型set默认要求T支持小于比较,如果不支持或者想按自己的需求可以自行实现仿函数传给第二个模 版参数set底层存储数据的内存是从空间配置器申请的,如果需要可以自己实现内存池,传给第三个参 数一般情况下,都不需要传后两个模版参数set底层是用红黑树实现,增删查效率是O(logN) ,迭代器遍历是走的搜索树的中序,所以是有序的T是map底层value的类型。
2025-08-02 22:48:50
1020
原创 Linux基础指令
功能:less与more类似,使用less可以随意浏览文件,且less在查看之前不会加载整个文件,拥有更多的搜索功能,可以向下搜,也可以向上搜。选项:• -a或‒all:详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。是:只要用户具有目录的写权限,就可以删除目录中的文件,不论这个用户是否有这个文件的写权限。:向显示器文件写入,或向指定文件写入(重定向操作,若文件不存在,就新建文件)功能:显示尾部指定内容,不指定文件时,作为输入信息进行处理。
2025-03-17 22:49:46
805
原创 stack和queue
queue文档emptysizefront返回队头元素的引用back返回队尾元素的引用push_back在队列尾部入队列pop_front在队列头部出队列priority_queue 文档优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)标准容器类vector和deque满足这些需求。默认情况下,
2025-03-13 12:15:31
692
原创 vector
如果pos刚好是最后一个元素,删完之后pos刚好是end 的位置,而end位置是没有元素的,那么pos就失效了。上方代码实现reserve扩容时没有用memcpy浅拷贝,而是使用赋值重载深拷贝,使指向新地址。,比如:resize、reserve、insert、 assign、push_back等。Linux下,g++编译器对迭代器失效的检测并不是非常严格,处理也没有vs下极端。erase删除pos位置元素后,pos位置之后的元素会往前搬移,解决方法:给 i 重新赋值即可。,造成的后果是程序崩溃。
2024-11-26 22:41:17
1015
原创 模板初阶+STL简介
class 类模板名// 类内成员定义public:_size = 0;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误_size++;
2024-10-14 21:54:26
318
原创 C/C++内存管理
malloc free与new delete最大区别是:在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会class Apublic:: _a(a)~A()private:int _a;free(p2);return 0;调用operator new函数申请空间在申请的空间上执行构造函数,完成对象的构造在空间上执行析构函数,完成对象中资源的清理工作。
2024-10-13 22:40:24
964
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅