自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL --视图

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

2024-09-27 06:00:00 960

原创 MySQL --用户管理

如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。

2024-09-27 05:30:00 998

原创 MySQL --索引(下)

索引覆盖是指索引上的信息足够满足查询请求,不需要再回到主键或数据表中去取数据。当查询可以完全利用索引中的数据满足查询需求时,就称之为索引覆盖。

2024-09-26 07:00:00 1251

原创 MySQL --事务

事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。

2024-09-26 05:00:00 1540

原创 MySQL --表的内连和外连

表的连接分为内连和外连。

2024-09-25 06:00:00 347

原创 MySQL --索引(上)

MySQL索引是数据库表中一个或多个列的值进行排序的一种数据结构,用于帮助MySQL高效地查询和更新数据表中的记录。索引可以极大地提高数据库的查询速度,但同时也可能会降低更新表的速度(如插入、删除和更新操作),因为数据库不仅需要维护数据,还需要维护索引。索引:提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行正确的 create index ,查询速度就可能提高成百上千倍。

2024-09-25 06:00:00 926

原创 MySQL --复合查询

多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。显示雇员名、雇员工资以及所在部门的名字因为上面的数据来自EMP和DEPT表,因此要联合查询。查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J。示例:查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人。显示平均工资低于2000的部门号和它的平均工资。

2024-09-24 07:00:00 1164

原创 MySQL --内置函数

要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值。这里把逗号替换成了“”,这个不计入长度,整体长度减除逗号外的长度等于逗号出现次数。md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串。显示所有留言信息,发布日期只显示日期,不用显示时间。请查询在2分钟内发布的帖子。

2024-09-24 06:00:00 342

原创 MySQL --基本查询(下)

在MySQL中,“截断表”(Truncate Table)是一个快速删除表中所有行数据的操作,但它不会删除表本身,也不会重置表的自增ID(这取决于表是否使用了AUTO_INCREMENT属性以及MySQL的版本和存储引擎)。相比,TRUNCATE TABLE语句通常执行得更快,因为它不记录每一行数据的删除操作到事务日志中,而是直接重新创建表(对于支持这种优化的存储引擎而言)。– 将 duplicate_table 的去重数据插入到 no_duplicate_table。对查询到的结果进行列值更新。

2024-09-23 12:48:04 1272

原创 MySQL --基本查询(上)

语法:示例:创建一张学生表1.1单行数据+全列插入插入两条记录,value_list 数量必须和指定列数量及顺序一致由于 主键 或者 唯一键 对应的值已经存在而导致插入失败可以选择性的进行同步更新操作语法:冲突数据被更新– ON DUPLICATE KEY 当发生重复key的时候– 主键 或者 唯一键 没有冲突,则直接插入;– 主键 或者 唯一键 如果冲突,则删除后再插入语法:示例:创建表结构插入测试数据– 通常情况下不建议使用 * 进行全列查询– 1. 查询的列越多,意

2024-09-23 10:38:12 1210

原创 MySQL --表的约束

外键约束主要用于保证参照完整性(Referential Integrity),即确保一个表中的数据依赖于另一个表的数据时,被参照的数据不会被随意删除或修改,除非这种删除或修改在逻辑上是合理的。在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。可以看到a的值由原来的1变成00001,这就是zerofill属性的作用,如果宽度小于设定的宽度(这里设置的是5),自动填充0。

2024-09-22 21:24:06 1109

原创 MySQL --数据类型

当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,…M表示每个值的位数,范围从1到64。

2024-09-22 20:22:29 1525

原创 MySQL--表的操作

character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准。collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准。不同的存储引擎,创建表的文件不一样。datatype 表示列的类型。users.frm:表结构。users.MYD:表数据。users.MYI:表索引。field 表示列名。

2024-09-12 23:08:02 404

原创 MySQL--库的操作

每个字符集都有一个或多个与之关联的校验规则。MySQL在比较字符串时,会根据指定的校验规则来进行。

2024-09-12 22:36:58 885

原创 dockor --技术架构

是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上,也可以实现虚拟化。单机的写库会逐渐达到性能瓶颈,需求拆分数据库,数据表的数据量太大,处理压力太大,需要进行分表,为降低运维难度,业界逐渐研发了分布式数据库,库表天然支持分布式。提高数据库的吞吐量。## 2.7微服务架构。

2024-09-06 08:00:00 937

原创 Linux -动静态库

定义:硬链接是文件系统中一个文件的目录入口。它直接指向文件的物理位置(inode),而不是文件名。定义:软链接类似于Windows中的快捷方式,它包含了对另一个文件或目录的引用(路径)。定义:动态库是在程序运行时被加载到内存中的库文件,它包含了在多个应用程序中可共享的代码和数据。动态库的文件名通常以.so(Shared Object,共享对象)作为后缀。特点节省空间:由于多个程序可以共享同一个动态库,因此可以显著减少磁盘空间的使用。便于更新。

2024-09-06 06:00:00 996

原创 Linux -文件描述符

通过dup2函数,可以将文件描述符与标准输入(stdin,文件描述符0)、标准输出(stdout,文件描述符1)和错误输出(stderr,文件描述符2)进行关联,实现输入输出的重定向。通过dup2函数,可以创建一个新的文件描述符,并复制旧的文件描述符的状态,使得两者指向同一个文件表项。此时,我们发现,本来应该输出到显示器上的内容,输出到了文件 myfile 当中,其中,fd=1。复制oldfd的文件表项到newfd:使得newfd和oldfd指向同一个文件表项,共享相同的文件偏移量和文件状态标志。

2024-09-05 08:00:00 827

原创 MySQL--数据库基础

SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的 低,在嵌入式设备中,可能只需要几百K的内存就够了。MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研 究使用,可以免费使用,修改和分发。数据库一般指的是,在磁盘或内存中存储的特定结构组织的数据。

2024-09-05 06:00:00 1918

原创 Linux -文件I/O操作

文件不存在则创建新文件)、“a”(追加,写入的数据会被追加到文件尾,如果文件不存在则创建新文件)、“r+”(读写,文件必须存在)、“w+”(读写,同上,但文件内容会被清空)、“a+”(读写,写入的数据会被追加到文件尾)等。flags:用于指定文件如何被打开或创建,例如O_RDONLY(只读)、O_WRONLY(只写)、O_RDWR(读写)、O_CREAT(如果文件不存在则创建)、O_TRUNC(如果文件已存在且为只写或读写模式,则长度截断为0)等。它从一个数组中获取数据,并将数据写入到文件中。

2024-09-04 07:00:00 933

原创 【算法】--双指针

遇到的元素是 0 , cur 直接 ++。因为我们的⽬标是让 [dest + 1, cur - 1] 内 的元素全都是零,因此当 cur 遇到 0 的时候,直接 ++ ,就可以让 0 在 cur - 1 的位置上,从⽽在 [dest + 1, cur - 1] 内;• dest++ 之后,指向的元素就是 0 元素(因为⾮零元素区间末尾的后⼀个元素就是 0),因此可以交换到 cur 所处的位置上,实现 [0, dest] 的元素全部都是⾮零 元素, [dest + 1, cur - 1]的元素全是零。

2024-09-04 05:00:00 1023

原创 Linux--实现简易shell

定义:Shell是一个用C语言编写的程序,它是用户使用Linux/Unix系统的接口。Shell提供了一个界面,通过这个界面,用户可以访问操作系统内核的服务。功能:作为命令语言,Shell能够交互式地解释和执行用户输入的命令。作为程序设计语言,Shell提供了变量定义、赋值、条件判断、循环控制等高级编程功能,用户可以利用这些功能编写Shell脚本来自动化完成复杂的任务。用下图的时间轴来表示事件的发生次序。其中时间从左向右。shell由标识为sh的方块代表,它随着时间的流逝从左向右移动。

2024-09-03 06:00:00 1214

原创 【算法】-贪心算法

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法并不保证得到最优解,但在很多情况下,它的结果已经足够好,且实现简单,效率高。贪心策略:解决问题的策略,局部最优->全局最优把问题的过程分为若干步解决每一步的时候,都选择当前看起来“最优”的解法“希望”得到全局最优解。

2024-09-03 05:00:00 967

原创 冯诺依曼体系&&操作系统

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件。截至目前,我们所认识的计算机,都是有一个个的硬件组件组成。内核(进程管理,内存管理,文件管理,驱动管理)这里的存储器指的是内存。

2024-09-02 00:36:45 219

原创 linux小程序-进度条

使用 printf 格式化输出进度条,[%-100s] 确保进度条左对齐并填充空白以达到100个字符的宽度,[%.1lf%%] 显示进度百分比(保留一位小数),[%c] 显示 lable 中的一个动态变化的字符。注意,这里有一个潜在的改进点:如果 rate 是整数,则最后一个字符(如果有)将不会被更新为 lable 中的字符,因为 cnt 刚好等于 loop_count 时循环就结束了。使用 \r 回车符,使得新的进度条会覆盖旧的进度条,从而实现动态更新的效果。调用 fflush(stdout);

2024-09-02 00:36:23 747

原创 Linux项目自动化构建工具-make/Makefile

3.make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。1.一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。当依赖文件发生变化时(如被修改或更新),make工具会重新生成目标文件,以确保项目的一致性。

2024-09-01 07:30:00 1141

原创 Linux-gcc/g++使用

最后的答案是:系统把这些函数实现都被做到名为libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用。我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。

2024-09-01 06:00:00 836

原创 Linux-vim

vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。「p」:将缓冲区内的字符贴到光标所在位置。「q」:按「q」就是退出,如果无法离开vim,可以在「q」后跟一个「!

2024-08-31 10:26:50 1391

原创 Linux权限

ii.写(w/2):Write对文件而言,具有修改文件内容的权限;那么问题来了,只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写。iii.执行(x/1):execute对文件而言,具有执行文件的权限;假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask。可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.

2024-08-31 09:35:30 991

原创 C++的IO流

实际上我们看到使用while(cin>>i)去流中提取对象数据时,调用的是operator>>,返回值是istream类型的对象,那么这里可以做逻辑条件值,源自于istream的对象又调用了operator bool,operator bool调用时如果接收流失败,或者有结束标志,则返回false。,对于计算机而言是没有“行”这个概念,有了这部分,就可以定义“行”的概念,然后解析缓冲区的内容,返回一个“行”。为了实现这种流动,C++定义了I/O标准类库,这些每个类都称为流/流类,用以完成某方面的功能。

2024-08-30 09:00:00 684

原创 C++的类型转换

*强制类型转换关闭或挂起了正常的类型检查,**每次使用强制类型转换前,程序员应该仔细考虑是否还有其他不同的方法达到同一目的,如果非强制类型转换不可,则应限制强制转换值的作用域,以减少发生错误的机会。转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换。

2024-08-30 08:00:00 929

原创 C++单例模式

使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

2024-08-29 09:00:00 1341

原创 C++异常

实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。// 服务器开发中通常使用的异常继承体系public:,_id(id){}protected:int _id;public:{}

2024-08-29 08:00:00 1384

原创 C++11一些其他特性

在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。

2024-08-28 09:18:22 933

原创 右值引用&&移动语义&&完美转发

左值是一个表示数据的表达式(如变量名或解引用的指针),**我们可以获取它的地址+可以对它赋值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。左值引用就是给左值的引用,给左值取别名。右值也是一个表示数据的表达式,如:字面常量、表达式返回值,函数返回值(这个不能是左值引用返回)等等,**右值可以出现在赋值符号的右边,但是不能出现出现在赋值符号的左边,右值不能取地址。模板中的&&不代表右值引用,而是万能引用,其既能接收左值又能接收右值。模板的万能引用只是提供了能够接收同时接收左值引用和右值引用的能力,

2024-08-28 08:31:51 829

原创 C++ lambda

C++的lambda表达式是C++11及以后版本中引入的一种强大的特性,它提供了一种简洁的方式来定义匿名函数对象。Lambda表达式能够捕获其所在作用域中的变量(以值或引用的方式),并允许你在需要函数对象的地方(比如算法库中的函数对象参数)以非常简洁的方式定义和使用这些函数。

2024-08-27 12:53:56 894

原创 C++11包装器

为了解决这些问题,C++11引入了function,它是一个通用的多态函数包装器,能够存储、复制及调用任何可调用目标(Callable target)——函数、lambda表达式、绑定表达式(bind expression)以及其他函数对象,并可以作为它们的通用类型。这允许我们预先设置函数的某些参数,然后创建一个新的函数对象,这个新的函数对象在被调用时,会自动将预先设置的参数传递给原始的可调用对象。它提供了一种通用的方式来处理这些可调用对象,使得函数式编程和回调机制在C++中变得更加容易和灵活。

2024-08-27 08:00:00 266

原创 C++智能指针

智能指针(如C++中的std::shared_ptr、std::unique_ptr等)主要用于自动管理堆上分配的内存,确保资源在不再需要时能够被正确释放,从而避免内存泄漏。但是_next属于node的成员,node1释放了,_next才会析构,而node1由_prev管理,_prev属于node2成员,所以这就叫循环引用,谁也不会释放。在拷贝构造时,原指针被置空,如果后续代码仍然尝试访问原 auto_ptr 对象所指向的内存,这将导致悬空指针问题,进而可能引发程序崩溃或不可预测的行为。

2024-08-26 13:58:22 670

原创 C++线程

如果共享数据都是只读的,那么没问题,因为只读操作不会影响到数据,更不会涉及对数据的修改,所以所有线程都会获得同样的数据。(但通常不推荐):虽然std::unique_lock对象在技术上是可以复制和移动的,但这种操作会释放原始锁并获取新锁(或保持无锁状态),这通常不是期望的行为,因此在实际使用中应谨慎。虽然加锁可以解决,但是加锁有一个缺陷就是:只要一个线程在对sum++时,其他线程就会被阻塞,会影响程序运行的效率,而且锁如果控制不好,还容易造成死锁。进程是系统资源分配的最小单位,是应用程序运行的环境。

2024-08-26 13:50:55 996

原创 C++ 哈希

定义:对于两个数据元素的关键字kik_iki​和kjk_jkj​(i!= j),有kik_iki​!kjk_jkj​,但有:Hash(kik_iki​) == Hash(kjk_jkj​不同关键字通过相同哈希哈数计算出相同的哈希地址,该种现象称为哈希冲突或哈希碰撞。

2024-08-18 09:33:36 428

原创 map和set的封装

map和set的底层都是红黑树,但map是kv模型,而set是k模型。在取key值时,set能直接取,但map要取kv.first。[k]返回v,map是kv模型,可以实现[],set不能,这里的operator[]在map的封装中实现。在底层红黑树取k值时分别通过set和map中KetOfT的仿函数取到对应k值。在自增/减时要满足红黑树中序遍历的顺序:左子树、根、右子树(符合递增或递减)右子树不存在,向上层遍历,直到当前节点是其父节点的左节点,取父节点(左、中)右子树存在,找到右子树中的最左节点。

2024-08-08 16:45:04 330 1

空空如也

空空如也

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

TA关注的人

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