自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Vue修改、删除路由参数

Vue修改、删除路由参数

2022-10-30 12:39:31 1269 1

原创 vscode+eslint一键格式化代码

vscode+eslint一键格式化代码

2022-08-30 17:04:53 749

原创 动态传css样式

支持以下两种方式//方法一:<template #default="scope"> <mtd-tag v-for="item in scope.row.customLabelVo" :key="item.id" :style="getColor(item.color)" > <div :style="getColor(item.color)">{{ item.name }}</di

2022-04-19 21:17:09 840

原创 JS删除数组中指定元素/删除数组中指定对象

删除数组中指定对象指定元素let arr = [{ name: "xiaowang", id: 1},, { name: "xiaozhang", id: 2}, { createDate: "xiaoli", id: 3}]//删除id为1的对象,其中i为index,1可选择性填写,含义为删除当前元素后的几个元素arr.some((item, i) => { if (item.id === '1') { arr.splice(

2022-03-16 18:45:34 10403

原创 前端报错Syntax Error: TypeError: this.getResolve is not a function

今天运行前端工程时提示:Syntax Error: TypeError: this.getResolve is not a function原因:sass-loader的版本过高导致的编译错误,当前最高版本是8.x,需要退回到7.3.1解决方案: npm uninstall sass-loader(卸载当前版本) npm install [email protected] --save-dev...

2021-12-01 21:14:15 1288

原创 charles详细使用文档

简介Charles是在Mac下常用的截取网络封包的工具,在测试服务器端的网络通讯,往往用它来截取网络封包来分析。Charles通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取与分析。除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。charles主要功能:截取http和https网络封包支持重发网络请求,便于后端进行调试支

2021-01-19 21:18:39 359

原创 java如何向文本文件中进行读写json

本文主要介绍读写json的文本文件在介绍之前,我了解了一下序列化和反序列化序列化:把Java对象转换为字节序列的过程。说白了其实就是通过引用将对象的所有值都拿到,不进行序列化的话,只是拿到了该对象的地址反序列化:把字节序列恢复为Java对象的过程。对象的序列化主要有两种用途:把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;(持久化对象)在网络上传送对象的字节序列。(网络传输对象)对于json格式常见的序列化(写文件)方法为:JSON.toString,反序列化(读文件)方法为JSON

2020-05-19 15:14:43 2167 2

原创 JAVA中的反射相关方法使用

反射:指在运行时去获取一个类的变量和方法信息,然后通过获取到的信息来创建对象,调用方法的一种机制,由于这种动态性,可以极大的增强程序的灵活性,程序不用在编译器就完成确定,在运行期仍然可以扩展。简而言之就是:反射通过拿到类的构造方法来创建对象获取class类的对象:我们要想通过反射去使用一个类,首先我们要获取到该类的字节码文件对象,也就是类型为class类型的对象三种方法获取class类型的对...

2020-04-06 14:47:46 227

原创 前端-Mac下brew安装node和npm,npm构建vue

通过brew安装node和npmbrew install node//此命令默认安装最新版本的nodebrew search node//查询可用的node版本brew install node@10 //安装指定版本的node若要进行node版本降级:之前使用brew install node安装过node,需要先执行brew unlink node来’解绑’node。...

2019-12-13 20:35:34 605

原创 java中@Data注解以及插件lombok的下载

@Data注解:在java类上添加注解@Data该注解,提供了类的get、set、equals、hashCode、canEqual、toString方法这里需要下载lombok插件关于idea中Lombok插件的下载:、点击preferences点击plugins,并且搜索Lombok,进行下载就好~...

2019-11-12 19:14:32 1505

原创 java中读取json配置文件

在自动化接口测试中,我们会将参数放在一个配置文件了,这样在我们每次跑case时,就不需要改动代码,只需要改动配置文件,就可以实现不用的参数传入case了那么在java中,怎样读取json的配置文件呢?首先我们需要了解到的是InputStream 和 OutputStream,它们分别为各种输入输出字节流的基类,所有字节流都继承这两个基类。我们将配置文件放入根目录下的resource目录下,配...

2019-09-02 10:23:30 5590

原创 TestNg学习

TestNG是一个测试框架,可以简化广泛的测试需求。建立工程首先我们在idea中应该新建一个project,并选择“maven”,点击下一步(如下图)填写groupId(一般为包名)和ArtifactId(一般为工程名)2. 添加依赖创建成功后:我们需要在pom中添加testng依赖,然后点击自动更新maven<dependencies> <depend...

2019-07-25 17:32:54 233 1

原创 pom中遇到:inspects a maven model for resolution problems问题解决

右击pom文件,选择下载完成后选择:就可以解决问题

2019-03-09 14:30:54 1170

原创 python+adb实现自动化获取手机信息(系统版本号,设备号,设备名称等等)

首先我们先看一下使用adb查看Android手机信息的指令#获取手机名称NAME = 'adb shell getprop ro.product.model'#获取手机版本VERSION = 'adb shell getprop ro.build.version.release'#获取手机厂商PRODUCER = 'adb shell getprop ro.product.brand...

2018-05-06 12:53:21 9127

原创 解决The APK filetestcase-debug-androidTest.apk does not exist on disk.问题

The APK file 路径/testcase-debug-androidTest.apk does not exist on disk. Error while Installing APK不知道大家在使用时,有没有遇到该问题 我的代码在我没有任何改动时突然出现该情况 也在网上百度了很久 总结一下网上的大致解决方案 1. 刷新一下Gradle 2. rebuild 3. 重...

2018-04-25 14:14:18 968

原创 git的使用

本文介绍一下git的一些使用以及基本命令 首先我们要安装git,在这里我使用的是ubuntusudo apt-get install git //安装 git然后我们要安装ssh,该工具用来生成密钥sudo apt-git install ssh //安装 ssh然后我们用命令生成密钥ssh-keygen -t rsa -C "your email" ...

2018-04-24 17:52:25 196

原创 appium实现一个软件的用户模拟登录——python版

在Android测试中最经常使用到的就是appium和selenium了 那么它们之间有什么区别呢? 1. selenium是web端的自动化 2. appium是app端的自动化 3. appium继承了webdriver,(也就是selenium)今天我们使用的是appium 那么我们实现一个软件的模拟登录需要掌握哪些知识呢?首先是启动软件定位元素模拟点击输入帐号密码...

2018-04-24 15:07:25 2124

原创 端口分类调研

在一台主机上运行了多个服务,主机为了区分这些服务,所以给每个服务都分配一个端口号,端口号唯一的标识这台主机上的某个服务。 IP地址唯一标识网络上的一台主机,服务器用通过端口号来区分不同的网络服务。所以IP地址+端口号就表示网络中唯一的一个服务。 客户端通常对它所使用的端口号并不关心,只要保证该端口在本主机上是唯一的就可以了。所以客户端端口号又叫做临时端口号,这是因为他们通常只是在用户运行该客户程序...

2018-03-06 09:34:40 194

原创 基于huffman树实现文件压缩

在上一篇博客中我们介绍了哈夫曼(huffman)树本文将介绍一下如何用huffman树实现文件压缩。首先,我们将文件压缩这个项目分为五个步骤: 1. 统计字符出现的次数。 2. 构建哈夫曼树 3. 生成哈夫曼编码 4. 压缩文件 5. 解压缩文件以上就是文件压缩的基本思想,我们不难发现出现的越频繁,次数越多的字符,它的huffman编码就会越短,并且占用的空间也会越少,

2018-01-24 18:24:00 521

原创 huffmantree——哈夫曼树

哈夫曼树(Huffman tree):又名最优树,指给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。这里有几个名词我们先来了解一下:路径和路径长度:在一棵树中,从一个

2018-01-24 14:32:38 1018

原创 mem系列函数(memcpy,memmove,memset)

在上篇文章中我们介绍的是str系列的函数,但是str系列的函数只能用于字符串,而不能用于任意类型,那么在这篇文章中我们介绍以mem开头的函数,这些函数适用于任意类型。memcpy:拷贝函数函数原型:void * memcpy ( void * destination, const void * source, size_t num );函数模拟实现:void *my

2018-01-21 08:25:49 1303

原创 电脑大小端问题以及如何判断当前机器是大端还是小端

大端模式(大端字节序):指的是低字节内容存在高地址,高字节内容存在低地址。小端模式(小端字节序):指的是低字节内容存在低地址,高字节内容存在高地址。我们运行该程序看一下a的地址,我们可以看到变量a在内存中为 0a 00 00 00 我们可以发现我们的机器是小端模式,由于a=10.10的十六进制为0x 00 00 00 0a 我们发现低字节内容保存在了低地址,所以当前机器为小

2018-01-19 13:39:44 4497

原创 [C语言]字符串函数的分析以及模拟实现

我们先来总结一下字符串函数有哪些? 我们把字符串函数分为两大类,一种是不安全的,一种是优化版本 strlenstrcat,strcmp,strcpy,strstrstrncat,strncmp,strncpy我们为什么会有strncat,strncmp,strncpy 这些函数呢,原因是因为strcat,strcmp,strcpy这些函数的第一个参数的数组大小不能保证有足够大的空

2018-01-14 16:22:59 290 1

原创 IPC进程间通信——共享内存

共享内存本文将研究一下进程通信的另一种方式:共享内存 共享内存:其实就是两个不相关的进程访问同一个逻辑内存,共享内存是在两个正在运行的进程之间共享和传递数据的一种有效方式。不同的近进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有的进程都可以访问共享内存中的地址,但是如果某个进程向共享内存中写入数据,所做的改动会立即影响到可以访问同一段共享内

2018-01-13 16:59:23 276

原创 IPC进程间通信——消息队列

消息队列:提供了一种从一个进程向另外一个进程发送数据块的方法。每个数据块都被认为含有一个类型,接收进程可以独立的接收含有不同的类型的数据结构,我们可以通过发送信息来避免命名管道的同步和阻塞问题,但是消息队列和命名管道一样,每个数据块都有一个最大的长度限制。消息队列与管道的区别:消息队列基于消息,管道基于字节流消息队列的读取不一定是先入先出的消息队列的生命周期是伴随内核,如果你没有删除

2018-01-12 21:42:29 286

原创 Linux浅谈进程2

此篇博客作为上一篇博客的补充 Linux浅谈进程1进程的创建进程创建的方式:fork()vfork()关于fork()函数头文件为#include<unistd.h>pid_t fork(void)返回值:子进程返回0,父进程返回子进程id,出错返回-1进程创建的一般过程给新建的进程分配一个内部的标识符,在内核中分配PCB。复制父进程的环境为进程分配资源(代码,数据,堆栈)父进

2017-12-14 11:48:22 1179

原创 僵尸进程与孤儿进程

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。我们先来模拟实现一个孤儿进程#include<stdio.h>#include<unistd.h>#include<errno.h>#include<stdlib.h>int main(){ pid_t pid=

2017-12-12 11:27:31 347

原创 选择排序——选择排序和堆排序

常见的比较排序算法有插入排序(直接插入排序和希尔排序),选择排序(选择排序和堆排序),交换排序(冒泡排序和快速排序),归并排序。还有非比较排序:基数排序和计数排序。本文讲讲选择排序中的选择排序和堆排序选择排序 以上是选择排序的算法思想,它的时间复杂度为O(N的平方)。代码实现:void SelectSort(int* a, size_t n){ assert(a); size_t

2017-11-28 21:33:17 293

原创 插入排序——直接插入排序和希尔排序

常见的比较排序算法有插入排序(直接插入排序和希尔排序),选择排序(选择排序和堆排序),交换排序(冒泡排序和快速排序),归并排序。还有非比较排序:基数排序和计数排序。本文讲讲插入排序中的直接插入排序和希尔排序。直接插入排序如图所示是我们直接插入排序的算法思想,我们可以看到它的时间复杂度为O(N的平方)。代码实现:void InsertSort(int *a,size_t n){ assert

2017-11-28 19:57:27 574

原创 STL中map和set底层的红黑树实现

我们都知道map和set的实现是依赖红黑树的 怎样写红黑树可以让map和set都可以使用呢? 在这里我们定义了一个模版参数,如果它是key那么它就是set,如果它是map,那么它就是map;我们分析一下,红黑树迭代器的前置++ 到当前结点,就说明了它的左子树和自己都已经访问过了 1,当前位置,若右树不为空,则访问右树的最左结点 2,当前位置,若右树为空,则找祖先中孩子不是他的右 若右访问

2017-11-10 13:57:02 3690

原创 RBTree——红黑树

红黑树:红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示结点的颜色,红色或黑色(Red或Black) 通过对任何一条从根到叶子简单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,从而达到近似平衡。红黑树必须满足的性质: 1,每个节点不是红色就是黑色。 2,根节点必须为黑色。 3,如果一个节点是红色,则它的两个子节点是黑色 (即不能有两个连续的红色节点)。 4,对每

2017-11-07 12:02:38 291

原创 AVL树的基本实现

AVL树(高度平衡的二叉搜索树),它可以保持二叉树的高度平衡,尽量降低二叉树的高度,减少树的平均搜索长度AVL树的性质 1,左子树和右子树的高度之差的绝对值不超过1 2,树中的每个左子树和右子树都是AVL树 3,每个结点都有一个平衡因子,任意一个结点的平衡因子是-1,0,1(每个结点的平衡因子等于右子树的高度减去左子树的高度)AVL树的效率:一颗AVL树有N个结点,它的高度可以保持在lgN,其

2017-11-02 09:20:36 344 2

原创 容器set和map的使用

set和map都是关联式容器 先介绍两个值: 键值:key 实值:valueset特性:所有的元素都会根据元素的键值(key)自动的被排序。对于set元素来说键值就是实值,实值就是键值,set不允许两个元素有相同的键值(我们不能通过set的迭代器去修改set的元素,原因后面会解释)map特性:所有的元素都会根据元素的键值(key)自动的被排序,map的所有元素都是pair,同时

2017-10-30 15:21:00 550

原创 二叉搜索树的增删查(递归与非递归)实现

二叉搜索树(BinarySearchTree): 二叉搜索树性质: 1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。 2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。 3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)。 4. 左右子树都是二叉搜索树。如图:是一个二叉搜索树 本文将实现二叉搜索树的插入删除查找我们

2017-10-23 21:57:18 344

转载 内存分配——静态存储区 栈 堆

一、内存基本构成 可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指

2017-10-17 13:14:33 379

原创 模拟实现堆+堆的应用

堆数据结构是一种数组对象,它可以被看作一颗完全二叉树的结构(数组是完全二叉树),堆是一种静态结构。 堆分为最大堆和最小堆。 最大堆:每个父结点都大于孩子结点。 最小堆:每个父结点都小于孩子结点。堆的优势:效率高,可以找最大数最小数,增删的时间复杂度为lgN,快 怎么找最后一个叶子结点? 找到最后一个叶子结点(左孩子为空就是叶子结点),由于堆是静态结构,所以我们要通过计算下标的方法找,计算它

2017-10-16 21:07:43 390

原创 二叉树的基本操作实现(递归和非递归)

二叉树:二叉树是一棵特殊的树,二叉树每个节点最多有两个孩子结点,分别称为左孩子和右孩子。 满二叉树:高度为N的满二叉树有2^N- 1个节点的二叉树。完全二叉树: 若设二叉树的深度为h,除第h 层外,其它各层(1~h-1) 的结点数都达到最大个数,第h 层所有的结点都连续集中在最左边,这就是完全二叉树二叉树的基本操作:构造二叉树,前序遍历,中序遍历,后序遍历,求树的叶子结点,树的深度,树中第K层的结点

2017-10-12 15:01:03 718

原创 迷宫求解

问题:给指定的入口与出口,求该迷宫的通路。 思想: 1,我们要考虑越界问题。 2,我们要试探下一个位置是否可以通过,若这个位置上下左右都不能通过,则返回上一个位置。再去下一个位置。 代码的实现://建立一个存放坐标的结构体struct Pos{ size_t _row; size_t _col;};template<size_t M, size_t N>class M

2017-10-10 14:03:14 263

原创 栈和队列,以及模拟实现

栈栈只允许在末端进行插入和删除的线性表。 栈具有后进先出的特性。 所以栈的插入删除都是在栈顶进行操作的,可以取栈顶元素(Top)实现:用顺序表实现,由于他只能在栈顶进行操作,所以优选顺序表实现应用:递归图解: 栈模拟实现代码:#include<iostream>#include<assert.h>using namespace std;template<class T>class Sta

2017-09-28 09:06:48 287

原创 面试题(实现一个栈,要求实现Push、Pop、Min的时间复杂度为O(1))

面试题(判断元素出栈入栈顺序的合法性。) 面试题(两个栈实现一个队列和两个队列实现一个栈)实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)解题思路: 我们定义两个栈分别为s1,s2。我们用s2保存最小值,s1保存原来的值Push():我们添加元素到s1中,如果s2为空或者x#include#includeusing n

2017-09-26 15:23:25 1331

空空如也

空空如也

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

TA关注的人

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