- 博客(160)
- 收藏
- 关注
原创 数据库(考前两天版本)
一个病房只能属于一个科室,一个病房可以住多个病人,一个病人只能住一个病房,一个医生也只能属于一个科室,但可以负责多个病人的治疗,一个病人的主治医生只有一个。如果扣钱后系统崩溃,未加钱,数据库会 “回滚” 到扣钱前的状态,确保 A 和 B 的总金额不变(一致性)。◦ 你正在修改工资表中的数据,同事同时查询该表,看到的是你修改前的 “干净数据”,不会看到中间错误状态。:删除表中的数据(如 “清空学生表”),但表还在(像清空 Excel 表格内容)。,数据独立,减少数据冗余,避免数据不一致和加强数据保护。
2025-06-18 19:56:23
396
原创 MYSQL数据类型
说明:在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。可以通过UNSIGNED来说明某个字段是无符号的无符号案例注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。
2025-06-17 20:24:21
707
原创 数据库选填重点
1.数据库系统的核心:数据库管理系统2.数据库系统中,物理独立性是指应用程序与存储在磁盘上数据库的物理模式是相互独立的3.数据库系统的特点是数据共享,数据独立,减少数据冗余,避免数据不一致和加强数据保护4.数据库管理系统能实现数据查询,插入和更新等操作的数据库语言称为数据操纵语言5.数据库是长期存储在计算机内的有组织,可共享的数据集合6.子模式DDL用来描述数据库的局部逻辑结构1.在关系数据库设计中,设计关系模式是逻辑设计阶段的任务2.从E-R图模型关系向关系模型转换时,一个M:N联系转换关系模式时,该关系
2025-06-17 10:09:52
165
原创 MySQL数据库基础(重点)
1.是数据库服务的2.是数据库服务的3.mysql:基于C(mysql)S(mysqld)模式的一种mysql是一套提供数据存取的服务的网络程序,那么就是在磁盘或内存中存储的特定结构的数据,将来在磁盘上存储的一套数据库方案数据库服务就是mysqld一般的文件确实提供了非常好的数据的存储功能,但是文件并没有非常好的数据管理能力,从用户的角度看数据库的本质:对数据内容存储的一套解决方案,你给我们字段或要求,我直接给你结果就行注意如果没有写 -h 127.0.0.1 默认是连接本地。
2025-06-14 19:08:14
305
原创 数据库期末
1.数据库的定义(P3)数据库(Database,DB)是一个按照数据结构来存储和管理数据的计算机软件系统。2.(P5),是专门用于管理数据库的计算机系统软件3.(P7)计算机硬件,数据库,数据库管理系统(),数据库应用系统和数据管理员4.(P11-P13)1)数据库系统以数据模型为基础2)数据库系统的数据冗余度小,数据共享度高3)数据库系统的数据和程序之间有较高的独立性4)数据库系统通过DBMS进行数据安全性和完整性的控制5)数据库中最小存取单位是数据项。
2025-06-14 15:51:43
438
原创 单源最短路径问题的相关总结
什么是单源最短路,就是图中一个顶点到其他各个顶点的最短路径在学习搜索中,有两种也是解决单源最短路径的,分别是bfs和01bfs普通的深度优先搜索算法只能解决边权全部相同且非负的最短路;01bfs只能解决边权要么为0,要么为1的情况。
2025-03-16 15:46:15
365
原创 搜索算法(随笔版)
搜索,也叫暴力搜索,是指通过穷举所有的情况来得到最优解,或者统计合法解的个数。DFS和BFS,一般是这两种,深度优先搜索和宽度优先搜索,遍历是形式,我们搜索才是主要的目的回溯和剪枝来说,回溯相当于补妆南墙不回头,剪枝类似于修剪盆栽就是要最优化,去掉不利因素,如重复出现或不是最优解的情况。
2025-03-06 20:54:15
327
原创 基础IO(2)
缓冲区是内存空间的⼀部分。也就是说,在内存空间中预留了⼀定的存储空间,这些存储空间⽤来缓冲输⼊或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输⼊设备还是输出设备,分为输⼊缓冲区和输出缓冲区。
2025-01-28 20:10:37
1308
4
原创 红黑树的实现
红⿊树是⼀棵⼆叉搜索树,他的每个结点增加⼀个存储位来表⽰结点的颜⾊,可以是红⾊或者⿊⾊。通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束,红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍,因⽽是接近平衡的。
2025-01-25 18:53:05
1130
原创 哈希表实现
哈希(hash)⼜称散列,是⼀种组织数据的⽅式。从译名来看,有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进⾏快速查找。
2025-01-25 16:56:56
635
37
原创 第一个C++程序--(蓝桥杯备考版)
在C语⾔中,使⽤单引号括起来⼀个字符,表⽰字符字⾯值,⽐如: 多个字符表⽰⼀个字符串,⽐如: “abcdef” , ‘1’ , ‘a’ ,使⽤双引号括起来 “hello world” ,字符串中可以有⼀个或者多个 字符,也可以没有任何字符, “” 表⽰空字符串。⼀个学校⾥学⽣可能有重名,假设这个学校有3个叫张三的同学,那么每次⽼师喊张三的时候,其他 两个张三就会误会,是不是在喊⾃⼰,这就是因为这三个张三其实在同⼀个范围(空间)内的,就会 名字的冲突。上⾯代码中的 “hello world!
2024-12-11 20:22:05
2073
53
原创 二叉树的深搜(不定期更新。。。。。)
给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树。二叉搜索树定义如下:节点的左子树只包含小于当前节点的数。节点的右子树只包含当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。[1, 104]解法(利⽤中序遍历):后序遍历按照左⼦树、根节点、右⼦树的顺序遍历⼆叉树的所有节点,通常⽤于⼆叉搜索树相关题 ⽬。算法思路:如果⼀棵树是⼆叉搜索树,那么它的中序遍历的结果⼀定是⼀个严格递增的序列。因此,我们可以初始化⼀个⽆穷⼩的全区变量,⽤来记录中序遍历过程中的前驱结点。
2024-12-07 20:06:25
1993
21
原创 C++之异常
• 编译器并不会在编译时检查noexcept,也就是说如果⼀个函数⽤noexcept修饰了,但是同时⼜包 含了throw语句或者调⽤的函数可能会抛出异常,编译器还是会顺利编译通过的(有些编译器可能会 报个警告)。• C++标准库也定义了⼀套⾃⼰的⼀套异常继承体系库,基类是exception,所以我们⽇常写程序,需 要在主函数捕获exception即可,要获取异常信息,调⽤what函数,what是⼀个虚函数,派⽣类可 以重写。)表⽰可能会抛出多种类型的异常,可能会抛出的类型⽤逗号分割。
2024-12-06 21:27:51
708
2
原创 进程控制(下)
函数和进程之间的相似性exec/exit就像call/return⼀个C程序有很多函数组成。⼀个函数可以调⽤另外⼀个函数,同时传递给它⼀些参数。被调⽤的函数 执⾏⼀定的操作,然后返回⼀个值。每个函数都有他的局部变量,不同的函数通过call/return系统进 ⾏通信。这种通过参数和返回值在拥有私有数据的函数间通信的模式是结构化程序设计的基础。Linux⿎励将这 种应⽤于程序之内的模式扩展到程序之间。如下图⼀个C程序可以fork/exec另⼀个程序,并传给它⼀些参数。
2024-12-05 16:30:53
760
40
原创 进程控制(上)
在linux中fork函数是⾮常重要的函数,它从已存在进程中创建⼀个新进程。新进程为⼦进程,⽽原进 程为⽗进程。进程调⽤fork,当控制转移到内核中的fork代码后,内核做:• 分配新的内存块和内核数据结构给⼦进程• 将⽗进程部分数据结构内容拷⻉⾄⼦进程• 添加⼦进程到系统进程列表当中• fork返回,开始调度器调度当⼀个进程调⽤fork之后,就有两个⼆进制代码相同的进程。⽽且它们都运⾏到相同的地⽅。但每个进 程都将可以开始它们⾃⼰的旅程,看如下程序。
2024-12-04 13:23:35
860
原创 AVL树(下)
左边⾼时,如果插⼊位置不是在a⼦树,⽽是插⼊在b⼦树,b⼦树⾼度从h变 成h+1,引发旋转,右单旋⽆法解决问题,右单旋后,我们的树依旧不平衡。右单旋解决的纯粹的左边 ⾼,但是插⼊在b⼦树中,10为跟的⼦树不再是单纯的左边⾼,对于10是左边⾼,但是对于5是右边 ⾼,需要⽤两次旋转才能解决,以5为旋转点进⾏⼀个左单旋,以10为旋转点进⾏⼀个右单旋,这棵树 这棵树就平衡了。
2024-11-30 20:19:50
834
1
原创 程序地址空间
◦ 众所周知,编译完成后的程序是存放在硬盘上的,当运⾏的时候,需要将程序搬到内存当中 去运⾏,如果直接使⽤物理地址的话,我们⽆法确定内存现在使⽤到哪⾥了,也就是说拷⻉ 的实际内存地址每⼀次运⾏都是不确定的,⽐如:第⼀次执⾏a.out时候,内存当中⼀个进程 都没有运⾏,所以搬移到内存地址是0x00000000,但是第⼆次的时候,内存已经有10个进程 在运⾏了,那执⾏a.out的时候,内存地址就不⼀定了。因为有地址空间的存在和⻚表的映射的存在,我们的物理内存中可以对未来的数据进⾏任意位置 的加载!
2024-11-23 19:05:31
1682
45
原创 重生之我在学环境变量
我们更推荐getenv的方式获得环境变量,另外两种方法都是只能得到链表,也就是地址,不能得到具体的内容,我们想要得到环境变量还是更想要内容。bash会形成一张表,叫做环境变量表,这张表类似于指针数组,当我们输入ls指令的时候,bash会拿到相应的表,叫做命令行参数表,所以说。如果只进⾏ MYENV = “helloworld” ,不调⽤export导出,在⽤我们的程序查看,会有什么结 果?我们之前写代码,用main函数,main函数的命令行参数,是实现程序不同子功能的方法。
2024-11-22 21:12:08
1352
原创 AVL树(上)
这⾥a/b/c是⾼度为h的⼦树, 是⼀种概括抽象表⽰,他代表了所有右单旋的场景,实际右单旋形态有很多种,具体图2/图3/图4/ 图5进⾏了详细描述。• 旋转核⼼步骤,因为5<b⼦树的值<10,将b变成10的左⼦树,10变成5的右⼦树,5变成这棵树新的根,符合搜索树的规则,控制了平衡,同时这棵的⾼度恢复到了插⼊之前的h+2,符合旋转原则。• 在a⼦树中插⼊⼀个新结点,导致a⼦树的⾼度从h变成h+1,不断向上更新平衡因⼦,导致10的平 衡因⼦从-1变成-2,10为根的树左右⾼度差超过1,违反平衡规则。
2024-11-21 16:29:33
934
5
原创 map和set(2)
multimap和map的使⽤基本完全类似,主要区别点在于multimap⽀持关键值key冗余,那么 insert/find/count/erase都围绕着⽀持关键值key冗余有所差异,这⾥跟set和multiset完全⼀样,⽐如 find时,有多个key,返回中序第⼀个。其次就是multimap不⽀持[],因为⽀持key冗余,[]就只能⽀ 持插⼊了,不能⽀持修改。
2024-11-20 20:26:53
657
39
原创 二叉树的深搜
(请对彬彬好一点)深度优先遍历(DFS,全称为DepthFirstTraversal),是我们树或者图这样的数据结构中常⽤的 ⼀种。这个算法会尽可能深的搜索树或者图的分⽀,直到⼀条路径上的所有节点都被遍历 完毕,然后再回溯到上⼀层,继续找⼀条路遍历。以及。因为树的定义本⾝就是递归定义,因此采⽤递归的⽅法去实现树的三种遍历不仅容易理解⽽且代码很 简洁。并且前中后序三种遍历的唯⼀区别就是,在做题的时候,选择⼀个适 当的遍历顺序,对于算法的理解是⾮常有帮助的。
2024-11-19 19:59:53
801
原创 计算器的实现
我们⽇常写的计算表达式都是中缀表达式,也就是运算符在中间,运算数在两边,但是直接读取⽆ 法⻢上进⾏运算因为⼀个计算表达式还涉及运算符优先级问题。如: 都⽆法运算,因为后⾯还有括号优先级更⾼。1-2 * ( 3-4)+5 中遇到-和*所以其中⼀种实现思路是把中缀表达式转换为后缀表达式,也就是说分析计算表达式的优先级,将 运算符放到前⾯,运算符放到运算数的后⾯,然后我们依次读取后缀表达式,遇到运算符就可以进 ⾏运算了。
2024-11-18 21:28:50
514
原创 Linux之进程(3)
在系统当中查找一个最合适调度的进程的时间复杂度是一个常数,不随着进程增多而导致时间成本增 加,我们称之为进程调度O(1)算法!
2024-11-18 13:31:06
382
1
原创 Linux之进程概念(2)
父进程如果提前退出,那么子进程后退出,进入Z之后,那该如何处理呢?父进程先退出,子进程就称之为“孤儿进程”孤儿进程被1号init进程领养,当然要有init进程回收喽。1号是操作系统。如果不领养,子进程进入僵尸状态,会造成资源泄露。这就好像孩子除了自身的父母,还有政府来负责。父进程相当于是父母,1号init进程相当于政府因为父进程有自己的父进程,也就是bash,会自动回收。
2024-11-17 21:38:41
1260
1
原创 map和set的使用
• set的声明如下,T就是set底层关键字的类型• set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模 版参数• set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第三个参 数。• ⼀般情况下,我们都不需要传后两个模版参数。• set底层是⽤红⿊树实现,增删查效率是 的。O(logN) ,迭代器遍历是⾛的搜索树的中序,所以是有序。
2024-11-17 19:00:50
1355
4
原创 Linux之进程状态
为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在 Linux内核里,进程有时候也叫做任务)。R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列 里。S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠 (interruptible sleep)).
2024-11-15 10:35:07
514
10
原创 Linux相关习题-gcc-gdb-冯诺依曼
内联函数,也叫编译时期展开函数, 指的是建议编译器将内联函数体插入并取代每一处调用函数的地方,从而节省函数调用带来的成本,使用方式类似于宏,但是与宏不同的是内联函数拥有参数类型的校验,以及调试信息,而宏只是文本替换而已。make的执行规则是,只生成所有目标对象中的第一个,当然make会根据语法规则,递归生成第一个目标对象的所有依赖对象后再回头生成第一个目标对象,生成后退出。死代码删除是编译最优化技术,指的是移除根本执行不到的代码,或者对程序运行结果没有影响的代码,而并不是删除被注释的代码,因此A选项错误。
2024-11-13 14:49:41
1078
7
原创 Linux之进程
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
2024-11-13 12:42:16
667
8
原创 递归搜索与回溯算法--递归(2)
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。,请你反转链表,并返回反转后的链表。
2024-11-12 16:41:09
920
7
原创 递归搜索与回溯算法
b. 当我们知道规模更⼩的⼦问题(规模为n-1)的解时,我们可以直接计算出规模为n的问题 的解。a. 问题可以被划分为规模更⼩的⼦问题,并且这些⼦问题具有与原问题相同的解决⽅法。因为A中最后处理的是最⼤的盘⼦,所以在移动过程中不存在⼤盘⼦在⼩盘⼦上⾯的情况。b. 将A柱上的最⼤盘⼦移动到C柱上,然后将B柱上的n-1个盘⼦移动到C柱上。当问题的规模变为n=1时,即只有⼀个盘⼦时,我们可以直接将其从A柱移动到C柱.对于规模为n的问题,我们需要将A柱上的n个盘⼦移动到C柱上。
2024-11-11 17:50:53
1548
39
原创 二叉搜索树
场景1:⼩区⽆⼈值守⻋库,⼩区⻋库买了⻋位的业主⻋才能进⼩区,那么物业会把买了⻋位的业主的 ⻋牌号录⼊后台系统,⻋辆进⼊时扫描⻋牌在不在系统中,在则抬杆,不在则提⽰⾮本⼩区⻋辆,⽆ 法进⼊。场景2:商场⽆⼈值守⻋库,⼊⼝进场时扫描⻋牌,记录⻋牌和⼊场时间,出⼝离场时,扫描⻋牌,查 找⼊场时间,⽤当前时间-⼊场时间计算出停⻋时⻓,计算出停⻋费⽤,缴费后抬杆,⻋辆离场。场景2:检查⼀篇英⽂⽂章单词拼写是否正确,将词库中所有单词放⼊⼆叉搜索树,读取⽂章中的单 词,查找是否在⼆叉搜索树中,不在则波浪线标红提⽰。
2024-11-06 20:00:49
1106
4
原创 分治--快速排序
给定一个包含红色、白色和蓝色、共n个元素的数组nums对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数01和2分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下解决这个问题。012算法思路:类⽐数组分两块的算法思想,这⾥是将数组分成三块,那么我们可以再添加⼀个指针,实现数组分 三块。设数组⼤⼩为 n ,定义三个指针 left, cur, right :◦ left :⽤来标记 0 序列的末尾,因此初始化为-1;
2024-11-05 15:19:49
1141
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人