
小题目整理
「已注销」
这个作者很懒,什么都没留下…
展开
-
进程三状态转换图
(1)运行:当一个进程在处理机上运行时,则称该进程处于运行状态。处于此状态的进程的数目小于等于处理器的数目,对于单处理机系统,处于运行状态的进程只有一个。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。 (2)就绪:当一个进程获得了除处理机以外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态。就绪进程可以按多个优先级来划分队列。例如,当一个进原创 2016-06-06 07:42:25 · 12867 阅读 · 0 评论 -
进程和线程的关系
线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程;进程和线程的关系:一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。资源分配给进程,同一进程的所有线程共享该进程的所有资源。线程在执行过程中,需要协作同步原创 2016-06-21 06:56:55 · 461 阅读 · 0 评论 -
有关虚函数(不能声明的和需要极力避免的)
首先看不能声明为virtual虚函数的情况: 普通函数(不能被覆盖) 友元函数(C++不支持友元函数继承) 内联函数(编译期间展开,虚函数是在运行期间绑定) 构造函数(没有对象不能使用构造函数,先有构造函数后有虚函数,虚函数是对对象的动作) 静态成员函数(只有一份大家共享) 再看需要避免的情况:-简明概括: 先析构子类再析构父类,如果父类析构函数有虚函数,会原创 2016-07-11 14:28:16 · 1019 阅读 · 0 评论 -
C++中的0长数组(柔性数组)
在标准C和C++中0长数组如charArray[0]是不允许使用的,因为这从语义逻辑上看,是完全没有意义的。但是,GUN中却允许使用,而且,很多时候,应用在了变长结构体中,如:StructPacket{Int state;Int len;Char cData[0]; //这里的0长结构体就为变长结构体提供了非常好的支持};首先对0长数组做一个解释:用途 :长度为0的数组的主要用途是为了满足需要变长原创 2016-06-14 09:09:43 · 704 阅读 · 0 评论 -
c++类的内存分布
有虚函数的类,前四个字节是虚函数的指针,然后是其他数据变量和成员变量原创 2016-07-11 21:23:51 · 542 阅读 · 0 评论 -
位操心常见经典用法
位操作包括: 与 & 或 | 非(取反)~ 异或 ^ 左移 << 右移 >> 使用位操作实现常用功能1 快速判断偶数,判断最低位是0还是1即可,比求模运算快 x%2 != 0 // x正负都可以判断;不能用x%2 == 1,因为如果x为负奇数,x%2=-1 x&0x1 == 0 //最好最快的方法,使用与正负数都可 2 交换两个数,不用原创 2016-06-05 11:03:59 · 1577 阅读 · 0 评论 -
赋值到指定的内存地址
题目: 如下哪一段代码不能给地址0xaae0275c赋值为1?() A. volatile int *p=(int *)0xaae0275c;*p=1 B. (volatile int *)0xaae0275c[0]=1 C.volatile int *p=(int *)0xaae0275c;p[0]=1 D. *(volatile int *)0xaae0275c=1原创 2016-07-12 22:34:59 · 6446 阅读 · 1 评论 -
Linux和Windows间进程通信方式整理
Linux进程间通信:管道、信号、消息队列、共享内存、信号量、套接字(socket) Linux线程间通信:互斥量(mutex),信号量,条件变量 Windows进程间通信:管道、消息队列、共享内存、信号量 (semaphore) 、套接字(socket) Windows线程间通信:互斥量(mutex),信号量(semaphore)、临界区(critical section)、事件(event原创 2016-07-11 09:46:14 · 1140 阅读 · 0 评论 -
Char转为int时高位符号扩展的问题
代码示例: static get_utili(constchar*p){intutil;…while(isspace((int)*p))//跳过空格++p;util=(int)*p++;…}现象&后果: 当传入的参数p指向的内容为0x9A、0XAB等内容(最高位为1)时,得到的int型变量util的值将会出错,因为char会进行符号扩展,使得0x9A(十进制的154)变成了-102转载 2016-06-15 21:50:04 · 2910 阅读 · 1 评论 -
虚拟内存 知识点整理
1.虚拟内存的大小虚存容量“极端情况下”受以下条件限制:内+外存总量计算机总线长度(地址寄存器位大小)故取1,2的最小值即为虚拟内存的大小 eg. 题目:段的逻辑地址形式是段号10位,段内地址20位,内存1MB,辅存10GB。那么虚拟存储器最大实际容量可能是解: 虚拟存储器最大实际容量= min(计算机地址,内存+辅存)。计算机地址= 2^ 10* 2^20=1024M 外存+辅存 =原创 2016-06-16 07:35:59 · 2121 阅读 · 0 评论 -
C++逗号运算符的作用
总的来说:逗号表达式没那么难,也很常用:逗号表达式无非是把若干个表达式“串联”起来。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值,逗号表达式最常用于循环语句(for语句)中。详细介绍如下:C++将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中。这是C++语转载 2016-06-13 19:30:35 · 8942 阅读 · 0 评论 -
公有、私有、保护总结
公用(public):访问权限最高;除派生类外,外部函数也可以直接访问(无论是成员变量还是成员函数)。私有(private):访问权限最低;只能是该类内部函数互相调用,派生类、外部函数都不能访问。保护(protect):访问权限中间;该类内部函数、派生类都能访问,外部类、外部函数不能访问 我们这样来记会更加容易一些,在继承时:不管采用哪种形式(public, protected或privat原创 2016-06-13 19:10:45 · 3863 阅读 · 1 评论 -
单缓冲 vs 双缓冲 处理数据时间计算方法
对于单缓冲:假定从磁盘把一块数据输入到缓冲区的时间为T,操作系统将该缓冲区中的数据传送到用户区的时间为M,而CPU对这一块数据处理的时间为 C。由于T和C是可以并行的,当T>C时,系统对每一块数据的处理时间为M十T,反之则为M+C,故可把系统对每一块数据的处理时间表示为Max(C, T)+M。对于双缓冲:系统处理一块数据的时间可以粗略地认为是MAC(C, T)。如果C<T,可使块设备连续输入(图中原创 2016-06-28 07:07:07 · 9952 阅读 · 0 评论 -
struct和nuion、类的补齐规则,以及sizeof求大小
/* 原则1、数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。 原则2、结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有stru原创 2016-03-11 07:58:25 · 1198 阅读 · 0 评论 -
进程与线程共享的内容整理
线程共享的内容包括:进程 代码段进程 数据段进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户 ID 与进程组 ID 线程独有的内容包括:线程 ID寄存器组的值线程的堆栈错误返回码线程的信号屏蔽码原创 2016-06-06 21:55:41 · 562 阅读 · 0 评论 -
RAID磁盘阵列
RAID 0:无差错控制的带区组要实现RAID0必须要有两个以上硬盘驱动器,RAID0实现了带区组,数据并不是保存在一个硬盘上,而是分成数据块保存在不同驱动器上。在所有的级别中,RAID 0的速度是最快的。但是RAID 0没有冗余功能的,如果一个磁盘(物理)损坏,则所有的数据都无法使用。RAID 1:镜象结构当主硬盘损坏时,镜像硬盘就可以代替主硬盘工作。镜像硬盘相当于一原创 2016-06-13 08:31:18 · 353 阅读 · 0 评论 -
进程与线程的区别
线程是指进程内的一个执行单元,也是进程内的可调度实体。线程与进程的区别:(1)地址空间:进程内的一个执行单元,进程至少一个线程,他们共享进程的地址空间,而进程有自己独立的地址空间(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程资源(3)线程是处理器调度的基本单位,但进程不是(4)二者皆可并发执行 进程和线程都是操作系统的程序运行的基本单元,系统利用该基本单元实现系统对应用的原创 2016-06-29 07:02:48 · 375 阅读 · 0 评论 -
C++中32位单精度浮点数有效数字是多少位?
单精度浮点数的有效位数是7位。双精度浮点数的有效位数是16位一个浮点数由三部分组成:符号位S、指数部分E(阶码)以及尾数部分M。单精度浮点数(float)总共用32位来表示浮点数,其中尾数用23位存储,加上小数点前有一位隐藏的1(IEEE754规约数表示法),`2^(23+1) = 16777216。因为 10^7 < 16777216 < 10^8,`所以说单精度浮点数的有效位数是7位。考原创 2016-06-29 07:36:00 · 13028 阅读 · 0 评论 -
c++运算符的重载
(1)只能使用成员函数重载的运算符有:=、()、[]、->、new、delete。(2)单目运算符最好重载为成员函数。(3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建议重载为成员函数。(4) 对于其它运算符,建议重载为友元函数。运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说原创 2016-06-29 07:39:20 · 597 阅读 · 0 评论 -
两个线程运行++a
题目:个线程并发执行以下代码,假设a是全局变量,初始值是1,那么以下输出中()是可能的。void foo ( ){ ++a printf("%d",a);} A. 3_2_ B. 2_3_ C. 3_3_ D. 2_2_答案:ABCD解析:++不能认为是原子操作,a是全局变量,在内存中,则++a一般被分为从内存取a到寄存器、+、回写到内存三步,考虑到并发。 设原创 2016-07-10 20:44:46 · 1320 阅读 · 0 评论 -
进程平均周转时间的计算
题目: 有4个进程A,B,C,D,设它们依次进入就绪队列,因相差时间很短可视为同时到达。4个进程按轮转法分别运行11,7,2,和4个时间单位,设时间片为1。四个进程的平均周转时间为 ()?分析 要理解周转时间的含义,所谓的周转时间就是进程从开始到结束所经历的时间; 平均周转时间就是所有进程的周转时间除以进程的个数就OK了。原创 2016-07-11 09:40:41 · 20394 阅读 · 0 评论 -
重载、覆盖、隐藏的区别
重载: 只有在 同一类定义中的同名成员函数才存在重载关系 ,主要特点是 函数的参数类型和数目有所不同 ,但 不能出现函数参数的个数和类型均相同 ,仅仅依靠返回值类型不同来区分的函数,这和普通函数的重载是完全一致的。另外,重载和成员函数是否是虚函数无关覆盖: 在派生类中覆盖基类中的同名函数,要求两个函数的参数个数、参数类型、返回类型都相同,且基类函数必须是虚函数。隐藏: 派生类中的函数原创 2016-06-03 08:27:49 · 364 阅读 · 0 评论 -
C++中map操作
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值。 一、map的说明 1 头文件 #include 2 定义 map my_Map; 或者是typedef map MY_MAP; MY_MAP my_Map; 3 插入转载 2016-06-16 07:53:48 · 401 阅读 · 0 评论 -
C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)1、cin 2、cin.get() 3、cin.getline() 4、getline() 5、gets() 6、getchar()附:cin.ignore();cin.get()//跳过一个字符,例如不转载 2016-06-16 08:26:10 · 319 阅读 · 0 评论 -
数据结构:有关广义表
广义表有如下三个特性:1.层次性:广义表的元素可以是子表,而子表的元素还可以是子表,由此,广义表是一个多层次的结构; 2.共享性:广义表可为其他表所共享。 3.递归表:广义表可以是其自身的一个子表。空广义表 vs 广义表表头为空广义表的表头为空,并不代表该广义表为空表。 例如: 广义表()和(())不同。前者是长度为0的空表,对其不能做求表头和表尾的运算;而后者是长度为l的非空表(只不过该表原创 2016-07-14 14:04:08 · 1238 阅读 · 0 评论 -
等差、等比数列求和公式
等比数列求和公式求和公式推导(1)Sn=a1+a2+a3+…+an(公比为q) (2)q*Sn=a1*q+a2*q+a3*q+…+an*q=a2+a3+a4+…+an+a(n+1) (3)Sn-q*Sn=(1-q)Sn=a1-a(n+1) (4)a(n+1)=a1*q^n (5)Sn=a1(1-q^n)/(1-q)(q≠1)等差数列求和公式Sn=(A1+An)n/2原创 2016-08-03 07:50:53 · 9649 阅读 · 1 评论 -
C++类对象空指针访问成员函数(静态绑定)
题目:class A{ public: void test(){printf("test A");}};int main(){ A*pA=NULL; pA->test();}结果是输出“test A”而不是程序崩溃,原因如下:一种解释: A*pA=null; pA->test();//当调用成员函数时,只是将实参null传给this指针test成员函数原创 2016-08-06 16:08:39 · 2788 阅读 · 0 评论 -
数据库四大范式整理
引言 数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。 设计范式是不是很难懂呢?非也,大学教材上给我们一堆数学公式我们当然看不懂,也记不住。所以我们很多人就根本不按照范式来设原创 2016-08-18 21:43:03 · 16051 阅读 · 6 评论 -
C++重载、覆盖、隐藏详细定义以及实际区别
成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不原创 2016-08-06 15:47:13 · 480 阅读 · 0 评论 -
件测试类型按开发阶段分为
1. 单元测试: 单元测试又称为模块测试,是针对软件设计的最小单位程序模块进行正确性检查的测试工作,单元测试需要从程序内部结构出发设计测试用例,多个模块可以平行地独立进行单元测试。2. 集成测试又称为组装测试或联合测试,在单元测试的基础上,需要将所有模块按照概要设计说明书和详细设计说明书的要求进行组装。3. 确认测试确认测试的目标是验证软件的功能和性能以及其他特性是否与用户的要求一致。确认测试一原创 2016-08-08 14:52:19 · 1086 阅读 · 0 评论 -
逻辑测试
逻辑测试覆盖是白盒测试法常用的技术。主要的覆盖标准有6种 强度由弱到强依次是:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖1. 条件覆盖CC(Condition Coverage)设计足够多的测试用例,运行被测程序,使得每一判定语句中每个逻辑条件的可能取值至少满足一次。条件覆盖率的公式:条件覆盖率=被评价到的条件取值的数量/条件取值的总数X100%[1] 条件覆盖的缺点:只原创 2016-08-08 14:41:43 · 4423 阅读 · 0 评论 -
柔性数组
对于变长数组和变长结构体,这是在C99才加入标准的。 对于变长数组,举个例子就能解释了:int main() { int n = 10; int arr[n];}对于变长结构体就比较复杂一点(也不算很复杂:))。很多人其实会有这种疑惑,就是为什么不用指针去代替变长结构体,比如:structNode{ intsize; char*data;//不用指针,二用柔性数组实原创 2016-06-28 07:03:29 · 486 阅读 · 0 评论 -
Http协议错误代码大全
错误代码(也称作状态代码),指为服务器所接收每个请求(网页点击)分配的 3 位数代码。多数有效网页点击都有状态代码 200(“正常”)。”网页未找到”错误会生产 404 错误。某些常见的代码以粗体显示。1xx(临时响应)用于表示临时响应并需要请求者执行操作才能继续的状态代码。代码 说明100(继续) 请求者应当继续提出请求。服务器返回此代码则意味着,服务器已收到了请求的第一部分,现正在等待接收其余原创 2016-08-12 23:10:37 · 6627 阅读 · 0 评论 -
右左法则----复杂指针解析(函数指针与数组指针)
右左法则不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则原文:The right-left rule:Start reading the declaration from the innermost parentheses,go right,and转载 2016-09-17 17:26:25 · 1549 阅读 · 1 评论 -
GET与POST区别
GET与POST区别 HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST(Ajax开发,关心的只有GET请求和POST请求 )。GET与POST方法有以下区别:(1) 在客户端, Get 方式在通过 URL 提交数据,数据 在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。(2) GET方式提交的数据最多只能有1024字节,而POST原创 2016-08-14 22:07:14 · 648 阅读 · 0 评论 -
C语言运算符优先级 之 快速记忆
先摘录谭浩强《C程序设计》对运算符优先级的两点说明:1. 同一优先级的运算符,运算次序由结合方向来决定。 例如: a) * 与 / 具有相同的优先级别,其结合方向为自左向右,因此3 * 5 / 4的运算次序是先乘后除; b) - 和 ++ 为同一优先级,结合方向为自右向左,因此 - i ++ 相当于 - ( i ++ )。2. 从上述表中可以大致归纳出各类运算转载 2016-07-08 08:04:49 · 623 阅读 · 0 评论 -
C语言中short 到 int 的扩展
C语言中变量以补码形式存放在内存中,正数的补码与原码相同,负数求补码方式为(符号位不变,其余各位取反,最后末尾加1); 32位机器:int 32位,short 16位。 x = 127,正数,原码:0111 1111,补码:0111 1111,扩展到32位高位补0,结果为0000007FH; Y = -9,负数,原码:1000 1001,补码:1111 01原创 2016-06-16 23:12:26 · 3158 阅读 · 0 评论 -
不发生死锁的设备最小数
题目: 某系统有 n 台互斥使用的同类设备,3 个并发进程需要 3,4,5 台设备,可确保系统不发生死锁的设备数 n 最小为?分析:假设3个进程分别为A,B,C,那么需要的最大的情况为:2,3,4此时再多一个资源就可以打破死锁的环境,所以为2+3+4+1=10详细说:极端状态下: 进程1(3台):申请到2台,无法工作; 进程2(4台):申请到3台,无法工作; 进程3(5台):申请到4原创 2016-06-17 08:30:50 · 10377 阅读 · 1 评论 -
Linux中的内存段
BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段:代码段(code segment/text s原创 2016-07-03 22:20:02 · 437 阅读 · 0 评论 -
通道、设备、设备控制器三者间关系
处理机 - 通道 - 设备控制器 - 设备原创 2016-07-04 08:17:01 · 7676 阅读 · 1 评论