- 博客(29)
- 收藏
- 关注
原创 测试的分类
1、按是否查看程序内部结构分为:(1)黑盒测试(black-box testing):只关心输入和输出的结果(2)白盒测试(white-box testing):去研究里面的源代码和程序结构2、按是否运行程序分为:(1)静态测试(static testing):是指不实际运行被测软件,而只是静态地检查程序代码、界面或文档可能存在的错误的过程。静态测试包括:对于代码测试,主要是测试代码是否符合相应的标准和规范。对于界面测试,主要测试软件的实际界面与需求中的说明是否相符。对于文档
2022-03-01 17:35:11
4281
原创 输入www之后
输入"http:/www.baidu.com”之后都发生了什么?浏览器输入www.baidu.com按回车之后发生了什么?点击网址后,应用层的DNS协议会将网址解析为IP地址;在应用层,浏览器会给web服务器发送一个HTTP请求:在传输层,(上层的传输数据流分段)HTTP数据包会嵌入在TCP报文段中:在网络层中,TCP报文段再嵌入IP数据包中;在网络接口层,IP数据包嵌入到数据帧(以太网数据包)中在网络上传送:数据包经过多个网关的转发到达百度服务器,请求对应端口的服务:请求处理完成之后,
2022-03-01 16:32:23
4138
原创 写时拷贝技术
写时拷贝技术:写的时候才去分配空间(其实是一种拖延战术)写时拷贝是通过“引用计数”来实现的。在分配空间的时候,多分配4个字节(资源计数器),用来记录有多少指针指向那块空间,当有新的指针指向那块空间时,引用计数+1,当要释放这块空间时,引用计数-1(假装释放),知道引用计数的值为0,才真的释放那块空间。当有的指针想要改变那块空间的值时,再为这个指针分配自己的空间(这时旧空间引用计数-1,新空间引用计数+1)写时拷贝_Sunnylunch-blog-CSDN博客.
2022-03-01 15:24:35
538
原创 进程间通信 多进程多线程
管道管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。1、特点:它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。有名管道FIFO,也称为命名管道,它是一种文件类型。1、特点FIFO可以在无关的进程之间交换数据,与无名管道不
2022-02-24 09:52:44
567
原创 一、文件传输项目(初版)
时间:大学的项目项目功能:文件的上传、下载、秒传、断点续传,其他基本指令项目描述1.使用tcp可靠传输协议通过三次握手进行客户端和服务器端的连接和文件的传输2.采用多线程编程实现多客户端的请求连接3.客户端发送请求数据包,服务器端进行数据包的解析,并响应请求,以实现文件的上传、下载和其他指令4.通过存储文件的MD5值,实现秒传和断点续传c/s模型(客户端服务器端模型)服务器端(1)创建套接字socketserfd=socket(AF_INET,SOCK_S
2022-02-23 15:09:49
741
原创 mysql
chkconfig mysqld on 启动开机自动启动m’yservice mysqld start 启动服务service mysqld status 查看状态mysql -uroot -p 以root用户身份登录show databases; 显示所有数据库create database mydatabase; 创建新的数据库use mydatabase; 进入新的数据库show tables; 显示所在数据库的所有表create table mytable(表头结构
2021-10-28 16:24:09
145
原创 力扣刷题笔记(35)
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。/*二分法*/int searchInsert(int *nums, int numsSize, int target){ int left = 0; int right = numsSize - 1; int medain; while(left <= right) { medain = ..
2021-10-20 21:14:26
78
原创 力扣刷题笔记(704)
#include<stdio.h>int search(int *nums, int numsSize, int target){ int s = 0; int e = numsSize -1; int median; while(s != e) { median = (e - s)/2 + s; if(target > nums[median]) { s = median + 1; } else if(target < nums[...
2021-10-20 14:17:08
92
原创 数组1
数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力也就是说,想法很简单,但实现起来 可能就不是那么回事了。首先要知道数组在内存中的存储方式,这样才能真正理解数组相关的面试题数组是存放在连续内存空间上的相同类型数据的集合。数组可以方便的通过下标索引的方式获取到下标下对应的数据。举一个字符数组的例子,如图所示:数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力也就是说,想法很简单,但实现起来 可能就不是那么
2021-10-18 17:13:45
197
原创 内存溢出内存泄漏
1.内存泄漏:(memory leak)指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。2.内存溢出:(out of memory)指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。3.二者的关系内存泄漏的堆积最终会导致内存溢出;内存溢出就是你要的内存空间超过了系统实际分配给你的空间,此时系统相当于
2021-10-18 10:36:22
334
原创 继承封装和多态
继承子类继承了父类的成员函数和成员变量,也就是继承了除构造函数和析构函数之外的所有成员。多态相当于一个接口,基类的指针指向基类的对象时就调用基类的函数,基类的指针指向派生类的对象时,调用的是派生类的的函数。(1)静多态(静态绑定/早绑定):模板,重载编译时期确定调用哪个类型对象的函数(2)动多态(动态绑定/晚绑定):继承+虚函数运行时期确定调用哪个类型对象的函数(通过寻找vfptr–>找到vftable–>再找到虚函数地址,进行调用,这些都是发生在运行阶段)虚函数重点!(1.
2021-10-16 16:19:00
90
原创 二维数组。
有关打印二维数组#include<stdio.h>/*把二维数组的值附给另一个二维数组*/int main1(){ char number[][5] = {"0", "0", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; char str[100][100] = {0}; for(int i = 0; i < 9; i++) { int j; for(j = 0; number[i][
2021-10-15 20:33:09
77
原创 指针和数组的区别
1.指针和数组的区别(1)数组名做函数的形参时退化成指针(2)sizeof计算字节数:指针永远都是4个字节(32位系统上)数组需要看数组的类型和元素(3)指针可以++数组名不能++(4)+1能力:数组指针+1 加整个一维数组的长度指针数组+1 加到下一个元素2.数组不退化成指针(1)sizeof计算字节数大小(2)对数组名进行取地址(3)用字符串初始化数组3.指针和引用引用相当于更安全的指针(1)指针存放的是对象的地址,引用相当于对象的别名变量定义时,名字左边有&
2021-10-14 17:39:07
2397
原创 力扣刷题笔记(7)
/*整数反转*/#include<stdio.h>#include<limits.h>int reverse(int x){ int y = 0; while(x != 0) { if((y > INT_MAX/10) || (y < INT_MIN /10)) { return 0; } y = y*10 + x%10; x = x / 10; } return y; }int main(){...
2021-10-13 21:12:16
79
原创 力扣刷题笔记(27)
/*给一个数组nums和一个值val移除所有数值等于val的元素*/#include<stdio.h>int removeElement(int *nums, int numsSize, int val){ for(int i = 0; i < numsSize; ) { if(nums[i] == val) { if(nums[numsSize -1] == val) { numsSize -= 1; continue;...
2021-10-12 20:41:18
80
原创 力扣刷题笔记(70)
/*爬楼梯爬到n阶才能到楼顶每次只能爬1或2个台阶,有多少钟不同的方法可以爬到楼顶?*/#include<stdio.h>int climbStairs(int n){ int arr[204800] = {0}; arr[1] = 1; arr[2] = 2; if(n == 1 || n == 2) { return arr[n]; } int i = 3; for(; i < n+1 ; i++) { arr[i] = arr...
2021-10-12 14:05:18
81
原创 力扣刷题笔记(20)
括号匹配#include<stdio.h>struct stack_t{ int up;//指向栈顶 char arr[1024];};int isValid(char *s){ struct stack_t sk; sk.up = 0; for(int i = 0; s[i] != 0; i++) { if((s[i] == '(') || (s[i] == '{') || (s[i] == '[')) { sk.arr[sk.up++] =
2021-09-24 21:51:18
68
原创 力扣刷题笔记(14)
编写一个函数来查找字符串最长公共前缀。#include<stdio.h>char *longestCommonPrefix(char strs[1024][1024], int strsSize){ for(int i = 0; i < strsSize; i++) { for(int j = 0; strs[0][j] != 0; j++) { if(strs[0][j] == NULL || strs[i][j] == NULL) { ..
2021-09-24 16:36:00
74
原创 力扣刷题笔记(3)
/*给定一个字符串s找出不含有重复字符的 最长 子串---------------------------------思路:遍历字符串,找到重复的字符停止遍历并记录子串长度 继续向下遍历,重复上面的内容(找到重复的字符停止遍历并记录最大子串长度) 直至'\0'结束遍历,返回最大子串长度*/#include<stdio.h>#include<string.h>int lengthOfLongestSubstring(char *s){ int ...
2021-09-18 10:10:40
73
原创 力扣刷题笔记(13)
/*给定一个罗马数字,将其转换成整数。输入确保在1~3999的范围内*/#include<stdio.h>int romanToInt(char *s){ int arr[88] = {0}; arr['I'] = 1; arr['V'] = 5; arr['X'] = 10; arr['L'] = 50; arr['C'] = 100; arr['D'] = 500; arr['M'] = 1000; int sum = 0; char *p...
2021-09-16 20:49:01
58
原创 力扣刷题笔记(9)
/*回文数:正序和倒序读都是一样的整数eg:12321,252,75657,756657判断一个整数是否是回文数是返回true,否返回false*/#include<stdio.h>#include<stdbool.h>#include<stdlib.h>#include<string.h> bool isPalindrome(int x){ printf("bool ok\n"); char string[10];...
2021-09-15 21:02:13
85
原创 力扣刷题笔记(1)
/*整数数组num和一个整数目标值target在整数数组中找出 和 为target的两个整数返回下标*/#include<stdio.h>#include<stdlib.h>//方法1:定义一个全局变量,作用域在全局,不会被释放//int arr[2];int *twoSum(int *num, int numsSize, int target, int *returnSize){ //方法2:定义一个局部指针,开辟需要的内存 int *arr;
2021-09-14 21:28:59
60
原创 Makefile示例
SOURCE = $(wildcard ./source/*.c)OBJ = $(patsubst %.c, %.o, $(SOURCE))INCLUDE = -I./includeCFLAGS = -Wall -c -lpthreadCC = gccTARGET = demo$(TARGET) : $(OBJ) @mkdir -p output/ $(CC) $(OBJ) -o $(TARGET) $(CFLAGS)%.o : %.c $(CC) $(INCLUDE) ...
2021-09-14 15:33:25
173
1
原创 void类型
1.void类型是抽象类型,不能直接定义变量,但他可以定义指针eg:错误示例 void main() { void a; }2.特点:没有对应的实体只要是地址都会接受(任何变量,任何指针)3.void类型指针(1)无法识别地址内存放的数据(2)舍弃指针加一的能力(即失去对内存的解释能力)eg:void *p
2021-09-14 14:30:48
2711
原创 cjson
我的代码json.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/time.h>#include<time.h>#include<stdint.h>#include"cJSON.h" int main(){ cJSON *usr; cJSON *arry; usr=cJSON_CreateObject(); //创建
2021-09-10 10:52:29
179
原创 test有关bit位移
#include<stdio.h>#include<stdint.h>int main(){ uint8_t a = 0xab; uint8_t b = 0xcd; uint16_t c = ((a<<8) | b); printf("%X\n", c); return 0;}
2021-09-03 10:18:01
84
原创 网络四层协议
数据链路层:把网络层的ip报文段封装成帧,在链路上发送网络层:把tcp的报文段和udp的用户数据报封装成ip数据报发送传输层:向他上面的应用层提供通信服务应用层:进程间的通信tcp和udp区别?(1)tcp是有连接的,udp无连接(2)tcp按序发送,按序送达,提供超时重传来保证可靠性udp不保证按序发送,不保证按序送达,只是努力交付,即便按序发送的序列,也不保证按序送达(3)tcp是面向字节流的服务,udp是面向报文的服务(4)tcp可靠(因为有滑动窗口),udp不可靠(5)tcp..
2021-07-21 08:56:33
3139
2
原创 程序的编译,链接,运行和地址映射
1.在x86体系32位linux内核/操作系统下:每一个进程在运行的时候,系统会为其分配一个以上构造的4G的虚拟地址空间:3G为用户空间(私有)1G为内核空间(共享)代码段:存放程序的执行代码,大小在运行前已经确定,也包含一些只读的常数变量,例字符串常量等。数据段:存放程序中已初始化的全局变量(静态分配内存)。堆区:用于存放进程运行中被动态分配的内存段,大小不固定,可动态扩张或缩减。 当...
2018-06-18 20:39:55
2009
转载 4个跳转语句return、goto、break、continue
其中return、goto可以应用到程序的任何地方,break、continue和循环语句一起使用。1、returnreturn用于从函数(不管是在while中调用还是for循环中调用)返回,使执行的函数返回到函数的调用点。return的一般形式是: return 表达式其中表达式就是函数返回的值。一旦遇到return,程序就不会在继续往后执行。函数使用return的次数不
2017-10-14 13:08:34
446
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人