- 博客(129)
- 收藏
- 关注
原创 C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数
C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数
2024-09-09 15:02:48 691 8
原创 基于信号量和环形队列的生产者消费者模型
POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但POSIX可以用于线程间同步。信号量的本质是一个计数器。环形队列在物理结构上是一个线性结构,逻辑结构我们可以认为是一个环形结构。环形队列有一头一为,头部进行取数据,尾部进行放数据,最开始指向同一个位置。
2024-08-27 12:02:45 866 11
原创 红黑树(RBTree)
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。
2024-08-21 10:40:46 596 12
原创 基于BlockingQueue的生产者消费者模型
在多线程编程中阻塞队列(Blocking Queue)是一种常用于实现生产者和消费者模型的数据结构。其与普通的队列区别在于,当队列为空时,从队列获取元素的操作将会被阻塞,直到队列中被放入了元素;当队列满时,往队列里存放元素的操作也会被阻塞,直到有元素被从队列中取出(以上的操作都是基于不同的线程来说的,线程在对阻塞队列进程操作时会被阻塞)
2024-08-20 10:37:31 760 6
原创 线程同步-条件变量
每一个线程在访问临界资源时,有一定的顺序性,这称之为线程的同步。这里的顺序性可以是严格的顺序性,也可以是宏观上的具有相对顺序性。
2024-08-17 15:47:23 649
原创 详谈平衡二叉搜索树(AVL树)
二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。
2024-08-16 16:05:04 815 13
原创 再谈表的约束
当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。关于唯一键和主键的区别:我们可以简单理解成,主键更多的是标识唯一性的。在从表中插入班级id为1和2都是可以的,但是插入的班级id为3,由于外键约束,导致插入失败。唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。
2024-08-13 16:44:49 563
原创 map和set的使用
关于set的文档介绍Tset中存放元素的类型,实际在底层存储的键值对。Compareset中元素默认按照小于来比较Allocset中元素空间的管理方式,使用STL提供的空间配置器管理关于multiset文档介绍Multimaps是关联式容器,它按照特定的顺序,存储由key和value映射成的键值对,其中多个键值对之间的key是可以重复的。在multimap中,通常按照key排序和惟一地标识元素,而映射的value存储与key关联的内容。key和value的类型可能不同,通过multimap。
2024-08-12 21:01:53 843 2
原创 线程ID与互斥
此时线程B来了,线程B读到寄存器中的值,为1,进行逻辑运算,为真,继续执行,将票数减一,此时票数变成0,将0返回到内存中,然后线程B被切出去了。线程A被切回来了,由于A线程刚刚将票数为1存到寄存器中,认为还有票,继续执行逻辑运算,执行抢票过程,但是在打印抢票数据的时候,会重新在内存中读取票数,此时内存中的票数已经被线程B修改成0,那么线程A打印出来的票数就是0,接下来线程A对票数进行减减操作,还是先去内存中读取票数,然后完成减减操作,变成-1,然后将-1写入到内存中。
2024-08-12 14:42:56 736 1
原创 二叉搜索树
一句话总结就是,左子树比根小,右子树比根大,每个树都要满足这个特征。,相同,没有意义,默认定义,搜索树不允许有冗余。对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二。树刚开始就为空,那么根节点就是空的,我们只需要在根节点开辟一个节点,存放。a、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。b. 树不空,按二叉搜索树性质查找插入位置,插入新节点。b、最多查找高度次,走到到空,还没找到,这个值不存在。叉搜索树的深度的函数,即结点越深,则比较次数越多。
2024-08-08 10:04:34 719 8
原创 C++多态
不同的对象去做同一件事,展现出多种形态,结果不一样。多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。Student继承了Person。Person对象买票全价,Student对象买票半价。父子类完成虚函数重写(函数名、参数、返回值相同),子类虚函数重写了虚函数父类的指针或者引用去调用虚函数从而满足指向谁调用谁的虚函数。虚函数:即被virtual修饰的类成员函数称为虚函数是多少?
2024-08-06 10:01:10 833 3
原创 初谈表的约束
约束本质是通过技术手段,倒逼程序员插入正确的数据,反过来站在MySQL的视角,凡是插入进来的数据,都是符合数据约束的。真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。属性的作用,如果宽度小于设定的宽度(这里设置的是10),自动填充0。默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。如果设置了,用户将来插入,有具体的数据,就用用户的,没有就用默认的。
2024-08-03 14:31:31 845
原创 C++中的继承与派生类
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。public:protected:// 姓名// 年龄protected:int _stuid;// 学号protected:int _jobid;// 工号int main()
2024-07-22 16:48:07 672 4
原创 Linux信号的保存和处理
未决和阻塞标志可以用相同的数据类型sigset_t来存储,sigset_t称为信号集,这个类型可以表示每个信号的“有效”或“无效”状态,在阻塞信号集中“有效”和“无效”的含义是该信号是否被阻塞,而在未决信号集中“有效”和“无效”的含义是该信号是否处于未决状态。CPU不会和键盘等外设打交道,键盘通过芯片会向CPU发送一个硬件中断(是硬件结构),键盘有自己的中断号,键盘会给CPU的针脚发送高电平,此时CPU就会读取中断号,将中断号放在寄存器中,中断号就会变成寄存器中的数据,完后就可以用软件来操作。
2024-07-19 20:12:15 1101 4
原创 MySQL库操作、表操作
在关系型数据库中,通常会涉及到两个层次的操作:数据库(Database)和表(Table)的操作。本文简要介绍一下它们的基本概念和操作方法
2024-07-18 17:28:37 1052 7
原创 【动态规划2】路径问题
动态规划在解决路径问题时非常常见,特别是在图论和网络优化问题中。一般来说,动态规划用于解决那些具有重叠子问题和最优子结构性质的问题。路径问题通常涉及找到从起点到终点的最佳路径,可以是最短路径、最长路径或者满足特定条件的路径等。那么可能会问,为啥不用深度搜索呢?因为深度搜索有时候会超时,因此用动态规划。在动态规划不同路劲问题中,遇到的数组大部分可能是一个二维数组,因为是在图中。下面是小编在做动态规划时,总结的一些关于不同路劲的一些习题思路,仅供参考,如有误,请指出!!
2024-07-17 21:43:54 610 3
原创 初谈Linux信号-=-信号的产生
在Linux中,信号是一种进程间通信的方式,用于向进程发送各种事件的通知。信号的产生:信号可以由多种方式产生,包括硬件中断、软件异常、用户输入、其他进程发送等。常见的信号产生的方式包括按下Ctrl+C键产生的SIGINT信号、按下Ctrl+\键产生的SIGQUIT信号、定时器到期产生的SIGALRM信号等。信号的类型:Linux提供了多种信号,每个信号用一个整数来表示。常见的信号类型包括SIGINT(中断信号)、SIGQUIT(退出信号)、SIGKILL(终止信号)
2024-07-17 18:24:10 790
原创 Linux进程通信--共享内存
共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。共享内存消息队列信号量。
2024-07-15 15:28:31 1115 12
原创 C++模板初阶
模板是C++语法一个特别大的精华,是一种强大的泛型编程工具,它允许编写通用的代码,以处理各种数据类型而无需重复编写多个特定类型的函数或类。
2024-07-14 11:25:14 866 2
原创 C++内存管理
int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;
2024-07-13 16:31:31 556 1
原创 【动态规划1】斐波那契数列模型篇
动态规划简称DP,核心思想是将原问题分解为相互重叠的子问题,通过解决这些子问题来解决原问题。在解决每个子问题后,将其解存储起来,避免重复计算,以提高效率。最优化问题:如最长路径、最小代价等问题组合优化问题:如背包问题、切割问题等路径规划问题:如最短路径、最小生成树等序列匹配问题:如字符串匹配、子序列匹配等通常情况下,使用动态规划来解决问题需要满足以下几个条件:最优子结构:问题的最优解包含了其子问题的最优解。换句话说,通过求解子问题可以得到整体问题的最优解。
2024-07-12 12:01:03 1118 3
原创 数据库基础
数据库:一般指的是在磁盘或者内存中存储的特定结构组织的数据,是在磁盘上存储的一套数据库方案,因此数据库存储的介质为磁盘或者内存。存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。数据库的本质是对数据内容存储的一套方案,给数据库字段或者要求,客户端/数据库文件直接给你结果。为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。mysql是一个网络进程,对应的mysqld是这个网络服务的后端。是数据库服务的服务器端。
2024-07-11 16:46:33 326 3
原创 优先级队列
priority_queue文档介绍优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭代器访问。
2024-07-11 11:20:51 702
原创 计算机网络课程实训:局域网方案设计与实现(基于ensp)
公司有公司总部,另有两个分公司,申请到22.22.22.0/27,网关22.22.22.1的公网IP地址,总部大约有10台内部服务器,5台财务服务器,100名员工,20名财务人员;接口GigabitEthernet 0/0/4被设置为访问模式,并且默认属于VLAN 10,这意味着连接到这个接口的设备将属于VLAN 10。在某些交换机上,接口默认可能是关闭的,需要手动开启。1、 总部、分公司1和分公司2的员工和财务人员使用的计算机分别有独立的广播域,内部服务器和财务服务器也有独立的广播域。
2024-06-25 16:44:18 2053 13
原创 栈和队列(适配器模式模拟)
stack文档介绍stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类。
2024-06-12 16:09:55 1059 9
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人