自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 python-字符串替换

原字符串str:“hello word china”被替换字符串oldstr:“world”新替换的字符串newstr:“hi”替换结果:hello hi china实现第一种方法:直接调用replace()def strreplace(str, oldstr, newstr): return str.replace(oldstr,newstr)第二种方法:利用re模块正则 def strreplace(str, oldstr, newstr): #先编译正则

2020-08-20 15:22:22 3146

原创 postman请求参数关联

场景:接口测试时,需要关联参数,就是上一个请求的返回接口作为下一个接口请求的参数。参数关联:业务功能接口测试中,单接口的测试不能覆盖业务逻辑,需要多个接口配合进行,a接口运行后,需要取出a接口返回的某一个数据,在调用b接口时作为请求参数传进去,进行接口测试操作步骤创建一个环境变量作为两个接口的关联参数2、请求A接口,查看返回数据3、编写Test脚本,提取字段4、运行接口,查看环境变量提取结果此时city的字段已经被成功提取出来了5、B接口使用A接口提取的字段最后运行B接口这

2020-08-19 16:53:24 785

原创 python处理excel输出为字典数据-openpyxl

得到的

2020-08-18 20:35:28 2774

原创 python-list操作

1、list添加元素方法:append(),insert(),extend()append()在列表末尾头添加元素a = [1, 2, 3, 4, 5]a.append(6)print(a)输出:[1, 2, 3, 4, 5, 6]insert(index,object)在列表指定位置插入元素a = [1, 2, 3, 4, 5]a.insert(2,8)print(a)输出:[1, 2, 8, 3, 4, 5]extend()将一个列表合并到另一个列表a = [1, 2, 3

2020-08-14 14:08:19 483

原创 python处理json

一、了解jsonJSON:JavaScript Object Notation (JavaScript 对象表示法)json是一种轻量级的数据交换格式,完全独立于任何语言程序语言的文本格式。一般后台应用程序将响应数据封装成json格式返回基本语法:名称/值对 名称/值对包括字段名称(在双引号中),接着是冒号(:),最后是值json最常用格式是对象的键值对{"sites": [{ "name":"360" , "url":"www.360.com" }, { "name":"google"

2020-08-12 17:21:40 434

原创 剑指offer46 求1+2+3...+n的和

问题描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 解决利用构造函数求解 创建该类的n个对象,在该类里定义两个静态成员变量n和sum,静态成员变量为所有对象所共享,在构造函数里对其操作。这样创建几个对象就调用几次构造函数,并加了多少次。class Temp{public: Tem

2017-08-30 20:37:54 373

原创 排序一个数组要求时间复杂度为O(N)

#define SIZE 65535void Sort(int* a, int len){ int *data=new int[SIZE]; memset(data, 0, sizeof(int)*SIZE);//这里必须先将开辟的数组空间初始化为0 if (a == NULL) { return; } int i = 0;

2017-08-15 19:26:13 5140

原创 统计水果出现的次数及求出前K中出现次数最多的水果

统计次数//仿函数struct Geater{ bool operator()(map<string,int>::iterator l,map<string,int>::iterator r) { return (l->second) > (r->second); }};第一种方法map<string, int> dict; int i = 0;

2017-08-06 17:56:09 978

原创 选择排序和堆排序

选择排序选择排序的思想很简单,就是在数组找到一个最大的然后放到最后面(升序)、最前面(降序),或者找一个最小的放到最前面(升序)最后面(降序)。此外还有优化方案就是从两边开始,同时找最大的和最小的,找的后放到正确的位置void SelectSort1(vector<int>& v){ if (v.empty()) { return; } int i

2017-08-05 20:29:20 295

原创 C语言模式实现C++继承和多态

简单模拟下c语言实现继承与多态typedef void(*FUN)();//函数指针struct A{ int a; int b; FUN fun;};struct B{ A _a;//B继承A};void fA(){ cout << "A" << endl;}void fB(){ cout << "B" << endl;}i

2017-08-05 15:27:47 329

原创 前序遍历和中序遍历构造二叉树[lintcode]

/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right =

2017-08-05 14:11:37 3416

原创 树中两个节点的最低公共祖先(剑指offer)

三种情况:二叉树每个节点都有parent即三叉链搜索二叉树普通的二叉树第一种情况:如果是一个三叉链,每一个节点都有一个parent,我们可以把它当成求两个链表的第一个公共节点。两个链表的开始分别是这两个节点,链表指向下一个节点的指针就是二叉树中指向父子节点的parent,而这两个链表的第一个公共节点就是二叉树中要找的两个节点的最低公共祖先。第二种情况作为一个搜索二叉树,最重要的特点就是左子树

2017-08-05 09:49:05 798

原创 判断一个树为完全二叉树

完全二叉树 该节点有左子树,可以没有有子树,但如果有右子树,就必须有左子树这里我们可以用层序遍历的思想,借助一个队列,队列保存的是Node*,将该节点入队列,出队列的同时将下一层自己的左右节点入队列,设置一个标志位,刚开始位true,如果此时左右节点为空时,置为false,第一次为false,当第二次进来时,将该节点入队列后,判断下flag,此时flag为false,说明该层的上一个节点为空,而此

2017-08-04 17:39:37 656

原创 直接插入排序与希尔排序

//一次往后走,用此前的数保存下来与与已经有序的前一段区间进行一一比较,升序,比它大,位置往后移,直到比它小,就把该数放到该位置,再往后走。void InsertSort(vector<int>& A) { // Write your code here //insertsort 直接插入排序 时间复杂度是O(n^2) 稳定的排序算法 int i = 0; for

2017-08-03 10:36:06 316

原创 二叉树的叶子节点、第K层节点/数组中数字次数超过数组长度的一般

//一个数组中有一个数字的次数超过了数组的一半,求出这个字符。//如:int a[] = { 2, 3, 2, 2, 2, 2, 2, 5, 4, 1, 2, 3 },求出超过一半的数字是2。//我这里用来两种方法,第一种可以用哈希表来统计次数来解决这个问题。第二种是num出现的次数,出现一次num++,没有出现num--,当num减到0时,字符重新改变。因为出现的次数大于数组长度的一般,所以遍

2017-07-22 20:30:40 435

原创 [lintcode]二叉树的层序遍历

给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \ 9 20 / \ 15 7 返回他的分层遍历结果: [ [3], [9,20], [15,7] ]/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNod

2017-07-22 15:58:55 288

原创 线程死锁

死锁死锁是指两个或两个以上的线程在执行的过程中,由于竞争资源或彼此通信的而造成的一种阻塞相互等待的状态。若无外部处理作用,将会无限等待下去。死锁产生的原因系统资源的竞争 系统中有不可剥夺的资源,不能满足多个线程的需要,在运行过程中,就会因剥夺资源而进入僵局,例如键盘,打印机。线程推进顺序不合法 线程在运行过程中,请求资源和释放资源的顺序不当。产生死锁的4个必要条件互斥条件:进程要求对所分

2017-07-21 21:05:43 301

原创 I/O多路复用之select

I/O模型阻塞I/O非阻塞I/OI/O复用信号驱动I/O异步I/O阻塞I/O模型应用程序调用一个I/O函数,应用程序会一直等待数据准备好。如果数据没有准备好,就会一直等待。只有当数据准备好,从内核拷贝到用户空间IO函数才成功返回。 非阻塞I/O模型把一个套接口设置成非阻塞告诉内核,当所有的I/O操作无法完成时,不要将进程睡眠,而返回一个错误信息。此时I/O操作函数将不断的测试数据是否准备

2017-07-05 20:29:59 331

原创 【线程的同步与互斥 (互斥量 条件变量 信号量)】生产者与消费者模型

线程线程是进程中的一个独立的执行流,由环境(包括寄存器集和程序计数器)和一系列要执行的置零组成。所有进程至少有一个线程组成,多线程的进程包括多个线程,所有线程共享为进程分配的公共地址空间,所以文本段(Text Segment)和数据段(Datan Segment)都是共享的,如果定义一个函数,在各线程中都可以调用,定义一个全局变量,在各个线程中都可以访问到。 从逻辑上看,多线程就就是一个应用程序中

2017-07-02 20:51:52 4036

原创 shell实现一个简单进度条

shell简单语法 条件测试用命令test或[ 测试一个条件是否成立。如果测试条件为真,命令的Exit Status为0,测试条件为假,Exit Status为1。 这里输入的数字比10大,条件成立为0,比10小条件不成立为1. 整数比较-lt//小于 -le//小于等于 -gt//大于-ge//大于等于 -eq//等于-ne//不等于测试命令 与 或 非 的测试命令

2017-06-29 17:25:54 14662

原创 TCP四种定时器

TCP使用的定时器(Timer,计时器) 重传计时器(Retransmission Timer) 坚持计时器(Persistent Timer) 保活计时器(Keeplive Timer) 时间等待计时器(Time_Wait Timer) 重传定时器(Retransmission Timer)为了控制丢失的报文段或丢弃的报文段,也就是对报文段确认的等待时间。每发送一个报文段都会启动重传

2017-06-28 20:56:12 976

原创 TCP三次握手与四次挥手

TCP协议的建立TCP是面向连接的的协议,连接后传送TCP报文。每次连接过程中都需要建立与释放。即三个过程: - 连接建立 - 数据传送 - 连接释放 在建立连接时应考虑到的问题 - 要是每方确认对方的存在,而且确认成功收到连接的请求和有关数据,也要让自己知道请求成功 - 允许双方在建立连接时协商一些数据(最大窗口值,时间戳,服务质量等) - 能够对运输实体资源(缓

2017-06-27 17:18:16 607

原创 [shell 脚本]eval命令和命令代换 ` `和 $()

作用$(cmd)和`cmd`的作用相同,在执行一条命令时,会将其中的``或者是$()中的语句命令执行一遍,再将结果加入到原命令。echo `pwd`echo $(pwd)shell 执行该命令行,先执行命令pwd,将输出结果替代`pwd`,最后输出替换后的结果。eg: 两者对比相对而言,$()用起来较简洁点,倒引号较容易混淆。多层次的替换中,倒引号需要/处理,需要这样写cmd/`cmd/

2017-06-26 19:30:05 1206

原创 TCP协议中的PSH和URG标志位

TCP段格式 源端口 数据发送方的端口号,2个字节 目的端口 数据接受方的端口,2个字节 序号 报文段序号,数据报文中第一个字节的序号。4个字节,共2的32次方个序列号。 确认序号 也是4个字节,是期望收到对方下一个报文段的第一个数据字节的序号。 若确认号等于N,则表明序号N-1为止的所有数据已经被正确收到 数据偏移 占4位,指出TCP报文段的数据起始处距离TCP报文段的起始处

2017-06-21 17:07:40 2009

原创 网络服务端口

端口端口大致有两种意思, 一种是物理意义上的端口,比如集线器,交换机。路由器用于连接其他网络设备的接口,如RJ-45端口,SC端口等。 二是逻辑意义上的端口,一般是指TCP/IP协议中的端口,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。 下面主要说到逻辑以上的端口 端口可以用来标识主机上的唯一网络进程 有效端口的范围端口号的范围从0到65535 端口分类 按协议类型

2017-06-19 20:44:01 671

原创 IPC-消息队列

消息队列消息队列是消息的链式队列,提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都有一个特定的类型,接收者进程接受的数据块可以有不同的类型值。 特点依赖于操作系统的IPC模块可以进行进程间的双向通信消息队列是基于消息的,管道是基于字节流的消息队列不一定是先入先出消息队列的每个消息的长度是有上限的,总的字节数是有上限的,系统的上消息队列的总数有上限。消息队列的两种数据结

2017-06-18 19:26:57 546

原创 信号集与阻塞信号

linux常见的信号信号是一种软件中断,是一种处理进程间异步的通信机制。信号可以导致一个正在运行的进程被另一个异步进程中断,转而处理某一个突发事件。 常见的信号kill -l 命令查看1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL

2017-06-15 11:07:08 2333 1

原创 线程安全与可重入函数

线程安全一个函数称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。 线程安全问题主要是由全局变量和静态变量引起的。 如果每个线程对全局变量,静态变量只有读操作,没有写操作。一般来说这个全局变量是线程安全的。当多个线程同时执行写操作,要保证线程安全,一般就要保证线程的同步问题。 因为全局变量引起的线程安全#include<stdio.h>#include<pthrea

2017-06-13 21:54:13 227

原创 进程间通信-管道

进程是一个独立的资源分配单元,不同进程之间资源是独立的,每个进程各自有不同的用户地址空间,进程的全局变量在另一个进程中看不到,不能在一个进程中直接访问另一个进程的资源,所以进程之间交换数据要通过内核,在内核中开辟一块缓冲区,进程1把数据写到内核的缓冲区,进程2再从内核的缓冲区把数据读走,称为进程间通信(IPC)。 管道(匿名管道PIPE) 管道是一种基本的IPC机制,它是调用pipe函数在内

2017-06-12 19:29:34 201

原创 并查集

引出: 一些应用问题中,需要将n个不同的元素划分成一组不想交的集合。开始时,每个元素自成一个单元素集合,然后按一定规律将归于同一组的元素合并。还可以查询这个 元素是否在这个集合中,描述这种数据类型就称为并查集。 假设一个集合s={0,1,2,3,4,5,6,7,8,9},初始化时每个元素称为一个单元素集合。 现在我们将其合并成三个集合s1={0,6,7,8},s2={1,4,9},s3={

2017-05-23 17:11:12 201

原创 快速排序

快速排序算法是一种划分交换的方法,它采用分治法进行排序。 基本思想:取元素序列的某个元素作为基准,将序列划分成左右两个子序列,比这个元素大的或小的放到左边,相对小的或大的放右边,该基准元素则放到中间。然后对此子序列重复上面的方法,直到所有的元素都排在相应的位置。 大体图解 这里我们就可以看到这完全是一个子问题,所以我们想到的第一种方法就是递归实现。void QuickSort(int* a

2017-05-16 21:37:19 289

原创 大数据问题(九章算法)

这些问题都面临着一个内存不够用的问题。 1.给一个超过100G大小的 log file,log中存着IP地址,设计算法找出出现次数最多的IP地址? 由于超过100G,那必须对文件进行切分。 (1)切分,可以切成100份,每份有1G,那哈希表的大小就是100,利用字符串哈希算法将字符串IP转换成整型 (2)过哈希切分,同一个ip就会分割到同一个文件。 (3)是依次将这100个文件读入内存中,

2017-04-26 16:17:03 2792 1

原创 剑指offer-用两个栈实现一个队列

栈是先进后出,队列是先进先出 实现: 1.实现push:将元素都push到一个栈中。 2.当是stack1不为空时,将stack1取它的top元素push到stack2中,相对与入stack1的顺序相反,在stack2中pop的时候,就达到的在stack1先进在stack2先出。如果stack2不为空,pop的时候直接取stack2的栈顶元素pop.stack2为空时,先将stack1的元素压

2017-04-24 11:51:28 633 1

原创 Linux下的三个重要时间

Change time(ctime):一个文件或目录的更改时间。是指文件的属性或者权限发生变化更新的时间。 Access time(atime):最后访问的时间。指文件被读取更新的时间。 Modify time(mtime):内容被修改的时间。指文件的内容发生变化更新的时间。 在liunx查看的命令: ls -l 获取mtime ls -lu 获取atime ls -lc

2017-04-21 16:07:12 401 1

原创 小项目-文件压缩(哈夫曼树)

先回顾一下哈夫曼树 huffman树即最优二叉树,是加权路径长度最短的二叉树。哈夫曼树的树使用贪心算法。 每次选择该集合中权值最小的两个作为叶子结点,父亲节点的权值为叶子节点权值之和。然后又将其父亲重新放进此集合里。重复前面的做法,直到完成哈夫曼树的建立。 每次都要在集合中找出2个权值最小的。这里我们就可以建立一个小堆,每次找出最小的时候只需要向上调整堆就行了。 那么文件哈夫曼树怎么实现

2017-04-21 11:44:56 1022

原创 STL中map-set的使用

map:是一种key/value的模板类(容器),它的底层是实现是红黑树。 map中它将key/value封装成了一个结构体。template<class K,class V>struct pair{ K first; V second; pair(const K& key,const V& value) :first(key) ,second(valu

2017-04-20 17:06:54 409

原创 Linux权限管理

文件的访问者分为: 1.文件和文件目录的所有者:u–user 2.文件和文件目录的所有者所在的组的用户:g–group 3.其它用户:o–others 文件的访问权限的种类 1.读(r/4):具有读取文件内容的权限。对目录来说,具有浏览该目录信息的权限。 2.写(w/2):具有修改文件内容的权限,对目录来说具有删除移动目录内文件的权限 3.执行(x/1),具有执行文件的权限,对目录来说

2017-03-23 17:27:48 228

原创 对称矩阵与稀疏矩阵(转置)

对称矩阵:n*n的方阵,对于矩阵的任意元素,aij=aji时(i和j都大于等于0小于n) 因为该矩阵的上三角和下三角的数据相同,为了节省空间,我们可以只存储下三角或上三角的元素,这种存储方式称为矩阵的压缩 矩阵压缩后的结构就可以是一个一维数组。 存储的个数是n*(n+1)/2(等差数列),任意元素在一维数组中是array[i*(i+1)/2+j]; 对称矩阵的压缩储存#define _C

2017-03-17 12:47:39 702

原创 迭代器(list迭代器的实现)

其实一种循环结构就是一种迭代操作。 在STL中,容器的迭代器被作为容器元素对象或者I/O流中的对象的位置指示器,因此可以把它理解为面向对象的指针–一种泛型指针或通用指针。不依赖于元素的真实类型。迭代器是为了降低容器和泛型算法至今联系而设计的,泛型算法的参数不是容器。是迭代器。 容器的迭代器的作用就类似一个游标,它屏蔽了底层存储空间的不连续性,在上层使容器元素有一种连续的假象。 接下来简单实

2017-03-14 19:31:36 2519

原创 单链表及相关面试题

//SlistNode.h#pragma once#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>#include <Windows.h>#include <assert.h>typedef int Datatype;typedef struct SlistNode{ Datatyp

2017-03-13 11:51:32 494

空空如也

空空如也

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

TA关注的人

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