自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 598

原创 数据库(MySQL)

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

2024-05-21 12:40:44 725

原创 计算机网络

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

2024-05-19 17:28:24 1144

原创 数据类型总结

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

2024-05-16 10:19:22 438

原创 集合(set)

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

2024-05-16 10:07:41 329

原创 字典(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 449

原创 元组(tuple)

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

2024-05-14 17:37:35 114

原创 列表(list)

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

2024-05-14 16:58:01 198

原创 Python字符串

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

2024-05-14 09:47:13 698

原创 Python基础知识

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

2024-05-13 12:24:00 985

原创 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 247

原创 信号量概述

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

2024-05-09 22:45:03 607

原创 互斥锁概述

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

2024-05-09 22:03:31 1261

原创 线程的概述

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

2024-05-09 19:13:05 1145

原创 共享内存概述

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

2024-05-07 19:34:44 938

原创 消息队列概述

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

2024-05-07 15:03:41 769

原创 管道:有名管道

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

2024-04-30 15:04:48 446

原创 文件描述符

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

2024-04-30 11:07:33 511

原创 管道:无名管道

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

2024-04-29 20:04:55 951

原创 进程间的通信

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

2024-04-29 14:54:09 646

原创 进程的替换(exec)

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

2024-04-28 18:53:06 457

原创 fork函数与vfork函数

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

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

原创 进程的概述

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

2024-04-27 16:39:32 906

原创 Linux系统编程

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

2024-04-27 14:12:38 1220

原创 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 1427

原创 make命令

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

2024-04-25 20:55:41 788

原创 Qt绘图机制

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

2024-04-25 09:52:03 139

原创 事件处理过程

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

2024-04-24 23:21:52 226

原创 QMian Window

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

2024-04-24 22:23:24 944

原创 信号和槽机制

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

2024-04-24 09:43:37 934

原创 对象模型(对象树)

我们看到,在上面的代码中,作为父对象的 window 会首先被析构,因为它是最后一个创建的对象。这段代码是正确的,quit 的析构函数不会被调用两次,因为标准 C++要求,局部对象的析构顺序应该按照其创建顺序的相反过程。因此,这段代码在超出作用域时,会先调用 quit 的析构函数,将其从父对象 window 的子对象列表中删除,然后才会再调用 window 的析构函数。在创建QObject对象时,可以提供一个其父对象,我们创建的这个QObject对象会自动添加到其父对象的children()列表。

2024-04-23 12:09:36 850

原创 QT学习使用

Widget类实例化的对象w,此时会调用构造函数,对如果对当前Widget类中的构造函数中写入设置的属性或者添加一些控件,当实例化对象是就会调用构造函数,从而实现想要达到的目的,并且这样做也不会使得主函数中有多余的代码。n subdirs ‐这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。qt助手通常在安装Qt时都会自带一个Qt助手,方便去查询Qt中的要使用的类和函数等一般会在开始菜单的Qt目录中,一般叫做Assistant。

2024-04-23 10:53:50 1197

原创 函数对象、谓词

1. 函数对象就是类中重载了(),operator()函数,可以像函数一样调用,所以我们也把函数对象叫做仿函数2. 谓词谓词是指普通函数或重载的operator()返回值是bool类型的函数对象(仿函数)。如果operator 接受一个参数,那么叫做一元谓词,如果接受两个参数,那么叫做二元谓词,谓词可作为一个判断式。

2024-04-22 15:54:40 232

原创 deque容器

/重新指定容器的长度为num,若容器变长,则以elem值填充新位置,如果 容器变短,则末尾超出容器长度的元素被删除。//在pos位置插入[beg,end)区间的数据,无返回值。//在pos位置插入一个elem元素的拷贝,返回新数据的位置。//构造函数将[beg, end)区间中的元素拷贝给本身。//删除[beg,end)区间的数据,返回下一个数据的位置。//将[beg, end)区间中的数据拷贝赋值给本身。

2024-04-22 14:16:41 636

原创 vector容器

Vector的实现技术,关键在于其对大小的控制以及重新配置时的数据移动效率,一旦vector 旧空间满了,如果客户每新增一个元素,vector内部只是扩充一个元素的空间,实为不智,因为所谓的扩充空间(不论多大),一如刚所说,是”配置新空间‐数据移动‐释放旧空间”的大工程,时间成本很高,应该加入某种未雨绸缪的考虑,稍后我们便可以看到vector的空间配置策略。为了降低空间配置时的速度成本,vector实际配置的大小可能比客户端需求大一些,以备将来可能的扩充,这边是容量的概念。//将vec与本身的元素互换。

2024-04-22 11:49:08 816

原创 string容器

u String 封装了很多实用的成员方法:查找 find,拷贝 copy,删除 delete 替换 replace,插入 insert;每一次 string 的复制,取值都由 string 类负责维护,不用担心复制越界和取值越界等。C风格字符串(以空字符结尾的字符数组)太过复杂难于掌握,不适合大程序的开发,所以C++标准库定义了一种string 类,定义在头文件。u Char*是一个指针,String 是一个类 string 封装了 char,管理这个字符串,是一个。类型字符串赋值给当前的字符串。

2024-04-22 01:57:30 564

原创 STL的基本概述

长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出”可重复运用的东西”的方法,让程序员的心血不止于随时间的迁移,人事异动而烟消云散,从函数(functions),类别(classes),函数库(function libraries), 类别库(class libraries)、各种组件,从模块化设计,到面向对象(object oriented ),为的就是复用性的提升。复用性必须建立在某种标准之上。

2024-04-22 01:15:47 588

原创 C++异常

1. 异常的基本概念异常: 出错后,将出错问题返回给调用处,c语言的异常处理比较简单,容易出错,c++处理异常不容易出错。2. 代码实现3. 栈解旋在try到throw之间定义的对象,在throw之后会被释放4. 异常变量生命周期抛出的匿名对象的生命周期在catch里面。

2024-04-20 23:33:09 154

原创 C++类型转换

static_cast可以用来转换基本的内置数据类型 int char double...static_cast可以用来转换发送继承关系之间的类,但是不保存安全性。dynamic_cast:一般用来转发生继承关系之间的自定义的数据类型。可以用于转换发送继承关系之间的类,保证转换是安全的,子转父是可以的。const_cast :一般用来转换加const和去除const。static_cast:一般用来转换内置的基本数据类型。static_cast<待转换的类型>(待转换的数据)不能用于转换基本的数据类型。

2024-04-20 21:02:44 361

原创 C++模版

函数模板: 形参的类型不具体指定,用通用类型代替,在调用时,编译器会根据实参的类型推导出形参的类型(类型参数化)//函数模板来实现template //定义一个模板 模板的通用类型为T//紧跟函数的定义T temp = a;a = b;b = temp;char a = 1;char b = 2;int c = 3;int d = 4;//自动推导//显示指定类型自动类型推导的结果不一致2. 函数模版和普通函数区别函数模版:不能进行自动类型转换。

2024-04-18 14:09:22 525

空空如也

空空如也

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

TA关注的人

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