- 博客(88)
- 收藏
- 关注
原创 Linux:进程信号
掌握Linux信号的基本概念。掌握信号产⽣的⼀般⽅式。理解信号递达和阻塞的概念,原理。掌握信号捕捉的⼀般⽅式。了解中断过程,理解中断的意义掌握操作系统运⾏,系统调⽤原理,理解缺⻚异常或其他软件异常的基本原理重新了解可重⼊函数的概念。了解竞态条件的情景和处理⽅式。了解SIGCHLD信号, 重新编写信号处理函数的⼀般处理机制
2025-03-22 21:52:41
1088
原创 Linux:动静态库
库是写好的现有的,成熟的可以复用的代码。现实中每个程序都需要依赖很多基础的底层库。世界上有很多大佬为了实现某一个功能,写了很多很NB的代码。他们把代码封装成一个库,这样我们不必写出像他们一样厉害的代码,只需要使用它们分享的库,也能使用对应的功能了。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。静态库 .a[Linux/macOS]、.lib[windows]动态库 .so[Linux]、.dll[windows]、.dylib[macOS]
2025-02-13 17:32:55
982
原创 Linux:EXT2文件系统
磁盘结构,分区,CHS寻址,LBA寻址,inode,Super_Block,GDT,块位图,inode位图,inode节点表,Data Block,路径解析,路径缓存,挂载分区,软硬链接,ACM时间,理解一切皆文件。
2025-01-20 22:09:05
947
原创 MySQL:索引
认识磁盘、磁盘的和操作系统是如何进行IO的、数据库与操作系统的IO、索引的原理及其底层数据结构B+树、如何创建索引、复合索引。
2025-01-02 17:54:50
1075
原创 MySQL:复合查询
介绍复合查询方法包括:多表查询、自连接、子查询(单行、多行、多列等)、from 子句子查询、合并查询(union、union all)、内外连接等
2024-12-24 20:39:41
1181
原创 MySQL:内置函数
MySQL 中常用的日期、字符串、数学及其他函数的基本用法,包括日期操作(如 current_date() 和 date_add())、字符串操作(如 concat() 和 replace())、数学函数(如 abs() 和 mod())以及加密函数(如 SHA2() 和 md5())。
2024-12-22 19:53:09
769
原创 MySQL:基本查询
全面阐述 MySQL 中 CRUD 操作。涵盖创建数据的多种插入方式,检索数据的各类查询语法,更新数据的列值变更,删除数据的不同方法,还介绍聚合函数、group by 子句、having 用法及 truncate 与 delete 区别等重要知识。
2024-12-21 17:33:32
1061
2
原创 MySQL:数据类型
介绍 MySQL 数据类型,包括数值(如 INT、FLOAT 等)、文本二进制(CHAR、VARCHAR 等)、时间日期、ENUM 和 SET 类型,阐述各类型特点、范围、存储方式及应用场景,还有相关注意事项与案例。
2024-12-12 18:15:33
976
原创 Linux:文件与IO
C 语言文件操作,如多种函数及打开模式;系统调用接口,如 open、close、write、read 函数及其参数、返回值;还介绍文件描述符原理,进程与文件联系,以及磁盘与内存文件关系,重定向原理,语言缓冲区,内核缓冲区,阐释基本文件操作原理与机制。
2024-12-07 18:09:26
1068
原创 Linux:进程(二)
进程退出的场景、退出码以及 exit 与_exit 函数。进程等待的原因和方法,status 参数、wait 和 waitpid 函数,非阻塞轮询。进程替换的概念、函数,如 execl、execle、execv。
2024-11-28 23:52:54
696
原创 Linux:进程(一)
著名的冯诺依曼结构,什么是操作系统,为什么需要操作系统,进程是什么,进程如何创建,进程的状态,什么是僵尸进程和孤儿进程,进程优先级,O(1)调度算法。
2024-11-22 15:07:03
934
原创 Linux:版本控制器git和调试工具cgdb
为了能够更⽅便我们管理这些不同版本的⽂件,便有了版本控制器。所谓的版本控制器,就是能让你了解到⼀个⽂件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统,同时也⽅便多⼈协同作业。 ⽬前最主流的版本控制器就是 Git 。
2024-11-16 16:02:03
992
原创 C++进阶:异常
异常处理机制允许程序中独⽴开发的部分能够在运⾏时就出现的问题进⾏通信并做出相应的处理, 异常使得我们能够将问题的检测与解决问题的过程分开,程序的⼀部分负责检测问题的出现,然后解决问题的任务传递给程序的另⼀部分,检测环节⽆须知道问题的处理模块的所有细节。
2024-11-02 21:56:21
815
原创 C++进阶:C++11的新特性
2011年,C++标准委员会发布了C++11标准,这是C++的一次巨大飞跃,引入了许多重要的新特性,如智能指针、lambda表达式、并发编程支持等。这一版本的发布对C++社区产生了深远的影响,使得C++在现代软件开发中更具竞争力。
2024-11-01 22:19:35
1040
原创 Linux:编辑器Vim和Makefile
vim主要的三种模式分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)
2024-10-27 14:12:29
1460
原创 Linux:权限
目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入, 即使目录仍然有-r读权限。(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
2024-10-26 22:08:10
982
原创 C++进阶:哈希
哈希(hash)⼜称散列,是⼀种组织数据的⽅式。从译名来看,有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进⾏快速查找。
2024-10-21 14:47:30
849
1
原创 C++进阶:实现红黑树
红⿊树是⼀棵⼆叉搜索树,他的每个结点增加⼀个存储位来表示结点的颜⾊,可以是红⾊或者⿊⾊。 通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束,红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍,因⽽是接近平衡的。
2024-10-11 23:04:22
772
1
原创 Linux:基本指令
XShell 下的复制粘贴复制: ctrl + insert (有些同学的 insert 需要配合 fn 来按)粘贴: shift + insertctrl + c / ctrl + v 是不行的
2024-10-03 22:54:01
862
17
原创 C++进阶:AVL树保持平衡的秘诀
AVL树整体结点数量和分布和完全⼆叉树类似,⾼度可以控制在log(n),那么增删查改的效率也可 以控制在O(log(n)),相⽐⼆叉搜索树有了本质的提升。
2024-09-29 11:40:22
1097
8
原创 C++进阶:set和map
set是key搜索场景的结构, map是key/value搜索场景的结构。它们的底层都是红黑树,红⿊树是⼀颗平衡⼆叉搜索树。
2024-09-27 18:27:31
683
17
原创 C++进阶:二叉搜索树
另外,⼆分查找也可以实现O(logN) 级别的查找效率,但是⼆分查找有两⼤缺陷:1. 需要存储在⽀持下标随机访问的结构中,并且有序。2. 插⼊和删除数据效率很低,因为存储在下标随机访问的结构中,插⼊和删除数据⼀般需要挪动数 据。 这⾥也就体现出了平衡⼆叉搜索树的价值。
2024-09-16 20:27:23
1229
16
原创 C++进阶:多态
• 对不满⾜多态条件(指针或者引⽤+调⽤虚函数)的函数调⽤是在编译时绑定,也就是编译时确定调⽤函数的地址,叫做静态绑定。• 满⾜多态条件的函数调⽤是在运⾏时绑定,也就是在运⾏时到指向对象的虚函数表中找到调⽤函数的地址,也就做动态绑定。
2024-09-14 13:22:32
922
16
原创 C++进阶:继承
继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许我们在保持原有类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称派⽣类。
2024-09-12 11:34:10
1116
16
原创 C++初阶:stack&queue&deque
但是,deque有一个致命缺陷:不适合遍历,因为在遍历时,deque的迭代器要频繁的去检测其是否移动到某段小空间(缓冲区)的边界,导致效率低下,而序列式场景中,可能需要经常遍历,因此在实际中,需要线性结构时,大多数情况下优先考虑vector和list,deque的应用并不多,而目前能看到的一个应用就是,STL用其作为stack和queue的底层数据结构。
2024-09-07 17:13:24
661
14
原创 C++初阶:list
(1)这里的list迭代器的实现不再是简单的原生指针,而是对原生指针进行了一层封装,使它更符合迭代器的行为(2)这里多加两个模板参数,主要是 * -> 两个操作符重载访问Node里面的内容。如果调的是const_iterator,那么返回的就是const指针(const修饰指针指向的内容不可修改)或引用如果调用普通的iterator,返回普通指针或引用。(3)这样通过模板编译器其实还是会生成两个类,减少了重复的代码(4)list的迭代器不是随机迭代器,而是双向迭代器。
2024-08-08 22:04:04
658
24
原创 C++初阶:vector
vector和我们之前学的顺序表的结构是差不多的,用一个动态开辟的数组来储存管理数据。vector的底层和顺序表有点区别。(后续会讲到)
2024-08-02 13:34:52
870
6
原创 C++初阶:string
C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列 的库函数,但是这些库函数与字符串是分离开的,不太符合OOP:面向对象编程(Object-Oriented Programming,简称OOP)的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。
2024-07-27 00:01:45
724
14
原创 C++初阶:动态内存管理
1. 栈(stack)又叫堆栈--非静态局部变量/函数参数/返回值(数据,地址)等等,栈是向下增长的。2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口 创建共享共享内存,做进程间通信。3. 堆(heap)用于程序运行时动态内存分配,堆是可以上增长的。4. 数据段(静态区)--存储全局数据和静态数据,程序结束后由系统释放。5. 代码段--可执行的函数(类成员函数和全局函数)二进制代码/只读常量。
2024-07-21 22:29:44
744
10
原创 C++初阶:类和对象(三)
初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成 员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。
2024-07-18 22:12:02
983
11
原创 C++初阶:类和对象(二)
默认成员函数就是用户没有显式实现,编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认⽣成以下6个默认成员函数
2024-07-15 17:08:08
1026
13
原创 C++初阶:从C过渡到C++的入门基础
定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不再冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所以有了域隔离,名字冲突就解决了。
2024-07-09 00:11:05
921
13
基于C语言开发的《贪吃蛇双人版》小游戏
2024-04-28
基于C语言开发的贪吃蛇小游戏
2024-04-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人