自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 gitbook的搭建及word转markdown

gitbook配置搭建文档GitBook 是一个基于 Node.js 的命令行工具,首先需要下载安装nodejs1、安装 Node.js获取Node.js 安装包Node.js安装包及源码下载地址为https://nodejs.org/en/download/,根据系统选择你需要的Node.js 安装包** Linux 上安装 Node.js ** wget https://nodejs.org/dist/v12.18.1/node-v12.18.1-linux-x64.tar.

2020-07-22 15:04:41 1200

原创 Jenkins在linux下环境部署

一、 tomcat的安装1、下载tomcat从tomcat官网(http://tomcat.apache.org/download-70.cgi)下载tomcat的压缩包apache-tomcat-7.0.xx.tar.gz。官网有三部分Binary Distributions,Deployer,Extras,如下:zip用于windows操作系统tar.gz用于unix和linux操作系统.Binary Distributions Core:这列下的为直接运行安装文件.Deployer: 这

2020-05-28 13:40:16 200

原创 【Jmeter】Jmete自带的脚本录制

1、添加http代理服务器2、设置端口号和目标控制器注:这里的端口号可设置为任意不用的端口号3、设置浏览器代理注意:这里设置的端口号要与先前jmeter中所设置的端口号保持一致4、录制脚本然后我们在浏览器中输入www.sogou.com,页面加载完成后输入Jmeter,等待加载完成点击停止(如图)接下来我们就看到了图中的画面...

2018-12-28 14:27:45 228

原创 【Jmeter】jmeter如何汉化

jmeter安装好以后,默认是英文版的,对于英语渣渣来说,用起来很受伤,所以如果需要切换到中文的可以采取下面的措施:按照图中的操作就可以了哦...

2018-12-28 11:57:32 250

原创 【docker】docker学习基础概念篇

什么是容器?1)一种虚拟化的方案,直接运行在操作系统山上的用户空间2)是一种操作系统级别的虚拟化3)依赖于Linux内核特性(Namespace和Cgroups),只能运行相同或者相似内核的操作系统什么是docker?将应用程序自动部署到容器目标:1)提供简单轻量的建模方式2)职责的逻辑分离3)快速高效的开发周期4)鼓励面向服务的架构使用场景:1)使用docker容器开发、...

2018-12-28 11:16:20 138

原创 【python学习】split()分割和join()合并

split()可以基于指定的分隔符将字符串分隔成多个子字符串,如果不指定分隔符则默认使用空白字符(空格/换行符/制表符)a = "a pen or a pencil"print a.split()print a.split('a')结果如下:join()和split()作用正好相反,用于将一系列的字符串连接起来a = ['a','pen','or','a','pencil']pr...

2018-12-28 10:30:36 618 1

转载 修改HTMLTestRunner.py文件添加饼图

本来转载自:https://my.oschina.net/u/3041656/blog/1563911生成的测试报告是html格式的,并且每条测试用例都是以表格的形式展示出来的,当然了,这些种种,都不是我写的,而是通过htmlTestRunner.py文件来实现的接下来要做的事情就是把这个饼图添加到html文件中去了。所以,我们现在来看HTMLTestRunner.py文件的内容。from ...

2018-12-27 17:39:37 953

原创 高级IO

5种IO模型第一步等待 第二步拷贝阻塞式IO:一直等待 有数据及时处理 阻塞式等待 自己调自己等 非阻塞式IO:反复调用是否有数据 轮询 如果没有直接返回 有数据进行处理 自己调 自己等 非阻塞等待 信号驱动式IO:recvfrom非程序员主动调用 利用信号捕捉方式自定制捕捉 捕捉成功递交SIGIO信号 recvfrom进行处理读数据期间,进入一个阻塞式状态 一般不用 IO多路...

2018-08-14 19:12:36 226

原创 TCP可靠传输机制

TCP协议我们都知道,TCP是一个面向连接的可靠的网络传输协议,那么,我们今天谈一谈 TCP是如何实现可靠的网络传输 确认应答(ACK)机制 Tcp在发送数据的时候,给每个字节的数据都进行了编号,即每一段数据都由自己的序列号,每一个ACK都带有自己的确认序号,告诉发送者,我已经接收到了哪些数据,下次的数据应该从哪里开始发超时重传机制数据在发送的过程中有可能因为网络等问题...

2018-08-13 19:33:39 545

原创 序列化和反序列化

什么是序列化和反序列化?把应用层的对象转换成一段连续的二进制串,或者反过来,把二进制串转换成应用层的对象–这两个功能就是序列化和反序列化。 序列化:把对象转换为字节序列的过程称为对象的序列化。 反序列化:把字节序列恢复为对象的过程称为对象的反序列化数据结构、对象与二进制串不同的计算机语言中,数据结构,对象以及二进制串的表示方式并不相同。数据结构和对象:对于类似Java这种...

2018-08-13 13:45:59 254

原创 【shell】符号篇

首先我们来写一个最简单的shell脚本test.sh,写入如下内容#!/bin/bash echo "hello world!"#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。通常,(#!)的名称,叫做”Shebang”或者”Sha-bang”。echo 命令用于向窗口输出文本保存退出,运行有两种方式: 第一种: 注意此处一定要写...

2018-08-13 10:19:55 229

原创 【Linux】进程创建、终止、等待

**什么是进程?**正在执行的程序正在计算机上执行的程序实例能分配给处理器并由处理器执行的实体具有以下特征的活动单元:一组指令序列的执行 、一个当前状态和相关的系统资源集进程 进程的创建fork/vfork函数fork函数 利用fork函数创建一个新进程,新进程为子进程,原进程为父进程。 #include <unistd.h>...

2018-05-13 11:31:49 269

原创 约瑟夫环

据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从...

2018-04-02 18:09:00 298

原创 【蓝桥杯】 算法提高 身份证号码升级

问题描述   从1999年10月1日开始,公民身份证号码由15位数字增至18位。(18位身份证号码简介)。升级方法为:   1、把15位身份证号码中的年份由2位(7,8位)改为四位。   2、最后添加一位验证码。验证码的计算方案:   将前 17 位分别乘以对应系数 (7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2) 并相加,然后除以 11 取...

2018-03-22 16:19:32 412

原创 CRC校验码

什么是CRC校验码? CRC即循环冗余校验码(Cyclic Redundancy Check[1] ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。如何校验? 它利用除法及余数的原理来进行错误检...

2018-03-22 11:11:34 2889

原创 【Linux】进程与线程的区别

进程 程序的⼀个执行实例。分配系统资源(CPU时间,内存)的实体。线程 一个进程内部的控制序列。区别 1、进程是资源竞争的基本单位;线程是调度的基本单位。 2、进程是资源管理的最小单位;线程是程序执行的最小单位 3、一个进程可以由多个线程组成,至少有一个执行线程;线程与同属一个进程的其他的线程共享进程所拥有的全部资源(例如:文件描述符表、当前工作目录、用户id和组id等)。 1 #i

2018-01-02 18:30:33 456

原创 【Linux】gcc/g++、gdb、vim的安装及使用

vi的使用 vi/vim的区别简 单点来说,它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。 vim可以分为三种状态,分别是命令行模式、一般模式和编辑模式,各模式的功能区分如下: 1)命令行模式  在这个模式中,可以提供你查找数据的操作,而读取、保存、大量替换字符、离开vi等的操作都是在此模式中进行的。 2)一般模式  以

2017-12-01 20:59:01 595

原创 【数据结构】排序

声明:本篇博客的所有排序默认升序【插入排序】 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。如下图: 插入排序代码实现:void InsertSort(int* a, size_t n) { for (size_t i = 0; i < n-1; ++i)

2017-11-24 21:29:09 376 1

原创 【STL】map和set的使用

Set Set是单词set(集合)的意思,set的特性是,所有元素都会根据元素的键值自动排序,set里面每个元素只存有一个key,它支持高效的关键字查询操作。下面我们来看一下set都有哪些接口: 1.头文件#include<set>2.定义set<string> s; //定义一个元素为string类型的空集合sint arr[5]={1,2,3,4,5];se

2017-10-31 21:15:38 279

原创 【C++】list的使用方法

list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。 与vector相比, 它允许快速的插入和删除,但是随机访问却比较慢. 首先我们来看一下list都有哪些接口: list中常用的函数 front()

2017-09-03 20:17:47 940

原创 【C++】vector的使用方法

声明:文章中编程环境均为VS2013编译器vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。首先我们来看一下vector的接口: 1、使用vector需要添加头文件#include<ve

2017-09-03 17:50:21 437

原创 【C++】智能指针

先来看一段代码:void Test(){ int* p1 = new int(5); bool End = true; //DoSomething if(End = true) //此时如果条件成立,直接return,就会造成我们前面用new开辟的空间不能释放,从而导致内存泄漏。 { return;

2017-09-02 13:21:54 231

原创 【C++】为什么模板不支持分离编译

在C++中,为了一个项目的规范,我们通常把代码归为三类:声明文件、实现文件、测试文件。例如下面的例子://test.hvoid fun(); //声明一个函数fun//test.cpp#include"test.h" void fun() //实现出test.h中声明的fun函数{ //do something}//main.cpp#i

2017-08-03 21:13:38 403

原创 【C++】多态及其对象模型

多态 多态是面向对象程序设计的重要特征之一,在C++中多态可以这样定义:同一操作作用于不同类的实例,将产生不同的执行结果。也就是说,不同的类的对象收到相同的消息时,得到不同的结果。 【**多态的对象模型】–单继承&多继承 虚表剖析 虚表是通过一块连续内存来存储虚函数的地址。 单继承 首先我们先写一个可以打印虚表的函数//该函数只能在32位平台下打印虚表typedef voi

2017-07-30 17:20:03 436

原创 【C++】构造拷贝构造的N中调用情况的问题

C++对传参合传返回值时构造的优化处理 什么是临时对象? C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行时确实生成了这样的对象. C++中的返回值优化(return value optimization) 返回值优化(Return Value Optimization,简称RVO),是这么一种优化机制:当函数需要返回一个对象的时候,如果自己创建

2017-07-19 17:14:24 517

原创 【C++】深拷贝、浅拷贝和写时拷贝

大家首先来看一下下面这段代码:void Test(){ int *p1 = new int[10]; int *p2 = p1; delete[] p1; delete[] p2;}运行这段代码: 我们发现这段程序无法运行,经过测试我们发现,p1和p2指向同一块空间: 这就是我们所说的浅拷贝。 浅拷贝:也称位拷贝,编译器只是直接将指针的值拷贝过来,结

2017-07-17 15:35:01 1195

原创 【C++】动态内存管理

C语言中使用malloc/calloc/realloc/free进行动态内存管理,malloc/calloc/realloc用来在堆上开辟空间,free将申请的空间释放掉。void Test(){// mallocint * p1 = ( int*) malloc(5 * sizeof( int));if ( p1 != NULL){free( p1);p1 = NULL;}//

2017-07-16 12:38:55 514

原创 单链表面试题——进阶篇

1.判断单链表是否带环?若带环,求环的长度?求环的入口点?并计算每个算法的时间复杂度&空间复杂度。 判断是否带环:利用快慢指针,快指针每次走两步,慢指针每次走一步,如果快慢指针相遇,则该链表带环。ListNode* IsHaveLoop(ListNode* plist){ if (plist == NULL) { return NULL; } Li

2017-07-15 15:59:54 467

原创 类和对象1--四个默认成员函数+运算符重载

类的声明和定义 C++中的类的定义一般分为类的声明和类的实现部分。类的声明部分用来说明该类的成员(数据成员、成员函数),告诉使用者“干什么”。类的实现部分用来定义成员函数,该函数用来对数据成员进行操作,告诉使用者“怎么干”。class<类名>{ public: <成员函数或数据成员的说明> protected: <成员函数或数据成员的说明> private:

2017-06-24 23:50:56 675

原创 C语言实现单链表面试题--基础篇

1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用?(1). 顺序表支持随机访问,单链表不支持随机访问。 (2). 顺序表插入/删除数据效率很低,时间复杂度为O(N)(除尾插尾删),单链表插入/删除效率更高,时间复杂度为O(1)。 (3). 顺序表的CPU高速缓存效率更高,单链表CPU高速缓存效率低。2.从尾到头打印单链表void reverse(ListNode* plist)

2017-06-19 18:03:55 601

原创 【C++】基础知识篇

1.命名空间 在C++中,标识符(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等。为了避免在大规模程序设计中以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间),以便更好控制标识符作用域。 定义格式如下:namespace 命名空间{命名空间声明内容}例如:定义两个命名空间AA1,AA2#include<io

2017-06-19 11:58:02 482

原创 僵尸进程和孤儿进程

在linux系统中,每个被运行的程序实例对应一个或多个进程。linux内核需要对这些进程进行管理,以使它们在系统中“同时”运行。为了弄明白正在运行的进程是什么意思,我们需要了解几种运行状态: R (TASK_RUNNING),可执行状态。 只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应 CPU的可

2017-05-13 16:53:22 526

原创 【C++】C++异常处理

一、什么是异常? 异常就是程序在运行过程中,由于使用环境的变化及用户的错误操作而产生的错误。 二、传统错误处理办法: 1.终止程序(除数为0) 2.返回一个表示错误的值,附加错误码(GetLastError()) 3.返回一个合法值,让程序处于某种非法的状态(坑爹的atoi()) 4.调用一个预先准备好在出现”错误”的情况下用的函数(回调函数)。 5.暴力解决方式:abort()或者e

2017-04-27 22:01:06 596

原创 反转链表

第一种:class Solution {public: ListNode* ReverseList(ListNode* pHead) { if(pHead==NULL) return NULL; ListNode* pNode=pHead; //当前指针 ListNode* pReverseHead=NULL; //新链表的

2017-04-19 22:48:17 470

原创 模拟实现strstr

1、什么是strstr? strstr() 函数:是用来搜索一个字符串在另一个字符串中的第一次出现。 函数原型:char *strstr( const char *string, const char *strCharSet ); 2、模拟实现strstrchar *my_strstr(char *string,char *strCharSet){ char* start = s

2017-04-19 20:09:03 432

原创 【C++】浅谈C++模板

我们知道C++是一种“强类型”语言。也就是说,对于一个变量,编译器必须确切知道它是什么类型。但是,这种强类型函数在实现一些简单函数反而更麻烦。例如:求两大数的较大者,应以Max( )函数,我们需要对不同数据类型分别定义不同重载版本来实现:int Max(int x,int y) //比较两个int类型的值{ return ((x > y) ? x : y);}float

2017-04-16 16:26:13 663

原创 Linux进程描述符task_struct结构体详解

在我们了解task_struct之前,让我们先来了解一个概念:“进程” 一、什么是进程? 大多数情况下我们所听到最多的说法是:进程是操作系统的一种抽象概念,用来表示正在运行的程序。但值得我们注意的是:进程是一种动态描述,但是并不代表所有的进程都在运行。(进程在内存中因策略或调度需求,会处于各种状态) 二、进程控制块 每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux

2017-04-10 21:24:30 906

原创 在Linux下用C语言实现简单的进度条

相信我们在平时使用电脑进行下载文件的同时都会看到一个进度条,提示我们文件下载的进度,所以呢我们来自己实现一个简单的进度条: 首先我们来看一个生活中的进度条: 通过观察我们选择用以下方式来实现一个简单进度条: 1.依次打印‘#’; 2.后面标注百分比;代码如下:#include<stdio.h>#include<unistd.h>int main(){ int i = 0;

2017-04-09 15:20:25 1835 1

原创 【C++】c++中的继承

1、什么是继承? 我们都知道继承性在客观世界中是一种常见的现象。在我们了解C++的继承之前,让我们先介绍一个现实世界中“动物”的例子,它们之间的属性继承关系如图所示: 从面向对象的观点来看,继承所表达的正是这样一种类与类之间的关系,这种关系允许既有类在的基础上创建新类,增加了软件的重用性,减少了工作量。 继承方式不同所引起的访问控制关系变化: 2、基类与派生类 C++允许从一个类“

2017-04-05 11:08:26 747 1

原创 【Linux】Linux的粘滞位

在之前我们对Linux下的访问权限做了简单的学习和了解,我们知道在Linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些目录与文件,而基本的访问权限包括:读、写、执行。 下面我们先看一个例子; 我们首先由普通用户切换至root用户,然后在code目录下创建一个file文件: 然后我们切换回普通用户,尝试删除我们之前创建的file文件,发现虽然file文件只

2017-03-30 23:27:38 463

空空如也

空空如也

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

TA关注的人

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