- 博客(26)
- 收藏
- 关注
原创 Linux——消息队列
消息队列是一种用于在应用程序之间传递和存储数据的通信机制。它允许应用程序将消息发送到队列中,然后由另一个应用程序从队列中接收和处理这些消息。消息队列可以有效地实现异步通信、解耦应用程序之间的依赖关系,以及实现消息的持久化和顺序处理。常见的消息队列系统包括RabbitMQ、Kafka、ActiveMQ等。消息队列在现代分布式系统和微服务架构中被广泛应用。
2025-04-16 18:46:16
332
原创 算法——希尔排序
希尔排序是一种基于插入排序的排序算法,也被称为缩小增量排序。它通过将待排序的数组分割成若干个子序列,对子序列进行排序,然后逐步合并这些子序列,最终得到一个有序的数组。希尔排序的特点是可以通过设置不同的增量序列来改变算法的效率,通常选择的增量序列是经过优化的递减数列。希尔排序的时间复杂度取决于增量序列的选择,通常为O(n log n)到O(n^2)之间。这种排序算法由Donald Shell于1959年提出并命名。
2025-04-16 15:19:50
151
原创 算法——直接插入排序
直接插入排序是一种简单直观的排序算法,其基本思想是将一个元素插入到已经排好序的部分数组中,使得插入后的数组仍然保持有序。具体实现时,从第二个元素开始依次将元素插入到已排序部分的合适位置,直到所有元素都被插入完成,从而达到排序的目的。简而言之,每一趟从待排序序列中取第一个值,将其插入到已排序好的序列,对已排序好的序列,从右向左依次和待插入值比较,如果大于则向后挪动,如果发现了一个小于等于插入值的值,或者触底,则插入到其后。
2025-04-16 15:04:26
81
原创 数据结构——布隆过滤器
布隆过滤器是一种空间效率高、适合快速检索的数据结构,用于判断一个元素是否可能存在于一个集合中。它通过使用多个哈希函数和一个位数组来表示集合中的元素。当一个元素被加入到布隆过滤器中时,会通过多个哈希函数计算出多个哈希值,并在对应的位上标记为1;当判断一个元素是否在集合中时,同样会通过多个哈希函数计算出多个哈希值,并检查对应位的值,只有当所有哈希值对应的位都为1时,才会判断可能存在于集合中。布隆过滤器具有较高的空间效率和查询速度,但也存在一定的误判率,即可能将不在集合中的元素误判为存在于集合中。
2025-04-15 22:08:57
812
原创 Linux——共享内存
这样的内存区域被所有共享它的进程所拥有,进程可以将数据写入共享内存区域,也可以从中读取数据。3. shmflg: 用于指定创建共享内存段的访问权限和其他标志,比如权限位和内存段的创建方式等。1. key: 用于标识共享内存段的键值,不同的进程使用相同的 key 值可以获取到同一个共享内存。用于将共享内存段附加到调用进程的地址空间,并返回一个指向共享内存段起始地址的指针。结构体的指针,用于存储或传递共享内存段的状态信息或权限设置。函数的返回值是一个指针,指向共享内存段的起始地址。
2025-04-15 21:51:26
651
原创 Linux——信号量
信号量是一种用于同步多线程或进程之间的机制,用于控制对共享资源的访问。信号量可以用来保护临界区,防止多个线程同时访问某个共享资源导致数据不一致或竞争条件的发生。
2025-04-15 19:18:36
453
原创 Linux——管道
管道通信是指在计算机系统中,通过创建一个在两个进程之间传递数据的管道来进行进程间通信的方式。其中一个进程将数据到管道中,另一个进程则从管道中数据。管道通信可以实现进程之间的数据传输,常用于进行通信。管道通信通常实现在Unix和类Unix系统中。
2025-04-15 16:00:27
338
原创 哈希扩展——一致性哈希
一致性哈希是一种哈希算法,用于将数据分布到不同的节点或存储区域,而保持数据的一致性和均衡性。在分布式系统中,一致性哈希通常用于解决负载均衡和数据分布的问题。一致性哈希的基本原理是将数据的键通过哈希函数映射到一个固定的哈希空间中。然后,将这个哈希空间分布到环形的哈希环上。每个节点或存储区域在哈希环上占据一个位置,称为虚拟节点或者物理节点。当需要存储或查找数据时,通过哈希函数计算数据的哈希值,并沿着哈希环顺时针寻找距离最近的节点。
2025-04-14 21:55:02
800
原创 算法——基于C语言的基数排序
基数排序是一种非比较排序算法,它将整数按照个位、十位、百位等位数进行排序。基数排序的主要思想是先按照最低位进行排序,然后依次按照高位进行排序,直到最高位,从而得到最终有序的序列。基数排序的时间复杂度为O(d*(n+r)),其中d为最大位数,n为元素个数,r为基数(0-9为10进制时r为10)。基数排序适用于位数较小、取值范围较小的整数排序,但对于位数较大的数字或负数排序则不太适用。
2025-04-12 15:04:51
266
原创 Linux——信号
例如,当用户按下Ctrl+C键发送中断信号给一个运行中的进程时,该进程会收到SIGINT信号,通常会导致进程终止。kill函数的两个参数中,第一个参数pid代表的是给哪个进程发送,这个进程的pid号;和上次不同的是调用fun函数后会执行默认的代码,然后接收到默认的信号,按Ctrl+C会打印出信号的编号,在下一次执行的时候按Ctrl+C就会结束程序。信号处理函数是一个用户自定义的函数,当进程接收到信号时,会调用该函数。时,程序不会终止,而是会捕获SIGINT信号,并调用fun函数打印出信号的编号。
2025-04-10 21:34:43
765
原创 Linux——进程替换(exec)
进程替换是指在操作系统中,一个正在运行的进程被另一个进程所替代的过程。:为了实现多道程序设计,一个进程在执行时可能需要被挂起,让其他进程获得执行机会。进程替换可以实现这种切换,确保系统中有多个进程在运行。:在内存资源有限的情况下,为了最大程度地利用内存,操作系统可能需要对进程进行替换,将某些进程从内存中移除,以便为其他进程腾出空间。:有时候,某个进程可能因为某种原因而无法继续执行,此时可以通过替换该进程来维持系统的正常运行,并且提高整体系统的性能。:一些应用程序需要在运行过程中动态地加载新的代码或数据。
2025-04-10 12:37:43
855
原创 数据结构——哈希技术及链地址法
哈希(Hash)是一种将任意长度的输入数据通过哈希算法转换成固定长度(通常是固定长度的字符串)输出的过程。哈希算法通常会将输入数据映射为一个固定长度的字符串,这个字符串通常称为哈希值或摘要。也就是说,我们只需要通过某个函数f ,使得存储位置=f(关键字),那么我们可以通过查找关键字不需要比较就可以获得需要记录的存储位置。输入数据相同,输出的哈希值必定相同。不同的输入数据,哈希值是独立的,即不会有冲突。哈希值的长度是固定的,不会随输入数据的长度变化而变化。
2025-04-10 12:07:51
711
原创 Linux——僵死进程及地址空间
当fork一个新进程的时候,子进程一般会和父进程同时运行。当子进程结束的时候,它与父进程的关联还会保持,直到父进程也正常终止或者wait,子进程才结束。因此,进程中代表子进程的表项不会立即释放。虽然子进程已经不能正常运行,但是它仍然存在于系统之中,因为它的退出码还要保存起来,以备父进程今后的wait调用使用。这种情况我们称已经结束了但是还不能释放的子进程为僵尸进程。简而言之,就是子进程先于父进程结束,父进程没有获取子进程的退出码,那么子进程就变成僵死进程。
2025-04-01 13:11:13
827
原创 数据结构——循环队列
循环队列是一种基于数组的队列实现方式,它通过在数组中固定的位置上循环使用空间来实现队列的功能。循环队列有一个固定的容量,当队列满时,新元素可以覆盖掉队列头部的元素,从而实现循环利用空间。循环队列有两个指针,一个指向队列头部,一个指向队列尾部,通过这两个指针的移动,实现队列的入队和出队操作。循环队列解决了普通队列在出队操作时需要移动大量元素的问题,使得入队和出队的时间复杂度都为O(1)。
2025-03-25 22:15:05
674
原创 数据结构——链栈
链栈是一种使用链表实现的栈。链栈不同于数组实现的栈,链栈的元素没有固定的位置,它们通过指针连接在一起。链栈通常由一个头节点和若干个数据节点组成,每个数据节点包含一个数据元素和一个指向下一个节点的指针。在链栈中,栈顶元素始终位于链表的头部,入栈和出栈操作都是在链表头部进行的。动态扩展:由于链栈使用链表实现,可以根据需要动态地增加或减少存储空间。灵活性:链栈的元素没有固定位置,可以随时插入或删除元素,不会浪费空间。容量受限于内存:链栈的容量受限于内存大小,可以根据需要存储大量元素。
2025-03-25 17:22:58
503
原创 Linux——进程的基本概念及fork
在调用fork函数之前,只有一个进程(父进程),当这个进程调用fork函数之后,fork函数会复制一个进程(子进程),区别是PID不同,它们的关系是父子关系。fork函数会返回两次值:给父进程返回子进程的pid。给子进程返回0。失败时,在父进程中返回-1,不创建子进程,并且errno被适当地设置。代码实现如下:通过vi/vim命令创建一个文件main.c57 {8 int n=0;20 }
2025-03-21 19:59:19
825
原创 物理内存和虚拟内存
虚拟内存是计算机操作系统中的一种技术,它允许程序能够访问比实际物理内存更大的地址空间。通过虚拟内存,操作系统可以将磁盘上的一部分空间作为虚拟内存空间来扩展实际的物理内存。当程序运行时,它只能看到和操作虚拟内存空间,而不需要了解实际的物理内存情况。虚拟内存技术的一个重要功能是将物理内存中暂时不需要的数据移动到磁盘上,从而释放物理内存以供其他程序使用。这种技术有效地提高了系统的整体性能和稳定性。
2025-03-21 17:23:00
727
原创 Linux——cat命令
cat是一个在Unix和类Unix操作系统中用于连接文件、创建文件以及输出文件内容的命令行工具。cat命令的主要功能包括:查看文件内容:使用cat命令可以查看文件的内容,只需输入cat 文件名即可在终端输出文件的全部内容。cat命令还可以将多个文件的内容连接起来,形成一个新的文件。例如,会将文件1和文件2的内容连接起来保存为新文件。(“>”代表重定向)创建文件:可以使用cat命令来创建新文件并输入内容,例如cat > 文件名,然后输入内容并按Ctrl+D保存退出。附加文件内容:使用cat。
2025-03-20 20:18:37
191
原创 Linux——vi命令
vi 用来进入,vi 编辑器是所有 Unix 及 Linux 系统下标准的,它的强大不逊色于任何最新的文本编辑器。vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用vi / vim 文本编译工具 ,比较像Windows里面的记事本。
2025-03-20 11:44:30
716
原创 Linux——基础命令
sudo su 切换管理员模式exit 退出管理员模式cd 切换路径ls 显示当前位置有哪些文件pwd 显示当前位置touch 创建普通文件mkdir 创建目录文件clear 清屏rm 删除rm -r*删除所有文件rm -r删除目录文件或文件夹cp 拷贝 cp -r dir1 dir2 拷贝dir1到dir2中(目录文件)如果dir2中本来就有dir1就会覆盖掉文件不想要覆盖cp a.py dir/b.py 改名为b.pymv。
2025-03-19 06:45:32
593
原创 Linux——安装虚拟机
1、搜索VMware workstation找到官网下载最新版VMware,或者直接点击下列链接进入下载界面2、下滑选择下载版本(以windows举例)3、下载完成后得到如下安装包。
2025-03-19 06:32:49
988
原创 数据结构——顺序栈
顺序栈是一种基于数组实现的栈结构,其特点包括:栈元素只能从栈顶入栈和出栈,即后进先出(LIFO)的特性。在顺序栈中,栈顶指针始终指向栈顶元素的位置。插入和删除操作的时间复杂度都是O(1)。适用场景:当需要快速对数据进行入栈和出栈操作时,顺序栈是一个较为高效的数据结构。在需要实现逆序操作的场景下,可以使用顺序栈来实现。总的来说,顺序栈适用于需要高效的入栈和出栈操作,并且对于存储元素个数有一定预估的情况下。
2025-03-19 06:06:30
1035
原创 数据结构——双向链表dlist
双向链表是一种链表数据结构,其每个节点包含两个指针域,分别指向前一个节点和后一个节点,这使得双向链表可以在任意位置插入或删除节点,而不需要像单向链表那样需要遍历整个链表找到目标位置。这种结构允许双向遍历,即可以从前向后或从后向前访问链表中的节点。由于每个节点包含两个指针域,所以双向链表通常比单向链表占用更多的内存空间。
2025-03-19 03:56:01
875
原创 数据结构——单循环链表clist
单循环链表的定义单循环链表是单链表的一种特殊形式。单链表中,每个节点包含数据域和指向下一个节点的指针域,链表的最后一个节点的指针域指向 None。而单循环链表中,最后一个节点的指针域不再指向 None,而是指向链表的头节点,形成一个首尾相连的环。单循环链表的特点优点①循环访问:可以从任意节点开始,沿着链表循环遍历所有节点。这在一些需要周期性操作的场景中非常有用,因为无需每次都从头节点开始遍历。②插入和删除操作灵活:在已知某个节点。
2025-03-19 02:55:08
562
原创 数据结构——单链表LinkList
单链表(LinkList)只需要数据域和一个指针域。数据域的类型是待存储数据的类型,这里为了使链表更具有普遍性,则使用typedef对类型重命名。指针域要存放的是下一个节点的地址,因此它的类型是一个结构体类型的指针,对于结构体指针也需要重命名,将Node* 重命名为*PNode。//单链表有效结点的结构体设计//数据域(存储有效数据)//指针域(存储下一个有效结点的地址)
2025-03-19 00:58:29
665
原创 线性表的顺序存储结构——可扩容的顺序表
线性表的顺序储存又称顺序表概念:用一组地址连续的存储单元依次存储线性表中的数据元素的线性表。特点:表中的元素逻辑顺序和物理顺序相同。2. 顺序表的优缺点及适用场景优点:1.空间利用率高2.支持随机访问3.尾部插入或删除效率极高缺点:1.头插、按位置插入或删除(搬动数据)2.增容代价比较大适用场景:适用于需要大量随机访问操作,并且增加/删除数据操作较少,或者就算操作多也是在尾部进行。
2025-03-18 22:28:45
720
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人