- 博客(51)
- 收藏
- 关注
原创 【Linux网络】HTTP协议
GET请求的参数一般都是写在URL中,URL规定只能支持ASCII,所以GET请求的参数只允许ASCII字符,而且浏览器会对URL的长度做限制(HTTP协议本身对URL长度并没有做任何规定)因为POST是 新增或提交数据 的操作,会修改服务器上的资源,所以是不安全的,并且多次提交数据就会创建多个资源,所以也是不幂等的。在HTTP中,需要中间人遵从HTTP协议,只要不打扰基本的数据传输,就可以添加任何格外的东西。,因为它是只读操作,无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。
2026-02-02 15:25:20
620
1
原创 YAML模块
YAML 文件的后缀名是 .yaml 或 .ymlyaml中支持不同的数据类型,但是在写法上稍有区别。YAMLJSON简单标量值key: value整数和浮点数布尔值字符串列表list_key:- item1- item2- item3映射(字典)map_key:嵌套结构list_key:- item1- item2map_key:"item2"],
2026-01-24 20:26:28
488
原创 自动化框架pytest
pytest是一个非常流行的Python测试框架,它提供了丰富的功能和灵活的用法,使得编写和运行测试用例变的简单而高效简单易用: pytest 的语法简洁清晰,对于编写测试用例非常友好,几乎可以在几分钟内上手。强大的断言库: pytest 内置了丰富的断言库,可以轻松地进行测试结果的判断。支持参数化测试: pytest 支持参数化测试,允许使用不同的参数多次运行同一个测试函数,这大提高了测试效率。
2026-01-23 19:01:58
860
原创 requests模块
requesests库是一个非常流行的HTTP客户端库,用于发送HTTP请求。方法用于发送一个HTTP get 请求到指定的URLrequests.get 方法返回一个 Response 对象,这个对象包含了服务器的所有信息。如图所示:属性/方法描述响应状态码r.text字符串方式的响应体,会自动根据响应头部的字符编码进行解码r.url获取实际请求的URLr.context字节方式的响应体,会自动解码gzip和deflate压缩r.encoding。
2026-01-22 20:43:23
548
原创 JMeter工具的使用
JMeter用于对软件进行性能测试的工具,具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA等多种协议的特点JMeter的工作原理添加方式:线程组——配置元件——用户定义的变量有时我们只想要在固定的场景里使用参数化,改动后不希望影响到其他的脚本。使用:在HTTP请求的取样器中引入定义的变量。${参数名}适用场景:变量需要在多个脚本中使用,方便统一管理和修改。
2026-01-19 13:57:18
776
原创 性能测试的基本理论
进行负载测试时,通过对系统不断增加并发访问负载,监测系统性能的变化,直到系统的某项或多项性能指标达到安全临界值,最终确定在满足该安全临界值的性能指标下,系统所能承受的最⼤负载量。进行负载测试时发现,当访问量达到1万时,系统响应时间不超过2秒,而当访问量超过1万时,系统响应时间则会超过2秒,那么,在满足系统响应时间指标的前提下,该系统能够承受的最大访问量是1万。性能测试:通过一定的手段,在多并发下情况下,获取被测系统的各项性能指标,验证被系统在高并发下的处理能力、响应能力,稳定性等,能否满足预期。
2026-01-18 17:01:57
573
原创 测试的基本理论
目录一、需求二、开发模型2.1 软件的生命周期2.2 常见的开发模型2.2.1 瀑布模型2.2.2 螺旋模型2.2.3 增量模型、迭代模型2.2.4 敏捷模型2.3 测试模型2.3.1 V模型2.3.2 W模型三、软件测试的生命周期四、BUG4.1 bug的概念4.2 描述bug的要素4.3 bug级别4.4 bug的生命周期五、测试用例5.1 具体的设计方法等价类边界值正交法判定表法场景法六、测试分类6.1 按照测试目标分类6.2 按照执行方式分类6.3 按照测试方法6.4 按照测试阶段分类6.5 按照是
2026-01-16 10:53:59
686
原创 音频基础知识
本文系统介绍了音视频处理的基础原理与技术要点。音频部分涵盖PCM格式、采样帧、压缩编码等关键概念;视频部分解析RGB/YUV格式、帧率、分辨率等基础参数。重点阐述了音视频同步机制,包括时间戳统一、时钟同步等核心环节。同时详细讲解了YUV采样格式(4:2:0/4:2:2)、存储方式(平面/打包)及其与RGB的转换标准,并分析了Stride对齐等内存处理问题。全文从录制原理到播放流程,完整呈现了音视频处理的技术框架,为开发者提供了全面的理论基础和实践指导。
2025-09-23 20:35:23
1067
原创 【Linux】进程控制
进程通过main函数的返回值来判断错误,对于一般的函数可以使用errno来查看它们的执行错误。举一个例子errno = 10;int main()func();return 0;运行结果。
2025-09-11 14:41:18
862
原创 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
1415
原创 ES C++客户端安装及使用
比如说,你可以有一个客户数据的索引,一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。比如,你可以拥有某一个客户的文档,某一个产品的一个文档或者某个订单的一个文档。,它是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful。正文构造,以及查询搜索的正文构造操作给封装起来,使用者调用接口添加字段就行,不用关心具体的 json。
2025-08-04 15:03:07
1172
原创 【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
1025
原创 brpc 安装及使用
brpc是用c++语言编写的工业级RPC框架,常用于搜索、存储、机器学习、广告、推荐等高性能系统。你可以使用它:搭建能在一个端口支持多协议的服务或访问各种服务h2gRPC。使用brpc的http实现比libcurl方便多了。从其他语言通过访问基于protobuf的协议redis和memcached线程安全,比官方client更方便。rtmpflvhls可用于搭建流媒体服务支持thrift线程安全,比官方client更方便各种百度内使用的协议。
2025-08-01 14:38:37
747
原创 【Linux】System V - 责任链模式与消息队列
msgsz:是msgp指向的消息⻓度,这个⻓度不含保存消息类型的那个long int⻓整型。每个消息队列的总的字节数也是有上限的(MSGMNB),系统上消息队列的总数也有上限。消息队列也有管道⼀样的不⾜,就是每个消息的最⼤⻓度是有上限的(MSGMAX)每个数据块都被认为是有⼀个类型,接收者进程接收的数据块可以有不同的类型值。指向的消息⻓度,这个⻓度不含保存消息类型的那个long int⻓整型。绝对值的消息,并且是满⾜⾜条件的消息类型最小的消息。msgp:是⼀个指针,指针指向准备发送的消息。
2025-08-01 11:26:12
1220
原创 etcd 的安装与使用
Etcd 是一个 golang 编写的分布式、高可用的一致性键值存储系统,用于配置共享和服 务发现等。它使用 Raft 一致性算法来保持集群数据的一致性,且客户端通过长连接 watch 功能,能够及时收到数据变化通知,相较于 Zookeeper 框架更加轻量化。以下 是关于 etcd 的安装与使用方法的详细介绍。//pplx::task 并行库异步结果对象//阻塞方式 get(): 阻塞直到任务执行完成,并获取任务结果//非阻塞方式 wait(): 等待任务到达终止状态,然后返回任务状态。
2025-08-01 08:33:53
890
原创 【Linux】进程地址空间
开始之前先来看看这样一段代码。请问在运行时这段代码会不会报错呢?答案是会出问题。为什么呢?因为 str 这个指针保存的是字符串的起始地址,并非字符串。*str 要将 h 改为 H ,但是字符串在字符常量区,具有可读属性,所以就会报错。这个问题相信在学习C/C++的时候都已经接触过。下面我们通过这篇文章进一步了解。
2025-07-31 21:47:55
1188
原创 Spdlog 日志的安装及使用
spdlog 是一个高性能、超快速、零配置的 C++ 日志库,它旨在提供简洁的 API 和丰富的功能,同时保持高性能的日志记录。它支持多种输出目标、格式化选项、线程安全以及异步日志记录。以下是对 spdlog 的详细介绍和使用方法。github 链接:https://github.com/gabime/spdlog特点高性能spdlog专为速度而设计,即使在高负载情况下也能保持良好的性能。零配置:无需复杂的配置,只需包含头文件即可在项目中使用。异步日志:支持异步日志记录,减少对主线程的影响。格式化。
2025-07-30 14:57:10
1366
原创 gtest框架的安装与使用
GTest 是一个跨平台的 C++单元测试框架,由 google 公司发布。gtest 是为了在不同 平台上为编写 C++单元测试而生成的。它提供了丰富的断言、致命和非致命判断、参数化等等测试所需的宏,以及全局测试,单元测试组件。
2025-07-30 11:04:40
1161
原创 gflags安装与使用
gflags 是 Google 开发的一个开源库,用于 C++ 应用程序中命令行参数的声明、定义和解析。gflags 库提供了一种简单的方式来添加、解析和文档化命令行标志(flags), 使得程序可以根据不同的运行时配置进行调整。易于使用:gflags 提供了一套简单直观的 API 来定义和解析命令行标志,使得开发者可以轻松地为应用程序添加新的参数。自动帮助和文档:gflags 可以自动生成每个标志的帮助信息和文档,这有助于用户理解如何使用程序及其参数。类型安全。
2025-07-29 11:17:48
888
原创 一、接口测试
现在有⼀个操作商品的接口,有个字段type,传1的时候代表修改商品,商品id、商品名称、价格有⼀个是必传的,type传2的时候是删除商品,商品id是必传的,这样的,就要测参数组合了,type传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如贴吧系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,要发帖就得登录,那么这两个模块就得交互,它就会抛出一个接口,供内部系统进行调用。get和post是常见的请求方法。
2025-07-24 15:49:46
630
原创 Git学习详解,这一篇就够了
工作区暂存库版本库解决方法xxx code1、手动撤销——不推荐,容易出错xxx codexxx codegit reset 命令xxx codexxx codexxx code前提条件:没有推送到远程仓库git reset 命令。
2025-07-18 19:30:13
1648
原创 【Linux】环境变量
有没有考虑过一个问题,当我们登录的时候,无论是普通用户还是root用户,你都会处于你的对应用户的路径下,这是因为有 HOME 这个环境变量的存在。所以我们就知道了,当你输入ls指令的时候,操作系统会在这些路径中依次去找,如果找到了就直接执行该路径下的程序,所以你在执行时就不用待路径了。这是因为我们运行的进程都是子进程,bash本身在启动的时候会从操作系统的配置文件中读取环境变量信息,子进程会继承父进程交给我的环境变量!不知道你有没有发现一个现象,我们的程序打印的环境变量和env指令打印的环境变量是一样的。
2025-06-26 20:16:58
1155
原创 【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
1315
原创 【Qt】信号与槽
在Qt中,用户和控件的每次交互过程称为一个事件。比如"用户关闭窗口"是⼀个事件。每个事件都会发出一个信号,例如用户关闭窗口会发出"窗口被关闭"的信号。Qt中的所有控件都具有接收信号的能力,一个控件还可以接收多个不同的信号。对于接收到的每 个信号,控件都会做出相应的响应动作。在Qt中,对信号做出的响应动作就称之为槽。信号和槽是Qt特有的消息传输机制,它能将相互独立的控件关联起来。比如,"按钮"和"窗口" 本身是两个独立的控件,点击"按钮"并不会对"窗口"造成任何影响。
2025-05-04 07:57:18
1901
原创 【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
996
原创 【C++】智能指针
这是因为我们的ptr先构造,指向了一个int的动态内存空间,然后ptr1拷贝构造出了ptr2,此时ptr1和ptr2都指向这个int的动态内存空间。当shared_ptr对象的生命周期结束时就会调用传入的删除器完成资源的释放,调用该删除器时会将shared_ptr管理的资源作为参数进行传入。当指向的动态内存是一次性开辟的数组的形式,模板参数要写为type[]的形式,来告诉unique_ptr该指针维护的动态内存,是以数组的形式开辟的。如果我们每次申请资源后都自己释放当然是可以的,但是这样也太麻烦了吧。
2025-03-07 13:22:18
852
原创 计算机网络概述
计算机网络的精确定义并未统一,换句话说,全世界没有一个对计算机网络的公认的唯一定义。这里我们给一个最简单的定义:计算机网络(简称网络):由若干结点(node)和连接这些结点的链路(link)组成。结点可以是计算机、集线器、交换机、路由器等。链路可以是有线链路、无线链路。应用层:包含大量应用普遍需要的协议,支持网络应用。运输层: 主机到主机数据传输,负责从应用层接收消息,并传输应用层的message,到达目的后将消息上交应用。为终端设备之间的每个通信定义了数据分段、传输和重组服务。TCP, UDP。
2025-03-01 22:25:21
1723
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
1026
原创 【C++】 stack和queue以及模拟实现
3.1 priority_queue的介绍优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元 素)。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特 定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。
2025-02-24 18:07:26
880
1
原创 【模拟】高精度加减乘除
当数据特别大的时候,比如10的1000次方,这个时候我们的各种数据类型都存不下,我们应该怎么办呢?接下来我们就解决这个问题。【解法】
2025-02-24 14:17:50
270
原创 【C++】继承与多态
定义格式下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。继承关系和访问限定符继承基类成员访问方式的变化类成员/继承方式public继承protected继承private继承基类的public成员派生类的public成员派生类的protected 成员派生类的private 成员基类的protected 成员派生类的protected 成员派生类的protected 成员派生类的private 成员基类的private成员在派生类中不可见。
2024-12-09 11:48:32
1023
1
原创 【C++】 list接口以及模拟实现
C++中的list是一个双向链表容器。它允许在任意位置进行快速插入和删除操作,并且能够在常量时间内访问任意元素,并且该容器可以前后双向迭代。1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。
2024-11-28 09:26:52
1201
原创 【Linux】进程
举个例子:你的程序中有一个scanf函数,该程序会从运行队列中移除,将自己的状态改为堵塞,链接到键盘的等待队列中,如果等待成功,就会再将自己从等待队列中移除,链接到运行队列中,将自己的状态改为运行。当一个进程需要运行,就把它链接到CPU的等待队列中,当一个进程需要网络请求,就把它链接到网卡的等待队列中。进程退出后,其代码和数据会被立即释放,但是这个进程的PCB会被保留,因为我们可能需要这个进程的状态信息,此时这个状态就是僵尸状态(Z状态)。为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。
2024-11-25 14:47:37
949
1
原创 【C++】 vector接口以及模拟实现
1.vector是表示可变大小数组的序列容器。它是标准模板库(STL)中的容器之一。2. vector可以采用下标对元素进行访问,它的大小是可以动态改变的,而且它的大小会被自动处理。3. vector内部使用动态数组,当前容量不足时会自动生成更大的数组,并将全部元素移到这个数组。4. 与其它动态序列容器相比(deque, list and forward_list), vector在访问元素的时候更加高效,在末 尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。
2024-11-25 08:45:49
1180
1
原创 数据结构——图
生活中人与人的关系是很复杂的,比如我的一个朋友们,他们可能也相互认识。在这种情况下,一对一、一对多的结构难以完整的描述出来这种人际关系。所以就有了接下来的主题——图。
2024-11-21 21:08:02
1496
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅