自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(135)
  • 资源 (1)
  • 收藏
  • 关注

原创 cJson库的使用

这篇文章详细介绍了如何使用cJSON库来解析和处理JSON数据。首先,文章指导读者如何下载、解压、编译和安装cJSON库。接着,介绍了如何添加动态库路径,以便在编译链接时能够找到cJSON库。文章还提供了makefile文件的示例,用于编译使用cJSON库的代码。最后,通过一个具体的案例,展示了如何使用cJSON库将JSON字符串转换为JSON对象,并遍历和打印出JSON对象的内容。本文内容实用,对于需要使用cJSON库进行JSON处理的开发者来说,具有很高的参考价值。通过遵循本文的步骤,开发者可以轻松地集

2024-03-14 14:46:42 428

原创 应用工程师眼中的ssh服务器

SSH(Secure Shell)是一种加密的网络传输协议,它允许用户在不安全的网络上执行安全的远程登录和其他网络活动。在开发SSH客户端之前,建议仔细阅读SSH协议的官方文档和RFC(Request for Comments)文档,以了解协议的细节和最佳实践。此外,还可以参考现有的开源SSH客户端实现,如OpenSSH,以了解如何正确地实现SSH协议。:不同的SSH服务器实现可能有一些细微的差别,开发者需要确保他们的客户端能够与这些服务器兼容。:SSH提供了基于密钥对的身份认证机制,增强了系统的安全性。

2024-03-01 00:03:59 887

原创 QString编码

代码是Unicode编码的,我们不用做其他的处理。QString内部使用utf-16编码格式也叫Unicode编码格式,意味着用户必须给Unicode格式的数据给QString,如果数据是GBK格式的,用户需要使用QString::fromLocal8Bit()转换为Unicode编码。注意:Local8Bit它代表本系统的编码,有可能不是GBK编码,上述我使用了windos指令验证了我的windos使用GBK编码,因此Local8Bit == GBK。

2024-02-28 19:35:10 1096

原创 QShortcut

该函数首先获取当前活动的顶部窗口(通过qApp->activeWindow()),并与shortcut的parent窗口所在的toplevelWindow进行匹配,以判断快捷键是否在当前窗口触发。当触发键盘事件时,Qt会先检查全局的shortcut map(即shortcutmap)中是否有对应的快捷键。创建QShortcut对象:首先,需要创建一个QShortcut对象,并指定要监听的键盘事件组合。总之,QShortcut是Qt框架中非常实用的一个类,它使得开发者能够轻松地创建和管理键盘快捷键。

2024-02-13 09:48:21 875

原创 文本格式和二进制格式的区别

因此,尽管文本和二进制数据的存储过程在技术上都是将数据转换为二进制并存储在磁盘上,但在解析或读取数据时,它们需要不同的方法来还原原始的数据结构和格式。这是因为文本数据和二进制数据在编码和解码时使用的规则和方法不同。

2024-02-09 15:47:15 422

原创 为什么USB要转TTL

USB(Universal Serial Bus,通用串行总线)和TTL(Transistor-Transistor Logic,晶体管-晶体管逻辑)是两种不同的接口标准,它们之间的转换主要是因为电气特性和协议的不同。因此,当需要将USB接口的设备与TTL接口的设备进行通信时,就需要进行转换。转换的目的主要是将USB的电气特性和协议转换为TTL接口可以理解和接受的形式,以便进行数据的正确传输。需要注意的是,USB转TTL的转换并不是唯一的,根据具体的设备和应用场景,还可能有其他类型的转换方式。

2024-02-07 16:06:31 813

原创 Redis Zrange 范围查找-底层分析

Redis Zrange 是有序集合( SortedSet ) 提供的一个命令,可以返回有序集中指定区间内的成员,而有序集合比较有用的一个功能就是 “范围查找” 时间复杂度平均是 O[(LogN)+M] M是返回的元素个数,有序集合底层是通过字典+跳跃表的方式来实现的,我们这里只看这个跳跃表结构如何实现范围查找.

2023-10-10 10:57:08 303

原创 json、xml、protobuf性能对比

序列化协议通⽤性格式可读性序列化⼤⼩序列化性能适⽤场景JSON通⽤(json、xml已成为多种⾏业标准的编写⼯具)⽂本格式好轻量(使⽤键值对⽅式,压缩了⼀定的数据空间)中web项⽬。因为浏览器对于json数据⽀持⾮常好,有很多内建的函数⽀持.XML通⽤⽂本格式好重量(数据冗余,因为需要成对的闭合标签)低XML作为⼀种扩展标记语⾔,衍⽣出了HTML、RDF/RDFS,它强调数据结构化的能⼒和可读性。ProtoBuf。

2023-07-01 00:20:03 1797

原创 protobuf的Proto3语法学习 (二)

在单个.proto⽂件中可以定义多个消息体,且⽀持定义嵌套类型的消息(任意多层)。每个消息体中的字段编号可以重复。// -------------------------- 嵌套写法 ------------------------- syntax = "proto3";} } // -------------------------- ⾮嵌套写 ------------------------- syntax = "proto3";语法⽀持我们定义枚举类型并使⽤。

2023-06-30 23:55:22 1925

原创 网络通讯录服务器

Httplib库:cpp-httplib是个开源的库,是⼀个c++封装的http库,使⽤这个库可以在linux、windows平台下完成http客⼾端、http服务端的搭建。那么在这个⽰例中,我们将实现⼀个⽹络版本的。通讯录,模拟实现客⼾端与服务端的交互,通过Protobuf来实现各端之间的协议序列化。客⼾端、服务端间的交互数据使⽤Protobuf来完成。这里我们只实现了新增⼀个联系⼈模块,完整代码在码云.ContactException.h:定义异常类。服务端提供增删查能⼒,并需要持久化通讯录。

2023-06-30 23:54:48 1135

原创 4 测试分类

文章目录总结:课程笔记总结:课程笔记

2023-06-28 13:15:17 83

原创 2 软件测试基础

每个公司、每一个工具对bug生命周期的定义都是不一致的,下面仅是一个常见的例子测试人员应该跟踪一个Bug的整个生命周期,从Open到Closed的所有状态。如下图:● New:新发现的Bug,未经评审决定是否指派给开发人员进行修改。● Open:确认是Bug,并且认为需要进行修改,指派给相应的开发人员。● Fixed:开发人员进行修改后标识成修改状态,有待测试人员的回归测试验证。● Rejected:如果认为不是Bug,则拒绝修改。

2023-06-28 13:14:14 301

原创 Junit基本使用

2)指定包,添加到套件中并执行(执行包下面所有以Test命名的文件中的所有@Test注解的用例)参数为数据来源的方法名,如果不指定数据来源,则默认找根用例同名的静态方法.我们仍然可以使用Junit里提供 的方法来手动设置用例的执行顺序。如果用例之间存在关联关系,那么就需要手动的指定用例的执行顺序.Junit的默认执行顺序是不确定的。文档中给出排序方法非常多 :诸如方法名的排序,标签的排序。写自动化测试,测试结果分为两种,要么成功的,要么失败的。我们在编写测试用例的时候应该尽可能的保持用例的独立性。

2023-06-28 13:13:17 126

原创 3 软件测试编程测试用例

依据需求将输入(特殊情况下会考虑输出)划分为若干个等价类,从等价类中选出一个测试用例,如果这个测试用例测试通过,则认为所代表的等价类测试通过,这样就可以用较少的测试用例达到尽量多的功能覆盖,解决了不能穷举测试的问题。如果有需求文档,按照如下流程进行,在测试需求点可以使用到万能公式来设计测试用例,还有就是我们接下来要学习的针对特殊需求设计用例的方法。如下图,根据设计测试用例的流程图,我们可以将需求划分为两个功能需求,登录和注册,在对每个功能来编写测试点。兼容性 : 系统版本,软件的版本,不同的浏览器。

2023-06-28 13:12:30 125

原创 Selenium java自动化

自动化测试能够代替一部分的手工测试。自动化测试能够提高测试效率。随着功能的增加,版本越来越多,版本回归的压力也越来越大,所以仅仅通过人工测试来回归所有的版本肯定是不现实的,所以我们需要借助自动化来进行回归。

2023-06-21 10:24:45 3210

原创 1 软件测试基本概念

如下图:软件测试是验证用户产品死否满足用户需求. 是否满足用户需要关乎公司盈利.目的:参与角色:执行阶段:测试工程师:职能:软件研发工程师和测试开发工程师的区别:如下图:职友集难易程度工作环境办公用品:薪水:繁忙程度:技能要求:+概念:在多数软件公司,会有两部分需求,一部分是用户需求,一部分是软件需求。用户需求:软件需求:需求是测试人员开展软件测试工作的依据。(重点)在具体设计测试用例的时候,首先需要搞清楚每一个业务需求对应的多个软件功能需求点,然后分析出每个软件功能需求点对应的多个测试需求点,然后针对

2023-06-06 08:56:48 305

原创 java泛型初阶和包装类

方法限定符 < 类型形参列表 > 返回值类型 方法名称(形参列表) {... }

2023-05-24 23:21:13 604

原创 使用C++快速上手ProtoBuf (一)

ProtocolBuffers是Google的⼀种语⾔⽆关、平台⽆关、可扩展的序列化结构数据的⽅法,它可⽤于(数据)通信协议、数据存储等。+ ProtocolBuffers类⽐于XML,是⼀种灵活,⾼效,⾃动化机制的结构数据序列化⽅法,但是⽐XML更⼩、更快、更为简单。+ 你可以定义数据的结构,然后使⽤特殊⽣成的源代码轻松的在各种数据流中使⽤各种语⾔进⾏编写和读取结构数据。你甚⾄可以更新数据结构,⽽不破坏由旧数据结构编译的已部署程序。简单来讲,ProtoBuf(全称为Pr

2023-05-23 16:08:13 2495

原创 ProtoBuf安装及避坑指南

ProtoBuf安装失败原因。ProtoBuf如何正确避坑安装。快速安装ProtoBuf3.安装完protobuf,如果在vscode在开发,那么可能会遇到如下图问题,cpp文件检测不到头文件,这是vscode的插件报的错,插件有时候不准确的,我们应该编译器是否有报错。如果选择了第⼆种执⾏⽅式,即修改了安装⽬录,那么还需要在。到此,需要你回忆⼀下在执⾏configure时,如果当时选择了第⼀种执⾏⽅式,也就是。来下载可能会文件缺失,我们可以在windows下载,然后在xshell里使用。2.在安装过程中,出

2023-05-22 16:00:22 2864

原创 链表,栈,队列,递归行为,哈希表,有序表

固定长度的数组(超过下标范围报错, 或者使用动态数组)+index 控制。一旦发现 index 超过了下标的范围给用户报错, 标记栈已经满了。index: 新进来的数要放的位置。

2023-05-02 20:13:09 760

原创 2 异或位运算大厂必刷题

题意:一个数组中有一种数出现K次a元素,其他数都出现了M次,M> 1,K

2023-05-02 11:14:41 533

原创 1 对数器,二分查找,

任何一个中间位置i, 即数组下标1~N-2之间, 必须满足arr[i-1] < arr[i]

2023-05-01 20:35:53 576

原创 搞懂位图和布隆过滤器

但是 HashMap 的实现也有缺点,例如存储容量占比高,考虑到负载因子的存在,通常空间是不能被用满的,而一旦你的值很多例如上亿的时候,那 HashMap 占据的内存大小就变得很可观了。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。适用于海量数据,数据无重复的场景。

2023-04-23 19:06:03 394

原创 搞定常见八大排序

核心: 不断地往有序队列里插入值希尔排序核心:第一步:gap是一个整数, 如下图gap为3, 紫色,红色和蓝色,这三组,就是gap组;紫色组:9,5,8,5红色组:1,7,6蓝色组:2,4,3每相同组元素之间间隔gap个元素.第二步:每一组进行插入排序如下图:紫色组,从第一个元素9开始插入排序.红色组蓝色组也是一样.第三步(了解):如图 对逆序数组预排之后,接近有序第四步:我们感觉到预排消耗挺大的,后面我们与其他排序进行对比分析.第五步:实现预排操作基础版:时间复杂度:最好: O(N

2023-04-23 12:34:46 364

原创 搞懂哈希散列

散列表的载荷因子定义为: a = 填入表中的元素个数 /散列表的长度**a是散列表装满程度的标志因子。由于表长是定值,a与“填入表中的元素个数”成正比,所以,a越大,表明填入表中的元素占比越多,产生冲突的可能性就越大:反之,a越小,标明填入表中的元素占比越少,产生冲突的可能性就越小**。实际上,散列表的平均查找长度是载荷因子a的函数,只是不同处理冲突的方法有不同的函数。对于开放定址法,荷载因子是特别重要因素,应严格限制在0.7-0.8以下。超过0.8,查表时的CPU缓存不命中(cachemiss

2023-04-21 09:10:57 456

原创 智能指针ok的

1、在对象构造时获取资源,在对象析构时释放资源,利用对象的生命周期来控制资源,即RAII特性(利用RALL思想设计delete资源的类)智能指针通常用于对一个资源进行管理,避免因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。2、对*和->运算符进行重载,使得智能指针具有指针一样的行为 (像指针一样的行为)思路是管理权转移,缺点:没有管理权的智能指针不能使用,否则空指针访问崩溃。c++98实现:拷贝构造和赋值重载只声明不实现并且设置private。c++11实现:禁止拷贝构造和赋值重载。

2023-04-17 20:41:29 500

原创 什么是跳表?

skiplist本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是一样的,可以作为key或者key/value的查找模型。那么相比而言它的优势是什么的呢?这么等我们学习完它的细节实现,我们再来对比。skiplist是由发明的,最早出现于他在1990年发表的论文**《Skip Lists: A对细节感兴趣的同学可以下载论文原文来阅读。skiplist,顾名思义,首先它是一个list。实际上,它是在有序链表的基础上发展起来的。如果是一。

2023-04-10 22:09:11 461

原创 c++11 多线程使用

线程函数的传参都是拷贝,例如参数是引用类型,也是会拷贝传值的,原因是与底层实现有关(创建线程时参数首先传递给构造函数再传递给线程函数这个过程里出问题了) – 解决方案 “ref(引用对象)” 意思是强制以左值引用去传递。Lock guard类通过RAII的方式对互斥锁进行了封装,在构造函数中进行加锁,在析构函数中自动解锁。考察条件变量的使用,跟wait()与POSIX库用法差不多,都是需要循环检测条件是否满足。智能锁像智能指针一样RALL机制,管理的资源声明周期随对象释放资源。//方法一:不确定是否正确。

2023-03-31 08:16:14 264

原创 C++复习

c++复习总结

2023-03-30 23:08:02 49

原创 网络 选择题(1)

1.网段地址 154.27.0.0 的网络。若不做子网划分,能支持()台主机(C)

2023-03-15 10:03:23 357

原创 Innodb为什么选B系列树

【代码】Innodb为什么选B系列树。

2023-03-11 20:58:34 65

原创 TCP协议

建立连接的目的就是为了保证可靠性,验证双方是否有通信能力。TCP是要进行全双工的,为了验证全双工,即全方是否具备收发能力。而三次握手是验证全双工的最少次数,下面来看看他们是如何验证的。client发送SYN,如果收到对方的SYN+ACK报文,此时client具备收发能力了,server也局部收的能力了。client发送ACK,此时client认为自己建立好连接了。server如果收到ACK,那么就能验证自己是有发送能力了。我们模拟过程就知道,1、2次握手肯定不行的。

2023-01-12 21:57:07 4594 2

转载 如何通过域名获取主机ip地址

它是Linux系统上一个负责ip地址与域名快速解析的文件。hosts文件包含了ip地址与主机名之间的映射,还包括主机的别名。在没有域名解析服务器的情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的ip地址,否则就需要使用dns服务程序来查找。可以通过将常用的域名和ip地址映射加入到hosts文件中,实现快速方便的访问。系统查询域名的优先级为。的主机数据库文件中保存了一个主机名查询静态表。.除此之外,也可以使用下面的函数在程序中查看映射表。下面是获取主机信息的相关函数,使用时需要包含。

2022-12-18 23:49:35 1376

转载 Linux 常见的锁

我们在开发中使用的几种常见的锁主要有互斥锁、自旋锁、读写锁、乐观锁和悲观锁这五种。

2022-12-14 14:26:21 1653

原创 Linux 线程池

线程池就一堆已经创建好的任务线程,初始它们都处于空闲等待状态,当有新的任务需要处理的时候,就从这线程池里取一个空闲的线程来处理任务,当任务处理完成后再次把线程返回线程池里(把线程置于空闲等待状态),以供后面线程继续使用。当线程池里所有的线程都处于忙碌状态时,可以根据情况进行等待或创建一个新的线程放入线程池里。

2022-12-13 22:04:56 730 1

原创 线程安全下单例模式

单例模式是一种 “经典的, 常用的, 常考的” 设计模式定义对象无非就是根据对象结构开辟内存空间、然后进行赋值初始化。即加载内存。

2022-12-13 16:23:08 378 1

转载 linux 信号量

此时由于生产者生产的很快,运行代码后一瞬间生产者就将环形队列打满了,此时生产者想要再进行生产,但空间资源已经为0了,于是生产者只能在blank_sem的等待队列下进行阻塞等待,直到由消费者消费完一个数据后对blank_sem进行了V操作,生产者才会被唤醒进而继续进行生产。虽然消费者消费的很快,但一开始环形队列当中的数据资源为0,因此消费者只能在data_sem的等待队列下进行阻塞等待,直到生产者生产完一个数据后对data_sem进行了V操作,消费者才会被唤醒进而进行消费。

2022-12-12 21:10:10 108

转载 xshell7个人免费版官方下载,无需破解,免激活

对于开发人员来说,xshell这款软件应该不陌生,是一款非常好用的服务器连接工具,但同时它又是收费的,导致很多同学下载后使用不久就到期了。于是很多人都去网上搜索绿色版、破解版的,结果搜索出来的要么是有很多的捆绑软件,要么就是病毒软件。Xshell 很多版本存在后门,或上传用户服务器账号密码。这是很可怕的 , 服务器的账号、密码有可能泄露的风险大大的增加了。其实对于个人用户而言,官方就提供了免费版的,只需要提供一个邮箱就可以。

2022-11-28 11:46:54 1458

转载 Mysql学习笔记(一):MariaDB在CentOS7.8上的安装、远程登录授权

Y/n] n #是否禁止root远程登录,根据自己的需求选择y/n并回车。[Y/n] y #是否删除test数据库。[Y/n] y #是否删除匿名用户,生产环境建议删除,所以直接回车。# yum -y install mariadb mariadb-server #安装mariadb。[Y/n] y #是否设置root用户密码,输入y并回车。# systemctl enable mariadb #开机启动mariadb。# systemctl start mariadb #启动mariadb。

2022-11-27 14:28:58 857 1

原创 OnlineJudge平台(负载均衡)

所用技术:C++ STL 标准库Boost 准标准库(字符串切割)cpp-httplib 第三方开源网络库ctemplate 第三方开源前端网页渲染库jsoncpp 第三方开源序列化、反序列化库负载均衡设计多进程、多线程MySQL C connectAce前端在线编辑器(了解)html/css/js/jquery/ajax (了解)开发环境:我们的项目核心是三个模块:只实现类似 leetcode 的题目列表+在线编程功能提供的服务:编译并运行代码,得到格式化的相关的结果编写过程:设计的需要:打印文件名

2022-11-18 15:38:58 998

ctemplate c++渲染库

C++的渲染页面库,后端渲染库

2023-11-15

Markdowm.md

Markdowm.md

2021-06-09

空空如也

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

TA关注的人

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