- 博客(49)
- 收藏
- 关注
原创 事务隔离性
即当我们某个事务执行快照读的时候,对应会创建一个read View读视图,把它比作条件,用来判断当前事务能够看到哪个版本的数据,即可能是当前最新的数据,也有可能是该行记录的undo log里面的某个版本数据。Read View就是事务进行快照读操作时生产的读视图(read view),在该事务执行的快照读的那一刻,会生成数据库系统当前的一个快照,记录并维护系统当前活跃事务ID(当每个事务开启时,都会被分配一个ID,这个ID是递增的,所以最新的事务,ID值越大)当前读:读取最新的记录,就是当前读。
2026-10-27 00:21:19
60
原创 MySQL事务
事务就是一组DML语句,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定,不同的客户端看到的数据是不相同的(因为并发)。事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。(假设毕业了,学校系统会删除许多关于你的信息,这样就需要多条mysql语句构成,这些操作结合起来,就构成了一个事务)
2026-10-25 23:26:36
122
原创 MySQL索引
user8(idintnamevarchar20),emailvarchar30),--在表的定义最后,指定某列为索引(2)创建完后指定某列为普通索引user9(idintvarchar20), emailvarchar30));
2026-10-24 23:37:29
136
原创 MySQL表的约束
两个值:null(默认的)和not null(不为空)数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算案例:创建一个班级表,包含班级名和所在的教室。如果班级没有名字,就不知道在哪个班级如果教室名字为空,就不知道在哪上课所以对于班级和教室列,其不能为空mysql> insert into tt1 value(1,'行远楼');
2026-10-19 23:16:32
175
原创 MySQL数据类型
该设定只是提供了若干个选项的值,最终一个单元格里,实际只存储了一个值,而且出于效率考虑,这些值时间存储的是数字,因为这些选项的每个选项值依次对应如下数字:1,2,3最多65535个;当我们添加枚举值,也可以添加编号。而处于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16……mysql> create table tt11(hobby set('跑','跳','滑','走'))mysql> insert into tt11 value('跑,跳');
2026-10-18 19:51:41
231
原创 Linux之文件系统
其实硬盘是典型的“块”设备,操作系统读取硬盘数据的时候,其实不会一个个扇区地读取,这样效率太低,而是一次性读取连续多个扇区,即一次性读取一个“块”(BLock) 硬盘的每个分区是被划分成一个个“块”。一个“块”的大小是由格式化的时候确定的,并且不可以更改,最常见是4Kb,即连续8个扇区组成一个“块”。“块”是文件存取的最小单位。 注意: 其实磁盘可以变成多个分区(partition)的,以Windows来看,一块磁盘,被分为c盘,d盘
2026-10-18 14:44:42
191
原创 MySQL表的操作
MySQL 是插件式架构,存储引擎是 MySQL 负责数据怎么存储、读取、索引实现的底层模块。真正落地读写磁盘、事务、锁、索引,由存储引擎完成。字符集 (charset) 决定存什么字节;校验规则 collation 决定怎么比较、排序字符。-> name varchar(20) comment '用户名',-> password char(32) comment '密码',character set:表示字符集。collate :校验规则。fields:表示列名。engine:存储引擎。
2026-10-14 20:04:16
80
原创 MySQL库的操作
if not exists表示如果数据库不存在就创建,否则就不创建。修改数据库默认字符集。表示指定默认字符集是utf8mb4。显示数据库的创建定义。2.创建数据库时指定字符集。
2026-10-14 16:27:38
120
原创 交换机、路由、NAT、代理服务器
负责局域网内部转发在局域网内 当A要给B发送数据 此时A不知道B的Mac地址A将目的地址写为全F,交给交换机在局域网里进行广播,当B收到广播时,发现ARP数据报中的IP地址写的是自己的IP,于是B向A发送ARP应答,将自己的Mac地址填进去,此时A就知道了B的地址。
2026-08-22 09:39:05
246
原创 Linux进程及进程状态
维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,换句话说Z不退出,PCB会一直维护该僵尸进程。可以发送SIGSTOP信号来给进程停止(T)进程。那一个父进程创建了很多子进程,但就是不回收,是会造成内存资源的浪费的,因为数据结构本身就要占内存(虽然代码和数据已经释放了)I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。u:以用户为中心的格式显示进程信息,提供进程的详细信息,如用户UID,CPU和内存的使用状态。
2026-04-14 13:34:35
379
原创 调试器 - gdb/cgdb的使用
执行时监视一个表达式的值。如果监视的表达式在程序运行期间的值发生变化,GDB会暂停程序的执行,并通知使用者。其中,很明显可以看出debug模式占据了更大的内存,这是因为debug版本相比release版本会有许多配置文件。,Linux上gcc/g++出来的二进制程序,默认是release模式。要使用gdb调试,必须在源码生成二进制程序的时候,加上。退出:Ctrl+d或quit。假设我们想得到-res。程序发布方式有两种,
2026-03-07 21:48:01
383
原创 Linux之权限
目录的可执行权限是表示你是否在目录下执行命令如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入目录,即使目录仍然有-r读权限而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的度权限,所以在目录下,即使可以执行ls命令,但仍没有权限读出目录下的文档。
2026-03-01 20:31:03
674
原创 Linux基础指令
1991年10月5日,赫尔辛基大学的一名研究生Linux Benedict Torvalds宣布他编制出一种类似UNIX的小操作系统 kernel官网https://www.kernel.org/ 距权威部门统计,目前Linux在服务器领域已经占据了75%的份额,同时Linux在服务器市场的迅速崛起,已经引起了全球IT产业的高度关注,并以强劲的势头成为服务器操作系统领域中的中坚力量 近年来,特别是在国内市场,Linux桌面操作系统的发展
2026-02-01 00:06:33
685
原创 C++之智能指针
什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不在使用的内存,一般是忘记释放或发生异常导致程序未能正常指向导致的。内存泄漏并不是指内存在物理上的消失,而是由于设计错误,失去了对该内存的控制,而造成内存的浪费内存泄漏的危害:普通程序运行一会就结束了出现内存泄漏的问题也不大,进程正常结束,页表的映射关系解除,物理内存也可释放。长期运行的程序出现内存泄漏,影响很大,如操作系统,后台服务,长时间运行的客户端等等,不断出现内存泄漏会导致可用内存不断变少,功能响应变慢,最后卡死。
2026-01-05 17:23:29
1034
原创 C++之异常
异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理,,程序的一部分负责检测问题的出现,然后解决问题的任务传递给程序的另一部分,检测环节无须知道问题的处理模块的所有细节。*C语言主要通过错误码的形式处理错误,错误码的本质就是对错误信息进行分类编号,拿到错误码以后去查询错误信息,比较麻烦。异常时抛出一个对象,这个对象可以函数更全面的各种信息。
2026-01-03 17:53:44
964
原创 数据结构之图
图是由顶点集合及顶点间的关系组成的一种数据结构:G=(V,E),其中:顶点集合V={x|x属于某个数据对象集}是有穷非空集合。E={(x,y)|x,y属于V}或者E={<x,y>|x,y属于V&&Path(x,y)}是顶点间关系的有穷集合,也叫做边的集合。(x,y)为双向通路,Path(x,y)表示x到y的一条单向通路,即有向的。顶点和边:图中结点称为顶点,第i个顶点记作vi。两个顶点vi和vj相关联称作两点有一条边。
2025-12-28 16:14:04
1029
原创 数据结构之并查集
在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合,开始时,每个元素自成一个单元素集合,然后按一定规律将同一组的元素集合合并。在此过程中要反复用到查询某个元素归属于哪个集合的运算,适合于描述这类问题的抽象数据结构类型称为并查集(union-find-set)比如作者有大学同学,高中同学,初中同学,他们彼此不认识。就会分为三个集合。按10人来算,将其按编号分为0-9,分为不同的团体用数组来表示该树形关系,数组中的非负数代表其父节点,负数表示该结点为根结点,且该树形有abs(负数)个结点。
2025-12-20 19:28:03
475
原创 哈希表实现
哈希(hash)又称散列,是一种组织数据的方式。从译名来看,有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建立一个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进行快速查找。
2025-11-20 18:33:28
1016
原创 AVL树实现
AVL树是最先发明的自平衡二叉查找树,AVL是一颗空树,或者具有下列性质的二叉搜索树:其左右子树都是AVL树,且左右子树的高度差的绝对值不超过1。AVL树是一颗高度平衡搜索二叉树,通过控制高度差去控制平横。AVL树实现这里我们引入一个平衡因子的概念,每个结点都有一个平衡因子,任何节点的平衡因子等于右子树的高度减去左子树的高度,也就是说,任何平衡因子等于0/-1/1,AVL树并不是必须要平衡因子,但有了平衡因子可以更方便我们去进行观察和控制树是否平衡。
2025-11-07 20:34:15
997
原创 map&&set的使用
如图 T为set底层关键字的类型其默认T支持小于比较,如果想按照自己的想法走,可以自行实现仿函数传给第二个模版参数set的底层存储数据的内存是从空间配置器申请的,如果需要,可以自己实现内存池,传给第三个参数。一般情况下,我们都不需要传后两个模版参数set的底层是用红黑树实现,增改查的效率是O(logN),迭代器走中序遍历,所以是有序的。map的声明如下。
2025-11-01 21:31:42
701
1
原创 C++之多态
通过下图我们可以看到,满足多态条件后,底层不再是编译时通过调用对象确定函数地址,而是运行时到指向的对象的虚表中确定对应的虚函数地址,这样就实现了指针或引用指向基类就调用基类的虚函数,指向派生类就调用派生类对应的虚函数。一个含有虚函数的类中都至少有一个虚函数表指针,因为一个类所有虚函数的地址要被放到这个类对象的虚函数表中,虚函数表也称虚表。虚函数的重写/覆盖:派生类中有一个跟基类完全相同的虚函数(既派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全相同),称为派生类的虚函数重写了基类的虚函数、
2025-10-28 21:21:05
708
原创 C++之继承
菱形继承的问题,从下面的对象成员模型构造,可以看出菱形继承具有数据冗余和二义性的问题,在Assistant的对象中Person的成员会有两份。public继承中,就是一个特殊处理的例外,派生类对象可以赋值给基类的指针/基类的引用,而不需加const,这里的指针和引用绑定是派生类对象中的基类部分,也就意味着一个基类的指针或者引用,可能指向基类对象,也可能指向派生类对象。基类的其他成员在派生类的访问方式==Min(成员基类的访问方式,继承方式),public>protected>private。
2025-10-25 11:18:45
679
原创 c++中const的使用
则是程序或单元中符号的列表,可用于确定变量或函数在内存中的位置,简而言之,符号表就是分配给变量和函数的名称与其在内存中的地址的映射,包括类型、范围和大小等数据,最终由编译器使用。用来定义常量,修饰函数参数,修饰函数返回值,且被const修饰的东西都受到强制保护,可以预防其他代码无意识的修改。3.const成员函数不可以修改对象的数据,无论该数据是否具有const的性质,编译时以是否修改成员函数为依据进行检查。1.const对象只能访问const成员函数,而非const对象可以访问任意的成员函数。
2025-10-21 19:10:02
450
原创 STL之string类的使用
C++11中,标准委员会变废为宝赋予了auto全新的含义,即:auto不再是一个存储类型的指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器编译时推导而得。for循环后的括号由冒号分为两部分,第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围,自动迭代,自动取数据,自动结束。C语言里,字符串是以‘\0’结尾的一些字符的集合,为了操作方便,C标准库里提供了一些str系列的库函数,但是这些库函数是与字符分开的,不太符合OPP的思想,而且底层要用户自己管理,容易越界访问。
2025-10-12 15:06:43
474
原创 C++模版初阶
在编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用,当使用double类型使用函数模板时,编译器通过对实参的推演将T确定为double类型,然后产生一份专门处理double类型的代码。函数模版是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具,所以其实模版就是让本应该我们重复做的事情交给了编译器。类模版实例化与函数模版实例化不同,类模版实例化需要在类模版名字后跟<>,然后将实例化的类型放在<>中即可,模版是泛函编程的基础。
2025-09-17 21:51:23
372
原创 C/C++内存管理
new和delete是用户进行动态内存申请和释放的操作符,operator new和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来·释放空间。其中operator new:通过malloc来申请空间,当malloc申请空间成功时,直接返回,失败后,就会尝试指向空间不足应对措施,如果用户设置了,就继续申请,否则就抛出异常。(3)其实会申请N+1个空间,在开头会存储一个数据个数值。
2025-09-17 19:11:47
717
原创 类和对象(三)
4.尽量使用初始化列表初始化,因为那些你不在初始化列表初始化的成员也会走初始化列表,如果这些成员在声明位置给了缺省值,初始化列表就会使用这个缺省值进行初始化,如果你没有给缺省值,那么是否对其初始化,取决于编译器,对于没有显示在初始化列表初始化的自定义类型成员会调用其默认构造函数,如果没有默认构造,编译器就会报错。1.如果一个类定义在另一个类的内部,这个内部类就叫内部类。***************************Time 这里是给的缺省值,不是初始化********************
2025-09-17 12:20:44
883
原创 类和对象(二)
如果返回对象是一个当前函数局部的变量,函数结束就销毁了,那么就不能使用引用返回,这样会相当于一个野指针,传引用返回可以减少拷贝,但一定得确保返回的对象,在当前函数结束后还在,才能使用引用返回。赋值运算符重载是一个默认的成员函数,用于完成已有的两个已经存在的对象的直接赋值拷贝,这里要注意跟拷贝构造的区别,拷贝构造是定义时赋值,而赋值运算符重载是定义后再进行赋值。如果一个构造函数的第一个参数是自身类型的引用,且任何额外的参数都有默认值,则此构造函数也叫做拷贝构造函数,也就是说拷贝构造是一个特殊的构造函数。
2025-09-12 17:54:50
1210
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅