自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【测试开发】性能测试工具LoadRunner

LoadRunner是一款开源桌面应用软件,可用来模拟用户负载完成性能测试工作,LoadRunner的功能在版本不断升级的过程中已经十分强大,现在很多互联网公司都在使用LoadRunner来完成产品或者Loadrunner是业界公认的权威性能测试工具,被誉为工业级的性能测试工具,支持广泛的协议和平台。

2024-01-11 10:18:04 1404 4

原创 【测试开发】性能测试概述

本文的主要目的是带大家了解什么是性能测试,性能测试的关键指标及其含义,性能测试的类型,以及性能测试工程师进行性能测试的流程以及关键点是啥。

2024-01-09 16:20:21 1007 1

原创 【测试开发】自动化测试selenium

自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。自动化测试包括UI自动化,接口自动化,单元测试自动化。按照这个金字塔模型来进行自动化测试规划,可以产生最佳的自贡话测试产出投入比(ROI),可以用较少的投入获得很好的收益。单元测试最大的投入应该在单元测试上,单元测试运行的频率也更加高。java的单元测试框架是Junit。接口自动化接口测试就是API测试,相对于UI自动化API。

2024-01-06 17:26:03 1397 2

原创 【测试开发】测试分类相关知识

本文主要讲解软件测试的各种技术一、测试分类界面测试,可靠性测试,容错性测试,文档测试,兼容性测试,易用性测试,安装卸载测试,安全性测试,性能测试,内存泄漏测试软件只是一种工具,软件与人的信息交流是通过界面来进行的,界面是软件与用户交流的最直接的一 层,界面的设计决定了用户对我们设计的软件的第一印象;界面如同人的面孔,具有吸引用户的直接优势,设计合理的界面能给用户带来轻松愉悦的感受。界面测试(简称UI测试,指按照界面的需求(一般是UI。

2023-12-26 20:37:55 1439 2

原创 【测试开发】测试用例讲解

本篇文章所介绍的所有测试用例均属于黑盒测试。一、测试用例的基本要素测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。好的测试用例是一个不熟悉业务的人也能依据用例来很快的进行测试对比好坏用例的评价标准用例表达清楚,无二义性。用例可操作性强。用例的输入与输出明确。一条用例只有一个预期结果。用例的可维护性好。用例对需求的覆盖率高。测试用例的给我们带来的好处测试执行者的依据使得工作可重复,自动化测试的基础。

2023-12-24 10:34:37 1060 1

原创 【测试开发】测试的基础知识二

接上一篇测试的基础知识。bug的定义每个公司都不一致,在定义级别之前需要查看公司规范。以下为样例:1Blocker(崩溃):阻碍开发或测试工作的问题;造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等(该问题在测试中较少出现,一旦出现应立即中止当前版本测试)。

2023-12-23 10:31:00 923 1

原创 【网络编程】poll和epoll服务器的设计

poll和select一样,也是一种linux中的多路转接的方案。而poll解决了select的两个问题:1.select的文件描述符有上限的问题。2.每次调用都要重新设置需要关心的文件描述符。

2023-12-21 20:29:45 983 1

原创 【数据链路层】继续数据链路层内容

在上一篇文章最后我们讲到了防止局域网内发生碰撞,那么现在问一个问题:因为有碰撞域,一台主机发生数据的时候,发送数据量长了好还是短了好?为什么?当数据很长的时候,我们就需要很长的时间去发送数据,虽然光速很快,但依旧在局域网内花费很多时间去传输。当数据很短的时候,虽然在局域网内花费的时间很短,但是发送的次数会变多,比如一份大的数据分成几个小部分,这就增加了局域网内碰撞的概率,所以MAC帧协议规定单个数据大小必须控制在46~1500字节以内。

2023-12-09 17:17:26 282 1

原创 【测试开发】学习测试前的基础知识

本篇文章主要讲解在学习测试前一些需要了解的知识。最常见的理解是:软件测试就是找BUG,发现缺陷。现实生活中在很多情况下我们都在默默进行测试:刚新买来一部手机,我们要干什么?一场考试做完一遍题目之后进行一遍检查就是在测试买一台电视安装好之后打开试试看能不能正常使用也是在测试软件测试就是验证软件产品特性是否满足用户的需求测试试图验证软件是工作的,也就是验证软件功能执行的正确性测试的活动是以测试人员预期的结果为依据,这里的预期结果指的是需求定义。

2023-11-21 20:54:57 264 1

原创 【MySQL】一文学会所有MySQL基础知识以及基本面试题

存储数据用文件就可以了,为什么还要弄个数据库?文件保存数据有以下几个缺点:1.文件的安全性问题2.文件不利于数据查询和管理3.文件不利于存储海量数据4.文件在程序中控制不方便数据库存储介质:磁盘和内存为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。所以需要数据库的主要原因在于,一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据管理能力(用户角度)

2023-11-09 23:04:35 1128

原创 【网络编程】高级IO

下面我们总结一下select服务器的特点:1.select能同时等待的文件描述符是有上限的,改内核只能提高一点上限,并不能完全解决。2.select服务器必须借助第三方数组来维护合法的文件描述符。3.select的大部分参数是输入输出型的,调用select前,要重新设置所有的文件描述符,调用之后,我们还要检查更新所有的文件描述符,这带来的就是遍历的成本。4.select的第一个参数为什么是最大文件描述符+1呢?这是因为在内核层面也需要遍历文件描述符。

2023-08-13 16:06:00 489 3

原创 【网络层+数据链路层】深入理解IP协议和MAC帧协议的基本原理

为什么经常将TCP/IP放在一起呢?这是因为IP层的核心工作就是通过IP地址来定位主机的,具有将一个数据报从A主机跨网络发送到B主机的能力,而TCP所提供的策略使IP层可靠的将一个数据报从A主机跨网络发送到B主机。在复杂的网络环境中确定一个合适的路径。网络层主要负责地址管理和路由选择,例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由),路由器工作在网络层。

2023-08-11 15:40:17 2923 1

原创 【传输层】Tcp协议的原理(二)

为什么TCP这么复杂?因为既保证了可靠性同时又尽可能的提高性能。校验和,序列号(按序到达),确认应答,超时重传,连接管理,流量控制,拥塞控制提高性能:滑动窗口,快速重传,延迟应答,捎带应答基于TCP的应用层协议:当然也包括你自己写TCP程序时自定义的应用层协议。TCP的可靠性是通过各种优秀的机制实现的,重要的保证可靠性的机制有:序列号(按序到达),校验和,确认应答,超时重传,拥塞控制,连接管理,流量控制。提升性能的机制有:滑动窗口,捎带应答,延迟应答,快速重传。

2023-08-11 15:39:27 363

原创 【传输层】Udp协议和Tcp协议的原理(一)

前几篇文章都是讲解的应用层的内容,下面我们进入传输层的内容,传输层就是负责数据能够从发送端传输接收端。传输层最典型的协议有两个,一个是UDP协议,一个是TCP协议,在讲解UDP协议之前我们先重新认识一下端口号:端口号标识了一个主机上进行通信的不同应用程序,在网络通信时,用IP值标识一台主机,用port值标识一台主机上不同的进程。

2023-08-04 17:22:19 595

原创 【应用层】HTTPS协议详细介绍

HTTPS也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层,由于HTTP协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况,下面我们详细介绍https是如何解决这些问题的。加密就是把明文(要传输的信息)进行一系列变换,生成密文。解密就是把密文再进行一系列变换,还原成明文。在这个加密和解密的过程中,往往需要一个或多个中间的数据,辅助进行这个过程,这样的数据成为密钥。

2023-08-01 22:29:37 1004 3

原创 【应用层】Http协议总结

http协议内容都是按照文本的方式明文传输的。

2023-07-30 17:43:35 424 4

原创 【应用层】Http协议的学习

HTTP协议(超文本传输协议)和我们上一篇写的网络版计算器中自己定制的协议一样,只不过Http协议是是一个非常好用的协议,所以我们可以直接用现成的不用自己再搞一套了。这篇文章中主要讲解http协议是如何实现的,以及底层的一些原理是什么,在我们手动实现一些原理的时候我们才能对http有更加深刻的认识。

2023-07-27 18:20:55 451

原创 【Linux】Tcp协议的通讯流程,浅谈三次握手四次挥手

自定义协议就是定义一个结构化的对象,有了结构化的对象未来客户端和服务端就可以来回进行发送和接收,约定在上面的代码中体现在规定必须是"x op y"这样的格式,这就是约定。注意:没有规定我们网络通信的时候只能有一种协议,实际上我们完全可以将上述代码中规定前面是正文长度替换为协议编码,通过协议编码就可以选择要执行哪种协议了。

2023-07-25 17:48:52 563 1

原创 【Linux】Tcp服务器的三种与客户端通信方法及守护进程化

在上一篇文章中,我们实现了Tcp服务器,但是为了演示多进程和多线程的效果,我们将服务器与客户通通信写成了一下死循环,导致只要有一个用户没有和服务器通信完毕其他用户就都无法和服务器通信,这也体现了单进程面对网络时的一些不足,下面我们用多进程,多线程,线程池来解决这个问题。本篇文章中最重要的是网络知识与系统知识融合在一起,就比如多进程版和多线程版中多进程需要关闭两次文件描述符而多线程只需要一次,要理解这些概念就必须知道进程和线程的概念,所以网络的学习很考验系统的基本功。

2023-07-22 09:21:19 1240

原创 【Linux】udp客户端windows版以及Tcp服务器的实现

tcp服务器的实现相较于udp服务器并没有多多少东西,所以只有udp明白了那么简单的tcp服务器还是很好实现的,下一篇才是我们tcp服务器的重点。

2023-07-20 21:33:10 1118 1

原创 【Linux】udp服务器实现大型网络聊天室

根据上一篇文章中对于英汉互译和远程操作的两个小功能大家应该已经学会了,我们的目的是让大家可以深刻的理解udp服务器所需要的接口已经实现的简单步骤,下面我们开始实现网络聊天室。一、udp服务器实现大型网络聊天室。

2023-07-18 21:31:48 1470

原创 【Linux】udp服务器实现英汉互译以及远程操作

在上一篇文章中我们详细的讲解了udp服务器的实现步骤,把用到的每一个接口都进行了详细的讲解,而我们在上一篇只是简单的网络通信功能,很多地方还不完善,所以在这一篇文章我们会将上一篇文章用到的代码做修改,写出一个网络版的英汉互译以及一个大型的网络聊天室。

2023-07-16 21:52:32 518 4

原创 60题学会动态规划系列:动态规划算法第五讲

子数组系列题目。

2023-07-13 15:44:34 2059 50

原创 【Linux】手把手教你实现udp服务器

上一篇文章中我们讲到了很多的网络名词以及相关知识,下面我们就直接进入udp服务器的实现。一、udp服务器的实现cc=g++.PHONY:allclean:我们通过all就可以创建多个可执行程序了,对于cc这个变量我们设置为g++,以后如果想换其他的编译器就可以直接替换了。public:private://服务器一定要有自己的服务端口号(注意端口号是16位的)//端口号//实际上一款服务器不建议指明一个IPstring _ip;//ip那么我们现在服务器的ip填多少呢?

2023-07-11 12:22:24 3889 51

原创 【Linux】网络基础和网络套接字的概念

上面我们讲了网络基础的概念以及网络套接字的一些概念,这些知识是为了我们下一篇编写UDP服务器而做准备的,由于网络相关的知识都比较抽象,所以还是希望大家可以尽量的去理解网络中各种名词的解释。

2023-07-09 20:01:59 1385 99

原创 60题学会动态规划系列:动态规划算法第四讲

买卖股票相关的动态规划题目。

2023-07-07 19:52:39 1384 102

原创 【Linux】线程终结篇:线程池以及线程池的实现

什么是线程池呢?线程池一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。线程池的应用场景:1.需要大量的线程来完成任务,且完成任务的时间比较短。WEB服务器完成网页请求这样的务,使用线程池技术是非常合适的。

2023-07-05 15:36:26 1673 112

原创 【Linux】基于环形队列的生产者消费者模型的实现

上一篇文章我们讲了信号量的几个接口和基于环形队列的生产者消费者模型,下面我们就快速来实现。

2023-07-03 20:09:37 820 104

原创 【C++】类型转换和IO流

首先我们看看C语言中的类型转换:在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化C隐式类型转换和显式类型转换。1.隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败2.显式类型转化:需要用户自己处理int main()int i = 1;// 隐式类型转换// 显示的强制类型转换对于上面这种C语言的类型转换其实是有一些缺陷的,

2023-07-01 13:02:03 703 92

原创 【Linux】生产者消费者模型代码实现和信号量

下面我们实现基于阻塞队列的生产消费模型: 首先我们创建一个头文件用来放阻塞队列的类:这个类也很简单,只需要有一个普通队列,一个记录队列容量的变量,一个互斥锁(保护共享资源的安全),一个条件变量(维护线程的互斥与同步)。类中最重要的两个接口是push和pop,然后构造和析构函数必须要有。下面进入测试文件:在测试文件中,首先我们要有一个阻塞队列对象,然后创建两个线程,一个代表生产者一个代表消费者。然后我们创建这两个线程并且将阻塞队列传进去,这样这两个线程就能看到同一个缓冲区了。最main函数返回前记

2023-06-29 19:31:36 1723 97

原创 【C++】定制删除器和特殊类设计(饿汉和懒汉~)

为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有。

2023-06-27 19:18:54 1237 85

原创 【C++】auto_ptr为何被唾弃?以及其他智能指针的学习

1. C++ 98中产生了第一个智能指针auto_ptr.给出了更实用的scoped_ptr和shared_ptr和weak_ptr.3. C++ TR1,引入了shared_ptr等。不过注意的是TR1并不是标准版。4. C++ 11,引入了unique_ptr和shared_ptr和weak_ptr。需要注意的是unique_ptr对应boost的scoped_ptr。并且这些智能指针的实现原理是参考boost中的实现的。

2023-06-24 19:25:39 1559 88

原创 【C++】C++关于异常的学习

实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。

2023-06-22 19:30:22 3704 84

原创 【C++】C++11:线程库和包装器

上一篇文章中我们详细讲解了lambda表达式的使用,我们今天所用的线程相关的知识会大量的用到lambda表达式,所以对lambda表达式还模糊不清的可以先将上一篇文章看明白。一、线程库在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含。

2023-06-20 11:23:12 615 66

原创 【C++】C++11新特性重点:可变参数+lambda

上一篇我们重点讲解了右值引用+移动语义,关于移动构造和移动赋值还有一些需要补充的知识:如果你没有自己实现移动构造函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载中的任意一个。那么编译器会自动生成一个默认移动构造。默认生成的移动构造函数,对于内置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动构造,如果实现了就调用移动构造,没有实现就调用拷贝构造。

2023-06-17 19:51:21 1240 109

原创 【Linux】面试重点:死锁和生产消费模型原理

上一篇的互斥量原理中我们讲解了锁的原理,我们知道每次线程申请锁的时候一旦申请成功这个线程自己就把锁带在自己身上了,这就保证了锁的原子性(因为只有一个锁),而当我们已经申请成功锁了然后再去申请锁会发生什么事呢?下面我们在死锁中回答这个问题。一、死锁死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用不会释放的资源而处于的一种永久等待状态。上面死锁的概念说一组进程中的各个进程,那么一个锁会引发死锁的问题吗?

2023-06-15 20:14:56 2116 105

原创 60题学会动态规划系列:动态规划算法第三讲

简单多状态问题。

2023-06-12 22:43:52 1933 99

原创 【Linux】互斥量原理的实现

为了实现互斥锁操作大多数体系结构都提供了swap或exchange指令该指令的作用是把寄存器和内存单元的数据相交换,由于只有一条指令保证了原子性即使是多处理器平台访问内存的总线周期也有先后一个处理器上的交换指令执行时另一个处理器的交换指令只能等待总线周期。如下图:对于上图中的加锁解锁汇编代码,是谁在执行呢?答案是调用的线程。这里圈出来的汇编代码的意思是:将共享数据交换到自己的私有上下文当中。

2023-06-10 19:27:32 1022 97

原创 【Linux】线程分离和线程互斥

在上一篇文章中我们学习了线程控制,比如创建一个线程,取消一个线程以及等待线程,这篇文章我们讲两个非常重要的概念,一个是线程分离,另一个是线程互斥一、线程分离分离线程默认情况下,新创建的线程是joinable的,线程退出后,需要对其进行操作,否则无法释放资源,从而造成系统泄漏。如果不关心线程的返回值,join是一种负担,这个时候,我们可以告诉系统,当线程退出时,自动释放线程资源。可以是线程组内其他线程对目标线程进行分离,也可以是线程自己分离,如下:sleep(1);

2023-06-08 18:43:32 1237 88

原创 【Linux】多线程概念初讲

什么是线程呢?在一个程序里的一个执行路线就叫做线程(thread更准确的定义是:线程是一个进程内部的控制序列”。一切进程至少都有一个执行线程。线程在进程内部运行,本质是在进程地址空间内运行。在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化。透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。相信大家都在书上看过线程的概念,书上是这样描述的:线程是一个执行分支,执行粒度比进程更细,调度成本更低。

2023-06-06 21:41:57 1308 115

空空如也

空空如也

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

TA关注的人

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