- 博客(110)
- 收藏
- 关注
原创 软件测试:BUG那些事儿
main函数:先了解主要工作流程,再细看每一步的细分步骤int main(void){ int server_sock = -1; u_short port = 0;//传入的端口为0, int client_sock = -1; struct sockaddr_in client_name; int client_name_len = si...
2018-09-16 13:11:41
1637
1
原创 软件测试的W模型和V模型
软件测试的V模型 V模型的目的在于改进软件开发的效率和效果。 在V模型中: 明确的标注了测试过程中存在着那些不同的测试类型,并且清楚的表达了测试阶段和开发过程各阶段的对应关系。 从这种对应关系我们分析: 单元测试和集成测试对应于详细设计和概要设计,那么在单元测试和集成测试中我们就需要检测程序的执行是否满足软件设计的要求。系统测试对应于需求分析和系统分析,在系统测试过程中我们就需要检测...
2018-09-09 17:10:50
21535
原创 BOOL、float 、指针变量与 "零值" 如何比较?
BOOL flag与 “零值” BOOL flag;//正确写法if(flag)if(!flag)//错误写法if(flag == TRUE)if(flag == 1)if(flag == FALSE)if(flag == 0)char *p与 “零值” //正确写法if(p == NULL)if(p != NULL)//错误写法if(p == 0)...
2018-09-09 16:12:02
798
原创 时间复杂度
时间复杂度 时间复杂度:实际上就是一个函数,函数的计算结果是算法执行的基本操作的次数。 比如:void Test(int n){ int count = 0; int i = 0; for(;i < n;++i){ int j = 0; for(;j < n;++j){ count++; /...
2018-09-01 21:28:58
997
原创 模拟实现memcpy、memmove
模拟实现memcpyvoid *my_memcpy(void *dst,const void *src,int count){ assert(dst); assert(src); char *p = (char *)dst; char *q = (char *)src; while(count--) { *p = *q; ...
2018-08-19 16:25:51
167
原创 模拟实现strcpy、strcat、strstr、strtcmp
模拟实现strcpy:字符串拷贝char *my_strcpy(char *dst,const char *src){ assert(dst); assert(src); char *ret = dst; while(*dst && *src) { *dst = *src; dst++; ...
2018-08-19 15:58:51
249
原创 模拟实现atoi、itoa
模拟实现atoiint my_atoi(const char *str){ assert(str); int res = 0;//保存结果 int sign = 1;//符号标志 char *p = (char *)str; while(*p != '\0') { while(*p == ' ') { ...
2018-08-19 14:15:48
186
原创 三种方法实现strlen
方法1:计数法int my_strlen(const char *str){ char *p = (char*)str; int count = 0; while(*p != '\0') { count++; p++; } return count;}方法2:递归法int my_strlen(const...
2018-08-19 13:47:09
222
原创 HTTP状态码查询大全
1xx(临时响应) 状态码 状态码描述 100(继续) 请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分 101(切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换2xx(成功) 状态码 状态码描述 200(成功) 服务器已成功处理了请求。通常,这表示服务器提供了请求的网...
2018-08-19 13:19:12
1338
原创 C++和C语言动态内存管理的区别(malloc和new的区别)
C语言的动态内存管理在之前的一篇博客中有提到过:C语言动态内存管理 学了C语言的动态内存管理,C++中同样的也有动态内存管理,那这二者之间到底有何区别呢???C语言动态内存管理 通过malloc、realloc、calloc以及free函数来动态开辟/释放空间。 #include<stdlib.h>void* malloc (size_t size);//1、这个函数...
2018-08-17 13:07:39
484
原创 管道、消息队列、共享内存、信号量的特点
在之前我们已经了解过了进程间通信的几种方式:管道、消息队列、共享内存以及信号量。今天我们就来总结一下这几种方式的各自的特点分别是什么,和他们相应的应用场景。也是对于这个知识点的一个复习和巩固。Q1:为什么要有进程间通信??? A1: 1、为了传输数据:一个进程需要将它的数据发送给另外一个进程; 2、为了共享资源:多个进程之间有时需要共享同样的一份资源; 3、为了通知事...
2018-08-16 22:52:55
2124
原创 C++:string类的实现
#include&amp;lt;iostream&amp;gt;#include&amp;lt;string.h&amp;gt;#include&amp;lt;assert.h&amp;gt;#include&amp;lt;stdio.h&amp;gt;class String{public: //构造函数 String(const char *str
2018-08-05 22:16:30
293
原创 C++:深浅拷贝与写时拷贝
首先我们明确一下深浅拷贝的概念。 什么是浅拷贝 所谓的浅拷贝仅仅拷贝了对象的指针,并不会额外的为对象开辟一段内存空间,而是拷贝的对象的指针指向了被拷贝对象的内存空间,也就是说,这个时候有两个指针指向同一块内存空间,下面以string类的实现画图说明。 什么是深拷贝 与浅拷贝大为不同,深拷贝是实实在在的重新开辟一段新的内存空间,再把被拷贝对象的数据依次拷贝到自己的空间中,两...
2018-08-05 22:15:53
249
原创 C++:日期类的实现
#include <iostream>#include<assert.h>#include<stdio.h>using namespace std;class Date{public: //该函数没有什么特别意义,仅为了测试打印日期便于观察测试结果 void show() { cout<<_yea...
2018-08-05 13:36:20
296
原创 C++:类和对象基础知识(类的实例化对象和大小计算以及内存对齐,空类大小问题)
1.什么是面向对象? 2.类的大小?为什么要内存对齐?内存对齐的计算?空类的计算 3.类的4个默认成员函数的详细使用及细节
2018-07-30 23:41:59
386
原创 C++:函数重载、缺省参数以及命名空间
C++入门 在接触C++之前太多人都说:“C++很难,非常难”。今天我也要开始一探这C++的水了,为了避免淹死,索性我也就不去那深水区蹚了,就在这浅滩里走一走。 C++是一门通用的编程语言,广泛应用于系统软件与应用软件的开发,而我一直一来学习的C语言几乎是C++的一个子集。所以C语言支持的语法C++基本都支持并且需要用到。C++在C的基础上又多了很多的特性。下面...
2018-07-17 15:22:35
202
原创 shell学习笔记---工具学习
# sort工具# sort将文件的每一行作为一个单位,相互比较,# 比较原则是从首字符向后,依次按照ASCLL码值# 进行比较,最后结果按升序输出sort file# 常见选项:# -r选项。sort默认升序排序,加上-r选项改为降序排序sort -r file# -u选项。将输出结果中的重复行去掉sort -u file# 也可以:sort -ur file# -n选项。...
2018-06-23 20:30:38
192
原创 正则表达式
正则表达式基本要素: 字符类: . [ ] - ^ [ [ :xxx: ] ] 数量限定符: ? + * {N} {N,} {,M} {N,M} 位置限定符: ^ $ \&amp;amp;lt; &amp;amp;gt; \b \B 特殊符号: \ ( ) |# 应用场景# 验证:表单提交信息,进行用户名密码验证# 查找:从大量信息中快速提取指定内...
2018-06-19 09:07:05
447
原创 shell学习笔记---简单练习
# 练习1:进度条i=0bar=''lable=("|" "/" "-" "\\")while [ $i -le 100 ]do printf "[%d%%][%c]%s\r" "$i" "${lable[i%4]}" "$bar" let i++ bar=${bar}'#' # 字符串拼接 sleep 0
2018-06-14 23:47:05
129
原创 shell学习笔记---(语法篇四·完结)
. 数组相关操作 . shell与文件 . shell输入与输出重定向 . Here Document . shell与信号 . shell文件包含 . shell运算符# 数组:数组中可存放多个值(只支持一维) # 初始化时不需要定义数组大小,并且没有限定数组的大小 # 下...
2018-06-14 23:43:49
161
原创 shell学习笔记---(语法篇三)
· 位置参数和特殊变量 . shift命令 . 函数 . 函数返回值 . 函数执行成功与否判断 . 命令行参数遍历 . shell脚本的调试方法# 位置参数和特殊变量 # $0:相当于C语言main函数中的argv[0]还有$1,$2... # 这些称为...
2018-06-14 23:30:43
136
原创 shell学习笔记---(语法篇二)
· case命令 · for循环 · while循环 · until循环 · 死循环 · 命令行循环# case命令 类比c的switch/case语句 esac表示语句块的结束# c中的switch/case只能匹配整型或字符型常量表达式# 而shell中的case可以匹配字符串和Wildcard# 每个匹配分支可以有若干条命令,末尾必须以;;(两...
2018-06-13 23:13:32
126
原创 Shell·学习笔记---(语法篇一)
条件测试,多条件测试,if语句# 条件测试 # shell脚本中测试是通过命令来完成的# 常见的测试命令包括test或[# 听过检查该类命令的退出码,决定条件测试是否成立# 注意:shell中退出码为0表示测试条件成立,为1表示不成立 read myint test $myint -eq 100 echo $?# 测试类型# 整数测试:-eq(=) -ne(!=) -lt(&...
2018-06-12 00:23:58
170
原创 Shell初识·学习笔记---(符号篇)
# #用于注释# 此时以./shell.sh的形式运行该shell程序,真实的目录并不会改变# 如果运行时用.或者source修饰脚本,脚本的执行将会影响到父bash# . source是shell的内建命令,这种方式不会创建子shell,# 而是直接在交互式shell下逐行执行脚本中的命令# pwd# cd ..# pwd# shell变量# 注意,变量名和等号之间...
2018-06-09 23:42:34
186
原创 TCP协议可靠性保证(确认应答机制,超时重传机制,流量控制,拥塞窗口)
上一次我们知道了TCP协议通过连接管理机制保证可靠性,今天我们继续来看一看TCP协议中其他几种保证可靠性的方法。确认应答机制 在将这部分的内容之前我们应该首先知道的一点就是,在TCP中,TCP将每个字节的数据都进行了编号,即为序列号(对每一个数据的编号)。 由图分析:当主机1给主机2发送了1~1000这么多数据时,主机2如果收到了就会给主机1应答(ACK报文段,每一个ACK都带有对...
2018-06-07 18:02:26
6215
原创 网络基础:传输层(tcp协议:连接管理机制)
tcp协议(传输控制协议):对数据的传输进行一个详细的控制。tcp协议段格式 源/目的端口号:表示数据来自于哪个进程,要去到哪个进程。 32位序号/32位确认序号: 4位tcp报头长度:表示该TCP头部有多少个32位bit(有多少个4字节),所以tcp头部最大长度是15*4 = 60BYTE。 6位标志位: URG:紧急指针是否有效 ACK:确认号是否有效...
2018-06-06 18:06:38
525
原创 网络基础:传输层(端口号、UDP协议)
传输层:负责数据能够从发送端传输至接收端 之前我们提到过端口号(Port)标识了一个主机上进行通信的不同的应用程序。 由图我们可以看出如果想要数据成功的发送出去。那么我们就必须让他知道IP地址和端口号。就像我们要找一个人,我们只知道他住哪个小区是不够的,我们还需要知道他在这个小区的哪一个房。他的房号就确定了一个具体的地址,并且是唯一的一个地址,不可能给一个房号我们能找到两个房,如果能找到两...
2018-06-05 23:20:44
5319
原创 网络基础:应用层(HTTP协议)
我们写的解决我们实际问题的网络程序都是在应用层。 今天我们详细来了解一下应用层的HTTP协议。 协议就是一种约定,socket apide 接口,在读写数据时,都是按字符串的方式来发送接收的。如果我们要传输一些结构化的数据怎么办呢? 我们可以约定: 定义一个结构体来标识我们需要交互的信息,发送数据时将这个结构体按照一个规则转换成字符串,接收到数据的时候再按照相同的规则把字符串转化...
2018-06-03 23:49:54
342
原创 排序算法:快速排序和归并排序
快速排序(升序排序):快速排序的核心就是找到一个基准值(我们这里采用最后一个元素作为基准值),然后在剩下的区间里从左往右找到一个大于基准值的数,再从右往左找到一个小于基准值的数然后将二者交换,直到二者相遇一趟排序结束。然后在继续下一趟排序。 //////////////////////////////////////快速排序的递归版本/////////////////////////...
2018-06-03 11:37:57
480
原创 排序算法:冒泡,选择,插入,希尔以及堆排序
冒泡排序:时间复杂度O(N^2),空间复杂度O(1),稳定排序 这里的我们使用冒泡排序对数据升序排序,从后往前冒,每冒完一趟我们都会找到这一堆数据(待排序的数据)中最小的一个,并且该最小的数据就在待排序的数据中第一个位置上,此时我们修改有序的区间,再进行下一趟的冒泡排序,并且已经被排好的数据就不会二次被进行排序(二次排序是不必要的,这里就是借用一个有序区间避免了这种不必要)。#inclu...
2018-05-30 17:05:55
265
原创 浅析海量数据处理问题
生活中我们经常会遇到一些海量数据处理的问题,那么怎样的问题就算是海量数据了呢?来看以下这几个问题: 给定一个大小超过 100G 的文件, 其中存在 IP 地址, 找到其中出现次数最多的 IP 地址 。 给定100亿个整数, 找到其中只出现一次的整数(位图变形, 用两位来表示次数)。 有两个文件, 分别有100亿个query(查询词, 字符串), 只有1G内存, 找到两个文件...
2018-05-29 17:01:01
2703
原创 哈希变形----布隆过滤器
在上一篇文章中我们实现了位图的基本操作,现在我们已经知道位图是用来标记某一个数据是否存在,而今天我们要说的布隆过滤器则是另外一种变形应用,通过布隆过滤器我们可以判断一个字符串是否存在于某一对数据中。与位图相比稍有不同的是这里我们可以将数据插入到布隆过滤器(像哈希表一样)中,通过两个哈希函数从而得到两个哈希地址,将这两个哈希地址同时标记为1,就代表该数据被插入到该布隆过滤器中(不是真的将数据插入),...
2018-05-27 20:56:11
314
原创 哈希变形----位图
了解过哈希表,我们接下来看一看哈希表的变形—–位图。 位图:顾名思义就是以bit位为单位,但是需要注意的是我们的位图并不能存储我们的数据,而是借用这样一个结构标记某一个数据是否存在。 如图所示,如果该数据存在,则就将该位图中的相应位从0置为1。 下面我们来实现一下位图的基本操作://以下为bit_map.h文件内容#pragma once#include<stdint.h...
2018-05-26 22:06:25
325
原创 自定义类型(二):枚举和联合
枚举:顾名思义就是一一列举 比如在我们的日常生活中,一个星期有7天,一年有12个月等等都可以使用枚举来一一列举表示。 枚举类型的定义://例1enum sex{ male, //注意逗号 female, secret //注意最后一个成员末尾没有逗号}//例2enum Color{ red, //注意逗号 green, ...
2018-05-22 21:44:08
247
原创 自定义类型(一):结构体和位段
结构体:是一些值的集合,这些值称为成员变量,每一个成员可以是不同类型的变量。结构体的声明:struct tag{ member_list;}variable_list;//例如使用结构体来描述一个学生struct Stu{ char name[20];//名字 int age;//年龄 char id[20];//学号};//分号不不能丢...
2018-05-22 08:26:02
1043
原创 哈希表的基本操作(二):哈希桶处理哈希冲突
哈希桶//hash.h文件内容#pragma once#define max_size 1000typedef int KeyType;typedef int ValType;typedef int (*HashFunc)(KeyType key);typedef struct HashElem{ KeyType key; ValType value; ...
2018-05-20 18:26:31
1424
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人