- 博客(28)
- 收藏
- 关注
原创 死锁、线程同步、生产者消费者模型、线程池
死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。
2024-08-02 09:36:52
356
原创 Linux多线程
线程的概念:在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”1.一切进程至少都有一个执行线程2.线程在进程内部运行,本质是在进程地址空间内运行3.在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化4.透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。
2024-07-27 17:34:38
934
原创 Linux 进程僵尸、孤儿进程、进程等待
进程的僵尸状态是指当进程退出时并且父进程没有读取子进程退出的返回代码就会产生僵尸状态,僵尸进程会以终止状态一直保持在进程表中,并且会一直等待父进程读取退出状态代码。若父进程一直不读取子进程的状态,使子进程一直保持僵尸状态,就会导致资源无法回收,可能导致内存泄露。孤儿进程是指父进程比子进程先一步退出,导致子进程变成“孤儿状态”,这时子进程被一号进程init进程收养,父进程变为init进程,然后退出时被init进程回收。之前讲过,子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。
2024-07-10 17:33:01
200
1
原创 C++11
在C++98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义的类型,使用初始化列表时,可添加等号(=),也可不添加。创建对象时也可以使用列表初始化方式调用构造函数初始化。
2024-03-30 14:41:48
343
原创 位图和布隆过滤器
所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。位图可以快速查找某个数据是否在一个集合中,还能求两个集合的交集、并集等。
2024-03-26 22:44:19
454
原创 unordered_map和unordered_set的模拟实现
哈希表是一种根据关键字(键)直接访问存储位置的数据结构。它通过哈希函数将键映射到哈希表中的索引位置。哈希函数接受一个键作为输入,并输出对应的索引。这样,我们可以在常数时间内(O(1))访问和查找元素。
2024-03-22 12:14:15
327
1
原创 map和set
在之前的学习中,我们接触了STL中的部分容器,比如:vector,list,deque,这些都是序列式容器,下面将要介绍的是关联式容器map和set,与序列式不同的是,关联式容器里面存储的是**<key, value>**结构的键值对,在数据检索时比序列式容器效率更高。
2024-02-29 23:01:49
610
原创 二叉搜索树
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值2.若它的右子树不为空,则右子树上所有节点的值都大于根节点的值3.它的左右子树也分别为二叉搜索树。
2024-01-30 17:26:31
322
1
原创 多态 C++
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。**虚函数:**即被virtual修饰的类成员函数称为虚函数(覆盖):派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全相同),称子类的虚函数重写了基类的虚函数。虚函数重写的两个例外:1.协变(基类与派生类虚函数返回值类型不同) 了解即可2.理解。
2024-01-29 20:58:04
934
原创 继承 C++
定义:两个子类继承同一个基类,然后一个子类同时继承这两个子类。问题:数据冗余和二义性解决方法:虚继承在实际中一定不要设计出菱形继承,否则在复杂度上及性能上都有问题。
2024-01-28 17:01:56
293
原创 适配器及反向迭代器的理解
C++中的适配器模式借助一个类的接口将一个类转换为用户想要的类,类似手机充电线上的电源适配器,能够将插座上的电压功率转换为手机充电时需要的电压功率。C++中经典的容器适配器就是stack和queue,这两个并不是容器,这是因为stack和queue只是对其他容器的接口进行了包装,STL中stack和queue默认使用deque这个容器进行包装的。
2024-01-24 19:43:19
388
原创 String类模拟实现
这个函数是将一个字符插入到字符串对应的位置中,或者将一个字符串插入到对应的位置中,设计思想都是将pos后面的字符向后挪,如果是插入字符则挪一位,如果是插入字符串则挪字符串的长度位。上面第一个现代写法的原理是参数s是一个临时拷贝对象,通过swap函数将s与当前string对象交换,然后返回当前string对象,由于s是临时变量,出作用域就会自动销毁。这个函数是从pos位置开始寻找,返回子串在字符串中出现的第一个位置或者返回字符在字符串中出现的第一个位置。这个函数将一个字符串尾插到string对象中。
2023-12-19 20:31:48
345
原创 C++函数模板与内存管理
定义:若一个程序的功能是对某种特定的数据类型进行处理,则将所处理的数据类型说明为参数,就可以把这个程序改写成模板,模板可以让程序对任何其他数据类型进行同样方式的处理。C++程序由类和函数组成,模板也分为类模板(class template)和函数模板(function template)。因此,可以使用一个带多种不同数据类型的函数和类,而不必在意数据类型的各种情况。
2023-12-02 18:49:04
398
1
原创 Linux环境搭建及常见指令
Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。严格来讲,Linux只是操作系统内核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统,它包括GUI组件和许多其他实用工具。Linux发行了许多版本,例如Debian、Ubuntu、CentOS、Fedora、Kali Linux等。
2023-10-27 19:55:59
240
1
原创 排序知识点
在进行最大值和最小值的交换时也会出现一个问题,如果最大值在起始位置,最小值与之交换的话,最大值的下标就是错误的,会导致最小值被交换到末端位置。思想:第一次从待排序序列中选出最小的和最大的分别按照排序方式放在序列起始和末端位置,然后选出次小的和次大的,重复这个过程直到待排序的数据全部排完。思想:选定一个基准值(一般来说取最左边的元素),将比它小的数据放到它的左边,比它大的数据放到它的右边,这时基准值所在位置就是排序后的正确位置。思想:统计相同元素出现的次数,然后根据统计的结果将序列放回到原来的序列中。
2023-10-15 13:02:03
47
1
原创 栈和队列知识点
int top;//记录栈顶的标号//记录栈的容量}ST;队列的初始化入队列出队列求队列的头一个元素求队列的尾元素求队列的元素个数队列的销毁判断队列是否为空//指向下一个节点//节点存储的数据}QNode;//定义队列中的节点//头节点//尾节点}Queue;
2023-09-24 23:38:24
65
1
原创 CINTA第一次作业
因为0<r2-r1<b,q1-q2>=1,所以(r2-r1)/(q1-q2)<b,与b=(r2-r1)/(q1-q2)矛盾。显然,集合 S 非空。由良序原则,存在一个最小元 r ∈ S,且 r = a − qb。因为0<=r1<b,0<=r2<b,r1<r2;所以0<r2-r1<b.若r>=b,则可设r=b+m,其中m ∈ Z。因为q1,q2为整数,q1>q2;1.用 C 语言编程实现一种迭代版本的简单乘法。=(q+1)b+m。3.用 C 语言编程实现一种迭代版本的。迭代版本egcd算法。
2023-09-19 16:19:13
104
1
原创 信息安全数字基础
包含近世代数、数论、数理逻辑部分。近世代数部分侧重于定义需要用到的概念和判别条件、数论部分侧重于各概念所引出的奇特性质和一些密码学算法、数理逻辑部分侧重思维模式的培养。“工欲善其事,必先利其器”,学好这一数学基础课程,才可以在未来密码学的学习中更加得心应手。暑假期间我通过b站视频稍微了解了本课程中的群,环,域等相关的定义,这些定义非常多,而且感觉很抽象,这让我对这门课程产生了一些畏惧心理,但正如上文所说,只有学好这门基础课程,未来密码学的学习才能更加得心应手,所以即使这门课很难,我也会尽我所能将它学好。
2023-08-21 18:11:43
104
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅