自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 pytest学习

一、pytest 安装安装:pip install pytest查看版本:pytest --version二、简单测试1、创建testcase.py,编写一个测试用例def test(a): assert a == 1 #使用assert 判断测试用例是否成功2、运行仅运行一个文件:pytest test.py运行目录下所有测试用例:pytest testcase/运行单个测试用例:pytest test_login.py::test_1(函数形式测试用例).

2022-03-22 11:21:03 366 1

原创 详解接口测试

什么是接口常见接口请求方法1、Get 向特定资源发出请求(请求指定页面信息,并返回实体主体)2、Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建立或原有资源的修改3、Put 向指定资源位置上上传其最新内容(从客户端向服务器传送的数据取代指定文档的内容)4、Head 与服务器索与get请求一致的相应,响应体不会返回,获取包含在小消息头中的原信息(与get请求类似,返回的响应中没有具体内容,用于获取报头)5、Delete 请求服务器删除request-URL所

2021-10-12 17:53:58 229

原创 ADB命令汇总

一、设备管理# 重启设备adb reboot# 进入fastboot模式adb reboot bootloader# 获取已连接设备信息adb devices# 获取设备状态adb get-state# 获取设备号adb get-serialno# 获取设备中的Android版本号adb shell getprop ro.build.version.release# 获取设备SDK版本号adb shell getprop ro.build.version.sdk#

2021-10-12 17:31:15 5346

原创 python 文件处理

shutil.rmtree(filepath):递归的删除文件夹os.rmdir(dir):删除空文件夹os.path.exists(outdir):判断文件是否存在os.makedirs(outdir):创建文件夹os.listdir(path):列出文件夹下的子文件with open(filename,‘a+’)as f: 打开文件mode:r 模式1、如果文件存在,打开文件,光标置于开头,原数据可读,不可写入新数据;2、如果文件不存在,报错;r+ 模式1、如果文件存在,打开文件,

2021-06-19 15:51:41 272

原创 python中英文混合字符串对齐

python字符串对齐可以使用字符串的 ljust() , rjust() 和 center() 方法,ljust() 字符串靠左,需要填写两个参数,第一个参数为长度,z

2021-06-19 15:50:45 1730

原创 monkey测试

monkey测试1、-p 指定包名获取包名8.0 以下:获取前台正在运行的包名adb shell dumpsys activity | find "mFocusedActivity"8.0以上:adb shell pm list packages = adb shell-> cd data/data -> ls2、-s 指定伪随机数生成器seed值 ,连续两次相同的seed 值可以保证两次产生的随机操作序列是完全相同的,即伪随机3、-v 日志级别 -v 日志级别level.

2021-02-27 15:45:28 161

原创 python requests库的使用

一、所需头文件import requestsfrom requests.auth import HTTPBasicAuthimport json二、请求信息url = ""auth = HTTPBasicAuth("account","api_token")#如果auth使用不通过的话,可以再header加入Cookieheader ={ "Acept" = "", "Content-Type":"" "Cookie":""}data = { "params" = "v

2021-02-27 15:43:36 93

原创 fiddler和charles证书安装,需要root手机

1、安装charles2.安装证书,电脑安装3、adb devices 连接手机4、使用哈希算法计算证书名字后面加openssl x509 -subject_hash_old -in D:\software\charles\crt\charles-proxy-ssl-proxying-certificate.pem9c30ed27修改名字 cp charles-proxy-ssl-proxying-certificate.pem 9c30ed27.05、将9c30ed27.0 p

2020-10-29 16:18:00 1874

原创 在浏览器输入网址后服务器发生了什么

网站的文件通常都是放在服务器上,通过访问服务器地址来访问文件输入网址 DNS域名解析 建立TCP连接 发送http请求 服务器处理请求并返回结果 浏览器生产页面接下来分析主要的一些过程DNS域名解析:为什么要进行域名解析:计算机只能识别IP地址,而不能识别域名,IP地址由多个数字构成,不易于记忆,所以访问网站时,多是输入域名,我们就需要把域名翻译为相应的IP地址,然后根据I...

2019-09-17 17:30:22 415

原创 C、C++、java的区别

博主面试的时候被问到这三个编程语言的区别,之前没有做过系统性的整理,回答问题的思路比较散乱,今天整理一下,首先是C、C++的区别,C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象...

2019-09-15 19:11:29 5091

原创 树的一些相关计算

博主最近面试被问到一些树中的计算问题,就做了一些统计,1、n个节点的二叉树一共有多少种?2、n层二叉树的第n层最多少个?f(n) = 2^(n-1)3、一个深度为k的满二叉树的总节点个数为多少?f(k) = 2^(k-1)4、有n个节点的完全二叉树的深度为?h(n) = (log2n)+15、一个完全二叉树的节点为n,则该二叉树的叶子节点为多少?f(n) =...

2019-09-14 20:34:33 2147 1

原创 sizeof与strlen的区别

在日常编程中,sizeof和strlen以高频率出现在许多位置,尤其是在对字符串的大小进行计算时,今天我们来系统的了解一下他们。首先是区别:sizeof是运算符,strlen是函数 sizeof可以用类型或者函数做参数,strlen只能用char*做参数,且必须是以‘\0’结尾 对数组进行处理时,sizeof以数组为参数不会退化,而传递给strlen会退化为指针 大部分sizeof在...

2019-09-06 18:05:25 177

原创 二叉查找树

二叉树:是每个结点最多有两个子树的树结构,通常子树被称作“左子树”和“右子树”,二叉树常被用于实现二叉查找树和二叉堆。完全二叉树:若二叉树的高度为h,除了第h层外,其它各层(1~h-1)的结点数都达到了最大个数,第h层有叶子节点,并且叶子结点都是从左至右依次排布,这就是完全二叉树满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。平衡二叉树:有名AVL树,它是...

2019-08-27 10:55:39 106

原创 TCP拥塞控制机制

TCP拥塞控制是传输控制协议避免网络拥塞的算法,拥塞控制是防止过多的数据注入到网络中,可能使网络中的路由器或者链路过载,是一个全局性的过程。拥塞的标志:重传计时器超时、接收到到三个重复确认主要方式有慢启动、快重传、快恢复三个算法,最初连接建立cwnd默认为一个报文段,ssthresh默认为65535个字节慢启动:按线程控制窗口增长,每经过一个往返时间RTT就把发送方的拥塞控制窗口加...

2019-08-23 13:21:07 144

原创 几种常见的排序

一、插入排序思想:将数组中的每一个数字与其前面的数字进行比较,当该数字大于前面的数字,则不处理,当其小于前面的数字将后面的数字,则将数据移位,将其插入。给每个数字在其前面所有的数字之中找到合适的位置,并插入。插入排序中数据待插入的前面序列的数据是有序的。void Sort(int *arr,int len)//插入排序{ int i,j; for( i = 1;i<len...

2019-08-22 16:53:56 144

原创 软件测试流程

软件测试流程:1、需求分析:是开发人员根据需求文档完成需求分析文档,测试人员参与评审,评审的内容主要是看是否有遗漏或双方理解不一样的地方,测试人员要熟读需求,要多与开发、架构等多方多交流,深入了解需求。需求分析这一过程是主要确定系统必须完成哪些工作,对目标系统提出完整、准确、清晰具体的要求。2、需求评审:由项目经理、开发人员、测试人员、需求人员共同进行的对软件需求文档的评审,评审内容主要包...

2019-08-21 14:58:31 234

原创 http协议

 HTTP协议(超文本转移协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。 HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。http的请求报文1、请求行:请求方法,请求U...

2019-08-20 14:13:54 1109

原创 线程安全与线程同步

线程安全 (可重入函数)线程之间共享全局数据段、静态数据,引起非线程安全。线程安全可以通过线程同步对临界资源访问进行控制来实现。有些系统调用或者库函数的实现时发生不安全现象,在多线程环境下就需要使用这些函数的安全版本,即可重入函数。例如:字符串分割函数普通版本:char* strtok(char* sourstr,const char* flag)可重入版本:char* str...

2019-08-19 14:43:28 306

原创 与浏览器交互的web服务器

采用TCP/IP协议完成,涉及的头文件如下#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#include <unistd.h>#include <arpa/inet.h>#include <netin...

2019-08-17 11:48:05 200

原创 C++设计模式

C++设计模式是C++学习的重点之一,也是常用的处理问题的方法之一。一、单例模式 类只能实例化一个对象屏蔽构造函数 提供接口生成唯一对象 (1)不依赖对象 (2)不能返回类类型(1)懒汉模式 延时加载 双重锁机制class SingleTon{public: static SingleTon* getInstance() { if (psingle =...

2019-08-16 09:46:13 185

原创 数据库索引

索引:索引是基于字段建立的,是对数据库中一列或者多列的值进行排序的一种结构,经常查询素银列中的数据是,才需要在表上创建索引。MyISAM 采用B+树索引 多路查找 顺序遍历数据和索引分离开,叶子节点存放数据的地址,依靠地址查找数据, 索引值在非叶子上存放,叶子节点地址存放索引的数据, 存放的数据非常离散,则为非聚集索引。 时间复杂度:log(3n)主索引:...

2019-08-15 17:04:49 93

原创 关联容器set、map的使用

关联容器是STL容器的另一组成部分,关联容器的底层是红黑树,容器会根据值进行自动调整排序。map与set的底层数据结构决定了他们不会有重复的元素,set.count()函数返回的结果只能整数 0 或 1,1表示有这个元素,0表示没有这个元素;与其功能相似的还有函数find(),find()函数返回值是一个迭代器,成功返回迭代器指向所查找的元素,失败返回迭代器指向endtemplate...

2019-08-14 19:42:19 104

原创 从1到n整数中1出现的次数

输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数,例如,输入12,1~12这些整数包含1的数字有1,10,11,12,1一共出现了5次这是我在写剑指offer中遇到的一个题,题不难,很容易的想到从1开始对每个数进行检测,先判断各位是否为1,再判断它是否为十位数,对该数除10之后再进行判断,如果该数小于10时跳出循环。int main(){ int count = 0; ...

2019-08-12 15:01:39 100

原创 Linux☞Git使用方法

首先在系统中安装git,安装好了之后就对git中自己的信息进行设置绑定邮箱:gitconfig--globaluser.email“邮箱名” 使用者名字:gitconfig--globaluser.name“名字”接下来就开始正式的操作,首先创建一个空目录,初始化一个空仓库,以后再此仓库中进行git操作gitinit:初始化一个空的git仓库将文件上传至git仓库命...

2019-08-10 10:36:17 124

原创 三种顺序容器的比较

vector:矢量容器插入:push_back(尾插) O(1) insert (按位置插入) O(n)删除:pop_back(尾删)O(1) erase(按位置删) O(n)访问:O(1)优点:尾部操作和随机访问速度快缺点:不支持头插、任意位置删除和插入复杂度较高扩容方式:...

2019-08-09 19:58:25 799

原创 STL容器

STL标准模板库是C++学习的重点,STL中包含六部分容器、迭代器、泛型算法、函数对象、适配器以及空间配置器。今天首先了解一下容器,容器是一种容纳特定类型对象的集合,C++容器分为顺序容器和关联容器。顺序容器:元素的值与元素在容器中的位置无关,可以在指定位置插入或者删除元素。vector:矢量容器,数组 #include<vector> list::双向链表容器 双向...

2019-08-09 12:07:22 81

原创 智能指针(二)

上一篇博客将了两个智能指针auto_ptr和unique_ptr。指路智能指针(一)今天我们继续来了解剩下的两个智能指针,shared_ptr和weak_ptr.shared_ptr特点:强智能指针,带有引用计数的指针,实现智能指针共享数据 引用计数为0时,释放所指向的内存空间,所有权不唯一缺点:智能指针相互引用,导致内存泄漏,相互引用如图所示:...

2019-08-08 18:42:52 113

原创 智能指针(一)

智能指针是实现自主的内存回收机制, C++中动态开辟内存需要程序员手动开辟、手动释放。然而有可能会出现程序员忘了释放,产生内存泄漏。引入智能指针就可以有效的避免这个问题,我们都知道栈上的空间是由系统开辟系统释放,而堆上的空间是由程序员手动开辟手动释放,智能指针结合堆栈开辟空间的特点,实现由程序员手动开辟,系统自动释放的内存回收机制。智能指针就是让栈上的对象指向堆上的内存空间,当程序结束时,栈上...

2019-08-05 09:40:34 131

原创 多进程、多线程

多进程,多线程的编程是高性能服务器编程的重点,多进程编程:父进程负责监听、并接受客户连接(accept),fork() 创建子进程,子进程处理与客户端通讯。多进程编程中父子进程共享文件描述符,父进程不需要将接收的链接文件的文件描述符传递个子进程。父进程要关闭链接的文件描述符,如果父进程不关闭文件描述符,后续创建的子进程会将所有的文件描述符继承下来,后续的链接的文件的文件描述符不断增大,...

2019-08-03 23:04:12 82

原创 I/O复用

什么是I/O复用?I/O复用使得一个程序可以同时监听多个文件描述符。常见的使用场合:TCP服务器要同时处理监听socket和链接socket。Linux下实现I/O复用的系统调用只要有select、poll和epoll,epoll是Linux系统独有的。Select 在一段指定时间内,监听用户感兴趣的文件描述符上的可读、可写和异常等事件。函数原型:#include&lt...

2019-08-03 10:10:31 82

原创 守护进程

守护进程:守护进程是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。特点:运行时间长、后台执行、不需要与用户交互。会话:每打开一个终端,系统就会建立一个新会话。会话首进程:在会话中运行的第一个进程,通常会话首进程的id会作为会话id。组长进程:组长进程的pid 和进程组i...

2019-08-02 18:29:19 115

原创 虚继承

虚继承:主要解决内存重复的问题,同时避免访问冲突。声明格式:class 类名 :virtual 继承方式 类名继承方式可以缺省,缺省之后默认继承方式为 private 私有继承。#include<iostream>#include<string>using namespace std;class A{public: A(int a) :ma...

2019-08-02 10:19:33 8126

原创 纯虚函数

纯虚函数:不能实例化对象,可以做指针和引用,拥有纯虚函数的类是抽象类。作用:在基类中为其派生类保留一个函数的名字,以便派生类根据需要对他进行定义。如果在基类中没有保留函数名字,则无法实现多态性。声明格式:virtual 类型 函数名(参数列表)= 0(1)纯虚函数没有函数体;(2)最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是虚函数”;(3)这是...

2019-08-01 20:02:19 10748 1

原创 虚函数

在了解虚函数之前我们先了解一下多态,什么是多态???多态:允许将子类类型的指针赋值给父类类型的指针,该指针会指向子类中的父类部分。多态的目的为了接口复用,即统一接口不同形态。静多态 编译阶段确定函数的调用(函数入口地址)静态绑定 早绑定通过函数重载和模板来实现动多态 运行阶段确定函数的调用(函数入口地址)动态绑定 晚绑定 使用虚函数来实现动多态的实...

2019-08-01 15:38:19 1239

原创 结构体、联合体以及枚举

结构体、联合体以及枚举类型是我们在学习C/C++中经常遇到的一些数据结构,接下来我们就来认识和区别一下他们。结构体:(struct)用途:把不同的数据组合成一个整体——自定义数据类型C语言:在C语言中,结构体指的是一种数据结构,是C语言中聚合数据类型的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指...

2019-07-31 18:23:22 1684 1

原创 一个简单的内存池

内存池是我们经常使用的一种池,常见的池还有进程池、线程池和连接池,今天我们就先讨论内存池。首先看一下池的定义池:池就是在初始时,申请比刚开始要使用的资源大的多的资源空间,接下来使用时,直接从池中获取资源。内存池:即在初始时申请分配一定数量的。大小相等的内存块留作备用,此后如有需要直接从该内存上进行分配,与传统的new、melloc申请空间相比,这种机制减少了频繁从内核中申请空间产生大量的内...

2019-07-31 09:39:29 333

原创 TCP、UDP报文

TCP和UDP协议是网络通信中的重要协议,TCP与UDP的报头也是面试中的重点,今天我们来对这两个的报头进行详解。首先来看一下TCP报头,如图所示:源端口号:标识报文发送主机的进程也是报文的返回地址。目的端口号:标识接收报文主机的进程。32位序号:用来标识从TCP源端向TCP目标端发送的数据字节流,它表示在这个报文段中的第一个数据字节。32位确认号:包含目标端所期望收到源端的下...

2019-07-30 19:41:21 260

原创 线程

什么是线程:线程是进程内部的一条执行路径,是系统调动的基本单位,每个进程至少有一条线程,称之为主线程。 由于线程是进程内部的一条执行路径,所以一个进程中的所有线程共享全局、堆数据,包括打开的文件描述符,只有每个线程栈区的数据是线程独享的。线程的实现方式有三种模式分别为用户级、内核级、混合模式。接下来分别介绍着山中实现方式。用户级:线程的创建、销毁、管理都是在用户空间...

2019-07-30 13:10:27 103

原创 进程fork()

fork()函数是Linux的一个重点知识,它会为程序创建一个新的进程,原来的进程为父进程,新生成的进程为子进程,fork()函数调用一次会返回两次,父进程返回子进程的pid,而子进程返回 0 ,失败返回 -1。fork() 数据共享问题:fork产生子进程后,并不会将父进程(代码、栈区、堆区、全局变量)拷贝一份,内核将这些区域设置为只读,当父子进程中任意一个试图修改数据时,才会将修改数据...

2019-07-29 20:47:14 271

原创 C++继承关系

C++中继承主要有三种关系:public、protected和private。为了代码复用。(1)public继承public继承是一种接口继承,子类可以代替父类完成父类接口所声明的行为。此时子类可以自动转换成为父类的接口,完成接口转换。从语法角度上来说,public继承会保留父类中成员(包括函数和变量等)的可见性不变,也就是说,如果父类中的某个函数是public的,那么在被子类继承后仍然是...

2019-07-29 10:20:05 826

charles 弱网测试

charles 弱网测试

2024-03-08

空空如也

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

TA关注的人

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