自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ffmpeg录制视频功能

为什么需要同时用 AVFormatContext 和 AVIOContext虽然 AVFormatContext 和 AVIOContext 都涉及到数据处理,但它们的职责不同,且在数据处理流程中互补:AVFormatContext:管理文件的格式和流信息。它负责描述文件的结构,包括音频、视频、字幕等流的元数据。AVIOContext:处理实际的数据读写操作。它负责将数据从源读取或写入目标。在实际应用中,AVFormatContext 需要一个。

2024-09-30 18:52:30 1994

原创 Redis初识

为了明确分布式系统,我们先来了解单机架构,那么什么是单机架构呢?所谓的单机架构,即只有一台服务器,这个服务器负责所有的工作。如上图一个简单的电商网站的组成,有一个单机服务器完成所有功能,单机服务器主要用有两个服务一个是应用服务(服务端程序),一个是数据库服务(数据存储)。此时一台主机能满足业务需求,这就是单价架构。但是我们一台主机上的硬件资源是有限的,当同一时刻处理的请求多了,就可能会导致某个硬件资源不够用了,从而导致访问时间变长,甚至出错,一般遇到这种场景我们会进行优化:开源节流,软件上的优化。

2024-07-17 21:35:47 1067

原创 贪吃蛇小游戏

在经历了前几篇文章的学习后,我们也是已经基本的掌握了Qt的基础语法与开发,为了巩固我们所学的知识,现在就一起动手来实现一个贪吃蛇小游戏吧。😄游戏规则:⭐️蛇可以在任意墙壁之间来回穿梭 ⭐️:⭐️ 吃食物可以增加长度,同时记录分数 ⭐️:💥当蛇的身体相撞游戏结束💥。

2024-06-17 20:01:34 1321 3

原创 QT界面优化

在QT中,选择器(或称为QSS选择器)是Qt Style Sheets(QSS)的一个重要组成部分,用于选择Qt应用程序中的UI元素并为其应用样式。这些选择器类似于CSS中的选择器,允许开发者根据特定的条件选择UI元素,并为其设置样式,以定制应用程序的外观和风格。通配符选择器匹配所有的控件,用星号()表示。例如:也可以指明子类,注意和子类名之间有空格。例如:可以指明多个子类。例如:* QPushButton, QLabel { background-color: yellow;类型选择器。

2024-06-12 20:47:36 1933 3

原创 Qt系统相关

在 Qt 中,事件分发器(Event Dispatcher) 是⼀个核⼼概念,⽤于处理 GUI 应⽤程序中的事件。事件分发器负责将事件从⼀个对象传递到另⼀个对象,直到事件被处理或被取消。每个继承⾃ QObject类 或QObject类 本⾝都可以在本类中重写 bool event(QEvent *e) 函数,来实现相关事件的捕获和拦截。

2024-06-11 12:42:58 1013 1

原创 Qt窗口与对话框

之前以上的代码我们都是创建项目基于QWidget(控件)的项目,实际上在开发过程中使用更多的是QMainWindow.QMainWindow的布局如下:最上层是一个窗口的标题,下面是一个菜单栏,在下层是一个工具栏,在下层就是一个子窗口(铆接部件),最中间的就是中央控件。最下层有一个状态栏。通过这种方式我们的窗口就更加丰富了。接下来就逐一讲解每个部分。

2024-06-06 19:56:48 1326

原创 QT常用控件

对于QT窗口的开发,QT本身已经为我们内置了许多控件,我们直接就可以拿来用,不过我们需要对这些控件了解清除。Widget 是 Qt 中的核⼼概念. 英⽂原义是 "⼩部件", 我们此处也把它翻译为 "控件" . 控件是构成⼀个图形化界⾯的基本要素。按钮, 列表视图, 树形视图, 单⾏输⼊框, 多⾏输⼊框, 滚动条, 下拉框等, 都可以称为 "控件". Qt 作为⼀个成熟的 GUI 开发框架, 内置了⼤量的常⽤控件. 这⼀点在 Qt Designer 中就可以看到端倪。2.QWidget 核⼼属性。

2024-06-05 10:17:52 2035 5

原创 QT基础初学

QT是一个跨平台的 C++ 图形用户界面库,支持多个系统,用于开发具有图形界面的应用程序。它由挪威公司 TrollTech(现为 Digia 的一部分)出品,后来更名为 The Qt Company。QT 不仅仅是一个图形用户界面库,它还包含用于网络通信、线程、数据库、正则表达式处理、XML 处理、JSON、国际化、音频和视频处理等的库。

2024-05-29 18:14:43 1168

原创 一文通晓mysql

实际在面对这种网络服务是,对于数据的处理,不是一条语句就能完成。例如转账,在该数据库中增加你的余额,而其他的数据库中减少你的余额。这样的一组由多个DML组成的我们称作事务。事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。2.事务的属性一个事务()中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。

2024-05-18 19:54:08 1176 6

原创 Linux学习之IO多路复用

之前的内容我们基本掌握了基础IO,如套接字,文件描述符,重定向,缓冲区等知识都是文的基本认识,而高级IO则是指更加高效的IO。对于应用层,在读写的时候,本质就是把数据写给OS,若一方为空,就会进行阻塞式等待,读写的本质也就是数据的拷贝。所以高效的 IO就需要在多线程的情况下,单位时间的的拷贝的数据更多,等待的比重越小。

2024-05-08 13:00:29 1063 4

原创 Linux学习之IP协议

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称域名使用连接com:一级域名表示这是一个企业域名同级的还有"net"(网络提供商), "org"(非盈利组织等baidu:二级域名公司名www:只是一种习惯用法之前人们在使用域名时往往命名成类似于这样的格 式,来表示主机支持的协议。

2024-05-02 19:19:40 1416 1

原创 Linux学习之Tcp与Udp

SYN:请求建立连接;我们把携带SYN标识的称为。

2024-04-29 15:32:48 1474 2

原创 Linux学习之HTTP

url其实就是网址,向www.baidu.com我们知道这是域名,对于我们一般的服务器,想要访问服务器就需要ip地址与端口号,然而在实际的访问中,我们一般不用ip地址加端口号,而是用域名访问服务器,这样更加方便,因此通过解析域名就可以找到ip地址。而端口号一般是固定不变的,且是让人们熟知的,浏览器一般默认都是http或者https,是绑定端口号了的。而我们去访问网页的某个东西,上面的网址也就是url(统一资源定位符)。我们用域名表示唯一的服务器,协议表示唯一的端口号,后面的就是标识资源.

2024-04-22 21:44:35 1177

原创 项目实现:Boost搜索引擎

当前已经有许多上市公司做了搜索引擎,比如说百度,搜狗,360等等,这些项目都是很大的项目,有很高的技术门槛,我们自己实现一个完整的搜索引擎是不可能的,但是我们可以写一个简单的搜索引擎---站内搜索引擎,例如我们学习c++常用的cplusplus网站,里面就是关于c++语法和库的内容供用户使用。这就会使得搜索的数据的内容更加少,更加垂直。搜索出来的展现结果我们即就以搜狗这样子的为基本:本次项目我们不仅要使用boost库,其次还是针对boost网页,无站内搜索进行的站内搜索的补充的项目。

2024-04-14 18:25:17 1515 2

原创 项目实现:高并发内存池

该项目是原google开源的项目tcmalloc,线程缓存的malloc,实现了高效的多线程内存管理,用于替换系统内存分配相关函数如malloc,free等,这里是将核心部分简化出来模拟实现出mini版本的,目的是为学习它。实现高并发内存池之前,我们先开看看mallco:我们都知道使用malloc函数回从堆区给我们开辟一块空间,而事实上malloc并不是直接向堆区申请内存的,malloc实际上就是一个内存池,malloc会向操作系统申请一大块空间,之后谁要用就分配给一小块,用完之后就需要重新申请。

2024-03-31 16:48:17 940 3

原创 Linux学习之自定义协议

首先对于Tcp的socket的通信,我们已经大概了解了,但是其中其实是由一个小问题,我们目前是不得而知得,在我们客户端与服务端连接成功后,服务端读取来自客户端得消息,我们使用的是函数read,通过来读取accept之后的文件,从而获取信息,可是我们怎么去知道每次读取都是一个完成的报文呢?在用户端与服务端通信的时候,用户首先写信息到发送缓冲区当中,经过网络推送到接收缓冲区,之后服务端从接收缓冲区中读取数据。

2024-03-21 20:37:46 1060 10

原创 linux学习之Socket

与Udp不同,udp的套接字从始至终都只有一个,而Tcp有两个,实际上最开始的套接字,并不是我们要去通信的套接字,Tcp通信的套接字,是要在accept之后的套接字。参数一位网络文件描述符,参数二为获取的消息,参数三为长度,参数四为标志,当前我们就设置为0,参数五为接收方的套接字,参数六位套接字的大小,后面两个参数是输入型参数。成功返回获取信息的大小。参数一为网络文件描述符,参数二为字符缓冲区,参数三为长度,参数四为标志,参数五与参数六接口域recvfrom基本一致,不过这里最后两个参数为输入型参数。

2024-03-18 18:52:24 936 3

原创 Linux学习之网络

网络的产生是计算机历史的必然性,是计算机发展的必经之路在有了计算机后,通信就是非常重要的一部分,不同网络之间通信数据,数据长距离传输,数据的检验,数据同步等注定计算机网络及其硬件的产生。通过交换机与路由器连接不同区域网的主机从而通信,后来子网越来越多,后来有了局域网,城域网,广域网。

2024-03-15 13:19:52 1113 3

原创 Linux学习之信号量

这里在编译的时候,会有个关于线程函数的报错信息,因为线程函数的参数为void *,函数返回值为void *,但当我们在类内写的时候,此时参数默认会有一个类的this指针,函数类型就匹配不上了,这里可以放在类外,或者修饰为静态成员函数。以电影院举例子:我们的共享资源就是电影院的座位,我们就相当于进程,我们想要获取共享资源,不是立马就去获取共享资源,而是要先买票预定,而电影票就相当于信号量,只有当信号量还存在时,大于零,我们才可以去获取资源。功能:发布信号量,表示资源使用完毕,可以归还资源了。

2024-03-10 18:36:54 950

原创 Linux学习之线程

课本的概念:线程是比进程更加轻量化的一种执行流/线程是进程内部的一种执行流。我们的概念:线程是cpu调度的基本单位/进程是系统资源承载的实体我们知道线程的创建过程非常的复杂,构建pcb,构建地址空间,构建页表,构建运行队列,初始化各个字段......,而我们的线程,可以理解为,进程创建之后 创建pcb参与分配资源。因此线程的创建比进程更加简单。其次线程实在进程的地址空间内运行。

2024-03-08 19:23:06 2035 4

原创 Linux学习之信号

了解到了信号的接收,因此我们在编写程序时就可以直接发送信号,之后自动运行对应handler方法,例如之前我们使用kill -9杀进程,现在我们发送一个为9的信号,此时自定义它的处理方法,例如只是打印一句话,那么我们kill -9的指令就不会再杀掉我们的进程,而是打印一句话。当我们电脑关机了,程序结束了,再次重新启动,我们会发现,时间永远是跟着走的,实际上,即使关机了,在电脑里也会有一个纽扣电池一直给硬件供电,固定时间间隔计数,再将计数器转换为时间戳给我们的电脑。CMOS周期性的高频的发送时间中断。

2024-03-02 17:40:40 819 5

原创 Linux学习之system V

首先对于读端还是写端都会有同一个key,我们创建同一个key,此时进程就会把key写到地址空间当中,通过Key值操作系统可以找到两个进程的同一块地址空间,即key值指向的内存就是共享内存。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到 内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。其次消息队列也可以存在多个,两个进程用多个消息队列进行数据交互,因此在内核当中,操作系统需要管理这些消息队列,先描述在组织,因此消息队列的管理就是消息队列加自身的属性。

2024-02-28 15:20:36 757 2

原创 Linux学习之进程通信

在此之前,我们需要下载并使用vscode, 使用vscode链接远端服务器。首先在vscode中下载插件remote-ssh,在remote-explorer中新建一个ssh对回主机。点击加号在上述窗口按样例输入ssh 用户名@服务器域名,在选择c盘的配置文件即可。此时再点击箭头或者新建窗口来连接远端服务器,之后输入密码,变为这样说明连接成功。选择terminal选项就可以在linux上运行调试代码。之后我们就可以在该上面创建便下代码了,每一次进入目录时都需要我们重新输入一次密码。

2024-02-26 19:17:55 1019

原创 Linux学习之文件系统与动静态库

磁盘是一种用电磁原理记录数据的存储设备,由涂上磁性物质的盘片和盘片读写装置(驱动器)组成。磁盘可以分为软盘、硬盘等类型。如果您需要管理硬盘分区及文件、搜索丢失的分区及文件、对磁盘进行快速分区格式化等操作。磁盘价格便宜,容量大,是企业大量使用的存储介质。磁盘的结构:磁盘与盘面的比例是一比一的,通过磁头的摆动,来定位磁盘的某个位置,磁盘的摆动只能左右摆动,盘面是在高速的旋转着,相对于其他外设较慢。其中磁头是具有磁性的,受到碰撞就会损坏磁盘。

2024-01-28 17:54:03 943 5

原创 c++学习之IO流

在了解c++的输入输出流之前,我们先来看看c语言的io流,c语言中是利用printf与scanf进行输入输出,中间利用缓冲区实现对数据的高效处理,对于缓冲区这个我们在linux中已经了解到,所谓的printf与scanf都是底层函数open和write的封装,目的就是提供有缓冲区,使得更加高效的进行读写。对于输入输出缓冲区:1.可以屏蔽掉低级I/O的实现,低级I/O的实现依赖操作系统本身内核的实现,所以如果能够屏蔽这部分的差对于异,可以很容易写出可移植的程序。2.可以。

2024-01-22 19:41:50 1022

原创 c++学习之特殊类设计与类型转换

方法:c++98,通过私有且只申明不实现拷贝构造与赋值函数,从而实现该类不能被拷贝。c++11引入关键字delete后,可以使构造构造与赋值函数等于delete。效果也是无法被拷贝。

2024-01-18 17:15:25 996

原创 c++学习之智能指针

智能指针(RAII)是一种C++标准库提供的对象,用于管理动态分配的内存(用对象生命后期来控制程序资源)。智能指针本身是一个类对象,它封装了指向动态分配的内存的指针,并提供了自动释放内存的机制。智能指针的行为类似于常规指针,可以通过解引用操作符(*)和成员访问操作符(->)来访问内存中的数据。C++11引入了3个智能指针类型:std::unique_ptr:独占资源所有权的指针。std::shared_ptr:共享资源所有权的指针。

2023-12-12 20:45:54 818 4

原创 c++学习之异常

早在c语言的时候,就已经有处理错误的方式了,第一种方式太过暴力,就是断言,程序发生错误,直接终止退出,这样的报错对于真正开发应用等太过暴力。第二种方式,就是返回errno,其实,我们会在发生错误的时候,或者程序结束运行的时候,返回一个错误码,错误码就是一个数字,不同的数字的错误码表示的错误信息也不一样,c语言种就是用errno表示这些错误码。但这两种方式在处理错误上不是比较好,因此c++就引入了异常,用来处理错误。异常异常的抛出与捕获机制未知异常抛子类异常捕获父类异常异常的重新抛出异常的安全问题。

2023-12-10 22:26:47 151 1

原创 了解c++11中的新增

传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性。我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。什么是左值?左值引用?左值是一个表示数据的表达式(如变量名或解引用的指针)我们可以获取它的地址可以对它赋值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。定义时const修饰符后的左值,不能给他赋值,但是可以取它的地址。左值引用就是给左值的引用,给左值取别名。int main()

2023-12-09 19:17:57 995 5

原创 二叉树OJ

在学习二叉树的时候我们基本上已经了解过二叉树的三种遍历,对于这三种遍历,我们采用递归的思路,很简单的就能实现,那么如何用迭代的方法去解决问题?

2023-12-08 19:17:34 861

原创 linux学习之详解文件

对于系统的文件读写接口,直接接像文件写入的,但是c/c++等语言不仅对读写接口进行了封装,还提供了缓冲区,使得读写数据对缓冲区操作,缓冲区的数据属于进程,但当刷新写入文件当中时,此时的数据不属于进程,而属于操作系统(文件)。对于c语言,我们的缓冲区就封装在FILE中(由许多指针构成的一块空间)。

2023-12-07 22:59:39 164 3

原创 哈希思想的应用

对于搜索:1.暴力查找,数据量太大,效率太低。2.排序+二分查找 ,极大的提升了效率。但还是存在不足:要排序。数组不方便增删。3.引入搜索树,AVL树,红黑树。查找效率已经很可观了,但空间消耗较高。4.哈希 ,与搜索树效率差不多,但对于大量搜索的整型数据,通过映射bit的思想实现更加高效,且节省空间。(但只能处理整形)对于其他类型的,引出了布隆过滤器:2.布隆过滤器概念布隆过滤器是一种概率型数据结构,用于判断一个元素是否在一个集合中。

2023-11-26 15:01:27 265

原创 c++学习之哈希

我来们可以将上面的挂着的链表理解为桶,里面存放着相同key的值,但是当存放的值太多,遍历桶里的值时间复杂度就是O(N),效率太低,因此当长度达到某个界限时,就会换成红黑树来存放,提高查找效率。但是会出现新的问题,可能有数据会冲突,她两模完值是一样的,但对应的value是不一样的,这种问题被叫做哈希碰撞/哈希冲突,那么如何解决哈希碰撞呢?在结构上,vector中的list,我们为了实现迭代器,我们自己写单链表,里面存放Node*,再插入时,我们采用头插的方式,如下图假设1,11,111他们的key值一样。

2023-11-22 23:38:58 205 2

原创 c++学习之红黑树

红黑树(英文:Red–black tree)是一种自平衡二叉查找树,在计算机科学中被广泛应用,特别用于实现关联数组。它的名字源于1978年由利奧尼達斯·J·吉巴斯和罗伯特·塞奇威克所提出的红黑树概念。与AVL树不同,红黑树在每个节点上增加一个存储位表示节点的颜色(可以是RED或BLACK),通过多任意一条从根到叶子的路径上节点着色方式的限制,红黑树以确保没有一条路径会比其他路径长出两倍,因此是平衡的。相对于AVL树的严格平衡,红黑树近似平衡,但相对在建树的代价时较小一点。如下就是一个红黑树:我们大概可以用五

2023-11-16 19:53:09 212 4

原创 Linux学习之进程三

其中再在父进程创建子进程时,会将自己的数据区(页表)读写权限改为只读,然后再创建子进程。这个过程用户是不知道的,而用户可能会去对某一批数据进行写入,而页表会因为权限此时会出错,操作系统此时会介入进行判断(是因为越界还是权限问题),重新申请内存写入,从而进行写时拷贝。通过fork函数我们可以让子进程和父进程执行不同的代码,或者一个进程执行不同的程序。首先进程等待就是通过wait/waitpid的方式,让父进程(一般)对子进程进行资源回收的等待过程。

2023-11-10 21:23:47 275 5

原创 C++学习之map和set

C++中的Map和Set都是关联式容器,用于存储数据的集合。所谓关联式容器,不同于序列式容器,序列是容器是一种线性结构用来存放数据,而关联式容器,虽然也是存放数据的,但是他们的数据与存放的key值,是一一对应的,利用键值查找数据或修改数据。它们之间的区别在于:Map是一组键值对的结构,类似于JSON对象。每个元素都是由一个关键字和一个值组成。关键字起到索引的作用,值则表示与索引相关联的数据。Set对象类似于数组,且成员的值都是唯一的.Map可以通过get方法获取值,而set不能因为它只有值.

2023-11-06 18:40:28 223 4

原创 c++学习之AVL树

在之前,我们已经了解到了二叉搜索树,提到过它的搜索效率,如果二叉搜索树是一个单支树,那么在查找时,效率此时最低,查找效率和链表一样O(N),而想要提高搜索二叉树的效率,就需要平衡搜索二叉树两端的字数,他们的高度如果能一样,那么查找的效率就是O(logN),效率会提升很多。如何去平衡搜索二叉树呢?俄罗斯的两位数学家G.M.Adelson-Velskii 和E.M.Landis在1962当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整。

2023-11-06 18:39:55 127 1

原创 Linux学习之进程二

例如我们现在有一个进程,那么对于这个进程也是有它自己的地址,而进程在pcb中保存一些字段来表示自己的地址,但此时也只是虚拟地址,而虚拟地址并没有真真能保存数据的能力,这都是要靠物理地址,因此对于我们来讲,数据想要真正存放在物理地址当中,就需要我们用虚拟地址找到物理地址,因此每一个进程都有自己维护的一个。--先描述,在组织。对于一个操作系统,它是有很多的环境变量的,例如首先我们知道要执行一个命令必须先找到这个指令在哪里,而在linux操作系统中,有一个环境变量,他会记录我们的指令的搜索路径,他就是PATH。

2023-11-01 20:20:59 477 3

原创 c++学习之搜索二叉树

搜索二叉树(Binary Search Tree)是一种常见的二叉树数据结构,它的每个节点都包含一个关键字,且每个节点的关键字都大于其左子树中任意节点的关键字,小于其右子树中任意节点的关键字。这种特性使得搜索二叉树非常适合用于查找操作。在搜索二叉树中查找一个元素时,我们可以从根节点开始,如果当前节点的值等于要查找的值,则查找成功;如果当前节点的值大于要查找的值,则在左子树中继续查找;如果当前节点的值小于要查找的值,则在右子树中继续查找.

2023-10-26 20:03:25 213 10

原创 C++学习之多态详解

总的来说对于继承不是重写就是重定义,函数重载参数不同(参数类型,参数个数,参数类型顺序)。

2023-10-21 20:29:21 224 5

空空如也

空空如也

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

TA关注的人

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