自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 收藏
  • 关注

原创 【MySQL】事务

mysql是一个网络服务,这意味着在同一时刻可能有多个用户在并发访问或者操作这个数据库中的某些数据,如果不对这些操作进行控制的话有可能会造成并发访问导致数据不一致的问题,进而导致错误发生,因此针对这种并发访问的情况,数据库要通过事务等制来保证操作的正确性。

2024-10-18 18:39:07 1192

原创 【MySQL】索引

索引本质是mysqld进程中一个数据结构,它的作用是用来提高查询数据的速度的,但查询速度的提高是以写操作(插入、删除和修改)的速度为代价的,这是因为每当对这些数据执行写操作时,数据库系统都需要同时更新相关的索引,以确保索引的准确和一致性。这个过程会增加额外的IO操作,因为索引数据通常存储在磁盘上,而磁盘IO是影响数据库性能的关键因素之一,但是即便如此,索引对查询性能的提升作用通常远远超过了这些不足。

2024-10-14 23:10:20 1930

原创 【MySQL】表的内外连接

内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,前面学习的查询都是内连接,也是日常使用的最多的连接查询。on子句是用于指定两个表之间如何连接的,即指定两个表中的哪些列应该匹配以合并行,类似where,只是阶段不同。如果是多表(联合)查询,要让左边的表完全显示出来,右侧的表如果匹配就显示,不匹配就填上空,这时称之为左外连接。与之前写法的区别在于,判断条件是通过where来设置的,而标准的内连接的条件判断实际上是上面这种形式。外连接分为两种:左外连接和右外连接。

2024-10-09 20:44:09 640

原创 【MySQL】复合查询

前面介绍的都是针对单张表进行查询,但在实际开发中是远远不够的,很多情况下需要进行多表查询在解决实际问题时,想办法把多表合并成一张表,然后对这一张表进行操作,所以在MySQL中,所有的select问题都可以转换成单表问题。

2024-10-09 19:23:06 731

原创 【MySQL】基本查询

本篇主要介绍的是表内容的增删查改,而之前了解的表的相关操作主要是对表结构本身的操作,而非内容增删查改主要体现在如下四个操作CRUD:Create(创建)、Retrieve(读取)、Update(更新)、Delete(删除)

2024-09-26 21:09:23 1362

原创 【MySQL】表的约束

上篇文章说过,约束本质是为了保证插入数据的有效性和正确性,如果不符合约束会进行报错,而数据类型本身就是一种约束,但这种约束比较单一,在多数情况下需要很多约束来一起对数据进行限制,进而达到约束的最终目的,反过来站在mysql视角,有了约束的保障,意味着里面保存的数据都是可预期和完整的。

2024-09-24 21:25:51 901

原创 【MySQL】常见数据类型

当给一个数据库设置足够多的约束,就能保证数据库中的数据是可预期且完整的,比如说当前列的数据类型为无符号tinyint,那其中保存的数值范围一定是在0~255之间的,不可能存在范围之外的数值,这是可预期的表现,其次对于不合法的插入会直接报错,不让用户插入非法数据,这说明插入进去的数据一定都是有效完整的,这是完整性的表现。上述除法的结果不是整除,实际上还余三个字节,这三个字节是用来记录存储的字符串长度的,所以实际用于存储字符串的字节数为65532,要用这个值去除得到的才是真正的可以保存的最长长度。

2024-09-23 00:46:55 1326

原创 【MySQL】表的相关操作

这种做法相当于是把当初创建表时的有效操作给记录下来了,所以是最详细的,包含了说明和字符集等等,不过可以发现的时候上面的写法貌似和当初自己写的不太一样,这是因为mysqld要对命令进行语法和词法分析,并对其按照标准进行修改优化,最后再去执行优化后的命令,也就是上面这样。和库一样,不要轻易对表进行修改和删除,因为数据库是比较接近底层的,上层程序可能有很多地方都要用到这个数据库以及对应的表,如果你把名字改了,那上层都得跟着改,降低了维护性。可以发现,修改是直接覆盖最初的指令,把原来的属性和描述信息直接替换了。

2024-09-19 20:25:59 6700

原创 【MySQL】库的相关操作

数据库常见的有两个编码集,一个是字符集,另一个是校验集也叫做排序规则(校验规则),因为不光是数据库,这类一旦涉及到数据的表示或者数据的存取操作那就必然涉及数据的编码格式的问题,只有使用相同的编码格式来操作数据才不会导致数据乱码问题或者处理数据错误。也可以指定校验集而不制定字符集,这样字符集会使用系统默认的,因此若指定的校验集与默认字符集不匹配,也就是存和取的格式不一致,则会可能会出现数据不一致,除此之外,使用相同的字符集但校验集不同的数据库,在进行相同的查询时得到的结果也大概率是不一样的。

2024-09-17 22:20:12 925

原创 【MySQL】数据库基础

其中mysql是数据库的客户端,而mysqld是数据库的服务器端,所以和其它C/S模式的网络服务没什么区别mysqld是一个后台服务器程序,并且是守护进程,系统启动时自动启动数据库服务,所以不需要手动启动,mysql是用来与mysqld进行交互获取服务的mysql服务是一套给用户提供数据存取服务的一个网络程序,也就是数据库管理系统这里需要区分一个概念,就是我们日常所说的数据库。

2024-09-10 21:19:27 1237 1

原创 【C++】类型转换

在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。因此C++提出了自己的类型转化风格,因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换。,因为而它们之间的转换可能是不安全的,此时需要用到。注意:注意虽然指针也是内置类型,但是。

2024-01-22 15:54:22 1048

原创 【C++】特殊类设计

由于new是由两部分组成,operator new + 构造(拷贝构造),其中operator new是一个全局函数,可以在类中对它重载一个该类专属的operator new,若重载了,new该类对象时就不会去调用全局,而是去调用类中的,既然在类中又可以将其声明为删除函数,这样new就无法调用operator new了,进而无法在堆上创建对象了。定义GC类和GC类的全局对象gc,当进程结束时,gc的生命周期也结束了,然后它会调用它的析构函数,函数内部刚好完成了对单例对象的释放工作。

2024-01-21 23:53:38 1097

原创 【C++】智能指针

借此,实际上把管理一份资源的责任托管给了一个对象。

2024-01-21 18:06:59 1165

原创 【C++】异常

实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。public:, _id(id){}//声明为虚函数//共有属性protected:int _id;public:{}//派生类根据实际需求重写基类的虚函数return str;//新增独有成员private://...其它子类。

2024-01-20 16:21:04 1109

原创 【C++11】部分新特性

临时对象是右值,因此会调用移动赋值,而这个临时对象的生命周期只有它所在的那一行,也就是说花费了一次深拷贝的代价结果就只有这一行有效,紧接着就会被销毁,这样就太浪费了,又因为这个临时对象里面的数据就是ret想要的,因此可以直接交换它的成员来达到减少拷贝的目的。假设使用某个默认的函数,但是因为一些原因这个函数没有默认生成。可以理解为是一个常量数组,括号里面的数据存储在常量区,不管存放多少数据,它所占空间的大小始终是8/16字节,因此不难推断该类中的成员包含两个指针,分别指向这块空间的开始的结束位置。

2024-01-17 10:23:25 1044

原创 哈希扩展:位图与布隆过滤器

随机给40亿个不重复的无符号整数,再给一个无符号整数,如何快速判断这个数是否在这40亿个数中?

2023-12-17 00:33:09 124

原创 哈希-unordered系列关联式容器

深入理解unordered系列容器底层的数据结构哈希表

2023-12-04 15:36:50 159

原创 map/set封装

会导致类型不匹配,这是因为树的insert返回值pair中的迭代器类型是普通迭代器,而set中的迭代器的类型是const类型,普通迭代器无法构造const迭代器,所以会报错,解决方法为:设计一个支持普通迭代器转化为cons迭代器的构造函数。对于实例化const迭代器类型的模板类而言,该函数是构造函数,而对于实例化普通迭代器类型的模板类而言,该函数是拷贝构造,通过该函数即可解决上述问题。set是K模型,因此key_type是Key,value_type也是Key,实例化后树中要存储的元素类型也是Key类型。

2023-11-14 20:29:43 158

原创 红黑树-RBTree

红黑树的概念以及大致插入过程

2023-11-11 21:52:26 692

原创 二叉平衡搜索树-AVL树

主要分析平衡树的插入过程

2023-11-06 18:39:42 157

原创 二叉搜索树-BST

之所以称之为搜索树是因为该树非常适合用来查找某些元素,比如以上图为例,若要查找元素6,先和根节点的值5进行比较,比5大则可以直接去它的右子树中去找,因为左子树都比5小一定查找不到,然后重复上述操作,直到查到或者到空。K/V模型,每一个关键字K都对应一个值V,即的键值对,这种结构的实现与第一种基本无异,只是在存储K的同时顺带存储V即可,使用两个栈分别保存从根节点到目标节点路径中的每个节点,由于题目保证树中一定存在目标节点,因此两个栈里保存的路径节点中一定有它们的公共祖先。

2023-10-22 18:16:04 266 2

原创 【C++】多态

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。继承是多态的前提条件必须通过父类的指针或者引用调用虚函数被调用的函数必须是虚函数,且子类必须对父类的虚函数进行重写重载:两个函数在同一个作用域,函数名相同但参数不同(个数、类型、类型顺序)。覆盖(重写):两个函数分别在父子类域中,且函数名、参数列表和返回值全都相同(协变除外),两个函数还都得是虚函数。

2023-09-14 23:32:25 1011

原创 【C++】继承

若要设计一个学校中不同人员的身份管理系统,首先需要将其身份信息数据提取出来封装成一个类,比如:不难发现,每个类中都包含了一些公共的属性信息,后续还有一些类要包含这些属性,写起来非常麻烦,而且后续需要修改这些公有属性的话每个类都要一起改,可维护性和可扩展性比较低,针对这种情况,C++设计出了继承。//基类(父类)public:protected:// 公有属性//派生类(子类)public:private://独有属性int _stuid;// 学号//...

2023-09-04 09:18:05 426 1

原创 【C++】模板进阶

前面介绍过,C++中的模板是泛型编程的基础,允许以一种通用的方式编写代码,并且无关具体的类型,只有在使用时传递参数被编译器实例化,根据实参类型产生函数或者类模板的特定类型版本。模板的出现,让本该自己写的一些重复的代码全都交给编译器去自动生成【优点】模板复用了代码,节省资源,提高开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性,比如适配器、仿函数等【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2023-08-20 13:15:28 317

原创 【C++】stack/queue/优先级队列的模拟实现

deque(双端队列)容器不仅支持头部和尾部数据的插入和删除,也支持随机存取、访问和修改(迭代器),但是每个方面的功能又不是特别突出,尤其是随机存取和中间位置插入删除数据,效率比较低,因此很少单独使用deque,而且将其作为某个容器的适配器。默认实现的是大堆,因为比较那里写死了,若要实现小堆结构则需要修改向下和向上调整算法的比较逻辑,但实际上库里实现的优先级队列是没办法修改的,所以真正的做法是。它是一种特殊的容器类型,通过封装已有的容器类型来提供特定功能的接口函数,以满足不同的需求。,来实现大小堆的切换。

2023-08-19 14:18:58 346 1

原创 【C++】list的模拟实现

list是一个顺序表,底层采用双向带头循环链表实现,支持常量时间的插入删除操作,不同于vector无法随机访问。list文档说明。

2023-08-17 22:48:08 545

原创 【C++】vector的模拟实现

vector是一个空间可以动态增长的数组。vector文档说明。

2023-08-14 21:00:05 235

原创 【C++】string的模拟实现

string类的增删查改

2023-08-12 01:24:20 252

原创 【C++】模板

template < class T1 , class T2 , . . . , class Tn > class 类模板名 {// 类内成员定义 };// 类模板 template < class T > class Stack {public :// 其他方法... ~ Stack() {_size = 0;T * _array;int _size;这里的Stack。

2023-08-07 14:20:25 117

原创 【C++】内存管理

new和malloc除了写法上区别较大,对于内置类型的处理区别不是很大,其实真正体现new和delete的价值的地方在于自定义类型。free(p1);delete p2;return 0;输出结果:可以发现的是,malloc和free只是单纯地开辟和释放空间,而new和delete不仅会开辟和释放空间,并且还会自动去调用该类的(默认)构造和析构函数,这是malloc和free。

2023-08-05 17:43:07 573

原创 【C++】类和对象 - 下

(且该类没有默认构造时)。对于自定义类型成员变量,一定会先使用初始化列表初始化。对于。

2023-08-05 10:05:58 974

原创 【C++】类和对象 - 中

类中六大默认成员函数分别是...

2023-08-02 15:07:04 359

原创 【C++】类和对象 - 上

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。而C++则...

2023-07-30 14:01:36 459

原创 【C++】入门

C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代,计算机界提出了OOP(object orientedprogramming:面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,BjarneStroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。

2023-04-28 18:01:12 1524

原创 关于函数栈帧的创建与销毁和可变参数列表

什么是函数栈帧?函数调用时在汇编层面下具体是怎么做的?如何间接篡改形参数据、间接调用函数以及如何使用可变参数列表?以上问题在本篇文章中均有详细地探究。

2023-04-20 13:18:03 405

原创 【C深度剖析】关键字大全详解 - 2

数据类型的作用之一是可以用来定义变量,在内存当中开辟一定大小的空间然后存放数据,读取数据时,在以自身的数据类型来解释该数据,这是对于数据类型的部分理解。问题是void类型可以定义变量吗?

2023-03-30 02:18:55 819

原创 【C深度剖析】关键字大全详解 - 1

本文是的主要目的是去剖析程序与计算机基本结构之间的关联和之前在学习C语言中提到过但没有去深入了解过的一些关键字。

2023-03-21 22:57:39 965

原创 归并排序 - 递归与非递归实现

归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。时间复杂度:O(N*logN)空间复杂度:O(N)稳定性:稳定。

2022-09-17 20:35:31 990 3

原创 快速排序的三种单趟排序思想的实现与优化 - 递归与非递归

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,大厂也喜欢考,所以快排必须理解并掌握。快速排序yyds,它的三种递归和非递归的思想都要理解并可以手撕其中一种思想的代码实现。

2022-09-14 23:37:03 832

原创 插入、希尔与选择排序

元素集合越接近有序,直接插入排序算法的时间效率越高时间复杂度:O(N^2)空间复杂度:O(1),它是一种稳定的排序算法稳定性:稳定希尔排序是对直接插入排序的优化。当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。

2022-09-12 20:57:06 327 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除