自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 测试用例的设计方法

测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。评价测试用例的标准:对比好坏代码的评价标准用例表达清楚,无二义性。用例可操作性强。用例的输入与输出明确。一条用例只有一个预期结果。用例的可维护性好。用例对需求的覆盖率高。暴露程序Bug的能力强。测试用例的设计方法基于需求的设计基于需求的测试...

2019-10-10 23:03:49 403

原创 【项目实践】群聊即时通信工具

IM是一款使用开源websocket框架mongoose编写网页版本,http+mongoose+session+mysql+jsoncpp的技术构成的群聊即时通信工具。http && websocket协议现在,很多网站为了实现推送技术,所用的技术都是轮询。在特定的时间间隔(如每一秒),由浏览器对服务器发起HTTP请求,然后由服务器返回数据给浏览器。由于HTTP协议是惰...

2019-09-03 16:12:17 314

原创 【Linux】线程

什么是线程在一个程序里的一个执行线路就叫做线程,线程是一个进程内部的控制序列。一切进程至少都有一个执行线程。线程在进程内部运行,本质是在进程地址空间内运行。在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化。通过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。线程的优点创建一个新线程的代价要比创建一个新进程要...

2019-08-23 23:09:20 161

原创 【Linux】进程信号

概念信号是进程之间事件异步通知的一种方式,属于软中断。信号处理常见方式忽略此信号。执行该信号的默认处理动作。提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数,这种方式称为捕捉 (Catch)一个信号。产生信号通过终端按键产生信号SIGINT的默认处理动作是终止进程,SIGQUIT的默认处理动作是终止进程并且Core Dump。调用系统函数向进程发信号...

2019-08-20 23:20:56 123

原创 【Linux】进程间通信

进程运行时具有独立性,所以要让其通信是一件很难的事,不同的进程通信的前提是,要让不同的进程看到同一份资源,通常是指某一块内存。进程间通信的目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个的(如Debug进...

2019-08-17 21:50:38 85

原创 【项目实践】智能聊天机器人

实现功能我实现的AI管理工具功能有执行系统命令和智能聊天。程序启动后,开始录音。录音成功后使用百度语音识别平台进行识别,判断是命令还是普通对话。如果是命令,进入系统命令执行模块,执行完毕,看到执行结果,一次交互完成。如果是对话信息,推送到图灵机器人,图灵机器人会进行智能对话,得到图灵机器人响应的文本,调用百度语音合成,在本地合成语音,然后程序启动播放器,播放语音信息,完成对话信息。支持语音退出。...

2019-08-15 19:13:49 3095

原创 【C++】map和set

map和set是树形结构的关联式容器,使用平衡搜索树(红黑树)作为其底层结果,容器的元素是一个有序的序列。关联式容器是用来存储数据的,里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器的效率更高。键值对键值对,用来表示具有一一对应关系的一种结构,该结构中一般包含两个成员变量key和value,key表示键值,value表示和key对应的信息。map和set...

2019-08-14 20:32:06 1247

原创 【习题】腐烂的橘子

题目描述在给定的网格中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。分析:先找到所有的腐烂橘子,入队,用第一批带出新一批腐烂的橘子。每一批橘子都会在一分钟之内腐烂,所以此题可以转化...

2019-08-12 21:50:32 587

原创 【测试】开发模型和测试模型

软件的生命周期软件的生命周期是指从软件产品的设想开始到软件不再使用而结束的时间。一般分为6个阶段:需求分析、计划、设计、编码、测试、运行维护。瀑布模型瀑布模型是所有其他模型的基础框架,每个阶段只执行一次,因此是线性顺序进行的软件开发模式。优点:强调开发的阶段性;强调早期计划及需求调查;强调产品测试。缺点:依赖早期进行的唯一一次需求调查,不能适应需求的变化;由于是单一流程,开发中的经验教...

2019-08-10 18:02:08 2763

原创 【测试】软件测试

1.软件测试的概念和目的软件测试最基本的活动就是找Bug目的:验证软件有或者没有问题。原则:以客户为中心,遵循软件测试的规范、流程、标准和要求。2.什么是需求用户需求:可以理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成的任务。软件需求:也叫功能需求,该需求会详细描述开发人员必须实现的软件功能。软件需求是测试人员进行测试工作的基本依据。3.什么是bug凡是实...

2019-08-09 23:54:29 174

原创 【习题】背包问题

题目描述:有n个物品和一个大小为m的背包。给定数组A表示每个物品的大小和数组V表示每个物品的价值。问最多能装入背包的总价值是多大?问题分析:状态F(i, j):前i个物品放入大小为j的背包中所获得的最大价值状态转移方程:F(i, j) = max{F(i-1, j), F(i-1, j - A[i]) + V[i]}对于第i个商品,有三种情况:(1)放不下(2)放的下,放或者不放。...

2019-08-07 17:39:17 396

原创 【C++】智能指针

1.RAIIRAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。这样做的好处是:不需要显式地释放资源。采用这种方式,对象所需的资源在其生命期内始终保持有效。...

2019-08-03 09:41:02 143

原创 【C++】异常

1.C++异常概念异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的直接或间接的调用者处理这个错误。throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。catch: 在您想要处理问题的地方,通过异常处理程序捕获异常.catch 关键字用于捕获异常,可以有多个catch进行捕获。try: try 块中的代码标识将被激活...

2019-08-02 09:40:13 137

原创 【Linux】模拟实现shell

实现一个shell,需要循环以下过程:获取命令行解析命令行建立一个子进程(fork)替换子进程(execvp)父进程等待子进程退出具体代码如下:// makefileminishell:mini_shell.cc g++ mini_shell.cc -o mini_shell.PHONY:cleanclean:rm -f mini_shell mini_shell.cc...

2019-08-01 17:26:55 766

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

进程创建fork函数fork函数从已存在的进程中创建一个新进程。新进程为子进程,原进程为父进程。#include <unistd.h>pid_t fork(void);fork函数返回值:父进程返回子进程的pid,子进程返回0,出错返回-1。进程调用fork,当控制转移到内核中fork代码之后,内核会分配新的内存块和内核数据结构给子进程,将父进程部分数据结构内容拷贝至子...

2019-08-01 12:54:02 168

原创 总结:C++中引用和指针的区别

引用引用不是新定义一个变量,而是给已经存在的变量取一个别名,编译器不会给引用变量开辟新的空间,它和它的引用变量共用同一块内存空间。类型& 引用变量名(对象名) = 引用实体void func(){ //引用类型必须和引用实体是同种类型 int a = 10; int& ra = a; //定义引用类型 printf("%p\n", &am...

2019-07-31 16:14:23 217

原创 【C++】多态

多态,多种形态,去完成某个行为,当不同的对象去完成会产生不同的形态。1.多态的定义及实现多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。如student继承了people。person对象买票全价,student对象买票半价。在继承中构成多态要两个条件:调用函数的对象必须是指针或者引用被调用的函数必须是虚函数,且完成了虚函数的重写2.虚函数1)什么是虚函数在类...

2019-07-30 22:43:05 108

原创 【Linux】模拟实现僵尸进程和孤儿进程

僵尸进程-Z(zombie)子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态。 1 #include <iostream> 2 #include <stdlib.h> 3 #include <unistd.h> 4 #include <sys/types.h> 5 6 using namespace...

2019-07-29 19:20:43 140

原创 【Linux】进程概念

1.计算机管理硬件 (先描述,在组织)1)描述起来,用struct结构体2)组织起来,有链表或其他高效的数据结构2.进程程序的一个执行实例或正在执行的程序等被称作进程,在内核中,进程是担当分配系统资源(CPU时间、内存)的实体1)描述进程-PCB进程信息被放在一个叫做进程控制块(process control block)的数据结构中,可以理解为进程属性的集合。Linux操作系统下的P...

2019-07-29 19:13:18 126

原创 【习题】错排问题

十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法?这个问题推广一下,就是错排问题,是组合数学中的问题之一。考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。问题分析要使每本书都不在原来放的位置,现在假设有n本书,n本书的错排记为D(n),n-1本书的错排记为D(n-1),依次类推。初识位置与书的编号相同。...

2019-07-27 16:55:26 1979

原创 【C++】C++的IO流

流是什么“流”即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且具有方向性的数据(其单位可以是bit,byte,packet )的抽象描述C++ 流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻为“流”“流”的特性是:有序连续、具有方向性为了实现这种流动,C++定义了I/O...

2019-07-26 23:24:25 187

原创 【排序】计数排序

计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。操作步骤:统计相同元素出现次数根据统计的结果将序列回收到原来的序列中代码如下:void CountSort(int* a, int n){ //计算范围 int max = a[0], min = a[0]; for (int i = 0; i < n; ++i) { if (a[i] > max) ...

2019-07-25 11:33:13 76

原创 【Linux】进度条的实现(用printf函数控制进度条彩色输出)

printf输出带颜色的格式控制:printf("\033[显示方式;前景色;背景色m字符串 \033[0m" );显示方式:0(关闭所有属性)、1(高亮)、4(下划线)、7(反显)、8(消隐)前景色:30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(紫色)、36(青色) 、37(白色)背景色:40(黑色)、41(红色)、42(绿色)、 43(黄色)、44...

2019-07-24 17:28:58 1083

原创 【排序】归并排序

归并排序就是将已有序的子序列合并,得到完全有序的序列。先使每个子序列有序,再使子序列段间有序。若将两个有序序列合并成一个有序序列,称为二路归并。代码如下:void _MergeSort(int* a, int begin, int end, int* tmp){ if (begin >= end) return; int mid = begin + ((end - begi...

2019-07-24 09:58:14 76

原创 【排序】快速排序

快速排序快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:在待排序元素序列中任取一个元素key,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于key,右子序列中所有元素均大于key,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。将区间按照基准值划分为左右两半部分的常见方式有:hoare版本挖坑法前后指针版本图解:在...

2019-07-23 11:42:09 106

原创 【排序】冒泡排序

冒泡排序将待排序的数据按照顺序两两相比,较大的数据向后移动,直到整个序列有序void BubbleSort(int* a, int n){ int end = n; while (end > 0) { int exchange = 0; for (int i = 0; i < n; i++) { if (a[i - 1] > a[i]) {...

2019-07-22 11:40:24 69

原创 总结:malloc/free和new/delete的区别

malloc/free和new/delete的区别malloc/free和new/delete的共同点是:都是从堆上申请空间,并且需要用户手动释放。不同的地方是:malloc和free是函数,new和delete是操作符malloc申请的空间不会初始化,new可以初始化malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可malloc的返回值为voi...

2019-07-21 22:48:45 129

原创 【Linux】linux下基本指令

1. ls指令 浏览目录,引出目录下的文件夹-a 列出目录下的所有文件,包括以.开头的隐含文件-l 列出文件的详细信息2. pwd指令 显示用户当前所在目录3. cd指令 改变工作目录cd … 返回上级目录cd ~ 进入用户家目录cd - 返回最近访问目录4. touch指令 刷新已存在的文件时间属性,若文件不存在则新建语法: touch [选项]…文件…...

2019-07-21 16:04:16 148

原创 【C++】C++的内存管理

一、C++的内存管理C++通过new和delete操作符进行动态内存管理。new/delete操作内置类型void Test(){ // 动态申请一个int类型的空间 int* ptr1 = new int; // 动态申请一个int类型的空间并初始化为10 int* ptr2 = new int(10); // 动态申请10个int类型的空间 int* ptr3 = ...

2019-07-20 17:55:47 156

原创 【Linux】初识操作系统

使计算机更好用,是操作系统的根本定义。操作系统是一款进行软硬件资源管理的软件。(管理者具有决策权)管理者是根据被管理者的数据进行相关决策的。一般而言,管理者和被管理者并不直接沟通,所以管理者(操作系统)和被管理者(软硬件)之间要有中间的执行者角色(设备驱动)。所以,操作系统对下要管理好软硬件,对上,为用户提供良好的执行环境。...

2019-07-20 13:57:55 129

原创 【C++】模板(函数模板和类模板)

泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础,模板分为函数模板和类模板。一、函数模板1.概念:函数模版代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定函数类型模板。2.格式:template<typename T1, typename T2,…typename Tn>返回类型 函数名(参数列表){}te...

2019-07-18 19:38:16 145

原创 【习题】另类加法

二进制加法运算法则:0 + 0 = 0, 0 + 1 = 1,1 + 0 = 1,1 + 1 = 10两个相加的二进制位仅为一位1时,相加为1;两个二进制位全为0,相加为0;两个二进制位全为1,相加为10(相当于二进制中的2,也就是逢2进1)。位的异或运算跟"求和"的结果一致异或:1^1 = 0 1^0 = 1 0^0 = 0求和:1+1 = 0 1+0 = 1 0+0 = 0...

2019-07-17 12:22:36 446

原创 【C++】类和对象(下)

一、再谈构造函数1.1 构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。构造函数体中的语句只能将其称作为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。1.2 初始化列表初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。class Date{p...

2019-07-17 10:53:51 148

原创 【C++】类和对象(6个默认成员函数)

如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。如下:一、构造函数构造函数的主要任务而是初始化对象。并且在对象的生命周期内只调用一次。函数名与类名相同,且无返回值。class Date{public: // 1.无参构造函数 Date() {} // 2.带参构造函数 Date(int ye...

2019-07-16 18:56:13 161

原创 【C++】类和对象(上)

类与对象的初步认知C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++ 是面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。类的定义class className{//类体:由成员函数和成员变量组成}; // 分号不能丢class...

2019-07-16 18:50:34 133

原创 【排序】选择排序

基本思想每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。直接选择排序:在元素集合arr[i]–arr[n-1]中选择关键码最大(小)的数据元素,若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换,在剩余的arr[i]–arr[n-2](arr[i+1]–arr[n-1])集合中,重复上述步骤,...

2019-06-27 23:28:19 185

原创 【C++】C++入门知识总结

1.C++关键字(C++98)2.命名空间在C/C++中,变量、函数、和类都是大量存在的,这些变量、函数和类的名称都将存在于全局作用域中,可能会导致很多冲突。使用命名空间对标识符的名称进行本地化,以避免命名冲突或名字污染。一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。定义命名空间定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然...

2019-06-15 18:01:31 149

原创 【排序】堆排序

堆排序堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆来进行选择数据。需要注意的是排升序要建大堆,排降序建小堆。代码实现(升序)://交换两个数void Swap(HPDataType* p1, HPDataType* p2){ HPDataType tmp = *p1; *p1 = *p2; *p2 = tmp;}...

2019-06-14 17:32:06 158

原创 【排序】希尔排序

希尔排序希尔排序法又称缩小增量法。先将整个待排序列分割成若干子序列分别进行插入排序,直到整个序列中的数据接近于有序,再将整个序列进行一次排序。间距为gap的排序1.辅助排序,接近于有序2.插入排序图解:先选定一个整数gap,把待排序文件中所有数据分成几个组,所有距离为gap的数据分在同一组内,并对每一组内的数据进行排序。然后,重复上述分组和排序的工作。当到达gap=1时,所有数据...

2019-06-11 21:53:23 192

原创 【排序】直接插入排序

概念直接插入排序是一种简单的插入排序法,其基本思想是每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止,得到一个新的有序序列 。核心思想当插入第i(i>=1)个元素时,前面的a[0],a[1],…,a[i-1]已经排好序,此时用a[i]的排序码与a[i-1],a[i-2],…的排序码顺序进行比较,找到插入位置即将a[i]插入,原来位置上的元素顺序后移。...

2019-06-11 16:49:25 114

空空如也

空空如也

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

TA关注的人

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