
笔记
书
零度苏打
有彩虹
展开
-
系统测试——软件测试的艺术
系统测试有着特定的目的:将系统或程序与其初始目标进行比较,给定目标后有两含义:系统测试不局限于系统,若产品是一个程序:系统测试就是试图说明程序作为一个整体是如何不满足其目标的过程根据定义,若产品没有一组书面的、可度量的目标,系统测试就无法进行在寻找程序与其目标之间的不一致的过程中,应重点注意那些在设计外部规格说明的过程中所犯的转换错误。系统测试因而成为一种关键的测试类型,因为就软件产品本身、所犯错误的数量及其严重性而言,开发周期的这个阶段是最易出错的这也暗示与功能测试的情况不同,外部规格说明不能原创 2020-05-14 16:41:55 · 1635 阅读 · 0 评论 -
模块测试(单元测试)——软件测试的艺术
是大型程序测试的第一个步骤【大型程序即超过500条语句的程序】了解模块测试是对程序中的单个程序、子程序/过程进行测试的过程【并非对整个程序】:关注点在较小单元,是一种管理组合的测试元素的手段减轻调试的难度,把错误定位到一个小范围可同时测试多个模块,将并行工程引入软件测试模块测试的目的在于将模块的功能与定义模块的功能规格说明或接口规格说明进行比较。揭示出模块与规格说明的矛盾测试用例的设计首先需要模块的规格说明与模块源代码模块测试总体面向白盒测试【若对大的程序测试,不容易展开,也便于在后续原创 2020-05-13 16:37:45 · 6110 阅读 · 0 评论 -
IP基础
I P是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。IP提供不可靠、无连接的数据报传送服务不可靠:它不能保证IP数据报能成功地到达目的地。 IP仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区, IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信源端。任何要求的可靠性必须由上层来提供(eg:TC...原创 2020-04-08 14:32:51 · 664 阅读 · 1 评论 -
服务器模型、服务器编程框架——Linux高性能服务器
服务器模型C/S模型(客户端/服务器)如图:TCP/IP协议在设计和实现上并没有客户端和服务器的概念,在通信过程中所有机器都是对等的。但由于资源(视频、新闻、软件等)都被数据提供者所垄断几乎所有的网络应用程序都很自然地采用了C/S 模型:所有客户端都通过访问服务器来获取所需的资源特点非对等服务,即客户端与服务器处于不对等地位体现:服务器有软硬件资源及运算能力而客户端没有,服务器提...原创 2020-03-31 16:00:41 · 243 阅读 · 0 评论 -
Linux服务器程序规范——Linux高性能服务器
日志Linux提供一个守护进程来处理系统日志【syslogd】,现在用的是它的升级版【rsyslogd】守护进程:Linux服务器程序一般以后台程序的形式运行,后台进程也叫守护进程。它没有控制终端,所以不会意外接收到用户输入。守护进程的父进程通常是init进程【PID为1的进程】rsyslogd守护进程既能接收用户进程输出的日志,又能接收内核日志用户进程通过调用syslog函数生成...原创 2020-03-31 13:42:11 · 239 阅读 · 0 评论 -
指针——Linux一站式学习
概念对于栈顶指针,队列头尾指针而言,这里的指针本质上是一个整数,是数组的索引,通过指针访问数组的某元素;还有一种概念:把一变量所在的内存单元的地址保存在另一个内存单元中,这个内存单元就是指针,通过指针访问变量【变量的地址在编译链接时确定,可以直接赋值给指针变量】不同类型的指针变量,的内存单元都占4个字节,因为要保存32位的虚拟地址,同理,在64位平台上指针变量都占8个字节int a=1...原创 2020-03-14 18:59:37 · 201 阅读 · 0 评论 -
空间配置器(SGI-STL)
理解是一种管理空间的机制,对空间进行分配、回收重要性:整个STL的操作对象都存放在容器中,容器需要配置空间置放数据。空间配置器为各容器实现了对空间的高效管理为什么不直接用new/delete?用户自己管理空间,容易内存泄漏频繁申请小的内存空间,造成内存碎片频繁调用函数过程中要出栈压栈,效率低会产生额外的空间浪费(申请的空间大小+对空间管理的空间)可能申请失败为什么不说allo...原创 2020-03-13 20:37:24 · 477 阅读 · 0 评论 -
x86汇编程序基础——Linux C一站式学习
对于下面的汇编程序理解hello.s:将其经过汇编器as、链接器ld处理后生成可执行文件helloas hello.s -o hello.old hello.o -o hello运行后发现只做了一件事:退出,且退出状态是4分析:#:注释"以.开头的名称“:不是指令的助记符,不会被翻译成机器指令,称为汇编指示/伪操作.section指示把代码划分成若干个段,程序被操作系统加...原创 2020-03-11 16:39:28 · 297 阅读 · 0 评论 -
编译和链接——程序员的自我修养
常用的开发环境如Visual Studio、Delphi,是集成开发环境,在集成开发环境中,将编译链接合并到一起一步完成,其合并到一起的过程称为构建虽然集成开发环境及编译器提供的默认配置、编译与链接参数提供的功能足以强大,但其隐藏了软件运行背后的机制,可能会产生一些莫名其妙的错误被隐藏的过程编译过程可分解为四个步骤:预处理、编译、汇编、链接预处理如对一个main.c文件预处理#-E:...原创 2020-03-10 14:48:29 · 198 阅读 · 0 评论 -
多进程编程——Linux高性能服务器
fork系统调用Linux下创建新进程#include <sys/types.h>#include <unistd.h>pid_t fork(void);在父进程中返回子进程PID,子进程中返回0失败返回-1并设置errno复制进程映像,在内核进程表中创建新的进程表项。子进程代码与父进程完全相同,同时子进程会复制父进程的数据(堆数据、栈数据、静态数据)新进...原创 2020-03-08 21:22:05 · 220 阅读 · 0 评论 -
Linux网络编程基础API——Linux高性能服务
socket地址API主机字节序和网络字节序字节序问题:(32位机)现代CPU累加器一次能装载4字节【一个整数】,这4字节在内存中的排列顺序会影响其被累加器装载成整数的值字节序分为大端字节序和小端字节序:字节序大端字节序小端字节序存储一个整数的高位字节存储在内存的低地址位低位字节存储在内存的高地址处整数的高位字节存储在内存的高地址处低位字节存储在内存的低地址处...原创 2020-02-29 21:05:36 · 257 阅读 · 0 评论 -
TCP协议详解——Linux高性能服务器
TCP协议较IP协议更为接近应用层,在应用程序中有更强的可操作性。传输层协议主要有两个:TCP、UDP。TCP服务的特点面向连接、字节流和可靠传输面向连接:使用TCP协议通信双方要先建立连接才能开始数据的读写。连接双方都要为连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。完成数据交换后通信双方必须断开连接以释放资源。TCP连接是全双工的,双方的数据读写可以通过一个连接进行。...原创 2020-02-23 18:56:37 · 643 阅读 · 0 评论 -
IP协议详解——Linux高性能服务
IP协议是TCP.IP协议族的核心协议,也是socket网络编程基础之一。IP服务的特点IP协议是TCP/IP协议族的动力,为上层提供无状态、无连接、不可靠的服务。无状态:IP通信双方不同步传输数据的状态信息,使得所有IP数据报的发送、传输、接收相互独立。缺点:无法处理乱序的、重复的数据报(因为IP数据报之间没有任何联系,接收端只要接收到完整IP数据报/IP分片的重组,就将数据部分【TC...原创 2020-02-21 18:55:22 · 334 阅读 · 0 评论 -
TCP/IP协议族——Linux高性能服务器
目前,TCP/IP协议族是Internet使用的主流协议族,它是一个分层、多协议的通信体系。TCP/IP协议族体系结构以及主要协议TCP/IP协议族是一个四层协议系统。每一层完成不同功能,通过若干协议实现、上层协议使用下层协议提供的服务。如图:数据链路层作用:实现网卡接口的网络驱动程序,以处理数据在物理媒介(eg:以太网、令牌环)上的传输。不同的物理网络有不同的电气特性,网络驱动程序隐藏...原创 2020-02-20 20:01:42 · 434 阅读 · 0 评论 -
计算机体系结构基础——Linux C编程一站式学习
搭配温故而知新看,全面深刻理解计算机体系结构内存&地址每个内存单元有一个地址,内存地址是从0开始编号的整数,CPU通过地址找到相应的内存单元,取其中的指令或者读写其中的数据。一个地址所对应的内存单元不能存很多东西,只能存一个字节,像int这种多字节的数据类型保存在内存中要占用连续的多个地址,这种情况下数据的地址是它所占内存单元的起始地址。CPUCPU在做什么?访问内存、设备CP...原创 2020-02-17 16:14:08 · 402 阅读 · 0 评论 -
温故而知新——程序员的自我修养
对于计算机软硬件的全面了解,包括CPU与外围设备连接方式、SMP&多核、计算机系统层次体系结构、怎么充分利用CPU、设备驱动、操作系统、虚拟空间映射物理空间、页映射、线程原创 2020-02-16 21:06:06 · 407 阅读 · 0 评论 -
计算机中数的表示——Linux C编程一站式学习
为什么计算机用二进制计算机是用数字电路搭成的,数字电路中只有1和0两种状态,只能逢二进一,所以是二进制。即计算机中1+1=10;不同进制之间的换算对于二进制换算为十进制:(A3A2A1A0)2=A3×23+A2×22+A1×21+A0×20对于(A3A2A1A0)2这样一个二进制数,最左边的A3位称为最高位(MSB),最右边的A0位称为最低位(LSB)。通常把LSB称为第0位而不是第1位。...原创 2020-02-15 14:54:49 · 558 阅读 · 0 评论 -
C语言入门总结——Linux C编程一站式学习
C的语法规则。1.源文件中所有函数定义之外可以出现哪些语法元素?全局变量、函数原型声明、宏定义、typedef和结构体、联合体定义、注释…2.函数定义之中可以出现哪些语法元素?局部变量定义,语句块,注释…3.语句有哪几种?表达式语句、函数调用语句、控制语句、复合语句、空语句。4.哪些语法元素需要遵循标识符的命名规则?标识符的命名规则即:必须用字母/下划线开头;只有下划线、字母、数字...原创 2020-02-14 16:57:51 · 2133 阅读 · 0 评论 -
栈与队列——Linux C编程一站式学习
数据结构的概念数据结构是数据的组织方式。程序中用到的数据都不是孤立的,而是有相互联系的,根据访问数据的需求不同,同样的数据可以有多种不同的组织方式。数据的组织方式包含了存储方式和访问方式这两层意思,二者是紧密联系的。比如说数组元素的存储空间是连续的。堆栈堆栈也是一组数据的集合,它的访问规则限制为Push(入栈)、Pop(出栈)两种操作。对于栈而言,先压栈的元素后出栈、后压栈的元素后先栈,...原创 2020-02-13 16:07:39 · 183 阅读 · 0 评论 -
排序与查找——Linux C编程一站式学习
算法的概念算法是将一组输入转化成一组输出的一系列计算步骤,其中每个步骤必须能在有限时间内完成。算法是用来解决一类计算问题的方法,具有通用性。插入排序插入排序采取增量式的策略,它的时间复杂度是O(n的平方)。类似于玩扑克,玩家每拿到一张牌都要插入到手中已有的牌里,使之从小到大排好序。在对数组进行插入排序时,要将插入点之后的数据依次往后移动一个单元。代码如下#include <ios...原创 2020-02-12 17:12:54 · 155 阅读 · 0 评论 -
gdb——Linux C编程一站式学习
gdb是我们常用的调试工具,调试的基本思想仍然是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环,根据现象推测错误在哪里.单步执行和跟踪函数调用单步执行命令描述backtrace(bt)查看各级函数调用及参数finish连续运行到当前函数返回为止,然后停下来等待命令frame(或f) 帧编号选择栈帧info(或i) l...原创 2020-02-11 16:30:15 · 190 阅读 · 0 评论 -
结构体——Linux C编程一站式学习
复合类型与结构体根据语法规则由基本类型组合而成的类型称为复合类型,例如字符串是由很多字符组成的。【最基本的、不可再分的数据类型称为基本类型,例如整型、浮点型】结构体就是一种数据类型的组合。如用结构体表示坐标系:定义标识符:struct complex{ double x,y;};//这里complex是一个标识符定义变量:struct complex{ double x,...原创 2020-02-10 16:37:39 · 250 阅读 · 0 评论 -
循环语句——Linux C编程一站式学习
while语句如上一节中用递归的方法解决计算n!这一迭代问题,不过虽然可以用递归实现,但是循环语句实现起来更为方便,如循环语句计算n!使用:while(控制表达式) 语句如果控制表达式的值为真,子语句就被执行,不断判断循环这一过程直到控制表达式的值为假,跳出循环。int factorial(int n){ int res=1; while(n>0) { res=res*n...原创 2020-02-04 16:40:52 · 149 阅读 · 0 评论 -
深入理解函数——Linux C编程一站式学习
return语句作用有返回值的函数:是提供整个函数的返回值,并结束当前函数返回到调用它的地方。无返回值的函数:检查到一个错误时提前结束当前函数的执行并返回。int equal(int a,int b){ if(a==b) return 1; else return 0;}理解函数返回一个值相当于定义一个和返回值类型相同的临时变量并用return后面的表达式来初始化。注...原创 2020-02-03 17:40:39 · 217 阅读 · 0 评论 -
分支语句——Linux C编程一站式学习
if语句使用:if(表达式) {…}[注:这个表达式也称为控制表达式]if和控制表达式改变了程序的控制流程,不再是从前到后顺序执行,而是根据不同的条件执行不同的语句,这种控制流程称为分支。if…else语句if语句可以带一个else子句。使用:if(控制表达式) {…}else{…}根据组合规则,if或if/else可以嵌套使用:if(控制表达式1){…}else if(控制表达式2){...原创 2020-02-02 12:54:47 · 129 阅读 · 0 评论 -
简单函数——Linux C编程一站式学习
数学函数在数学中学习过的函数在编程中可以继续使用,需要加上头文件math.h。#include <math.h>#include <stdio.h>int main(void){ double pi = 3.1416; printf("sin(pi/2)=%f ln1=%f\n", sin(pi/2), log(1.0)); //sin(pi/2)=1.0...原创 2020-01-20 14:34:55 · 257 阅读 · 0 评论 -
常量、变量和表达式——Linux C编程一站式学习
常量常量是程序中最基本的元素,有字符常量、整数常量、浮点数常量和枚举常量。字符常量使用字符常量时要用单引号括起来,如’}’,注意字符常量也可以是一个转义序列,例如’\n’,这时虽然单引号括了两个字符,但实际上只表示一个字符。字符型用charchar ch='c';printf("%c\n",ch);整数常量和浮点数常量计算机中整数和小数的内部表示方式不同,因而在C语言中是两种...原创 2020-01-18 16:24:30 · 337 阅读 · 0 评论 -
第一个程序——Linux C编程一站式学习
在Linux环境下编写程序创建文件vi命令编写文件其中/* … */结构是一个注释,表示程序的作用Linux下C语言编译用gcc命令原创 2020-01-18 15:39:36 · 245 阅读 · 0 评论 -
程序的调试——Linux C编程一站式学习
调试编程的过程中难免出错,程序中的错误叫做bug,而找到程序中的错误并且进行纠正的过程就叫做调试【debug】错误分类编译时错误编译器只能翻译语法正确的程序,否则将导致编译失败,无法生成可执行文件。对于编译器,只要有哪怕一个很小的语法错误,编译器就会输出一条错误提示信息然后罢工,你就得不到你想要的结果。语法错误是最简单最低级的错误,相比另外两种错误,语法错误解决起来要容易得多。运行时错...原创 2020-01-17 14:12:27 · 163 阅读 · 0 评论 -
自然语言、形式语言——Linux C编程一站式学习
自然语言自然语言就是人类讲的语言,比如汉语、英语,是自然进化而得来的。形式语言形式语言是为了特定应用而人为设计的语言。比如数学家用的数字和运算符号、化学家用的分子式。编程语言就属于形式语言,目的就是计算。具有严格的语法规则【由符号和结构的规则组成】自然语言和形式语言的不同某种意义上,形式语言和自然语言之间的不同正像诗歌和说明文的区别。歧义性自然语言充满歧义,人们通过上下文的线索和...原创 2020-01-17 13:59:50 · 357 阅读 · 0 评论 -
程序和编程语言——Linux C编程一站式学习
程序程序告诉计算机应该如何完成一个计算任务。【计算机是由数字电路组成的运算机器,可以对数字进行运算,而符号、声音、图像在计算机内部都是用数字表示的】程序是由一系列指令组成的【指令是指示计算机做某种运算的命令】,通常包括:输入、输出、基本运算、测试和分支、循环编程语言编程语言分为低级语言和高级语言。机器语言和汇编语言属于低级语言,直接用计算机指令编写程序。而C、C++、Java、Pyth...原创 2020-01-16 15:27:22 · 443 阅读 · 0 评论