- 博客(78)
- 收藏
- 关注
原创 Python初识
Python的特点优雅明确简单Python支持多种编程风格Python支持面向过程的编程风格。Python支持面向对象的编程风格。数字、字符串、函数、模块…都是“对象”Python支持函数式编程。世界上只有两种编程语言,C类语言,Lisp类语言Python代码量小、维护成本低、编程效率高、标准库强大、第三方库非常丰富Python是一种”半编译、半解释”型语言和C/C++不同,不...
2018-10-10 15:37:56
267
原创 性能测试
CI(持续集成)持续集成是一种软件开发实践,即团队开发人员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能发生很多次集成。每次集成都通过自动化的编译、发布、自动化回归测试来验证,从而尽快的发现集成错误。许多团队发现这个过程可以大大减少集成问题,让团队能够更快的开发内聚的软件。注:没有单元测试的持续集成基本无意义CD(持续部署)持续部署是在持续集成的基础上,将...
2018-08-22 20:52:02
535
原创 测试---测试用例
测试用例的设计方法基于需求的测试方法等价类边界值因果图正交排列场景设计法错误猜测法测试用例的概念:测试用例是为了实施测试而向被测试的系统提供一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素评价测试用例的标准:用例表达清楚,无二义性用例可操作性强用例的输入与输出明确,一条用例只能有一个预期结果用例的可维护性好用例对需求的覆盖率高...
2018-08-22 10:02:20
2221
原创 测试----关于Bug
软件测试的生命周期需求分析—测试计划—测试设计、测试开发—测试执行—测试评估软件测试和软件开发生命周期需求阶段—计划阶段—设计阶段—编码阶段—测试阶段—运行维护如何描述一个Bug一个合格的bug描述应该包括以下几个部分:1.发现问题的版本 开发人员需要知道出现错误的版本,才能获取对应版本的代码来重现故障2.问题出现的环境 详细的环境描述有利于故障的定位。如果...
2018-08-21 20:07:28
373
原创 测试的分类
可以按照以下几个方面将测试进行划分1.按开发阶段分2.按测试实施组织分3.按测试执行方式分4.按是否查看代码分5.按是否手工执行6.按测试对象划分7.按测试地域划分按开发阶段划分单元测试(代码测代码)概念:单元测试是对软件组成单元进行测试 目的:检验软件基本组成单位的正确性 测试对象:最小模块 测试人员:白盒测试工程师或开发工程师 测试方...
2018-08-21 08:50:10
673
原创 C++继承
什么是继承??继承是面向对象复用的重要手段,通过继承定义一个类,继承是类型之间的关系建模,共享共有的东西,实现各自本质不同的东西。三种继承关系: public–公有继承 protected–保护继承 private–私有继承继承方式和访问限定符的关系如下: 总结: 1.public继承:基类的非私有成员在子类的访问属性都不变 2.protected继承:基类的非私有...
2018-07-29 22:31:17
209
原创 用C++实现的日期类
#include <iostream>#include<assert.h>class Date{public: Date(int year = 1900,int month = 1,int day = 1) :_year(year) ,_month(month) ,_day(day) { ...
2018-07-26 09:42:08
332
原创 类和对象
都说C++的编程思想是面向对象的那么什么是面向对象??面向对象程序设计是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重要性、灵活性和扩展性。 面向对象是将数据和操作数据的函数紧密结合。面向对象的三大特性 1.封装:将现实世界中的数据和对数据进行操作的动作捆绑在一起形成类,然后再通过类定义对象,很好...
2018-07-24 11:38:52
408
原创 软件测试的相关概念
软件测试的概念:验证软件功能是否满足用户的需求需求:你的期望 概念有两层意思: 1.找Bug 2.验证软件是正确的软件的概念没有错与对,只是在每个不同的阶段有不同的解释软件测试的发展1.软件调试 2.独立的软件测试(1950~) 3.软件测试的第一次定义(1973~),软件测试就是对程序能够按预期的要求运行建立起一种信心 4.软件称为专门的学科(1980~) ...
2018-07-21 21:49:18
383
原创 指针和引用
引用的概念:引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名。引用定义的格式:类型& 引用变量名 = 已定义过的变量名; 例如:int a = 10;int& b = a;//b是a的引用,b是a的别名引用的特点:1.一个变量可以取多个别名 2.引用必须初始化 3.引用只能在初始化的时候引用一次,不能改变再引用其他变量...
2018-07-20 15:42:58
241
原创 C++初识
C++C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。C++是在C语言的基础上开发的一种面向对象编程的语言...
2018-07-19 17:14:39
204
原创 简单的排序算法
常见的排序算法有以下7种:冒泡排序选择排序插入排序堆排序希尔排序归并排序快速排序我们通常说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序排序算法大体可分为两种: 1.一种是比较排序,时间复杂度为O(nlogn)~O(n^2),主要有冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等 2.另一种是非比较排序,时间复杂度可以达到O(n) 除了排...
2018-05-30 15:01:10
337
原创 位图和布隆过滤器
首先理解一下什么是位图什么是布隆过滤器??位图:用来快速判断一个整数是否在一堆整数中布隆过滤器:用来判断一个字符串是否在一堆字符串里下面对布隆过滤器进行一些详细的解释布隆过滤器其实是结合了位图与哈希表,先将字符串用字符串哈希算法映射到哈希表中,但是由于哈希冲突,我们可以一个字符串使用多个不同的字符串哈希算法同时映射在整个哈希表中,判断一个字符串是否在这堆字符串中,我们可以算出这个字符串...
2018-05-28 16:45:02
1020
原创 哈希表的初步认知
首先我们来认识一下什么是哈希表?? 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(...
2018-05-28 14:20:45
566
原创 堆的相关操作
要对堆进行操作首先应该清楚什么是堆?堆:是计算机科学中一类特殊的数据结构的统称,堆通常是一个可以被看做一棵树的数组对象。堆的性质:堆的某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树堆有大堆小堆之分,根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。堆的定义如下:n个元素的序列{k1,k2,...,kn}当且仅当满足以下关系时,称之...
2018-05-18 14:26:54
283
原创 二叉树的常见笔试面试题
在二叉树的基本操作里已经说明如何用递归的方法进行二叉树的遍历,那么如何用非递归的方法来进行二叉树的遍历呢,请看下文1.使用非递归方式进行二叉树的先序遍历 思想:定义两个栈,一个栈存放当前路径。一个栈存最短路径,每次都将当前路径和最短路径比较如果当前路径小于最短路径,那就交换两个栈中的元素 代码实现:void MazeInit2(Maze* maze){ if(maze == NULL) { return; } int map[MAX_R
2018-05-05 22:15:09
4255
原创 迷宫---是否存在路径
迷宫求解问题已经是比较经典的题,下面就用两种方法实现迷宫求解问题迷宫求解的思想是回溯法,那什么是回溯法??? 对一个包括有很多个节点,每个节点有若干个搜素分支的问题,把原问题分解为若干个子问题求解的算法;当搜索到某个节点发现无法再继续搜素下去时,就让搜索过程回溯(回退)到该节点的前一个节点,继续搜索该节点外的其他尚未搜索的分支;如果发现该节点无法再搜索下去,就让搜索过程回溯到这个节点的前一节点继续
2018-05-05 21:41:19
528
原创 网络初识
首先先向大家介绍一下网络的发展史:1.独立模式:计算机之间相互独立 2.网络互联:多台计算机连接在一起 3.局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起 注: (1)在局域网内,所有主机之间交互的信息都是可以被监听的 (2)在局域网内,两台主机之间是可以直接通信的4.广域网WAN:将远隔千里的计算机都连在一起 在广域网内,源主机先找到目标主机的局域网再找到
2018-05-03 23:01:26
227
原创 线程的同步与互斥
线程的同步与互斥:互斥:当一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。如:当线程A在使用打印机时,其他线程都需要等待。同步:两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。如:A任务的运行依赖B任务产生的数据。同步保证了线程运行的顺序性,互斥保证了线程运行的安全性。同步是一种更为复杂的互斥,而互斥是一种特殊的同步。互斥具有唯一性和
2018-05-01 14:32:27
3424
原创 线程控制
POSIX线程库(用户级)与线程有关的函数构成了一个完整的系列,绝大多数函数的名字以“pthread_”开头 要使用这些函数库,要通过引入头文 链接这些线程函数库时要使用编译器命令的“-lpthread”选项 用户线程和内核线程是1对1的一、线程创建pthread_create函数头文件:#include<pthread.h>函数原型:int pthread_create(pthread
2018-04-30 21:46:39
211
原创 守护进程
什么是守护进程?? 守护进程(也称精灵进程)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。守护进程通常采用以d结尾的名字,表示Daemon,如:crond(设置定时任务),httpd。 一个守护进程的父进程是init进程,因为它真正的父进程在fork出子进程后就先于子进程exit退
2018-04-30 09:19:20
449
原创 进程组、作业、会话之间的关系
进程组:概念:进程组是一个或多个进程的集合每个进程除了有一个进程ID之外,还属于一个进程组。通常与同一个作业相关联,可以接收到来自同一个终端的信号。每个进程组有一个唯一标识的进程组ID。每个进程组都可以有一个组长进程,组长进程的ID等于进程ID组长进程可以创建一个进程组,创建该组的进程,然后终止,只要该进程组中有一个进程存在,无论组长进程是否终止,该进程组都是存在的 就好比一个班级的班长
2018-04-29 19:16:34
398
原创 二叉树的基本操作
首先我们来了解一下什么是二叉树 二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树的特点: 1.每个节点最多有两棵子树,即二叉树不存在度大于2的节点 2.二叉树的子树有左右之分,其子树的顺序不能颠倒 3.满二叉树: 在一棵二叉树中,如果所有分支节点都存在左子树和右子树,并且所有叶子节点都在同一层上
2018-04-29 15:58:32
636
原创 信号的捕捉与可重入函数
信号的捕捉在信号的相关概念中曾提到如果一个信号没有被Block,但被Pending,但不会立即递达,而是在合适的时候,这里的合适的时候是指:当进程从内核态返回用户态时,会对信息进行检测处理。正如下图所示,是系统在对信号进行捕捉时经历的过程: 可以简化为:首先先来介绍一下什么是信号捕捉: 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为信号捕捉那么内...
2018-04-29 13:53:39
304
原创 Android小程序---在Log里获取注册信息
首先介绍几个常用的控件: 1.文本类控件 TextView 负责展示文本,非编辑 EditText 可编辑文本控件 2.按钮类控件 Button 按钮 ImageButton 图片按钮 RadioButton与RadioGroup 单选按钮 CheckBox 复选按钮 3.图片控件 ImageView 负责显示图片 4.进度条控件 ProgressBar
2018-04-29 11:44:11
397
原创 Android的小程序---使用Intent在Activity之间传递数据
首先我们先理解一下Activity的生命周期: Android活动程序Activity和意图方法Intent之间的关系 Activity之间的通信可以使用Intent,在启动另外的Activity的时候,我们可以传递Intent意图,通过Activity类提供的 startActivity方法,Intent类提供了一个从“发件人”到“收件人”的构造方法Intent(Context packageC
2018-04-26 18:16:23
919
原创 信号的相关概念
信号的概念:信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。 软中断信号用来通知进程发生了异步事件,进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给进程传递任何数据。 收到信号的进程对各种信号有不同的处理方法。具体方法在下文会有详细的介绍。进程通
2018-04-26 10:43:56
1021
原创 Android小程序---显示窗体的切换
编写程序测试Android活动程序Activity如何进行显示窗体的切换首先打开eclipse,然后再打开虚拟机,进行联机 点击右上角的DDMS就会在左侧出现一个框框显示联机的信息,如果框框里面没有内容,就证明没有连接上虚拟机 然后新建一个Android程序: 点击右上角的Java, 左上角File->New->Android Application Project 写入你想要起的名字,四
2018-04-25 17:23:43
772
原创 死锁
死锁的概念:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。一个线程也会产生死锁问题(没有释放)。死锁产生的4个必要条件: (1)互斥条件:一个资源每次只能被一个进程使用,若其他进程想要访问该资源,只能等占有该资源的进程使用完后释放该资源
2018-04-25 12:04:42
185
原创 线程
什么是线程??在一个程序里的,一个执行路线就叫做线程(thread)。更准确的说:线程是一个进程内部的控制序列。一个进程至少有一个执行线程。若在单个程序同时运行多个线程完成不同的工作,称为多线程。 Linux中没有真正意义上的线程,是用进程来模拟线程线程的特点:在多线程中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。线程具有以下属性: (1)轻型实
2018-04-23 09:19:17
248
原创 栈和队列的相关笔试面试题
在程序中引用的“seqstack.h”文件和“seqqueue.h”可以参见https://blog.youkuaiyun.com/Nessie_zhao/article/details/79917049 https://blog.youkuaiyun.com/Nessie_zhao/article/details/798344041.实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值)的时间复杂度
2018-04-17 22:43:24
414
原创 顺序队列与链式队列
队列首先介绍一下什么是队列:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。 队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另
2018-04-12 18:17:04
3731
原创 顺序栈与链式栈
栈首先先对栈做简单的认识:栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个
2018-04-10 18:13:16
594
原创 pipe相关代码的实现
pipe头文件:#include<unistd.h>功能:创建一个无名管道函数原型:int pipe(int fd[2]);//分别以读、写方式打开,所以有两个文件描述符参数:fd:文件描述符数组,其中fd[0]表示读端,fd[1]表示写端返回值:成功返回0,失败返回错误码管道的特点 -管道自带互斥与同步机制 -管道只能单向通信 -只要有血缘关系的两个进程就可以进行进程间通信 -管
2018-04-06 14:43:55
970
原创 编写简单的函数并将其打包成静/动态库
写一个数学库实现加、减法 1.首先touch 4个文件:add.c、add.h、sub.c、sub.h 两个 “.c”文件提供方法实现,两个“.h”文件提供方法声明。 注:库里面不能有main()函数,main()函数是程序的入口。编写“.h”文件#pragma once#include<stdio.h>int myadd(int x,int y);#pragma once#includ
2018-04-06 08:38:09
725
原创 文件相关系统调用接口open/write/read/close
1.写(write)#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>int main(){ int fd = open("file",O_WRONLY|O_CREAT,0644);//以只写方式打开或不存在的话创建 if(fd < 0)
2018-04-05 16:52:22
583
原创 fd与FILE结构体的纵向对比
文件描述符(fd) 对于Linux而言,所有对设备(对于Linux而言,一切皆文件)和文件的操作都使用文件描述符来进行的。文件描述符是用来访问文件的。 文件描述符是一个非负的整数,是一个索引值,指向内核中每个进程打开文件的记录表。 当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符用于后续对文件的读写操作;当需要读文件时,也需要把文件描述符作为参数传递给相应的函数。 通常情
2018-04-05 11:27:09
257
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人