自定义博客皮肤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优化

移动数据,并插入id为50的数据之后,那么此时,这三个页之间的数据顺序是有问题的。所以,此时,需要重新设置链表指针。count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是NULL,累计值就加 1,否则不加,最后返回累计值。那也就意味着, 一个页中所存储的行也是有限的,如果插入的数据行row在该页存储不小,将会存储到下一个页中,页与页之间会通过指针连接。但是并不会直接将50存入3#页,而是会将1#页后一半的数据,移动到3#页,然后在3#页,插入50。

2024-05-30 13:58:10 889

原创 MySQL索引

前缀长度:可以根据索引的选择性来决定,而选择性是指不重复的索引值(基数)和数据表的记录总数的比值,索引选择性越高则查询效率越高, 唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。最左前缀法则中指的最左边的列,是指在查询时,联合索引的最左边的字段(即是第一个字段)必须存在,与我们编写SQL时,条件编写的先后顺序无关。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。用or分割开的条件, 如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。

2024-05-29 15:17:17 1027

原创 MySQL服务

5. 给root用户分配权限。

2024-05-26 13:15:48 227

原创 MySQL存储引擎

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。我们可以在创建表的时候,来指定选择的存储引擎,如果没有指定将自动选择默认的存储引擎。-- 查询建表语句 -- 默认的存储引擎为InnoDB-- 查询当前数据库支持的存储引擎-- 创建表my_myisam,并指定MyISAM存储引擎id int,-- 创建表my_memory,并指定Memory存储引擎id int,

2024-05-24 19:21:43 1058

原创 MySQL事务

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。注意: 默认MySQL的事务是自动提交的,也就是说,当执行完一条DML语句时,MySQL会立即隐式的提交事务。

2024-05-24 18:15:41 398

原创 MySQL多表查询

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:一对多(多对一)、多对多、一对一。那么我们要执行多表查询,就只需要使用逗号分隔多张表即可,如: select * from emp , dept;左外连接和右外连接是可以相互替换的,只需要调整在连接查询时SQL中,表结构的先后顺序就可以了。在自连接查询中,必须要为表起别名,要不然我们不清楚所指定的条件、返回的字段,到底是哪一张表的字段。

2024-05-23 19:31:37 741

原创 MySQL约束

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。目的:保证数据库中数据的正确、有效性和完整性。

2024-05-23 11:44:01 553

原创 MySQL函数

如果expr的值等于val1,返回res1,... 否则返回default默认值。

2024-05-23 09:37:29 347

原创 DCL(数据控制)

其中 Host代表当前用户访问的主机, 如果为localhost, 仅代表只能够在当前本机访问,是不可以远程访问的。User代表的是访问该数据库的用户名。revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';在MySQL中需要通过用户名@主机名的方式,来唯一标识一个用户。show grants for '用户名'@'主机名';'用户名'@'主机名';'用户名'@'主机名''用户名'@'主机名'

2024-05-22 15:44:08 708

原创 DQL(数据查询)

在一个正常的业务系统中,查询操作的频次是要远高于增删改的,当我们去访问企业官网、电商网站,在这些网站中我们所看到的数据,实际都是需要从数据库中查询并展示的。而且在查询的过程中,可能还会涉及到条件、排序、分页等操作。执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是limit。如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

2024-05-22 12:05:04 1123 1

原创 DML(数据操作)

因为 employee 表的age字段类型为 tinyint,而且还是无符号的 unsigned ,所以取值只能在0-255 之间。insert into 表名 (字段名1, 字段名2, ...) values (值1, 值2, ...);修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。B. 修改id为1的数据, 将name修改为小昭, gender修改为女。插入数据时,指定的字段顺序需要与值的顺序是一一对应的。插入的数据大小,应该在字段的规定范围内。

2024-05-21 18:01:58 732

原创 数据库(MySQL)

而所谓二维表,指的是由行和列组成的表,如下图(就类似于Excel表格数据,有表头、有列、有行,还可以通过一列关联另外一个表格中的某一列数据)。简单说,基于二维表存储数据的数据库就成为关系型数据库,不是基于二维表存储数据的数据库,就是非关系型数据库。注意:[ ]内为可选参数,如果需要连接远程的MySQL,需要加上这两个参数来指定远程主机IP、端口,如果连接本地的MySQL,则无需指定这两个参数。此时,可以加上参数 if exists ,如果数据库存在,再执行删除,否则不执行删除。

2024-05-21 12:40:44 1072

原创 计算机网络

为了减少协议设计的复杂性,大多数网络模型均采用分层的方式来组织每一层利用下一层提供的服务来为上一层提供服务本层服务的实现细节对上层屏蔽IP协议也称之为网际协议,特指为实现在一个相互连接的网络系统上从源地址到目的地传输数据包(互联网数据包)所提供必要功能的协议5.2特点:不可靠:它不能保证IP数据包能成功地到达它的目的地,仅提供尽力而为的传输服务无连接:IP并不维护任何关于后续数据包的状态信息。每个数据包的处理是相互独立的。IP数据包可以不按发送顺序接收。

2024-05-19 17:28:24 1178

原创 数据类型总结

Python中的数据类型可以分为以下几类:1. 数字(Number):包括整数(int)、浮点数(float)、复数(complex)等。2. 字符串(String):由单个字符组成的一串字符,用引号(单引号或双引号)括起来。3. 列表(List):有序、可变的对象序列,用方括号[ ]表示,元素之间用逗号分隔。4. 元组(Tuple):有序、不可变的对象序列,用圆括号()表示,元素之间用逗号分隔。5. 集合(Set):无序、不重复的元素集合,用大括号{ }表示,元素之间用逗号分隔。

2024-05-16 10:19:22 451

原创 集合(set)

和数学上的集合基本是一样的,特点:不允许有重复元素,可以进行交集,并集,差集的运算本质,无序,无重复元素的集合格式:集合符号:{} 形式:set = {元素,元素,元素,.....}集合符号:{} 形式:dict = {key:value, key:value,.....}

2024-05-16 10:07:41 340

原创 字典(dict)

1.定义空字典 {}dict1 = {}#2.定义非空字典# 第一种定义字典的方式dict2 = {"name":"小解","age":25,"love":"女","sex":"**"} # 最常用print(dict2["name"],dict2["love"]) # 访问字典# 第二种定义字典的方式 dict(key=value,key1=value1,...) key表示键 value表示值# 第三种定义字典的方式# 注意:key和value的数量不一致时,以数量少的为基准。

2024-05-15 18:29:58 469

原创 元组(tuple)

b.列表中的元素可以进行增加和删除操作;但是,元组中的元素不能修改【元素:一旦被初始化,将不能发生改变】创建有元素的元组:tuple1 = (元素1,元素2,。创建空元组:tuple1 = ( )a.列表:[ ] 元组:( )

2024-05-14 17:37:35 131

原创 列表(list)

注意: 将数据保存到列表的时候,不用考虑列表的大小,如果数据很大的话,底层会进行自动扩容.变量:使用变量存储数据,,但是存在一个缺点:,一个变量一次只能存储一个数据。访问方式:通过索引访问列表中的元素【有序,索引:决定了元素在内存中的位置】列表名称 = [数据1,数据2........]列表中存储的是其实是变量,所以可以随时修改值。若要存储多个数据:一般使用列表。列表本质上面是一个有序的集合.语法:列表名[索引] = 值。使用 [ ] 表示创建列表。

2024-05-14 16:58:01 218

原创 Python字符串

由多个字母,数字,特殊字符组成的有限序列字符串的定义:可以使用一对单引号或者双引号,也可以一对三个单引号或者一对三个双引号定义字符串。注意:没有单符号的数据类型'a' "a"# 创建字符串。

2024-05-14 09:47:13 718

原创 Python基础知识

7. 函数名应该具有描述性,能够清晰地表达其功能,并采用小写字母和下划线分隔单词的命名方式,例如:my_function。4. 变量名最好使用小写字母,并采用下划线分隔单词(snake_case)的命名方式,例如:my_variable。8. 模块名应该具有描述性,并采用小写字母和下划线分隔单词的命名方式,例如:my_module.py。,只是对程序代码进行解释说明,让别人可以看懂程序代码的作用,能够大大增强程序的可读性。布尔(bool)表达现实生活中的逻辑,即真和假,True表示真,False表示假。

2024-05-13 12:24:00 1007

原创 Python的软件安装

检查安装版本:在运行输入cmd, python -V或python --version。官网:https://www.jetbrains.com/pycharm/官网:https://www.python.org/downloads/圣诞节假期,Gudio van Rossum吉多·范罗苏姆(龟叔)决心开发一个新的解释程序(安装路径不要含有中文或特殊字符。安装路径不要含有中文或特殊字符。添加桌面快捷方式和环境变量勾选。简单、易学、开发效率高。自带编辑器:IDLE。

2024-05-10 22:16:13 262

原创 信号量概述

信号量又称之为PV操作,PV原语是对信号量的操作,一次P操作使信号量sem减1,一次V操作使信号量sem加1。对于P操作,如果信号量的sem值为小于等于0,则P操作就会阻塞;信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。若用于同步操作,往往会设置多个信号量,并且安排不同的初始值,来实现它们之间的执行顺序。将信号量的值减1,若信号量的值小于0,则对信号量的操作失败,函数立即返回。将信号量的值减1,若信号量的值小于等于0,此函数会引起调用者阻塞。

2024-05-09 22:45:03 656

原创 互斥锁概述

1. 同步互斥概述在多任务操作系统中,同时运行的多个任务可能都需要访问/使用同一种资源多个任务之间有依赖关系,某个任务的运行依赖于另一个任务同步和互斥就是用于解决这两个问题的。互斥:一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。POSIX标准中进程和线程同步和互斥的方法,主要有信号量和互斥锁两种方式。同步:两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。同步就是在互斥的基础上有顺序。

2024-05-09 22:03:31 1445

原创 线程的概述

如果原本子线程是结合态,需要通过pthrad_join函数回收子线程退出的资源,但是这个函数是一个阻塞函数,如果子线程不退出,就会导致当前进程(主控线程),无法继续执行,大大的限制了代码的运行效率,如果子线程已经设置为分离态,就不需要再使用pthread_join了。每一个进程创建的时候系统会给其4G虚拟内存,3G用户空间是私有的,所以进程切换时,用户空间也会切换,所以会增加系统开销,而一个进程中的多个线程共享一个进程的资源,所以线程切换时不用切换这些资源,效率会更高;这样可以为不同的任务步骤建立线程。

2024-05-09 19:13:05 1173

原创 共享内存

共享内存是进程间通信方式中效率最高的,原因在于进程是直接在物理内存上进行操作,将物理地址映射到用户进程这,所以只要对其地址进行操作,就是直接对物理地址操作。一个进程向共享的内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。若一个进程正在向共享内存区写数据,则在它做完这一步操作前,别的进程不应当去读、写这些数据。使用共享内存要注意的是多个进程之间对一个给定存储区访问的互斥。共享内存是进程间共享数据的一种最快的方法。允许两个或者多个进程共享。1. 共享内存的特点。2. 共享内存示意图。

2024-05-07 19:34:44 956

原创 消息队列

消息队列是消息的链表,存放在内存中,由内核维护5. 消息队列的特点消息队列中的消息是有类型的。消息队列中的消息是有格式的。消息队列可以实现消息的随机查询。消息不一定要以先进先出的次序读取,编程时可以按消息的类型读取。消息队列允许一个或多个进程向它写入或者读取消息。与无名管道、命名管道一样,从消息队列中读出消息,消息队列中对应的数据都会被删除。每个消息队列都有消息队列标识符,消息队列的标识符在整个系统中是唯一的。只有内核重启或人工删除消息队列时,该消息队列才会被删除。

2024-05-07 15:03:41 791

原创 管道:有名管道

1. 有名管道概述命名管道(FIFO)和管道(pipe)基本相同,但也有一些显著的不同,其特点是:半双工,数据在同一时刻只能在一个方向上流动。写入FIFO中的数据遵循先入先出的规则。FIFO所传送的数据是无格式的,这要求FIFO的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等。FIFO在文件系统中作为一个特殊的文件而存在并且在文件系统中可见,所以有名管道可以实现不相关进程间通信,但FIFO中的内容却存放在内存中。管道在内存中对应一个缓冲区。不同的系统其大小不一定相同。

2024-04-30 15:04:48 503

原创 文件描述符

文件描述符是非负整数,是文件的标识。用户使用文件描述符(file descriptor)来访问文件。利用open打开一个文件时,内核会返回一个文件描述符。每个进程都有一张文件描述符的表,进程刚被创建时,标准输入、标准输出、标准错误输出设备文件被打开,对应的文件描述符0、1、2 记录在表中。在进程中打开其他文件时,系统会返回文件描述符表中最小可用的文件描述符,并将此文件描述符记录在表中。

2024-04-30 11:07:33 528

原创 管道:无名管道

管道(pipe)又称无名管道。无名管道是一种特殊类型的文件,在应用层体现为两个打开的文件描述符。任何一个进程在创建的时候,系统都会 给他分配4G的虚拟内存,分为3G的用户空间和1G 的内核空间,内核空间是所有进程公有的,无名管道就是创建在内核空间的,多个进程知道同一个无名管道的空间,就可以利用他来进行通信无名管道虽然是在内核空间创建的,但是会给当前用户进程两个文件描述符,一个负责执行读操作,一个负责执行写操作。

2024-04-29 20:04:55 982

原创 进程间的通信

进程间通信(IPC:Inter Processes Communication) 进程是一个独立的资源分配单元,不同进程(这里所说的进程通常指的是用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源(例如打开的文件描述符)。进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信。在Linux下,要想查看这些信号和编码的对应关系,可使用命令:kill ­l。

2024-04-29 14:54:09 709

原创 进程的替换(exec)

e (environment):存有环境变量字符串地址的指针数组的地址,execle和execve改变的是exec启动的程序的环境变量(新的环境变量完全由environment指定),其它四个函数启动的程序则使用默认系统环境变量。调用exec函数的进程并不创建新的进程,故调用exec前后,进程的进程号并不会改变,其执行的程序完全由新的程序替换,而新程序则从其main函数开始执行。失败后从原程序的调用点接着往下执行,在平时的编程中,如果用到了exec函数族,一定要记得加上错误判断语句。1. exec函数族。

2024-04-28 18:53:06 472

原创 fork函数与vfork函数

status:函数返回时,参数status中包含子进程退出时的状态信息,子进程的退出信息在一个int中包含了多个字段,用宏定义可以取出其中的每个字段。当pid所指示的子进程不存在,或此进程存在,但不是调用进程的子进程,waitpid就会出错返回,这时errno被设置为ECHILD。使用fork函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,父子进程是独立的。子进程已运行结束,父进程未调用wait或者waitpid函数回收子进程的资源是子进程变为僵尸进程的原因。

2024-04-28 15:22:09 1092 1

原创 进程的概述

程序和进程区别:程序:是静态的,存放在磁盘上的可执行文件进程:是动态的,是运行在内存中的程序的执行实例程序是一些指令的有序集合,而进程是程序执行的过程,进程是程序的一次执行过程。进程的状态是变化的,其包括进程的创建、调度和消亡。只要程序运行,此时就是进程,程序每运行一次,就会创建一个进程在linux系统中,进程是管理事务的基本单元。进程拥有自己独立的处理环境和系统资源(处理器、存储器、I/O设备、数据、程序)。

2024-04-27 16:39:32 933

原创 Linux系统编程

1.1 操作系统的职责操作系统用来管理所有的资源,并将不同的设备和不同的程序关联起来。1.2 什么是Linux系统编程在有操作系统的环境下编程,并使用操作系统提供的系统调用及各种库,对系统资源进行访问。系统编程主要就是为了让用户能够更好和更方便的操作硬件设备,并且对硬件设备也起到保护作用,我们所写的程序,本质就是对硬件设备的操作,所以操作系统提供接口可以对硬件进行操作,这就是系统编程。

2024-04-27 14:12:38 1361

原创 shell脚本

代码展示:/bin/bash#定义变量 4 #shell脚本中没有数据类型可言,所以定义变量时不需要加数据类型 5 #shell脚本中,赋值操作时不能在等号两边加空格#NUM = 100 #错误NUM=100#引用变量 10 # $变量名 取一个变量的值i=$NUM#显示变量echo $NUMecho $i#清除变量unset NUMecho $NUM#使用read从终端读取数据保存在变量中read str#使用readonly创建一个只读的变量。

2024-04-26 18:03:34 1450

原创 make命令

@目标名$<依赖文件列表中的第一个文件$^依赖文件列表中除去重复文件的部分AR归档维护程序的程序名,默认值为arARFLAGS归档维护程序的选项AS汇编程序的名称,默认值为asASFLAGS汇编程序的选项CCC编译器的名称,默认值为ccCFLAGSC编译器的选项CPPC预编译器的名称,默认值为$(CC) -ECPPFLAGSC预编译的选项CXXC++编译器的名称CXXFLAGSC++编译器的选项。

2024-04-25 20:55:41 829

原创 Qt绘图机制

qt中的所有的图都是画出来的。例如:我们的按钮、窗口、标签上的图画图需要两个东西:画家:QPainter 画板:QPaintDevice(常见的控件 按钮 label 窗口...)

2024-04-25 09:52:03 170

原创 事件处理过程

事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,如键盘事件等;另一些事件则是由系统自动发出,如计时器事件。事件处理过程:在Qt内部,Qt通过 QApplication::exec()启动的主事件循环不停的抓取事件队列中的事件。当事件发生时,Qt 将创建一个事件对象。Qt 中所有事件类都继承于QEvent。

2024-04-24 23:21:52 247

原创 QMian Window

2. 工具栏3. 状态栏4. 铆接控件5. 核心控件6. 资源加载7. 对话框(QDialog)对话框是计算机软件中常见的一种用户界面元素,用于与用户进行交互和获取用户输入。它通常以矩形窗口的形式出现,其中包含有关特定任务或信息的相关控件和文本。对话框可以用于显示警告、提示、确认和错误消息,以及获取用户输入的文本、日期、选项等。它还可以用于展示多个选项,供用户选择其中之一。对话框的内容和样式可以根据应用程序的需求进行自定义,并且可以通过程序控制其显示和隐

2024-04-24 22:23:24 963

原创 信号和槽机制

h头文件Q_OBJECTpublic:~Widget();//槽函数button->setText("王者荣耀");//注册信号与槽的链接//槽函数可以是普通的成员函数,还可以是槽函数//如果信号没有参数,槽函数也不能有参数;如果信号有参数,槽函数可以有参数,也可以有参数qDebug() << "王者荣耀之李白最强!Q_OBJECTpublic:signals://信号没有返回值,可以有参数//信号函数不需要定义,只需要声明。

2024-04-24 09:43:37 1174

空空如也

空空如也

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

TA关注的人

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