自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

fufufu_的博客

学会底层,学会一切

  • 博客(113)
  • 问答 (3)
  • 收藏
  • 关注

原创 Qt人脸识别与分析系统

本项目是一款基于Qt5框架构建的人脸检测应用程序,支持多摄像头选择和用户友好的图形界面。系统集成了百度的人脸检测API,能够通过HTTPS协议POST方法安全地发送请求,并解析返回的JSON数据来获取人脸特征信息,如年龄、性别、情绪状态及是否佩戴口罩等。为确保高性能和稳定性,项目还采用了多线程技术优化图像处理流程。

2024-09-03 17:09:40 1346

原创 Linux 读写锁

读写锁是互斥锁的升级版,如果加了读锁,多个线程作读操作,那么读是并发的或者并行的,所以可以提高读操作的时候程序的执行效率。但是在写操作的时候,和互斥锁一样,还是串行的。读写锁在 Linux 中类型为锁定状态:锁定 / 打开锁定的是什么操作:读操作/写操作哪个线程上的锁读写锁的使用方式和互斥锁的使用方式一样:找共享资源,确定临界区,在临界区的开始位置加锁(读锁 / 写锁),临界区结束的位置解锁。

2024-09-08 23:01:06 849

原创 Selenium自动化测试 常见API的使用

Selenium 自动化测试工具常用 API

2024-08-23 13:33:51 894

原创 【Qt学习笔记】(六)界面优化

在网页前端开发领域中,CSS是一个至关重要的部分.描述了一个网页的"样式"从而起到对网页美化的作用所谓样式,包括不限于大小,位置,颜色,背景,间距,字体等等现在的网页很难找到没有CSS的.可以说让"界面好看"是一个刚需网页开发作为GUI的典型代表,也对于其他客户端GUI开发产生了影响. Qt也是其中之一.Qt仿照CSS的模式,引入了QSS,来对Qt中的控件做出样式上的设定,从而允许程序员写出界面更好看的代码.

2024-03-19 10:05:00 1602

原创 【Qt学习笔记】(五)Qt 系统相关

事件是应用程序内部或者外部产生的事情或者动作的统称。在Qt中使用一个对象来表示一个事件。所有的Qt事件均继承于抽象类QEvent。事件是由系统或者Qt平台本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一-个相应的事件。-些事件 是在用户操作时发出,如键盘事件、鼠标事件等,另一些事件则是由系统本身自动发出,如定时器事件。常见的Qt事件如下:常见事件描述文件操作是应用程序必不可少的部分。Qt作为一一个通用开发库,提供了跨平台的文件操作能力。

2024-03-13 20:19:22 1311

原创 【Qt学习笔记】(四)Qt窗口

对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。Qt常用的内置对话框有: QFiledialog (文件对话框)、QColorDialog (颜色对话框)、QFontDialog(字体对话框)、QInputDialog (输入对话框) 和QMessageBox (消息框)创建一个 QMainWindow 项目后,点击新建文件,点击 Qt 设计器界面类这里选择第三个。

2024-03-02 15:26:57 1260

原创 【Qt学习笔记】(三)常用控件

Widget是Qt中的核心概念英文原义是"小部件",我们此处也把它翻译为"控件" .控件是构成一个图形化界面的基本要素.像上述示例中的,按钮,列表视图,树形视图,单行输入框,多行输入框,滚动条,下拉框等,都可以称为"控件".Qt作为一个成熟的GUI开发框架,内置了大量的常用控件.这一点在Qt Designer中就可以看到端倪.并且Qt也提供了"自定义控件"的能力,可以让程序员在现有控件不能满足需求的时候,对现有控件做出扩展,或者手搓出新的控件.

2024-02-05 21:59:08 2180

原创 【Qt学习笔记】(二)信号和槽

在Qt中,用户和控件的每次交互过程称为一个事件。比如"用户点击按钮"是一个事件,"用户关闭窗口"也是一个事件。每个事件都会发出一个信号,例如用户点击按钮会发出"按钮被点击"的信号,用户关闭窗口会发出"窗口被关闭"的信号。Qt中的所有控件都具有接收信号的能力,一个控件还可以接收多个不同的信号。对于接收到的每个信号,控件都会做出相应的响应动作。例如,按钮所在的窗口接收到"按钮被点击"的信号后,会做出"关闭自己"的响应动作;

2024-02-01 22:35:51 1429

原创 【Qt学习笔记】(一)初识Qt

Qt套件是指Qt程序从编译链接到运行环境的全部工具和Qt类库的集合,对于MinGW版本Qt程序生成和调试,至少需要MinGW中的编译器g++ (自 动调用链接器)、g++ 配套的基础库、调试器gdb还有使用MinGW环境编译而成的Qt类库自身。这里先简单说一下,本质就是给按钮的点击操作,关联一个处理函数,当用户点击的时候,就会执行这个处理函数。上面我们提到过,以纯代码的方式创建一个这样一个程序,按钮会默认在左上角,也就是原点(0,0)处,这里的位置是可以改变的。Qt官方声明,因市场原因,弃用Qbs。

2024-01-31 15:48:39 1740

原创 【MySQL学习笔记】(十)使用索引的操作

数据库中的索引与书籍中的索引类似,在一本书中,利用索引可以快速地查找所需信息,而无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。书中的索引是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是某个表中一列或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用如下。(1)通过创建唯一索引,可以保证数据记录的唯一 性。(2)可以大大加快数据的检索速度。

2023-09-05 15:36:31 543

原创 【MySQlL学习笔记】(九)内外连接

表的内外连接

2023-09-05 12:04:59 711

原创 【MySQL学习笔记】(八)复合查询

在前面的笔记中做的查询基本都是对一张表进行查询,在实际开发中远远不够,本篇文章内容是复合查询相关的笔记。需要用到oracle9i的经典测试表,在笔记(六)中已经教大家如何导入了。

2023-09-04 22:36:20 933

原创 【MySQL学习笔记】(七)内置函数

本篇文章是MySQL中的一些常用函数。

2023-09-03 11:09:42 1086 1

原创 【Linux 网络】NAT技术——缓解IPv4地址不足

NAT(Network Address Translation,网络地址转换)技术,是解决IP地址不足的主要手段,并且能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

2023-08-09 09:20:27 2302

原创 【Linux 网络】 数据链路层协议

从ARP的数据格式也可以看出,ARP是MAC帧协议的上层协议,ARP数据格式中的前3个字段和最后一个字段对应的就是以太网首部,但由于ARP数据包的长度不足46字节,因此ARP数据包在封装成为MAC帧时还需要补上18字节的填充字段。站在系统的角度来看,这里各个主机所共享的通信信道就是一种临界资源,这个临界资源同一时刻只允许一台主机使用。也就是说,网络中的路由器会不断去掉数据旧的局域网报头,并添加上新的局域网报头,因此数据在进行跨网络传输时,就算所需跨越的网络采用的是不同的局域网技术,最终也能够正确实现跨越。

2023-08-08 13:32:10 1538 1

原创 【Linux 网络】网络层协议之IP协议

就拿传输层来说,发送的数据并不是直接从一方的传输层直接发送到了另一方的传输层,而是需要传输层将数据继续向下进行交付,在网络层和链路层经过数据封装后再通过网络发送到对方主机,对方主机收到数据后再从数据链路层到网络层进行数据解包,此时对方的传输层才拿到了发送过来的数据,然后再继续将该数据向上进行交付。因此一个数据在路由的时候,随着数据不断路由进入更小的子网,其网络号的位数是在不断变化的,准确来说其网络号的位数是在不断增加的,这也就意味着IP地址当中的主机号的位数在不断减少。例如,下图中路由器连接了两个网段。

2023-08-07 12:19:47 1271

原创 【Linux 网络】 传输层协议之TCP协议 && TCP的三次握手和四次挥手

我们经常说UDP协议是一种不可靠的传输协议,而TCP协议是可靠的传输协议。所谓的不可靠指的是,由于传输距离的问题,双方在传输数据时,数据包可能出现丢包、乱序、重复、校验失败、发送太快/太慢,网络出现异常造成的一系列情况等问题。这也是UDP协议在拥有简单、快速这些特点的同时,对应的不足的地方。而TCP协议就是为了解决传输不可靠的问题,因此TCP一定会比UDP复杂。TCP虽然复杂,但是效率不一定比UDP低,TCP当中不仅有保证可靠性的机制,还有保证传输性能的各种机制。

2023-08-04 15:24:27 2516 2

原创 【Linux 网络】 传输层协议之UDP协议

在接收方,如果有一个DNS服务器应用程序在监听UDP端口,它会接收该数据包,并根据DNS协议的规范进行解析和处理有效载荷中的DNS查询请求,UDP本身不参与其中。如果UDP没有接收缓冲区,那么就要求上层及时将UDP获取到的报文读取上去,如果一个报文在UDP没有被读取,那么此时UDP从底层获取上来的报文数据就会被迫丢弃。需要注意的是,UDP协议报头当中的UDP最大长度是16位的,因此一个UDP报文的最大长度是64K(包含UDP报头的大小)。UDP是一种无连接的传输协议,不对数据包的内容进行解析和处理。

2023-08-01 11:33:07 1356 2

原创 【Linux 网络】 HTTPS协议原理 && 对称加密 && 非对称加密 && 数字证书

加密就是处理把明文(要传输的信息) 变成密文。解密就是把密文再经过一系列的变化,变成明文。在加密和解密的过程中,通常需要用到一个或多个中间的数据,辅助进行这个过程,这样的数据称为密钥。数据摘要(数字指纹),其基本原理就是用单向散列函数(Hash函数),对信息进行运算,生成一串固定长度的数据摘要。这并不是一种加密加密,而是用来判断有没有被篡改摘要常见算法:有MD5、SHA1、SHA256、SHA512等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)

2023-07-31 14:02:35 1270 4

原创 解决在云服务器开放端口号以后telnet还是无法连接的问题

可能是由于使用了宝塔,会自动开启firewalld防火墙,所以需要在防火墙中放行下端口才可以连接。使用windows的cmd下的telnet命令,还是无法正常连接。在轻量服务器控制台的防火墙规则中添加放行端口。如图,开放3000~20000的TCP端口号。在宝塔面板的安全中也添加放行规则。这里用阿里云服务器举例,在。如果还是无法正常连接。

2023-07-29 10:54:46 3309 1

原创 【Linux网络】 网络套接字(三)socket编程_TCP网络程序

TCP创建套接字并绑定的过程和UDP创建套接字并绑定的过程一样,这里对一些参数进行说明。TCP服务器在调用socket函数创建套接字时,参数设置如下:UDP服务器的初始化只需要上述的创建套接字并绑定,因为UDP是面向数据报服务的,负责把消息传递即可。而TCP服务器是面向连接的,客户端在正式向TCP服务器发送数据之前需要进行连接,才能进行通信。因此TCP服务端需要时刻监听客户端是否发来连接请求,那么我们上面创建的套接字需要用来监听。设置套接字为监听状态的函数叫做listen,该函数的函数原型如下:参数说明

2023-07-24 11:55:31 564 2

原创 【Linux网络】 网络套接字(二)socket编程_UDP网络程序

当我们调用socket函数创建套接字时,实际相当于我们打开了一个“网络文件”,打开后在内核层面上就形成了一个对应的struct file结构体,同时该结构体被连入到了该进程对应的文件双链表,并将该结构体的首地址填入到了fd_array数组当中下标为3的位置,此时fd_array数组中下标为3的指针就指向了这个打开的“网络文件”,最后3号文件描述符作为socket函数的返回值返回给了用户。对于一般的普通文件来说,当用户通过文件描述符将数据写到文件缓冲区,然后再把数据刷到磁盘上就完成了数据的写入操作。

2023-07-23 13:12:38 550

原创 【Linux网络】网络编程套接字(一)基础部分

首先,可靠是需要我们做更多的工作的,TCP协议虽然是一种可靠的传输协议,但这一定意味着TCP协议在底层需要做更多的工作,因此TCP协议底层的实现是比较复杂的,我们不能只看到TCP协议面向连接可靠这一个特点,我们也要能看到TCP协议对应的缺点。同样的,UDP协议虽然是一种不可靠的传输协议,但这一定意味着UDP协议在底层不需要做过多的工作,因此UDP协议底层的实现一定比TCP协议要简单,UDP协议虽然不可靠,但是它能够快速的将数据发送给对方,虽然在数据在传输的过程中可能会出错。

2023-07-22 16:18:07 336

原创 【Linux系统 学习笔记】利用POSIX信号量完成基于环形队列的生产消费模型

在这篇文章中,我们利用了互斥锁和条件变量机制来完成了基于阻塞队列的生产消费模型。本篇文章是利用POSIX信号量来完成基于环形队列的生产消费模型。

2023-07-20 14:57:00 377 4

原创 【Linux系统】结合有趣的小故事让你学懂生产者消费者模型

三种关系:生产者和生产者之间的关系(互斥),生产者和消费者之间的关系(互斥与同步),消费者和消费者之间关系(互斥)两种角色:生产者和消费者一个交易场所:通常是缓冲区。

2023-07-19 16:57:58 1603 9

原创 【Linux系统 学习笔记】Linux线程互斥 && 线程同步&& 线程安全 && 可重入 && 不可重入 && 死锁

假设此时thread-1读取到g_val的值是1,-1操作后,当thread-1被切走时,寄存器中的数据就叫做thread-1的上下文信息,thread-1需要将它保存起来,之后就挂起了,等待下一次调度。假设此时CPU调度了thread-2,thread-2 判断此时g_val还是 1 ,所以进入if语句代码块里面,当还没开始进行 - - 操作时,如果因为时间片比较短,此时又切换到了thread-1,此时thread-1恢复上下文信息到CPU寄存器,会接着执行上一次还没完成的指令,于是就把0写回到了内存。

2023-07-18 16:41:10 794 3

原创 【C++11】function包装器和bind包装器的简单使用

C++中的function本质是一个类模板,也是一个包装器。C++11中可调用对象有函数指针,仿函数,lambda表达式(本质还是仿函数),这些都可以用包装器进行包装。非静态成员函数的参数是默认带this指针的,所以包装器参数列表里要加上类名。C++11规定,非静态成员的包装除了加域名外,还要加上&符号。但是这两个声明的类型完全是不一样的,一个函数指针,一个是类。现在要求声明的类型完全一样,就可以使用C++11中的包装器。成员函数分为静态成员函数和非静态成员函数。包装以后,这两个对象的类型是一样的。

2023-07-16 22:54:22 397 1

原创 【Linux系统】Linux多线程详解

由上图可以很好地理解线程为什么是CPU调度的基本单位,在CPU看来,它只关心一个独立的执行流,无论进程内部是一个还是多个执行流,CPU都是以task_struct为单位来调度的。如果计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是增加了额外的同步和调度开销,而可用的资源不变。在操作系统的的视角下,Linux下没有真正意义的线程,而是用进程模拟的线程(LWP,轻量级进程),所以Linux不会提供直接创建线程的系统调用,最多提供创建轻量级进程的接口。个字节,也就是1MB。

2023-07-15 15:21:48 5002 5

原创 【C++学习笔记】C++如何规范C语言中的类型转换

static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换。这里的a的值其实已经被替换为3了,但是由于a是一个常量,编译器优化的原因,会在预编译的时候把cout那行的a直接替换会2,类似于宏的直接替换。隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败。缺陷: 转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换。显式类型转化:需要用户自己处理的转换,比如不相关类型的转换。

2023-07-11 19:23:22 326

原创 【C++学习笔记】特殊类设计

单例模式: 一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。比如在某个服务器程序中,该服务器的配置 信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再 通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。想要设计一个不能被拷贝的类,只要想办法让类中这两种拷贝的方式不能使用即可。因为在C++的类中,这两种拷贝的方式是默认存在的,所以需要在类中只声明不定义即可。

2023-07-11 16:20:26 588

原创 【Linux网络】网络基础

最初,ARPAnet主要是用于军事研究目的,它主要是基于这样的指导思想:网络必须经受得住故障的考验而维持正常的工作,一旦发生战争,当网络的某一部分因遭受攻击而失去工作能力时,网络的其他部分应能维持正常的通信工作。数据链路层(网卡层): 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太 网、令牌环网, 无线LAN等标准,网卡层的标准可以不一样。最终会在应用层收到最终的数据。

2023-07-10 22:37:04 613 1

原创 【C++学习笔记】RAII思想——智能指针

RAII特性重载operator*和opertaor->,具有像指针一样的行为。智能指针一开始是为了解决某些情况下因抛异常而导致内存泄漏问题。由RAII思想设计的智能指针,会管理资源的内存和释放。它支持像指针一样的功能但是从而由智能指针引发了诸如拷贝问题,线程安全问题,循环引用问题。智能指针是线程安全的,因为库里设计的时候加锁处理了,但是外界的资源不是线程安全的,需要程序员处理。

2023-07-06 16:37:01 630

原创 【C++学习笔记】C++中的异常概念&&异常的使用注意事项&&异常的优缺点

总结:异常总体而言,利大于弊,所以工程中我们还是鼓励使用异常的。另外OO的语言基本都是用异常处理错误,这也可以看出这是大势所趋。

2023-07-04 13:42:24 411

原创 【MySQL学习笔记】(六)MySQL基本查询

本篇笔记记录的时候对表的内容进行操作,属于笔记(一)SQL分类中的DML。CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)

2023-07-02 13:51:16 418

原创 【MySQL学习笔记】(五) 表的约束

约束是一种限制,它通过对表的行或列的数据做出限制,来确保数据的完整性、一致性。真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key,auto_increment,unique key。在笔记(三)介绍表的结构中,下图的字段类型,NULL,索引类型,默认值就是约束。

2023-06-30 20:14:35 260

原创 【MySQL学习笔记】(四)MySQL数据类型

而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符。比如:‘a’ 是一个字符 ,'中’也是一个字符,虽然采用utf-8编码英文占1个字节,中文占3个字节,但是在MySQL中,都认为是一个字符,所以上面的案例中才能成功插入。

2023-06-29 13:53:26 746

原创 【MySQL学习笔记】(三)操作表(结构)

注:本篇文章操作的是表的结构,并不是表的内容。属于笔记(一)中的SQL分类中的DDL。

2023-06-27 22:34:44 584

原创 【MySQL学习笔记】(二)MySQL操作库基础

可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。这时,可以打开看看 test.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中。,支持数据库进行字段比较的编码,本质是读取数据库中数据采用的编码格式。对数据库的修改主要指的是修改数据库的字符集,校验规则。数据库创建的时候,有两个编码集。

2023-06-27 10:51:02 249

原创 【MySQL学习笔记】(一)MySQL数据库基础

在上面的操作中建立数据库,本质上是Linux中的一个目录在数据库内建立表,本质上是建立Linux的一个文件不论是建立数据库,还是建立表,还是插入数据,这些操作都是由mysqld帮我们完成的,也就是由数据库的服务端帮我们完成的。有了数据库,我们程序员不用像管理普通文件那样直接访问文件才能进行管理,而是由mysql客户端发送对应的请求给服务端,让服务端帮我们完成对应的工作,这会给工作上带来很大的效率提升。

2023-06-26 16:17:12 407

原创 【C++11】C++11新增语法 Lambda表达式/Lambda的底层原理

C++11的Lambda表达式原理其实就是底层重新创建一个类,类中含有operator()运算符

2023-06-03 11:45:06 644 5

oracle9i的经典测试表

mysql oracle9i的经典测试表 mysql练习使用

2023-07-02

C++模拟实现priority-queue

C++模拟实现优先级队列,涉及到仿函数的使用,堆的向上调整法和向下调整法

2023-03-18

利用C++模拟队列的一些功能

利用C++模拟队列的一些功能

2023-03-13

利用C++模拟实现栈的一些函数

C++模拟实现栈

2023-03-13

C++模拟实现list

C++模拟实现list

2023-03-11

C++模拟实现vector

C++模拟实现vector

2023-03-07

模拟实现string以及一些接口

模拟实现string以及一些接口

2023-02-27

C++运算符重载实例:日期计算器

日期计算器代码

2023-02-08

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

TA关注的人

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