自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(110)
  • 收藏
  • 关注

原创 qt中json类

Qt 5.0开始提供了对Json的支持,我们可以直接使用Qt提供的Json类进行数据的组织和解析,下面介绍4个常用的类。

2023-10-13 14:08:54 539

原创 qt线程介绍

qt为多线程提供了完美的支持,实现多线程一般是从从QTHread中继承定义自己的线程类,QT也提供了QMutexLocker,QwaitCondition等类实现线程同步,与Linux系统或C++中的线程库类似。这里简单介绍下多线程的创建。默认的线程在Qt中称之为窗口线程,也叫主线程,负责窗口事件处理或者窗口控件数据的更新子线程负责后台的业务逻辑处理,子线程中不能对窗口对象做任何操作,这些事情需要交给窗口线程处理主线程和子线程之间如果要进行数据的传递,需要使用Qt中的信号槽机制。

2023-10-02 16:45:34 312

原创 qt常用控件1

QLabel用于显示文本或图像。不提供用户交互功能。标签的视觉外观可以通过多种方式进行配置,并且可用于为另一个小组件指定焦点助记键。

2023-10-01 17:13:22 397

原创 QT事件及处理

当事件产生被发送到对应的窗口之后,窗口并不会直接处理这个事件,而是对这些事件进行细分,然后根据事件的类型再次进行分发,对应的事件处理器函数得到这个分发的事件之后就开始处理这个事件。关于窗口事件的分发,对应一个事件分发器,叫做event这个类中常用的一些API函数:比如说 :该函数的作用是让窗口接受传递过来的事件,事件不会向上层窗口(父窗口)传递void QEvent::ignore():该函数的作用是让窗口忽略传递过来的事件,事件被传递给父窗口(向上传递)

2023-10-01 14:49:03 449

原创 窗口类介绍

停靠窗口可以通过鼠标拖动停靠到窗口的上、下、左、右,或者浮动在窗口上方。关于颜色的属性信息, 在QT框架中被封装到了一个叫QColor的类中,颜色都是基于红, 绿, 蓝这三种颜色调配而成的, 并且颜色还可以进行透明度设置, 默认是不透明的。通过这个类我们可以得到一个输入对话框窗口, 根据实际需求我们可以在这个输入窗口中输入整形, 浮点型, 字符串类型的数据, 并且还可以显示下拉菜单供使用者选择。设置窗口的大小,尺寸,得到对应的尺寸,窗口的移动,以及设置窗口标题,图片等。finished()信号将发出r;

2023-09-29 14:52:47 129

原创 QT按钮介绍

这是按钮的基类,它是继承QWidget类它可对当前的图标,标题等进行设置。它有自己的一些信号与槽函数:/*当按钮被激活时(即,当鼠标光标在按钮内时按下然后释放),当键入快捷键时,或者当click()或animateClick()被调用时,这个信号被发出。值得注意的是,如果调用setDown()、setChecked()或toggle(),则不会触发此信号。*/// 在按下按钮的时候发射这个信号// 在释放这个按钮的时候发射直观信号。

2023-09-29 14:50:34 638

原创 工厂与观察者模式

通过一个加工厂,在这个工厂中添加对应材料,我们就可以得到想要的东西,在程序设计中,这种模式就叫做工厂模式,工厂生成出的产品就是某个类的实例,也就是对象。关于工厂模式一共有三种,分别是:简单工厂模式、工厂模式、抽象工厂模式。

2023-09-27 18:25:43 351

原创 QT基础介绍

自定义的类型也可以使用QVariant类进行封装, 被QVariant存储的数据类型需要有一个默认的构造函数和一个拷贝构造函数。为了实现这个功能,首先必须使用Q_DECLARE_METATYPE()宏。例如:Q_DECLARE_METATYPE(Type)//通常将其放在头文件下。// 如果当前QVariant对象可用转换为对应的模板类型 T, 返回true, 否则返回false// 将当前QVariant对象转换为实际的 T 类型例如。

2023-09-24 14:22:49 95

原创 信号量实现生产消费模型

这里基与环形队列与信号量来实现一个简单的生产消费模式。当临界资源可以将其细分时,可以允许多个执行流去访问它。

2023-09-23 11:30:11 81

原创 MySQL事务管理

比如在进行CRUD时:客户端A检查时还有一张票,于是将票卖掉,但还未去更新数据库,此时客户端B检查时也发现还有一张票,于是也将票卖掉。这便出现了问题。事务由一条或多条SQL语句组成,这些语句在逻辑上存在相关性,共同完成一个任务这一组语句要么全部成功,要么全部失败,是一个整体。并且MySQL同一时刻可能存在大量事务,如果不对这些事务加以控制,在执行时就可能会出现问题。一个完整的事务,绝对不是简单的sql集合,还需要满足如下四个属性:一个事务(

2023-08-02 15:17:37 103

原创 Linux环境下的开发工具(yum、vim、gdb、make/Makefile)

预定义变量获取变量值:$(变量名)函数:例如:

2023-07-19 11:46:18 389

原创 MySQL用户管理

登入mysql后,进入mysql库用户信息保存在user表中,进行查看:CREATE USER '用户名'@'登录主机' IDENTIFIED BY '密码';DROP USER '用户名'@'登录地址';删除用户时如果不指明待用户的登录地址,则默认删除的是登录地址为%的用户通过调用password,超级用户可以指定更改用户的密码。

2023-07-18 21:12:10 1252

原创 MySQL索引

这其实就是B+树,InnoDB的索引结构,当创建表时设置了主键,那么MySQL在底层就会自动将这张表中的的数据以B+树的形式组织起来,保存在Buffer Pool当中。与B树的区别:B树中的节点中都存有数据,棵树形结构一定会变得更高,综合看查找效率会更低,且B+树的叶子节点还以链表的方式连接起来,更有利于进行数据的范围查找。采用的也是B+树结构,且普通索引的B+树中的键值可以重复,并且B+树的叶子结点中存储的不是数据记录,而是对应数据记录的主键值。,而且默认的全文索引支持英文,不支持中文。

2023-07-17 10:20:37 110

原创 MySQL内外连接

要列出没有员工的部门,所以要将部门表信息全部列出,上条语句中,部门表在右边,所以使用右连接。会直接显示左侧表中的记录信息,而其对应的右侧表中的列信息将会用NULL值进行填。因为id=7的同学没有成绩,所以没有显示出来。直接使用内连接进行查询,会将会显示出所有满足连接条件的记录。先建立两张表,学生表,成绩表。列出部门名称和这些部门的员工信息,同时列出没有员工的部门。如果联合查询,左侧的表完全显示,是左外连接。子句对两种表形成的笛卡儿积进行筛选。显示SMITH的名字和部门名称。写法上是基本类似的。

2023-07-12 22:28:21 199

原创 MySQL复合查询

是指查询语句可以嵌套在其他SQL语句中,也叫嵌套查寻,也分为单行子查询、多行子查询、多列子查询,以及在from子句中使用的子查询。显示和10号部门的工作岗位相同的员工的名字、岗位、工资和部门号,但是不包含10号部门的员工。有员工编号,员工姓名,职位,雇员领导编号,入职时间,薪水,奖金,部门号。显示每个高于自己部门平均工资的员工的姓名、部门、工资和部门的平均工资。显示工资比30号部门的所有员工的工资高的员工的姓名、工资和部门号。显示每个部门工资最高的员工的姓名、工资、部门和部门的最高工资。

2023-07-11 22:03:05 494

原创 MySQL基本查询与内置函数

(雇员编号(empno)。部门编号(deptno)。在date中添加日期或时间,interval后的数值单位可以是:year、month、day、hour、minute、second。在date中减去日期或时间,interval后的数值单位可以是:year、month、day、hour、minute、second。补充:SQL语句会先将表中的数据按照部门号进行分组,然后各自在组内做聚合查询得到每个组的平均工资和最高工资。等级(grade)。(部门编号(deptno)。SUM:返回查询到的数据的总和(数字)

2023-07-09 10:31:14 747

原创 MySQL表的增删查改

查询数据时指定了where子句,会在查询数据时会根据where子句筛选出符合条件的记录,然后将符合条件的记录作为数据源来依次执行select语句。注意:如果插入记录中的主键或唯一键已经存在,那么就会因为主键冲突或唯一键冲突导致插入失败。对查询结果进行排序,ASC和DESC分别代表的是排升序和排降序,默认为ASC。创建一个表B,将A中的数据去重后插入到表A,将表A删除,将表B改为表A。补充:当有自增长键时,通过delete语句删除整表数据时,不会重置。支持全列查询,指定列查询,表达式,为查询结果指定别名。

2023-06-02 20:55:43 557

原创 MySQL基础2

占用1字节,默认为有符号:位类型:M指定位数,默认值为1,范围为1-64,bit类型在显示时,按照ASCII码对应的值进行显示。M指定显示长度,D指定小数位数,占用4字节M指定显示长度,D指定小数位数,占用8字节M指定显示长度,D指定小数位数,每4个字节表示9个数字,小数点占用1字节固定长度字符串:L指定字符串长度,最大为255可变长度字符串:L指定字符串长度上限,最多占用65535字节时间日期类型:YYYY-MM-DD格式 / YYYY-MM-DD HH:MM:SS格式。

2023-06-01 21:02:28 616

原创 mysql基本操作1

1.查看系统默认的字符集,若是指定数据库下使用该SQL,则查看的是该数据库对应的字符集。查看系统默认的字符集校验规则,指定数据库下使用该SQL,则查看的是该数据库对应的字符集校验规则。3.查看数据库4.显示创建语句5.创建数据库时通过charset和collate分别指明数据库的编码格式和校验规则,charset=utf8,也可以写成character set=utf8或character set utf8。

2023-05-27 20:13:09 1136

原创 C++11--线程库的认识

目录thread线程的构造方式相关成员函数join与detach线程传参 互斥量mutexmutexLocks 原子性操作库条件变量 它是不支持拷贝构造,赋值的,但是可以支持移动构造,移动赋值。还可以直接创建无参的对象。它的有参的构造是支持可变参数模板的,:可调用对象,比如函数指针、仿函数、lambda表达式、被包装器包装后的可调用对象等。:调用可调用对象fn时所需要的若干参数。例如:使用构造函数:使用lambda:也可以使用移动构造:相关成员函数 例如:常用的函数但上面这些函数都是需

2023-05-02 21:23:42 471

原创 Git的基本使用

是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,比如说可以在同一个项目中,分别和不同工作小组的人相互协作。基本工作原理:1. clone (克隆) : 从远程仓库中克隆代码到本地仓库。2. checkout (检出):从本地仓库中检出一个仓库分支然后进行修订。3. add (添加) : 在提交前先将代码提交到暂存区。4. commit (提交) : 提交到本地仓库。本地仓库中保存修改的各个历史版本。

2023-04-26 20:36:33 656 1

原创 IO多路转接—select,poll,epoll

系统提供select函数来实现多路复用输入/输出模型.select系统调用是用来让我们的程序监视多个文件描述符的状态变化的;程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变函原型数参数解释:nfds:需要监视的最大的文件描述符值+1可读文件描述符的集合,是输入输出型参数,调用时用户告知内核需要监视哪些文件描述符的读事件是否就绪,返回时内核告知用户哪些文件描述符的读事件已经就绪。

2023-04-17 15:07:35 342

原创 单调栈入门详解

用栈模拟,从后往前遍历,若栈为空,则填入数组的大小(这里方便计算宽度),若当前元素比栈顶元素小,则持续将栈顶元素出栈,直到栈顶元素比当前元素小,填入栈顶元素下标)

2023-04-05 18:20:56 323

原创 数据链路层--以太网协议

在学习完ip协议后知道,网络层解决的问题是提供跨网络发送数据的能力,链路层解决的则是两台相连主机之间的通信问题。

2023-04-04 10:17:59 1487

原创 网络层--IP

ip地址的分为两个部分,网络号和主机号。网络号:保证互相连接的两个网段具有不同的标识。主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。子网其实就是把网络号相同的主机放到一起,如果要在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复。

2023-03-31 14:12:46 157

原创 TCP相关概念

在拥塞窗口发送数据量以内不会拥塞,超过可能会引发拥塞问题。例如,当出现拥塞时,将拥塞窗口定义为一个较小的值,当能收到ACK应答时,在不断去增大这个拥塞窗口(以指数级别)。滑动窗口的大小= min(对方的窗口大小,拥塞窗口)补充:在慢启动时是以指数级别增加的,增加到一定程度时,会线性增长。此处引入一个叫做慢启动的阈值,当拥塞窗口超过这个阈值的时候, 不再按照指数方式增长, 而是按照线性方式增长。当TCP刚开始启动的时候,慢启动阈值设置为对方窗口大小的最大值。

2023-03-11 09:21:25 440

原创 传输层——TCP协议

TCP全称为 " 传输控制协议 (Transmission Control Protocol"),其可靠性非常强,其应用非常广泛,例如:HTTPS,FTP、SSH。TCP是具有发送与接受缓冲区的,我们用write/send函数把数据拷贝到内核缓冲区后,tcp会在合适时候进行发送。我们只是将数据拷贝到对应的缓冲区内。内核缓冲区的数据什么时候发,发多少,出错了怎么办,要不要添加提高效率的策略——都是由OS内的TCP自主决定的,所以TCP叫做传输控制协议!

2023-03-09 15:49:24 511

原创 https介绍

数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度的字符串—数字摘要(这个字符串就叫做数据摘要/数据指纹)。数字指纹并不是⼀种加密机制,因为他不可以通过这个字符串反解出原数据,即:不可解密。只是⽤来判断数据有没有被窜改。摘要经过加密,就得到数字签明(后面解释)

2023-03-07 08:59:02 1878

原创 传输层--UDP协议

UDP的接收缓冲区的作用就是,将接收到的报文暂时的保存起来,供上层读取。当应用层交给UDP多长的报文,UDP就原样发送,既不会拆分,也不会合并,这就叫做面向数据报 ,不能够灵活的控制读写数据的次数和数量。当应用层将数据交给传输层后,在传输层就会创建一个UDP报头类型的变量,然后填充报头当中的各个字段,此时就得到了一个UDP报头。知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定的,端口号和进程是一一对应的。数据报:报文和报文之间有明显边界,因为有16位UDP长度。

2023-03-07 08:58:55 1382 1

原创 应用层——http协议

HTTP定义:超文本传输协议,是一个 无链接,无状态的应用层协议。在编写网络通信代码时,我们可以自己进行协议的定制,但已经有很多优秀的工程师早就已经写出了许多非常成熟的应用层协议,其中最典型的就是HTTP协议。注意:http协议底层是tcp,tcp是面向链接的,http只是使用了tcp的链接能力,但是http本身是无链接的。HTTP(Hyper Text Transfer Protocol)协议又叫做超文本传输协议,是一个简单的请求-响应协议,HTTP通常运行在TCP之上。URL就是我们常说的网址。

2023-03-06 10:25:05 825

原创 守护进程与TCP通讯

建立连接后,TCP协议提供全双工的通信服务,所谓全双工的意思是,在同一条连接中,同一时刻,通信双方可以同时写数据,相对的概念叫做半双工,同一条连接在同一时刻,只能由一方来写数据。这时客户端调用write发送请求给服务器,服务器收到后从read返回,对客户端的请求进行处理,在此期间客户端调用read阻塞等待服务器端应答。:进程组由一个进程或者多个进程组成,每个进程组有唯一的进程组ID,每个进程组有一个进程组组长(和进程组ID一样)。创建一个新会话,谁调用这个函数,谁就成为这个新会话进程组的组长返回值。

2023-02-28 20:36:49 469

原创 C++ IO流

在C语言中,如何用一个整形变量的数据转化为字符串格式,方法:1.使用itoa()函数2.使用sprintf()函数int a = 10;//将整型的a转化为字符串格式存储在字符串arr当中但是在两个函数在转化时,都需要先给出保存结果的空间,而空间的大小是不太好界定的,除此之外,转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。在C++中,我们可以使用stringstream类对象来解决这些问题。string str;

2023-02-27 20:56:33 274

原创 最小生成树与最短路径

图的最小生成树及最短路径算法详解

2023-02-02 14:20:38 2531

原创 图的存储与遍历

邻接矩阵(二维数组)即是:先用一 个数组将定点保存,然后采用矩阵来表示节点与节点之间的关系。矩阵可以存储0或者1来表示两个顶点之间是否连通,也可以存储权值。. 用邻接矩阵存储图是能够快速知道两个顶点是否连通,缺陷是如果顶点比较多,边比较少时,矩阵中存储了大量值为0的矩阵,比较浪费空间,并且要求两个节点之间的路径不是很好求。例如:上面的邻接矩阵中,如果两个顶点之间不连通的话,用无穷大来表示。上面的是有向图,无向图的矩阵是对称的。邻接表:使用数组表示顶点的集合,使用链表表示边的关系。

2023-02-01 09:36:27 651

原创 并查集的使用

什么是并查集?将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个 单元素集合,然后按一定的规律将归于同一组元素的集合合并。在这个过程中要反复用到查询某一 个元素归属于哪个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(union-find set)。例如:一开始共有0-9,共10个数,将它们的下表初始化为-1,表示这10个数各不相关,都属于不同的集合。现在,将它们开始合并,假设是这样合并:1-将要合并的两个元素的值进行相加,将相加的值赋予其中一个元素。

2023-01-12 17:42:33 618

原创 考虑写出一个不抛异常的swap 函数

1.当std::swap对你的类型效率不高时,提供一个swap成员函数,并确定这个函数不抛出异 常2.如果你提供一个member swap,也该提供一个non-member swap用来调用前者。对于 class(而非template class),也请特化std::swap3.调用swap时应针对std::swap使用using声明式,然后调用swap并且不带任何“命名空间n 资格修饰”

2023-01-12 13:34:49 412

原创 完全背包理论基础

这就很容易想到了,在遍历完全背包时,由于每个相同物品可以放入多次,所以再遍历背包容量时应该从小到大去遍历。当使用二维数组去遍历的时候,遍历背包容量时是从小到大遍历的。例如:(当时是先遍历物品,再遍历背包)思路:硬币的面额对应的是物品,凑成的总金额是背包容量。先看一维数组的遍历顺序,前面是先遍历物品,在遍历背包容量(遍历背包容量时是从小到大,才能确保同一个物品可以放入多次)。(前面是先遍历物品,后面遍历背包的),那么遍历顺序是否可以改变呢?用二维数组时,也是可以先遍历背包容量,再去遍历物品。

2023-01-11 21:13:10 235

原创 effective c++读书笔记4

因此operator==被要求将“operator*内的 static Rational对象值”拿来和“operator*内的 staticRational对象值”比较,那么当我们每回调用operator*函数的时候,每回返回的都是同一个静态局部变量的引用。在函数内,我们在堆上申请了一个对象,然后返回对象的引用,虽然函数结束之后对象仍存在,我们使用起来不会出错,但是这个函数内部建立的对象我们无法释放(因为我们无法获取其指针,不能进行delete操作)。象有个class用来表示网页浏览器。

2023-01-10 10:17:36 344 1

原创 01背包问题详解

dp[j]有两个选择,一个是取自己dp[j],一个是取dp[j - weight[i]] + value[i],取最大值,递归公式为:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);在使用二维数组的时候,递推公式:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);解释:dp[i][j]的含义:从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。

2023-01-09 17:01:31 636

原创 effective C++读书笔记3

避免这类问题就是分离语句,将“创建的对象”与“放入智能指针对象”这两个步骤合成一步完成,而不是在函数调用中完成。

2023-01-04 11:22:49 400

空空如也

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

TA关注的人

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