自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 项目——仿RabbitMQ实现消息队列

全文20w字,从0开始仿照RabbitMQ实现消息队列

2025-02-24 20:37:46 1090

原创 从入门到精通——ProtoBuf

本章介绍了什么是protobuf、以及protobuf的作用、如何安装protobuf、proto3的语法等内容

2024-12-02 19:31:21 7461

原创 软件测试——性能测试工具JMeter

还是以上面的博客系统为例,假设“列表页”的功能是保存了多篇博客,每个博客以blogid为标识符区分,我们创建一个http请求命名为详情页,每个详情页都是访问具体的某一篇博客。如下图所示,其中blogid=1993,表示要访问的是blogid为1993的博客。假如说现在有200个详情页,分别都是不同的blogid,我想让他们的blogid都变成1993,如何实现?如果手动一个一个修改就太麻烦了,我们可以创建一个用户定义的变量来解决这个场景。添加用户定义的变量然后我们创建一个id,值为1993。

2024-11-28 16:24:25 6285

原创 软件测试——性能测试概念篇

概念:为了发现系统性能问题或获取系统性能相关指标而进行的测试。一般在真实环境、特定负载条件下,通过工具模拟实际软件系统的运行及其操作,同时监控性能各项指标,最后对测试结果进行分析来确定系统的性能情况。查询数据时间过长,网速很慢,服务器无响应,查询数据很长时间才显示列表。

2024-11-23 21:41:18 1165

原创 软件测试——自动化测试常见函数

在上一篇文章中,给大家演示了一下自动化程序,而本篇文章会带大家详细学习selenium库。selenium库是python官方的库,里面包含了很多操控浏览器的函数。本节重点。

2024-11-22 22:37:22 1017

原创 软件测试——自动化测试概念篇

自动的代替人的行为完成操作。自动化在生活中处处可见。生活中的自动化案例有效的减少了人力的消耗,同时也提高了生活的质量。软件中的自动化测试也是如此,通过。自动化测试不⼀定比人工测试更能保障系统的可靠性,自动化测试是测试人员手工编写,后续如果有功能的变更自动化也需要进行不定期的维护和更新。错误坑!!“⼀定程度上”和“大幅度”的表达方式也需要注意自动化的主要目的就是用来进行回归测试。什么是回归测试?当软件有多个版本需要进行功能的整体回归时,我们就需要用到回归测试。

2024-11-18 21:23:25 1149

原创 软件测试——测试分类

本节课重要目标。

2024-11-17 20:13:56 934

原创 软件测试——用例篇

在前一篇文章中,我们学习到了bug的相关知识,这一篇将教大家如何设计测试用例去寻找bug。

2024-11-16 21:44:38 1797

原创 软件测试——Bug篇

定义:⼀个计算机bug指在计算机程序中存在的⼀个错误(error)、缺陷(flaw)、疏忽(mistake)或者故障(fault),这些bug使程序无法正确的运行。Bug产生于程序的源代码或者程序设计阶段的疏忽或者错误。1.当且仅当规格说明(需求文档)是存在的并且正确,程序与规格说明之间的不匹配才是错误。2.当需求规格说明书没有提到的功能,判断标准以最终用户为准:当程序没有实现其最终用户合理预期的功能要求时,就是软件错误。也就是说,如果某个程序的代码写错了,这属于bug;

2024-11-15 15:44:31 1089

原创 软件测试——概念篇

生命周期指的是从生命的开始到生命结束的⼀段时间。以人为例,⼈类的生命周期是从生命孕育的开始,中间会经历幼年,童年,少年,青年,老年,最终直至死亡。而软件/产品的生命周期也是如此,需求的开始是软件生命的起点,中间会经历需求的计划、设计,程序开发,程序测试等阶段,直至软件不再进行维护便到了生命的重点。案例:假如我想要建造⼀套房子(用户需求),房子的生命周期(流程)是什么样的?因此,我们就得到了软件(开发)的生命周期:需求分析⸺计划⸺设计⸺编码⸺测试⸺运行维护。

2024-11-13 15:45:03 1185

原创 软件测试——认识测试

在我们的日常生活中就有很多测试的例子,比如我们在商场买衣服,我们会测试这个衣服的外观是否符合个人审美;测试这件衣服的尺码是否合适;测试这件衣服的面料是否舒服;测试这件衣服的价格.......我们在编写完代码时,为了验证这个代码是否正确,也会有很多测试的动作,如a=1,b=2,返回的c是否等于3;a=1,b=-2,返回的c是否等于-1;......所以说测试不管在日常生活中还是在学习中都是随处可见的。为什么需要软件测试。

2024-11-12 19:34:02 846

原创 一文带你掌握贪心算法

贪心算法也可以称为贪心策略,他是一种解决问题的策略,这个策略是:每次都去找局部最优解,最终得到全局最优解。1.把解决问题的过程分为若干步。2.解决每一步时,都选择当前看起来“最优的”解法(贪心)3.希望得到全局最优解这里的希望指的是:通过贪心策略(每次选择当前最优解)得到的结果并不一定是正确的,即局部最优不能代表全局最优,有可能是你的贪心策略不对,也有可能是这题无法使用贪心算法。

2024-11-11 21:41:00 1579

原创 一文带你掌握动态规划(三)

利用动态规划解决回文串,两个数组dp问题,还有背包问题。

2024-10-30 14:36:00 1184

原创 一文带你掌握动态规划(二)

上一篇文章中,我们讲解了动态规划的原理,算法步骤以及两种经典的动态规划题目,那么本篇中接着上集继续讲解动态规划的几种常见题型。如果没看过上一篇文章的同学,建议先从上一篇开始阅读。

2024-10-20 18:16:10 1162

原创 一文带你掌握动态规划(一)

例题+详解,带你深入理解动态规划

2024-10-12 19:29:55 1219

原创 一文带你彻底掌握二分查找

二分是查找算法中比较高效的,时间复杂度是O(logN),当面临需要查找的问题时,如果满足二段性,我们就可以使用二分查找来提高查找效率。模板最好也要记住,因为二分非常容易写出死循环,在查找左右端点的那里,我们也分析了循环条件不对,mid是否需要+1都会导致死循环的出现,在实际写代码时,我们需要注意避免这些问题。

2024-09-11 20:51:24 1960 1

原创 高阶数据结构——跳表

skiplist本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是一样的,可以作为key或者key/value的查找模型。skiplist,顾名思义,首先它是一个list。实际上,它是在有序链表的基础上发展起来的。如果是一个有序的链表,查找数据的时间复杂度是O(N)。每相邻两个节点升高一层,增加一个指针,让指针指向下下个节点。

2024-08-12 01:26:59 696

原创 高阶数据结构——LRU Cache

LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。

2024-08-09 23:16:53 1469

原创 高阶数据结构——B树

B树:有序数组+平衡多叉树;B+树:有序数组链表+平衡多叉树;B*树:一棵更丰满的,空间利用率更高的B+树。单论树的高度,查找效率来看B树系列确实不错,但是也存在一些缺点。1.空间利用率低,占用的空间大。2.插入和删除数据时,需要进行分裂,涉及到数据的挪动,效率低。3.虽然比起红黑树等,高度更低,但是在内存中都是一个量级的,搜索效率并不比红黑树快多少(在内存中没什么优势)

2024-08-08 15:09:52 1715 1

原创 高阶数据结构——图

邻接矩阵可以在O(1)的时间内帮我们判断两个顶点是否存在边,以及对应的权值。邻接矩阵适合稠密图(边较多的图),在稀疏图(边较少的图)中,邻接矩阵会比较浪费空间。邻接表更加节省空间,因为只存储真实存在的顶点。查找边的效率比邻接矩阵低,因为要遍历完一整个链表才能找到。

2024-08-06 13:32:57 758

原创 高阶数据结构——并查集

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题(即所谓的并、查)。在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(union-find set)。

2024-07-13 18:46:31 870

原创 网络其他重要协议(DNS、ICMP、NAT)

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称例如com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.baidu: 二级域名, 公司名.www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议.应用层的作用: 满足我们日常需求的网络程序, 都是在应用层能够根据自己的需求, 设计应用层协议.了解HTTP协议.

2024-05-27 20:01:20 1695

原创 数据链路层协议——以太网协议

本章介绍数据链路层的工作原理,如何在局域网内找到目标主机(路由器)。

2024-05-24 16:58:43 1172

原创 网络层协议——IP协议

在学习TCP时,我们学习了TCP保证的是能将一个数据可靠的传输到另一个主机上。主要是数据的可靠传输。而网络层和数据链路层则是帮助我们如何将数据传输到另一台主机上。我们在应用层给对方发数据时,数据并不是直接传输给对方的,而是需要自顶向下贯穿协议栈。其中经过传输层,网络层,数据链路层和物理层,每一层都需要添加对应的报头。报文通过网络的传输,到达目标主机。再从下至上贯穿协议栈,每一层会对报文进行解包分用,并向上交付。所以站在每一层的角度都是和对方的对应层直接通信。

2024-05-20 22:02:33 794

原创 传输层协议——TCP协议

2万字详解TCP协议

2024-05-15 22:10:10 1167

原创 传输层协议——UDP协议

传输层的理解,以及UDP协议

2024-05-12 21:30:46 1194

原创 应用层协议——HTTPS协议

HTTPS详解内容,包含HTTPS与HTTP的区别,对称加密和非对称加密,以及HTTPS工作原理等。

2024-05-10 18:11:25 780

原创 应用层协议——HTTP协议

HTTP(Hyper Text Transfer Protocol)协议又叫做超文本传输协议,是一个简单的请求-响应协议,HTTP通常运行在TCP之上。超文本的意思就是超越普通的文本,http允许传送文字,图片,视频,音频等,协议我们前面也说过,就是一种约定。HTTP协议在应用层,主要是解决如何处理对端发送过来的数据,关于对端数据如何发送过来,丢包了怎么办等问题,不是应用层要考虑的,在传输层,网络层,数据链路层会帮我们解决这些问题,他只关心如何处理对端数据。

2024-05-07 21:52:14 1011

原创 再谈“协议”

通过实现一个网络版本计算器,再次认识协议,以及协议的作用

2024-04-23 12:05:01 804

原创 任务管理与守护进程

在上一章中,我们实现了一个Tcp服务器,但是这个服务器还存在一些问题,例如,我们将云服务器(xshell)关闭之后,服务器就无法使用了。但是真正的服务器肯定不是这样的,启动之后不受用户影响,除非主动将这个服务器kill掉。我们考虑将服务器修改成为守护进程守护进程(Daemon)是在计算机操作系统中以后台形式运行的一类特殊进程。。它们不依赖于任何用户交互,也不与任何终端相关联。

2024-04-17 20:54:42 872

原创 TCP网络程序

上一章我们基于UDP实现了几个网络程序,这一章我们开始使用TCP。可以看到TCP是有链接的,而UDP是无连接的,有无连接体现在接口上面(listen,connect),话不多说,直接开始。

2024-04-16 15:27:32 1036

原创 UDP网络程序

上一章中,我们介绍了socket,以及TCP/UDP协议。这一章带大家实现几个UDP协议的网络服务。我们需要一个 服务端和一个客户端。

2024-04-12 22:32:59 1136

原创 网络编程套接字

我们可以将sockaddr看成基类,sockaddr_in和sockaddr_un看成子类,构成了多态。IPv4和IPv6的地址格式定义在netinet/in.h中,IPv4地址用sockaddr_in结构体表示,包括16位地址类型, 16位端口号和32位IP地址.IPv4、IPv6地址类型分别定义为常数AF_INET、AF_INET6. 这样,只要取得某种sockaddr结构体的首地址,不需要知道具体是哪种类型的sockaddr结构体,就可以根据地址类型字段确定结构体中的内容.

2024-04-12 16:04:22 1210

原创 计算机网络基础

起初,计算机以单机模式被广泛使用(这种方式也叫独立模式)。但是单机模式有很大的缺陷,就是数据无法共享。假设现在有三台主机,分别存储一部分客户的数据。现在我们需要对这些数据做处理,那么我们只能等一台计算机处理完之后将数据传递给下一个计算机,而下一个计算机在没有收到数据之前,一直处于等待状态。这样效率十分低下,于是提出了网络的概念。有人将这几台计算机连接到一起,将数据放到服务器中集中管理,每台计算机也就可以共享这些数据了。局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起;

2024-04-01 18:52:37 729

原创 MySQL使用C语言连接

连接数据库前,我们需要创建一个MySQL对象参数为null时,函数自动返回一个MySQL对象,如果参数为一个地址,函数会在该地址处帮你完成初始化。MYSQL是 C api中一个非常重要的变量(mysql_init的返回值),里面内存非常丰富,有port,dbname,charset等连接基本参数。它也包含了一个叫 st_mysql_methods的结构体变量,该变量里面保存着很多函数指针,这些函数指针将会在数据库连接成功以后的各种数据操作中被调用。

2024-03-31 21:16:13 1536

原创 MySQL用户管理

如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。

2024-03-31 18:34:59 634

原创 MySQL视图

这张表生成之后,我们发现v_ename_dname这张表只有 .frm文件(表信息),没有 .ibd文件(表数据),也证明了我们前面的视图的特性:视图中的数据并不会单独存储在数据库中,其数据来自定义视图时查询所引用的表。我们现在做一个测试,我们在视图中将姓名为WARD的员工的部门名换一个名字,如果原表中的数据也发生了改变,就说明视图的数据会影响到基表。前面说过视图的数据变化会影响到基表,基表的数据变化也会影响到视图。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。我们创建完之后会发现多了一张表。

2024-03-31 11:26:14 385

原创 MySQL事务

事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。就需要多条 MySQL 语句构成,那么所有这些操作合起来,就构成了一个事务。一个 MySQL 数据库,存在大量事务在运行,而每条事务至少一条 SQL ,这样如果大家都访问同样的表数据,在不加保护的情况,就绝对会出现问题。

2024-03-30 12:09:08 2955

原创 MySQL索引

索引:提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行正确的 create index ,查询速度就可能提高成百上千倍。但是天下没有免费的午餐,查询速度的提高是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的IO。所以它的价值,在于。接下来,通过一个案例,来看看索引能提高多少检索效率。1。我们先创建一个有着八百万条数据的表。2。我们要在这八百万条数据中找到指定的一条。可以看到查找的时间大概是4.5秒左右。3。我们建立索引之后再次查找。

2024-03-29 16:29:36 1035

原创 MySQL内外连接

表的连接分为内连和外连。

2024-03-28 21:12:20 496

空空如也

空空如也

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

TA关注的人

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