- 博客(44)
- 收藏
- 关注
原创 音频基础知识
本文系统介绍了音视频处理的基础原理与技术要点。音频部分涵盖PCM格式、采样帧、压缩编码等关键概念;视频部分解析RGB/YUV格式、帧率、分辨率等基础参数。重点阐述了音视频同步机制,包括时间戳统一、时钟同步等核心环节。同时详细讲解了YUV采样格式(4:2:0/4:2:2)、存储方式(平面/打包)及其与RGB的转换标准,并分析了Stride对齐等内存处理问题。全文从录制原理到播放流程,完整呈现了音视频处理的技术框架,为开发者提供了全面的理论基础和实践指导。
2025-09-23 20:35:23
999
原创 【Linux】进程控制
进程通过main函数的返回值来判断错误,对于一般的函数可以使用errno来查看它们的执行错误。举一个例子errno = 10;int main()func();return 0;运行结果。
2025-09-11 14:41:18
823
原创 CMake工程指南
目录一、CMake快速开始1.1 介绍1.2 CMake安装1.3 VS Code CMake 插件安装1.4 快速样例二、CMake 命令行工具介绍2.1 CMake构建流程图2.2 生成构建系统2.3 编译链接2.4 测试2.5 安装2.6 打包2.7 脚本模式2.8 调用外部命令2.9 查看帮助三、CMake 工程实践场景3.1 可执行文件(编译-链接-安装)3.1.1 单步操作3.1.2 重点命令解释3.1.2.1 cmake_minimum_required3.1.2.2 project3.1.2
2025-09-09 17:12:42
1334
原创 ES C++客户端安装及使用
比如说,你可以有一个客户数据的索引,一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。比如,你可以拥有某一个客户的文档,某一个产品的一个文档或者某个订单的一个文档。,它是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful。正文构造,以及查询搜索的正文构造操作给封装起来,使用者调用接口添加字段就行,不用关心具体的 json。
2025-08-04 15:03:07
1105
原创 【Linux】System V - 基于建造者模式的信号量
nsops: sops 对应的信号量的个数,也就是可以同时对多个信号量进⾏PV操作。// 将该进程的PCB插⼊⼊相应的等待队列s.queue末尾。// 唤醒相应等待队列s.queue中等待的⼀⼀个进程。我们使⽤信号量,简化信号量使⽤,测试使⽤⼆元信号量进⾏显⽰器交替打印。key: 信号量集的键值,同消息队列和共享内存。semid: 是该信号量的标识码,也就是。S=0: 表⽰⽆可⽤资源,⽆等待进程。nsems: 信号量集中信号量的个数。S>0: S 表⽰可⽤资源的个数。//信号量本质上是⼀个计数器。
2025-08-04 10:12:12
983
原创 brpc 安装及使用
brpc是用c++语言编写的工业级RPC框架,常用于搜索、存储、机器学习、广告、推荐等高性能系统。你可以使用它:搭建能在一个端口支持多协议的服务或访问各种服务h2gRPC。使用brpc的http实现比libcurl方便多了。从其他语言通过访问基于protobuf的协议redis和memcached线程安全,比官方client更方便。rtmpflvhls可用于搭建流媒体服务支持thrift线程安全,比官方client更方便各种百度内使用的协议。
2025-08-01 14:38:37
694
原创 【Linux】System V - 责任链模式与消息队列
msgsz:是msgp指向的消息⻓度,这个⻓度不含保存消息类型的那个long int⻓整型。每个消息队列的总的字节数也是有上限的(MSGMNB),系统上消息队列的总数也有上限。消息队列也有管道⼀样的不⾜,就是每个消息的最⼤⻓度是有上限的(MSGMAX)每个数据块都被认为是有⼀个类型,接收者进程接收的数据块可以有不同的类型值。指向的消息⻓度,这个⻓度不含保存消息类型的那个long int⻓整型。绝对值的消息,并且是满⾜⾜条件的消息类型最小的消息。msgp:是⼀个指针,指针指向准备发送的消息。
2025-08-01 11:26:12
1174
原创 etcd 的安装与使用
Etcd 是一个 golang 编写的分布式、高可用的一致性键值存储系统,用于配置共享和服 务发现等。它使用 Raft 一致性算法来保持集群数据的一致性,且客户端通过长连接 watch 功能,能够及时收到数据变化通知,相较于 Zookeeper 框架更加轻量化。以下 是关于 etcd 的安装与使用方法的详细介绍。//pplx::task 并行库异步结果对象//阻塞方式 get(): 阻塞直到任务执行完成,并获取任务结果//非阻塞方式 wait(): 等待任务到达终止状态,然后返回任务状态。
2025-08-01 08:33:53
801
原创 【Linux】进程地址空间
开始之前先来看看这样一段代码。请问在运行时这段代码会不会报错呢?答案是会出问题。为什么呢?因为 str 这个指针保存的是字符串的起始地址,并非字符串。*str 要将 h 改为 H ,但是字符串在字符常量区,具有可读属性,所以就会报错。这个问题相信在学习C/C++的时候都已经接触过。下面我们通过这篇文章进一步了解。
2025-07-31 21:47:55
1159
原创 Spdlog 日志的安装及使用
spdlog 是一个高性能、超快速、零配置的 C++ 日志库,它旨在提供简洁的 API 和丰富的功能,同时保持高性能的日志记录。它支持多种输出目标、格式化选项、线程安全以及异步日志记录。以下是对 spdlog 的详细介绍和使用方法。github 链接:https://github.com/gabime/spdlog特点高性能spdlog专为速度而设计,即使在高负载情况下也能保持良好的性能。零配置:无需复杂的配置,只需包含头文件即可在项目中使用。异步日志:支持异步日志记录,减少对主线程的影响。格式化。
2025-07-30 14:57:10
1266
原创 gtest框架的安装与使用
GTest 是一个跨平台的 C++单元测试框架,由 google 公司发布。gtest 是为了在不同 平台上为编写 C++单元测试而生成的。它提供了丰富的断言、致命和非致命判断、参数化等等测试所需的宏,以及全局测试,单元测试组件。
2025-07-30 11:04:40
1113
原创 gflags安装与使用
gflags 是 Google 开发的一个开源库,用于 C++ 应用程序中命令行参数的声明、定义和解析。gflags 库提供了一种简单的方式来添加、解析和文档化命令行标志(flags), 使得程序可以根据不同的运行时配置进行调整。易于使用:gflags 提供了一套简单直观的 API 来定义和解析命令行标志,使得开发者可以轻松地为应用程序添加新的参数。自动帮助和文档:gflags 可以自动生成每个标志的帮助信息和文档,这有助于用户理解如何使用程序及其参数。类型安全。
2025-07-29 11:17:48
839
原创 一、接口测试
现在有⼀个操作商品的接口,有个字段type,传1的时候代表修改商品,商品id、商品名称、价格有⼀个是必传的,type传2的时候是删除商品,商品id是必传的,这样的,就要测参数组合了,type传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如贴吧系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,要发帖就得登录,那么这两个模块就得交互,它就会抛出一个接口,供内部系统进行调用。get和post是常见的请求方法。
2025-07-24 15:49:46
590
原创 Git学习详解,这一篇就够了
工作区暂存库版本库解决方法xxx code1、手动撤销——不推荐,容易出错xxx codexxx codegit reset 命令xxx codexxx codexxx code前提条件:没有推送到远程仓库git reset 命令。
2025-07-18 19:30:13
1581
原创 【Linux】环境变量
有没有考虑过一个问题,当我们登录的时候,无论是普通用户还是root用户,你都会处于你的对应用户的路径下,这是因为有 HOME 这个环境变量的存在。所以我们就知道了,当你输入ls指令的时候,操作系统会在这些路径中依次去找,如果找到了就直接执行该路径下的程序,所以你在执行时就不用待路径了。这是因为我们运行的进程都是子进程,bash本身在启动的时候会从操作系统的配置文件中读取环境变量信息,子进程会继承父进程交给我的环境变量!不知道你有没有发现一个现象,我们的程序打印的环境变量和env指令打印的环境变量是一样的。
2025-06-26 20:16:58
1127
原创 【Qt】常用的类与数据类型
QMap<Key,T>提供了·一个·从类型为Key的键到类型为T的值的映射。为了能够支持一键多值的情况,QMap提供QMap<Key,T>::insertMulti()和QMap<Key,T>::values()函数。在QVector的前部或者中间位置进行插入操作的速度是很慢的,这是由于QVector存储数据的方式,导致这样的操作会导致内存中大量的数据被移动。QVariant::StringList 是 Qt 定义的一个 QVariant::type 枚举类型的变量,其他常用的枚举类型变量如下表所示。
2025-05-04 13:18:13
1229
原创 【Qt】信号与槽
在Qt中,用户和控件的每次交互过程称为一个事件。比如"用户关闭窗口"是⼀个事件。每个事件都会发出一个信号,例如用户关闭窗口会发出"窗口被关闭"的信号。Qt中的所有控件都具有接收信号的能力,一个控件还可以接收多个不同的信号。对于接收到的每 个信号,控件都会做出相应的响应动作。在Qt中,对信号做出的响应动作就称之为槽。信号和槽是Qt特有的消息传输机制,它能将相互独立的控件关联起来。比如,"按钮"和"窗口" 本身是两个独立的控件,点击"按钮"并不会对"窗口"造成任何影响。
2025-05-04 07:57:18
1722
原创 【Qt】初识Qt
Qt是一个跨平台的C++图形用户界面应用程序框架。Qt工具Qt Assistant(Qt助手)Qt Desiginer(Qt设计师)Qt Example and Dmeos(Qt演示程序与案例)Qt Linguist(Qt语言)
2025-05-03 21:56:21
959
原创 【C++】智能指针
这是因为我们的ptr先构造,指向了一个int的动态内存空间,然后ptr1拷贝构造出了ptr2,此时ptr1和ptr2都指向这个int的动态内存空间。当shared_ptr对象的生命周期结束时就会调用传入的删除器完成资源的释放,调用该删除器时会将shared_ptr管理的资源作为参数进行传入。当指向的动态内存是一次性开辟的数组的形式,模板参数要写为type[]的形式,来告诉unique_ptr该指针维护的动态内存,是以数组的形式开辟的。如果我们每次申请资源后都自己释放当然是可以的,但是这样也太麻烦了吧。
2025-03-07 13:22:18
820
原创 计算机网络概述
计算机网络的精确定义并未统一,换句话说,全世界没有一个对计算机网络的公认的唯一定义。这里我们给一个最简单的定义:计算机网络(简称网络):由若干结点(node)和连接这些结点的链路(link)组成。结点可以是计算机、集线器、交换机、路由器等。链路可以是有线链路、无线链路。应用层:包含大量应用普遍需要的协议,支持网络应用。运输层: 主机到主机数据传输,负责从应用层接收消息,并传输应用层的message,到达目的后将消息上交应用。为终端设备之间的每个通信定义了数据分段、传输和重组服务。TCP, UDP。
2025-03-01 22:25:21
1660
1
原创 【C++】map与set的使用
set是按照一定次序存储元素的容器在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。set在底层是用二叉搜索树(红黑树)实现的。
2025-02-25 06:57:08
992
原创 【C++】 stack和queue以及模拟实现
3.1 priority_queue的介绍优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元 素)。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特 定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。
2025-02-24 18:07:26
842
1
原创 【模拟】高精度加减乘除
当数据特别大的时候,比如10的1000次方,这个时候我们的各种数据类型都存不下,我们应该怎么办呢?接下来我们就解决这个问题。【解法】
2025-02-24 14:17:50
241
原创 【C++】继承与多态
定义格式下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。继承关系和访问限定符继承基类成员访问方式的变化类成员/继承方式public继承protected继承private继承基类的public成员派生类的public成员派生类的protected 成员派生类的private 成员基类的protected 成员派生类的protected 成员派生类的protected 成员派生类的private 成员基类的private成员在派生类中不可见。
2024-12-09 11:48:32
982
1
原创 【C++】 list接口以及模拟实现
C++中的list是一个双向链表容器。它允许在任意位置进行快速插入和删除操作,并且能够在常量时间内访问任意元素,并且该容器可以前后双向迭代。1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。
2024-11-28 09:26:52
1174
原创 【Linux】进程
举个例子:你的程序中有一个scanf函数,该程序会从运行队列中移除,将自己的状态改为堵塞,链接到键盘的等待队列中,如果等待成功,就会再将自己从等待队列中移除,链接到运行队列中,将自己的状态改为运行。当一个进程需要运行,就把它链接到CPU的等待队列中,当一个进程需要网络请求,就把它链接到网卡的等待队列中。进程退出后,其代码和数据会被立即释放,但是这个进程的PCB会被保留,因为我们可能需要这个进程的状态信息,此时这个状态就是僵尸状态(Z状态)。为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。
2024-11-25 14:47:37
902
1
原创 【C++】 vector接口以及模拟实现
1.vector是表示可变大小数组的序列容器。它是标准模板库(STL)中的容器之一。2. vector可以采用下标对元素进行访问,它的大小是可以动态改变的,而且它的大小会被自动处理。3. vector内部使用动态数组,当前容量不足时会自动生成更大的数组,并将全部元素移到这个数组。4. 与其它动态序列容器相比(deque, list and forward_list), vector在访问元素的时候更加高效,在末 尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。
2024-11-25 08:45:49
1136
1
原创 数据结构——图
生活中人与人的关系是很复杂的,比如我的一个朋友们,他们可能也相互认识。在这种情况下,一对一、一对多的结构难以完整的描述出来这种人际关系。所以就有了接下来的主题——图。
2024-11-21 21:08:02
1460
原创 排序【数据结构】【算法】
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。:数据元素全部放在内存中的排序。:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。
2024-11-18 23:02:42
1341
2
原创 数据结构——栈、队列
1.栈的定义 栈(Stack)是只允许在一端进行插入或删除操作的线性表。 栈顶(Top)。允许插入和删除的一端。入数据,出数据都在栈顶。 栈底(Bottom)。固定的,不允许插入和删除的一端。 空栈。不含任何元素的空表。 栈的操作特性可以明显概括为后进先出。 栈的插入操作,叫做进栈,也叫压栈,入栈。栈的删除操作,叫做出栈,有点叫做弹栈。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数
2024-11-18 16:48:39
892
原创 C++ 模板初阶
函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就是将本来应该我们做的重复的事情交给了编译器。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参的类型产生函数的特定类型模板。切记:不能使用struct代替class)。类模板实例化与函数模板实例化不同,,对于字符类型也是如此。,对于模板函数的使用,
2024-09-03 18:00:52
450
原创 数据结构——线性表
线性表的顺序储存又称顺序表概念:用一组地址连续的存储单元依次存储线性表中的数据元素的线性表。特点:表中的元素逻辑顺序和物理顺序相同。1. 静态顺序表:使用定长数组存储元素。//定长数组//有效数据个数}SeqList2. 动态顺序表:使用动态开辟的数组存储。//指向开辟空间的数组int size;//有效数据的个数//容量空间的大小}SL;线性表的链式存储又称单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素。链表的节点处理存储元素自身的信息外,还需要存放一个后继的指针。
2024-08-31 20:17:42
5205
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅