自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

everthing willl be ok

你所以为的幸运是别人努力多久才迸发出的光芒,越努力,越幸运

  • 博客(116)
  • 收藏
  • 关注

原创 http和https的区别

秋招面试过程中,蘑菇街面试时,面试官问我http和https的区别,当时听到这个问题的时候,其实有点心虚的,因为自己对于这两个协议的具体区别只是基于表面,对于https还是比较陌生的,就按照自己的理解和这两个协议的联系简单说了一下他们之间的区别,后来面试官又问我有没有考虑过通过http协议如何实现https协议,这就触及到我的知识盲点了,所以当时这个问题我就没答上来。这几天也对这个问题进行了一些思...

2018-10-29 22:03:40 447 1

翻译 CSDN-markdown编辑器使用详细

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2018-10-29 17:28:11 383

原创 自动化测试的优缺点

1、自动化测试的优点(1)对程序的回归测试更方便。 由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行,可以极大提高测试效率,缩短回归测试时间。(2)可以运行更加繁琐的测试 自动化测试的一个明显好处就是可以在很短的时间内运行更多的测试。(3)可以执行一些手工测试困难或者不可执行的测试,例如模拟大量用户场景的压力测试(4)...

2018-09-04 15:52:02 19505

原创 自动化测试概念篇

自动化测试测试领域是非常重要的一种测试手段,当然自动化测试也比普通的手工测试要求更高,需要我们有更高的专业技能,编写测试脚本等。1、什么是自动化测试?所谓自动化测试,顾名思义,自动完成测试工作,通常需要借助测试工具或者自己造轮子模拟之前人工测试过程并完成结果验证以完成整个测试过程,自动化测试听上去感觉很美,很便捷,其实每一个自动化测试的case都是从手工做起的,所以手工测试是自动化测试的基...

2018-08-31 16:03:24 981

原创 进程和线程的区别与联系

1、进程与线程的区别(1)进程是资源分配的最小单位,线程是程序执行的最小单位资源开销问题:(2)进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。安全行比较:(3)由于进...

2018-08-31 15:19:45 410

原创 【引用】详解及指针和引用的区别

1、基本概念 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。2、特性(1)&在此不是求地址运算,而是起标识作用。(2)类型标识符是指目标变量的类型。(3)声明引用时,必须同时对其进行初始化。(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。(5)声明一个引用,不是新...

2018-08-30 15:04:49 437

原创 求和为sum的连续正序数列

题目描述: 输入一个正数sum,打印出所有和为sum的连续正数序列(至少含有两个数)样例展示: 输入sum=15; 打印出:1+2+3+4+5 、 4+5+6 、 7+8解题思路:用两个数字small和big分别表示序列的最大值和最小值,首先将small初始化为1,big初始化为2.如果从small到big的和大于sum,我们就从序列中去掉较小的值(...

2018-08-29 22:54:18 489

原创 测试学习----冒烟测试

一、什么是冒烟测试?冒烟测试,是对软件的基本功能进行测试,测试对象是每一个新编译的需要正式测试的软件版本,目的是确认软件的基本功能正常,保证软件系统能正常跑起来,可以进行后续的正常测试工作的进行,如果最基本的测试都有问题了,就直接打回开发部了,所以正式交付的测试版本,必须先通过冒烟测试的考验 冒烟测试只是一个测试活动,并不是一个测试阶段。也就是说冒烟测试贯穿于测试的人一个阶段。单元测试...

2018-08-29 16:40:07 9728 2

原创 判断是否为平衡二叉树

题目描述: 给定一棵二叉树,判断是否为平衡二叉树解题思路: 在解决这道题时,我们首先要知道什么是平衡二叉树平衡二叉树的性质:左右子树高度差小于等于1只有根节点的树是平衡二叉树,空树也是平衡二叉树 代码实现: 每个节点只遍历一次的方法 如果我们用后序遍历的方式遍历二叉树的每个结点,在遍历一个结点之前我们就已经遍历了它的左右子树。只要在遍历每个结点的时候我们记...

2018-08-26 21:45:45 295

原创 编写测试用例的方法

在编写测试用例的过程中,我们也有许多编写方法,下面是一部分总结:1、等价类划分法顾名思义,等价类划分法就是将所有测试用例划分为几个互不相交的子集,他们的并集就是全集,再从每个子集中选取若干具有代表性的值作为测试用例。 概念: 依据需求将输入(特殊情况下会考虑输出)划分成若干个等价类,从等价类中选出一个测试用例,如果这个测试用例通过,则认为所代表的等价类测试通过思想: ...

2018-08-25 23:14:38 6408

原创 测试---基础篇

一、软件测试的生命周期在了解软件之前,我们应该了解一次完整的软件测试应该经历哪些步骤,软件测试的生命周期如下: 需求分析——>测试计划——>测试设计、测试开发——>测试执行——>测试评估1、需求阶段测试人员了解需求,对需求进行分解,得出测试需求2、计划阶段测试人员根据具体的测试需求编写出测试计划、测试方案3、设计阶段测试人员适当的了解设计,对于...

2018-08-25 15:53:56 269

原创 读入一个字符串str,输出字符串str中的连续最长的数字串

读入一个字符串str,输出字符串str中的连续最长的数字串 输入描述: 测试输入包含1个测试用例,一个字符串str,长度不超过255。输出描述: 在一行内输出str中里连续最长的数字串。输入例子: abcd12345ed125ss123456789输出例子: 123456789这是一个与字符串操作有关的题 解题思路:首先遍历字符串,...

2018-08-24 15:47:10 2737

原创 关于构造函数的那点事

在C++中,类模块有一个很重要的成员函数—-构造函数什么是构造函数?构造函数(constructor)是一种特殊的方法 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。构造函数的功能主要用于在类的对象创建时定义初始化的状态。...

2018-08-24 10:06:19 283

原创 如何编写简单的Makefile文件

一、什么是Makefile1.GNU make是一个命令工具,是一个用来控制软件构建过程的自动化管理工具。Make工具通过称为Makefile的文件完成并自动维护编译工作。3、makefile定义了一系列的规则来指定,一个工程中的哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。总之,makefile为我们带来了极大地好处—–“自动化编译”,一旦...

2018-08-21 17:27:04 9061

原创 复杂链表的复制

在学习链表的相关知识时,碰到了这样一道题,是关于复杂链表的复制问题的,每个节点不仅有指向下一个节点的next指针,还要一个随机指针random,这个随机指针可能会指向任何一个节点,那么对于这道题最好的解决方法是什么呢: 解题思路: 所以我们可以实现三个函数来解决这个问题,具体代码如下:RandomListNode* Clone(RandomListNode* pHead) ...

2018-08-21 10:42:24 155

原创 struct和class的区别

C++被称为“C with class”,可见在C++中class是多么重要,与class类似的一个结构就是struct了,struct最早是在C语言中出现的,在C++中对struct的功能也进行了扩展,下面就来说一说struct和class的区别吧:1、默认的继承权限struct默认是公有继承(public),class默认是私有继承(private)2、关于默认访问权限clas...

2018-08-19 10:03:35 22127 1

原创 STL六大组件

一、STL介绍1、STL(Standard Template Library),即标准模板库,是一个高效的C++程序库。2、包含了诸多在计算机科学领域里常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性3、从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming) 在这种思想里,大部分基本算...

2018-08-17 21:44:41 671

原创 TCP和UDP的区别

tcp和udp都是传输层的通信协议,但他们的通信机制和应用场景又有所不同,那么到底有哪些区别呢?针对这个问题,做了一下总结:1、基于连接VS无连接tcp是面向连接的协议,而udp是无连接协议;意思就是说当一个客户端和一个服务器端通过tcp发送数据进行通信之前,必须先建立连接,他们通过tcp发送数据,tcp建立连接的过程就是tcp握手的过程。tcp是无连接的,所以发送数据之前不需要建立连接;...

2018-08-16 16:36:09 463

原创 快速排序总结

快速排序,从字面意思就可以看出这是一种效率比较高的排序算法,现在对该算法做一下总结: 快速排序是由冒泡排序改进而得的,它的基本思想是:在待排序的n个记录中任取一个记录(通常取第一个记录),把该记录放入适当位置后,数据序列被此记录划分成两部分。所有关键字比该记录关键字小的记录放置在前一部分,所有比它大的记录放置在后一部分,并把该记录排在这两部分的中间(称为该记录归位),这个过程称作...

2018-08-15 21:56:47 1221

原创 面向过程编程思想和面向对象编程思想

一、面向过程编程思想百度百科这样解释: “面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。 面向过程其实是最为实际的一种思考方式,就算是面向对象的方法也是含有面向过程的思想。可以说面向过程是一种基础的方法。它考虑的是实际地实现。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。 个人理解: 通俗地讲,我们在编写代码时,我们看到是一...

2018-08-14 20:01:03 4975

原创 温情晴雨表(项目)

后续再更新

2018-08-10 21:06:36 801

原创 STL容器之【vector】的使用

一、vector1、基本介绍在C++中,vector是一个十分有用的序列式容器,它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。2、用法介绍为了使用vector,必须包含头文件。另,vector属于std命名空间,因此需要通过命名限定,可以有如下三种方式,后两种方式更好,因为未引入的无关的内容。(1) usin...

2018-08-08 23:35:41 257

原创 内联函数、宏和普通函数的区别

1、内联函数和宏的区别宏定义不是函数,但是使用起来像函数。预处理器用复制宏代码的方式代替函数的调用,省去了函数压栈退栈过程,提高了效率。内联函数本质上是一个函数,内联函数一般用于函数体的代码比较简单的函数,不能包含复杂的控制语句,while、switch,并且内联函数本身不能直接调用自身。如果内联函数的函数体过大,编译器会自动的把这个内联函数变成普通函数。宏定义是在预编译的时候把所有的宏...

2018-08-07 21:48:12 3377

原创 sizeof和strlen的区别

在我们平时写代码的过程中,我们会经常用到sizeof和strlen,那么他们到底有什么区别呢,我简单总结了以下几点: (1)sizeof是运算符,strlen是函数 (2)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以”\0”结尾的。 (3)strlen 测量的是字符的实际长度,以’\0’ 结束。而sizeof 测量的是字符的分配大小。 (4)strl...

2018-08-07 21:25:17 146

原创 fork()函数的底层实现原理

在之前的博客 进程控制【创建、等待、终止和替换】 - CSDN博客 https://blog.csdn.net/qq_37964547/article/details/79720027中只是简单的讲到了fork函数,但并没有深入,今天在复习知识的时候,就把fork函数重新学习了一遍,做了一下总结。 在Linux中,fork函数是非常重要的函数,他从一个已存在的进程中创建一个新进程;新进程...

2018-08-07 15:24:35 10506

原创 建立TCP 服务器的系统调用

建立TCP服务器连接的过程中主要通过以下系统调用序列来获取某些函数,这些系统调用主要包括:socket(),bind(),listen(),accept(),send()和recv()。 如下图所示, TCP应用程序进行的普通调用序列: TCP调用的各个层: (1)套接字层接收进行的任何 TCP 系统调用。套接字层验证 TCP 应用程序传递的参数的正确性。这是一个独立于协议 的层,...

2018-08-05 11:48:47 9588 1

原创 C++中四种强制类型转换

C++的四种强制类型转换,所以C++不是类型安全的。分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast 下面介绍的四种强制类型转换如图:

2018-08-04 20:54:23 267

原创 类型萃取

一、类型萃取1、基本概念类型萃取是使用模板技术来萃取类型(包含自定义类型和内置类型)的某些特性,用以判断该类型是否含有某些特性,从而在泛型算法中来对该类型进行特殊的处理用来提高效率或者其他。3、应用场景比如我们实现顺序表,在对顺序表进行扩容时,就靠重新开辟内存、拷贝对象.拷贝对象时,就有两种情况:一种是内置类型,比如int char…;还有一种是自定义类型,Data类、...

2018-08-04 16:37:36 2072 1

原创 设计模式----单例模式

一、单例模式一般情况下,我们建立的一些类是属于工具性质的,基本不用存储太多的跟自身有关的数据,在这种情况下,每次都去new一个对象,即增加了开销,也使得代码更加臃肿。其实,我们只需要一个实例对象就可以。如果采用全局或者静态变量的方式,会影响封装性,难以保证别的代码不会对全局变量造成影响。 考虑到这些需要,我们将默认的构造函数声明为私有的,这样就不会被外部所new了,甚至可以将析构函数也声明为...

2018-08-04 11:38:10 221

原创 shell的几种常用工具

最近在学习shell脚本语言,在学习的过程中了解了关于shell的几种常用工具,就总结了一下。1、sort功能:顾名思义,sort是对文本进行排序操作的。原则:sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较, 后将他们按升序输出。man手册解释: 常用选项介绍: 选项 说明 -r 将文本文件降...

2018-08-02 10:36:58 34812

原创 设计一个简单的内存池

一、为什么要使用内存池呢?在了解内存池之前,我们先来了解一下什么是内存碎片:内存碎片通常情况下,我们在使用new、malloc进行空间申请时,系统都是在对上进行空间开辟的,尽管开辟出来内存的地址是连续的一块内存空间,但每次开辟的内存块的地址并不是连续的,这样的话当我么开辟的次数变多以后,堆上就剩余许多小块的空间导致在我们需要一块比较大的空间时会开辟失败。这是我们最常听到的一种内存碎片,...

2018-08-01 17:42:36 987

原创 柔性数组

1、如何在一个结构体中动态存放动态字符串在了解柔性数组之前,我们先考虑这个问题,通常我们要想在结构体中存放一个动态长度字符串主要有以下两种方法: (1)在结构体中定义一个指针,让该指针指向字符串的动态地址空间 (2)定义一个结构体指针,将结构体和字符串链接在一起 以上两种方法都可以实现,但各自有缺点:第一种方法:会造成结构体和字符串分离,此时字符串其实在代码段放着,这样操作起来会比...

2018-07-24 19:22:47 189 2

原创 static关键字的作用【C语言、C++、linux中的作用剖析】

一、C语言中static关键字的作用在C语言中,static关键字主要有以下作用:1、static修饰变量会延长局部变量的生命周期当static修饰变量的时候,变量会被存储在静态区,存储出在静态区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化,直到程序运行结束以后才进行变量释放。2、static修饰的全局变量或者函数具有隐藏特性我们都知道,当同时编译多个文...

2018-07-24 17:11:21 1001

原创 一组数中,只有两个数出现了一次,剩下的数都是成对出现,找出这两个数

今天在做题的时候,碰到这样一道题:一个数组中除了两个数字之外,其余数字均出现了两次,如{1,2,3,4,5,3,2,1}。查找这两个只出现一次的数字,要求时间复杂度为o(n),空间复杂度为o(1)。 解题思路: 在解这道题时,首先要了解与(&),或(|),异或(^)的基本用法: (1)0&0=0;0&1=1;1&1=1; (2) 0|0=0;0|1=1;1|...

2018-07-23 23:37:52 1491

原创 关于迭代器失效的几种情况

之前就做题的时候就经常碰到与迭代器失效有关的问题,但是一直对这个问题也没有深究,处于似懂非懂的状态,今天就对迭代器失效这部分知识做一个总结。迭代器迭代器(iterator)是一个可以对其执行类似指针的操作(如:解除引用(operator*())和递增(operator++()))的对象,我们可以将它理解成为一个指针。但它又不是我们所谓普通的指针,我们可以称之为广义指针,你可以通过sizeo...

2018-07-22 23:32:00 19798 9

原创 数组相关问题

题目描述: Given a number represented as an array of digits, plus one to the number. 给你一个用数组表示的数,求加一之后的结果,结果还是用数组表示 解题思路:当前位不等于9,只用把数字+1当前位等于9,看下一位,直到找到不为9的数字,将当前位+1,再把后面所有数字设为0如果最高位也从9变成0,就return一...

2018-07-12 22:56:27 140

原创 求两个数的和,不允许用四则运算符

四则运算不能算的情况下,肯定只能借助位运算,所以应该考虑位运算假设两个数的二进制位00001 和 10001,两个数相加的过程就是 第一步:先把二进制的各位相加但不进位,10001; 第二步:记下进位,00001 第三步:把前两步的结果相加,得到10010分析上述三个过程发现 第一步实际上就是两个数的异或结果 第二步进位就是两个数&的结果再左移一位: 第三步是两数相加,和...

2018-07-12 22:38:55 786

原创 关于全排列组合问题

1、给定一个数字字符串,返回数字可能表示的所有可能的字母组合。数字与字母的对应关系和手机按键对应。解题思路:建立数字到字符的映射字典将输入的数字字符串转换为对应字符串列表用枚举回溯法求解 代码实现:class Solution { public: vector letterCombinations(string digits) { vector ...

2018-07-12 22:32:15 1013

原创 用shell脚本实现彩色进度条

一、进度条原理进度条的的动态增长是利用人的视觉短暂停留效果的,不断从输出缓冲区刷新出相同的内容,在肉眼看来进度条在不断的增长。1、显示问题:因为不需要多行显示,只需刷新当前进度 ,那么输出时只需要回车‘\r’,不需要换行‘\n’2、关于缓冲区:linux下的每一个进程会维护一个print/scanf的缓冲区,对于缓冲区而言,缓冲区有一个概念叫做缓冲方式,就是说达到一定的...

2018-07-08 15:17:11 893

原创 已排序的整数数组相关查找返回索引问题

对于数组的应用大家一定不会陌生,今天要介绍的就是两种有关数组中对于指定元素的查找问题.1、给定一个排序的整数数组,找到给定目标值的起始位置和结束位置。题目要求:算法的运行时复杂度必须是O(log n)的顺序。如果在数组中找不到目标,返回[-1,-1 ]。示例:输入数组a[ ]={1,2,3,3,4,4,5};target=3;返回结果{2,3};解题思路: ...

2018-07-04 22:22:56 833

空空如也

空空如也

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

TA关注的人

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