自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【算法】MySQL算法

2.进行子查询,从e1表中第一行开始,e1中的每一条记录都要和e2的所有记录比较,通过聚合函数筛选出e2表中有三条以下比e1大,则该e1满足条件。这里有一个细节点:就是我们要注意题目让我们输出的格式(列名格式),先看下面的sql语句。1.employee表和department表按照条件进行内连接。由于子查询到的salary可能是空的,因此需要用到。3.按照salary列的值进行降序排序。因此我们要使用as对列名进行重命名。4.从取第一行下面的一行记录。则第二高的薪水是2000。函数来处理结果为空的情况。

2025-02-28 22:23:45 358

原创 【Qt】事件、qt文件

QSaveFile:用于安全保存文件数据的类,向文件中写入数据时,会先将要写入的数据写到一个临时文件中,如果写入过程中出错,不会将临时文件的数据拷贝覆盖到目标文件中,如果写入过程没有出错,则将临时文件中的数据拷贝到目标文件中。在主窗口中创建两个菜单一个用于读取文件,一个用于保存文件,创建一个文本输入框作为中心控件,将读取到的文件内容显示到文本输入框中;事件处理函数里的QMouseEvent类型参数对象提供了此时鼠标的一些属性,比如:事件产生后鼠标此时的位置,按下的是鼠标的左键还是右键等。

2025-01-12 22:38:43 1115

原创 【Qt】对话框

实现以下功能:通过点击主窗口中的按钮创建一个对话框,点击该对话框中的close按钮,该对话框关闭。这里的参数role取值如下:可以通过信号和槽的方式。例子:模态对话框,点击主窗口中的按钮,弹出一个消息对话框,该消息对话框中有标准按钮和自定义按钮,点击不同按钮会打印不同的信息。如果要求消息对话框中仅有标准按钮,QMessageBox类提供了静态成员函数,帮我们创建消息对话框。

2025-01-04 23:42:48 999

原创 【Qt】主窗口

工具栏(粉色区域)上下左右四个方向都可以有,浮动窗口(绿色区域)上下左右四个方向都可以有,中心部件(橙色区域)在中间区域,状态栏(红色区域)在最下方。,QMainWindow包括菜单栏(只能有一个)、工具栏(可以有多个)、浮动窗口(可以有多个)、一个状态栏(只能有一个)、中心部件。注意:向浮动窗口中添加控件必须要先创建一个QWidget,然后把要添加到浮动窗口中的控件添加到该QWidget中,在将该类设置到浮动窗口中。向浮动窗口中添加一个水平布局管理控件,该布局控件中有一个按钮控件和一个标签控件。

2025-01-03 15:50:10 919

原创 【Qt】容器控件、布局管理控件

之前我们在窗口上创建的控件都是固定在窗口界面上的,窗口界面的尺寸可以通过拖拽的方式变化,这些创建的控件不能自适应窗口界面的变化,当界面上有很多控件时就不好我们进行自己计算这些控件在界面上的位置,因此就有了布局管理器。上,下,左,右四个方向的边距属性和QVBoxLayout,QHBoxLayout一样,不同的属性说元素间的距离。QSizePolicy::Expanding:控件的尺寸可以根据空间调整,尽可能的占据更多空间。这种方法只能创建一个布局管理控件,且布局管理控件中的控件可以自适应界面的尺寸变化。

2024-12-30 23:16:44 1121

原创 【Qt】多元素控件:QListWidget、QTableWidget、QTreeWidget

多元素控件有QListWidget、QListView、QTableWidget、QTableView、QTreeWidget、QTreeView,可以看到这些控件有xxxWidget和xxxView之分。xxxWidget其实是xxxView的子类。xxxView是基于MVC软件框架模式下的控件。(Model View Controller):一种软件框架模式,由模型、视图、控制器三个组件组成。

2024-12-29 01:18:21 1042

原创 【Qt】输入控件:QLineEdit、QTextEdit、QComboBox、QSpinBox、QDateTimeEdit、QDial、QSlider

我们可以在Widget声明一个QRegExgValidator*类型的成员变量,在构造函数中new一个正则表达式验证器,然后不用给单行输入框创建验证器,在~Widget中释放该验证器的内存控件,可以吗?可以是可以但是与上面的实现是有差别的。差别:没有正则表达式对象的限制,这种方法的输入框中的文本字符个数没有限制。而上面的方法中是有字符限制的(因为上面的方法是将正则表达式验证器设置到了输入框中),字符限制是正则表达式对象中的限制。

2024-12-22 23:48:08 994

原创 【Qt】显示控件:QLabel、QLCDNumber、QProgressBar、QCalendarWidget

当我们进行拖拽窗口的时候,会触发一些系列resizeEvent,resizeEvent是QWidget类中的一个虚函数,当拖拽窗口时父类QWidget会调用虚函数resizeEvent,那么我们利用多态,通过在Widget子类中重写该虚函数resizeEvent。现在要使我们导入到qrc文件中的图片铺满整个窗口,并且程序运行后,拖拽窗口大小同时该标签上的图片自动调节到与窗口一样的大小,且保持铺满窗口。标签中的图片内容自动拉伸填充整个标签。有两个单选按钮,分别是两个标签的"伙伴",标签中的文本必须是。

2024-12-19 00:07:53 918

原创 【MySQL】非聚簇索引和聚簇索引,索引的创建、查询、删除

因为主键索引结构的叶子节点已经存储了用户数据,建立索引结构也是需要空间的,如果普通索引的叶子节点也存储了用户数据那么就重复存储了,造成不必要的空间浪费。采用InnoDB存储引擎的表的非主键索引即普通索引的索引结构如上图,可以看到,叶子节点存储的是索引数据对应得主键值,而不是用户数据。采用MyISAM存储引擎表的普通索引和主键索引没有太大的区别,只不过就是普通索引的索引值可以重复,主键索引值则不能重复。InnoDB存储引擎采用B+树作为索引结构,B+树的叶子节点中存储的是主键值和对应的用户数据。

2024-12-17 21:23:49 808

原创 【Qt】按钮控件:QPushButton、QRadioButton、QCheckBox、ToolButton

QWidget的常见属性及其功能对于它的派生类控件都是有效的(也就是Qt中的各种控件),包括下面的按钮控件、标签控件等。对于按钮类控件,都是继承字自抽象类QAbtractPushButton, 而该抽象类有继承自QWidget。也就是说QWidget中的所有属性和方法QAbstractButton都可以使用,QPushButton和其他按钮类控件都可以使用QWidget和QAbstractButton中的属性和方法。

2024-12-16 22:43:22 1218

原创 【Qt】QWidget中的常见属性及其功能(二)

在计算机中,使用“像素”表示屏幕上的一个基本单位(一个发光的光点),用三个字节表示每个光点的颜色,一个字节表示R,一个字节表示G,一个字节表示B,即RGB(代表红、绿、蓝三种颜色,这三种颜色可以组成任意颜色)。family(字体家族)、pointSize(字体大小)、weight(字体粗细)、bold(是否加粗)、italic()、underline(是否带下划线)、strikeOut(是否带删除线)。:用于获取控件的不透明度,返回的数据类型时float范围是[0.0,1.0]。1.0表示不透明度最大。

2024-12-16 01:15:02 1216

原创 【Qt】QWidget中的常见属性及其功能(一)

qt中的很多内置类都是继承自QWidget的,因此熟悉QWidget的常见属性及其作用是非常有用的。

2024-12-14 23:03:51 903

原创 【Qt】信号、槽

qt内部已经有大量现成的信号函数和槽函数,但是有些时候需要我们自己定义信号函数和槽函数。1.自定义槽函数的返回值是void,需要声明和实现2.可以有参数,可以被重载。3.可以在public slots、protected slots、priavte slots下,也允许写在public下声明。C++纯代码(即使用connect函数)方式连接信号和槽。上面已有这种方式实现的代码。UI设计窗口的方式自动连接信号和槽。1.选中拖拽的控件点击右键,点击转到槽2.选择要连接的信号。

2024-12-14 00:01:17 1204

原创 【Qt】qt基础

ui_widget.h:该文件中包含类Ui_Widget的声明和定义,当我们通过拖拽控件生成图形界面时,比如拖拽了一个Label控件,然后此时widget,ui文件就会生成相应的Label控件的信息,在编译期间,qt会根据widget.ui中关于Label控件的信息在ui_widget.h中生成关于该Label控件的代码,然后执行生成图形化界面。使用Qt Creator创建qt项目的中会自动生成一些代码,自动生成的代码中就包含一个类,此处就是选择该类的父类(Qt中内置的类)是什么。

2024-12-12 22:05:01 815

原创 【leetcode】替换后的最长重复字符、将字符串翻转到单调递增

这里的字符串s是仅由大写字母组成,首先我们尝试用暴力解法的思路来想一下这道题,通过从第一个字符开始进行枚举,如果出现了条件判断不成立,也就是说,需要替换的字符数量已经超过了K个,因此对于本次枚举的字符串再往后的字符就不可能是重复的字符串了,因此在从下一个字符进行枚举。通过上面例子的逐个位置分析可以理解到,最小翻转次数就是min(某个位置的前面的1的个数+位置后的0的个数),因此我们可以定义两个数组:dp1,dp0,分别表示某个位置前1的个数,位置后0的个数。下面我们来分析一下一个例子,其中K = 2。

2024-12-10 00:34:30 487

原创 【C++】STL容器中的比较函数对象

是类模板中的模板参数,在STL中涉及到以某种规则排序的容器都需要,比如:set、map、priority_queue这些容器内部都是依赖以某种规则存储数据的。STL容器中的比较函数对象可以是:函数指针、仿函数(函数对象)。

2024-11-27 23:04:20 443

原创 【算法】回文数索引、回文子串输出、整数反转

若有str[left]!利用中心扩展思想求出所有回文子串后,将这些子串全部存入到一个vector vv中,题目要求是子串长度小的优先输出,长度相同的按其在原字符串中出现位置靠左的先输出,我们可以使用map mymap容器(自动排序),key表示子串的可能的长度,value代表长度相同的所有子串索引(vector vv的索引)的数组集合。目标字母索引可能是一个或者是两个,返回任意的一个索引即可,如果已经是回文串则直接返回-1。

2024-11-17 01:11:19 362

原创 【算法|字符串、哈希表】验证回文串、螺旋塔、同构字符串、单词规律

第二行输入一个整数nn,它确定了你要构建的螺旋塔的层数。对其对解法一的空间复杂度进行优化,不用定义string对象,直接在给定字符串上进行操作。给定一个字符串s和一个整数n,需要按照特定的规则构建并输出一个螺旋塔形状的字符串序列。2.从第二层开始,每一层都是将上一层字符串的第一个字符移到末尾而形成的新字符串。第二层,将第一层的第一个字符a移到末尾,得到"bcda"。第三层,将第二层的第一个字符b移到末尾,得到"cdab"。第四层,将第三层的第一个字符c移到末尾,得到"dabc"。第一层为"abcd"。

2024-11-05 01:10:45 478 1

原创 【算法】奇数在偶数后、反转字符串中的单词

输入一个整数数组,实现一个接口来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。

2024-10-29 23:15:33 392

原创 【leetcode|哈希表、动态规划】最长连续序列、最大子数组和

2、使用哈希表枚在举过程中虽说哈希表查找数据的时间复杂度是O(1),但第二次循环仍然需要执行多次,最坏的情况下其时间复杂度也会接近O(n^2)1、如果不使用哈希表在枚举过程中查找nums[i]+1时要通过遍历整个数组来进行,因此时间复杂度是O(n^2)两层循环,第一层循环是遍历整个数组;时间复杂度: O(n^2)时间复杂度:O(n^2)空间复杂度:O(n)时间复杂度:O(n)空间复杂度:O(n)空间复杂度:O(1)时间复杂度:O(n)空间复杂度:O(1)时间复杂度:O(n)空间复杂度:O(n)

2024-10-19 16:28:15 543

原创 【MySQL】子查询、合并查询、表的连接

实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。子查询出现的两种场景:1.在where后出现充当筛选筛选条件。在实际应用中为了合并多个select的结果,可以使用集合操作符union、union all。该操作符用于取得两个select结果的并集。如果联合查询,左侧的表完全显示。如果联合查询,右侧的表完全显示。自动去掉结果集中的重复行。自动去掉结果集中的重复行。表的连接分为内连接和外连接。返回一行记录的子查询。

2024-10-02 22:01:20 1198

原创 【MySQL】复合查询

包含的字段:empno(雇员编号)、ename(雇员姓名)、job(岗位)、mgr(雇员领导的编号)、sal(月薪)、comm(年终奖)、deptno(部门)。当一个数+null时结果是null,也就是对于如下sql语句:sal*12+comm中的comm是null因此这个表达式的值就是null。这里要用到 部门表(dept)。包含的字段是:deptno(部门编号)、dname(部门名)、loc(部门地点)将两张表整合得到笛卡尔积(也就是emp表的每条行数据都要与dept表中的所有行数据组合)。

2024-09-30 23:47:53 785

原创 【MySQL】内置函数

注意:length函数返回字符串字节数时,单个字母和数字是1字节;(与字符集编码有关)注意interval后的数值单位可以是:year、day、minute、second。

2024-09-28 18:56:12 811

原创 【MySQL】聚合函数、group by子句

在使用group by子句时,select后只能跟,group by后的字段名(列名),如果select后出现其他列名,mysql会报错。现在有一个雇员表,包含empno(雇员编号)、ename(雇员姓名)、job(岗位)、sal(薪资)、deptno(部门)。这句指令的意思是显示各部门每种岗位的薪资平均值,并显示雇员姓名,这在逻辑上是行不通的,having与group by配合使用,用于对分组后聚合统计后的数据进行筛选。执行顺序不一样,对数据筛选的阶段不同。返回查询到的数据的总和。

2024-09-26 23:36:30 552

原创 【leetcode】环形链表、最长公共前缀

创建一个哈希表,遍历链表先判断哈希表中是否含有要放入哈希表中的节点,如果该节点已在哈希表中出现那么说明该链表是环形的;主要思路就是仿照龟兔赛跑,slow指针是龟,fast指针是兔(),如果是环形链表那么龟兔就会相遇(这个相遇肯定是兔套了龟若干圈.....)两个字符串进行比较得到一个string对象ret(刚开始将ret定义为第一个字符串),ret就是这两个字符串的公共前缀,以此类推。时间复杂度:O(n)空间复杂度:O(n)时间复杂度:O(n)空间复杂度:O(1)空间复杂度:O(1)空间复杂度:O(m)

2024-09-23 23:29:31 401

原创 完美转发、C++11中与线程相关的std::ref

全都是左值引用1、模板中的&&不代表右值引用,而是万能引用,既能接收左值又能接收右值,后续使用中都退化成了左值。2、模板的万能引用只是提供了能够接收同时接收左值引用和右值引用的能力。3、我们希望能够在传递过程中保持它的左值或者右值的属性, 就需要用到完美转发。如果将上面的函数模板改那为普通的函数,那么就限制了接收的类型,只能接收右值(后续也会被退化成左值),无法接收左值,

2024-09-20 22:40:01 453

原创 HTTPS协议中的加密机制分析、证书认证

加密就是把明文(要传输的数据)经过转化变为密文;解密就是把密文经过转化还原为明文。在加密和解密的过程中往往需要一个或多个中间数据,这种数据就是密钥,密钥分为对称密钥和非对称密钥。加密方式基本原理是利用MD5算法(Hash函数)对数据进行运算,生成一串固定长度的字符串(具有唯一性),数据指纹不是一种加密机制,用来数据指纹判断数据是否被篡改过。

2024-08-29 22:49:41 755

原创 TCP协议中的可靠性机制

可靠性:校验和、序列号(按序到达)、确认应答、超时重发、连接管理、流量控制拥塞控制提高性能:滑动窗口、快速重传、延迟应答、捎带应答。

2024-08-26 23:14:27 1269

原创 TCP协议中断开连接机制

目录客户端与服务端四次挥手关于TIME_WAIT状态为什么TIME_WAIT状态等待的时间是2MSL?基于TCP协议通信的客户端与服务端断开连接就要进行四次挥手,如下图:四次挥手过程中客户端与服务端状态转化:客户端ESTABLISHED->FIN_WAIT1:客户端主动调用close时,向服务器发送结束报文段,同时进入FIN_WAIT1状态。FIN_WAIT1->FIN_WAIT2:客户端收到服务器对结束报文段的确认,进入FIN_WAIT2状态,开始等待服务器的结束报文段。FIN_WAIT2->TIME_W

2024-08-25 09:20:20 544

原创 TCP协议中的建立连接机制

该队列的长度由OS自己定,该队列中的连接状态是SYN_REVD,全连接队列中的连接是从半连接队列中得到的。服务端在调用listen后,处于客户端等待连接请求的状态,服务端会建立多个连接,这些连接就是一个服务端操作系统创建的数据结构,OS必须将多个连接管理起来,服务端的操作系统中有一个。如果上层因为繁忙来不及accept获取全连接队列中的连接,这种情况下全连接队列中大量的连接也没什么用处,并且会占用操作系统大量的内存,操作系统维护这些连接数据结构是有成本的。启动服务端,同时启动3个客户端连接服务端。

2024-08-21 23:59:26 1317

原创 TCP协议段中的六个标志位

TCP报文格式中的六个标志位由6个比特构成,在通信双方基于TCP协议互相发送报文数据时可以通过报头中标志位来区别对方发送的报文数据的请示。

2024-08-21 17:06:39 578

原创 UDP和TCP协议段格式分析

当发送端一次性向接收端发送多个报文数据时(确认应答方式不是发一个报文必须得让对方确认应答),先被从用户级缓冲区拷贝到发送缓冲区里的数据,可能经过后网络网络层(由于网络宽带影响)不是第一个到达接收端接收缓冲区,这样就导致了接收方接收的数据乱序了!十进制:[0,15],经过转换就可以得到报头的总大小,报文首部大小=标准报头大小(20byte) + 选项大小。确认序号=序号+1,当接收端确认应答时报头中的32位确认序号表示确认序号之前的数据接收端已经全部收到,期望发送端下一次发送数据从确认序号指定的数字发送。

2024-08-17 16:37:31 2294 3

原创 【Linux网络编程】套接字Socket(UDP)

比如你的手机相当于是一个客户端主机,手机里有聊天应用、短视频应用、游戏等各种应用,当你进入游戏时你的客户端会向游戏服务端发送请求,此时游戏服务端必须要有唯一的你的手机中该游戏应用的端口号,否则仅凭ip地址游戏服务端可能会将响应发送给你的手机的其他应用。ip地址是网络协议地址(4字节32位,形式:xxx.xxx.xxx.xxx xxx在范围[0, 255]内),是IP协议提供的一种统一的地址格式,每台主机的ip地址不同,一个主机可以有多个ip地址,一个ip地址只能被一个主机占用。是传输层协议的内容。

2024-07-31 17:39:29 623 1

原创 【Linux多线程】死锁、同步、条件变量

为什么要有线程同步:线程同步可以避免多线程并发执行时产生的线程饥饿问题(由于每个线程竞争锁的能力不同,就会导致其中一个线程或几个独占锁,导致其他线程无法访问临界资源)。线程一二三都争夺锁资源时,当临界资源不满足某条件时,线程一二三会依次进入到条件变量里阻塞等待,直至临界资源满足某条件时其他线程唤醒在条件变量里的这三个等待的线程。如图线程一想要得到线程二的锁,线程二又想得到线程一的锁,但根据互斥条件、请求与保持条件、不剥离条件得到线程一和二申请对方的锁时都会失败,一次两个线程都会阻塞!

2024-07-22 23:59:30 657

原创 【Linux线程互斥】互斥量、互斥量加锁及其实现原理

当一个当多线程并发执行时,每个线程都有可能获得锁从而加锁临界区代码,但是这时就由这些并发执行的线程的竞争锁的能力决定那个线程先得到锁,先得到锁的线程会先在eax寄存器中的al寄存器里设定一个0值,再将mutex中的1和eax寄存器里的0值交换,但其他线程要进行加锁的时候,物理内存里的mutex值已经是0了,交换后eax寄存器里对应这些线程的位置的值仍是0因此该线程就被挂起等待了!但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互。

2024-07-20 23:59:30 517

原创 【Linux线程】线程的认识

Linux中的原生线程库中提供的关于线程的函数当调用pthread_create函数创建线程时

2024-07-19 23:59:35 519

原创 【Linux】线程控制

如果一个进程中的线程掉执行时发生错误异常导致线程终止退出,比如解引用空指针、除0错误都会时线程异常终止,这会导致整个进程也随之终止!,这些控制线程的函数都在libpthread.so动态库中,因此链接这些线程函数库时要使用编译器命令的。start_routine:是个返回值和参数都为void*的函数的地址,线程启动后要执行的函数。线程等待和进程等待的目的基本是一样的!因为当其它线程得到这个返回指针时线程函数已经退出了。返回的指针所指向的内存单元必须是全局的或者是用。终止同一进程中的另一个线程。

2024-07-18 23:59:54 693

原创 【Linux信号】信号检测处理与捕捉

信号由操作系统发送给相应的进程,进程保存信号,最后再捕捉处理信号。

2024-07-14 23:59:24 397

原创 【Linux信号】信号的保存、信号在内核中的表示、信号集操作函数、sigprocmask、sigpending

我们先来了解一下关于信号的一些常见概念:实际执行 信号的处理动作 称为信号从产生到递达的之间的状态称为进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时是处于未决状态的,知道进程解除对该信号的阻塞,该信号才可以进行递达!阻塞和忽略是不同的。阻塞的信号是不会递达的,而忽略是在递达后可选的一种处理动作。

2024-07-12 23:53:13 1597

原创 【日志信息管理】管理日志信息的类

日志用于记录程序的执行记录包括程序的出错记录,程序致命退出原因,程序的正常执行记录。这样我们就可以很快的察觉程序的错误原因、执行状况等等,因此管理日志信息是非常重要的。日志一般由以下部分组合:日志时间、日志等级、日志内容、日志文件的名称日志等级分为5个:Info:常规信息、Warning:报警信息、Error:发生错误,需要立即处理、Fatal:致命信息、Debug:调试信息。

2024-07-06 23:59:38 688

空空如也

空空如也

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

TA关注的人

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