按权展开求和n进制->十进制每一位八进制数与三位二进制数对应
除n取余法十进制->n进制每一位十六进制数与四位二进制数对应
计算机的基本单位
位(比特)bitb字节byteB千字节KB兆字节MB吉字节GB太字节TB
1B=8b1KB=1024B1MB=1024KB1GB=1024MB1TB=1024GB
最小的数据单位:bit,最小的存储单元:byte
进制加减法
加法:逢n进1(两位相加>n则减n进一)
减法:借一当n
进制范围区间的值算法:大减小+1
浮点数的表示
:N=M*RE,其中M表示尾数,E表示阶数,R表示基数
浮点数的运算
运算步骤:
CPU主要由运算器、控制器、寄存器组和内部总线等部件组成。
:执行算术运算和逻辑运算的功能,由算术逻辑单元(ALU)、累加寄存器(AC)、数据缓冲器(DR)和状态条件寄存器(PSW)组成
算术逻辑单元(ALU):负责处理数据,实现数据的算术运算和逻辑运算
累加寄存器(AC):为ALU提供一个工作区,将被x数暂存在AC中
数据缓冲器(DR):作为CPU和内存、外部设备之间数据传送的中转站
状态条件寄存器(PSW):状态标志和控制标志
控制器用于控制整个CPU的工作,它决定了计算机运行过程的自动化。它不仅要保证程序的正确执行,而且要能够处理异常事件。
指令由操作码(加减乘除)和地址码(数)组成
指令寄存器是对用户完全透明的
程序计数器(PC):内容是程序的一条指令的地址,取指令
地址寄存器(AR):保持当前CPU所访问的内存单元的地址,使用AR保存地址信息
指令译码器(ID):识别操作码
1.顺序执行方式:T=n3t
2.一次重叠执行方式:T=3t+(n-1)2t=(1+2n)t
3.二次重叠执行方式:T=3t+(n-1)t=(2+n)t
3.效率
:流水线的设备利用率称为流水线的效率
按寻址方式分类
按访问方式分类
相联存储器是一种按内容访问的存储器
高速缓存对于程序员来说时透明的,cache与主存地址的映射时由硬件自动完成的
地址映像方法
1.直接映像冲突大,导致重写
2.全相联映像调入任何一块空间冲突最小
3.组相联映像组与组映射冲突较小
中断向量:提供中断服务程序的入口地址
保存现场:返回执行源程序
概念:
串联系统:
$R=RR···Rn$
并联系统:
$R=1-(1-R)(1-R)···(1-Rn)$
码距:指一个编码系统中任意两个合法编码之间至少有多少个二进制位不同,码距为2只能检错,码距大于等于3,才有可能纠错
主要特征包括:顺序性、封闭性和可再现性。
信号量按p下标顺序填写
(1)失去了程序的封闭性。(2)程序和机器的执行程序的活动不再一一对应。
(3)并发程序间的相互制约性。
I2与C1并行执行;I3、C2与P1并行执行:C3与P2并行执行
同步是合作进程间的直接制约问题,互斥是申请临界资源进程间的间接制约问题
信号量是一个整型变量,根据控制对象的不同被赋予不同的值信号量分为如下两类:1.公用信号量。实现进程间的互斥,初值为1或资源的数目2.私用信号量。实现进程间的同步,初值为0或某个正整数信号量S的物理意义:S>=0表示某资源的可用数若;S<0,则其绝对值表示阻塞队列中等待该资源的进程数。
p操作表示申请一个资源,v操作表示释放一个资源
P操作的定义:S=S-1,则执行P操作的进程继续执行;若S<0,则置该进程为阻塞状态(因为无可用资源),并将其插入阻塞队列
V操作定义:S=S+1,若S>0,则执行V操作的进程继续执行;若S<=0,则从阻塞队列中唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续。
互斥情况,pv成对存在
最典型的同步问题:单缓冲区的生产者和消费者
当有n个进程,m个资源,且每个进程所需要的资源数为k,并且系统采用的分配策略是轮流地为每个进程分配资源时,判断是否发生死锁的公式如下:$$m>=n*(k-1)+1$$死锁的处理策略主要有4种:鸵鸟策略(即不理睬策略)、预防策略、避免策略和检测与解除死锁。
线程作为调度和分配的基本单位,进程作为独立分配资源的单位
在多道程序系统中,进程在处理器上交替运行,状态也不断地发生变化,因此进程一般有3种基本状态:运行、就绪和阻塞。
(T+M)*n+C
T*n+M+C
全文件名:绝对路径+文件名
绝对路径:从始至终
相对路径:当前路径开始
:用二进制的一位来表示一个物理块的使用情况
这种方法的主要特点是位示图的大小由磁盘空间的大小(物理块总数)决定位示图的描述能力强,适合各种物理结构。
算物理块号:n*字的位数(32)~~(n+1)*字的位数-1
1.在同一进程中的各个线程都可以共享该进程所拥有的资源,
:层次、网状、关系和星状
关系模型:采用二维表结构表达实体类型及实体间联系的数据模型,多个关系模式组成,而一个关系模式是对关系的描述(关系名(属性1,…,属性n)),一个关系是一个二维表
R:
:R是关系名;
U是一组属性;
F为属性组U上的一组数据依赖;A->B:A决定B或者B依赖A
(1)函数依赖。则称X函数决定Y或Y函数依赖于X,记作X→Y。(2)非平凡的函数依赖。如果X→Y,但Y¢X,则称X→Y是非平凡的函数依赖。一般情况下,总是讨论非平凡的函数依赖。(3)平凡的函数依赖。如果X→Y,但Y包含X,则称XY是平凡的函数依赖。(4)完全函数依赖。在R(U)中,如果X→Y,并且对于X的任何一个真子集X'都有X'不能决定Y,则称Y对X完全函数依赖,记作X-→Y。例如,给定一个学生选课关系SC(Sno,Cno,G),可以得到F=((Sno,Cno)→G),对(Sno,Cno)中的任何一个真子集Sno或Cno都不能决定G,所以,G完全依赖于Sno、Cno。(5)部分函数依赖。如果X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖◇记作XY。部分函数依赖也称为局部函数依赖。(6)传递依赖。在R(U,F)中,如果X→Y,Y不包含于X,Y→Z,则称Z对X传递依赖,记作:X->Z。
(7)函数依赖的公理系统(Armstrong公理系统)。设关系模式R(U,F),其中U为属性集,F是U上的一组函数依赖,那么有以下推理规则。A3传递律:若X→Y,Y→Z为F所蕴涵,则X→Z为F所蕴涵。根据上述3条推理规则又可推出下述3条推理规则。合并规则:若X→Y,X→Z,则X→YZ为F所蕴涵。
伪传递率:若X→Y,WY→Z,则XW→Z为F所蕴涵。
分解规则:若X→Y,Z(Z是Y的子集)包含于Y,则X→Z为F所蕴涵。
找函数依赖中左边没有被决定的属性(就是右边没有出现过的属性),大概率是候选键
候选码(或候选键):属性或属性组合,其值能够唯一地标识一个元组。
主码(或主键):在一个关系中可能有多个候选码,从中选择一个作为主码。主属性:包含在任何候选码中的属性称为主属性,不包含在任何候选码中的属性称为非码属性。外码(或外键):如果一个关系(sc)中的属性(sno)或属性组并非该关系(sc)的码,但它们是另外一个关系(s)的码,则称其为该关系的外码。全码:关系模式的所有属性组是这个关系模式的候选码,称为全码。超码(超键):一个包含码的属性集称为超码,例如学号是码,则(学号,姓名)就是一个超码。
数据库系统在三级模式之间提供了两级映像:模式/内模式映像、外模式/模式映像。保证了数据库中的数据具有较
实体完整性:关系中主码不能为空,主码中属性即主属性不能取空置值
参照完整性:外码
(1)关系的并关系R和关系S的所有元组合并,再删去重复的元组,组成一个新关系,称为R和S的并,记为RUS。(2)关系的差关系R和关系S的差是由属于R而不属于S的所有元组组成的集合,即关系R中删去与关系S中相同的元组,组成一个新关系,记为R-S。(3)关系的交关系R和关系S的交是由既属于R又属于S的元组组成的集合,即在两个关系R与S中取相同的元组,组成一个新关系,记为RNS。有RNS=R-(R-S)成立。
(4)笛卡尔积
两个关系R和S的笛卡尔积记为RxS;列:n+m;行:nxm
投影(Projection)投影运算是从关系的垂直方向进行运算,选择(Selection)选择运算是从关系的水平方向进行运算,
1.theat连接
theat连接可以由基本的关系运算笛卡尔积和选取运算导出
2.等值连接
3.自然连接
:除去重复属性的等值连接,它是连接运算的一个特例
具体计算过程:
①计算RxS;②设R和S的公共属性(多个公共属性并且&&)是A1…Ak,挑选RxS中满足R.A1=S.A1…R.Ak=S.Ak的那些元组;
③去掉S.A1…S.Ak这些列(保留RA1…RAk)。
4.左外连接(右表不匹配填空null)、右外连接(左表不匹配填空null)
全外连接:左外连接和右外连接拼接
投影和选择:sql语言不支持列的序号
笛卡尔积:RxS->fromR,S
自然连接:选择和投影的复合使用
DDL(DataDefinitionLanguage,数据定义语言):在数据库系统中,每一个数据库、数据库中的表、视图和索引等都是数据库对象。要建立和删除一个数据库对象,都可以通过SQL语言来完成。DDL包括CREATE、ALTER和DROP等。DML(DataManipulationLanguage,数据操纵语言):DML是指用来添加、修改和删除数据库中数据的语句,包括INSERT(插入)、DELETE(删除)和UPDATE(更新)等。DQL(DataQueryLanguage,数据查询语言):查询是数据库的基本功能,查询操作通过SQL数据查询语言来实现,例如,用SELECT查询表中的内容。DCL(DataControlLanguage,数据控制语言):DCL包括数据库对象的权限管理和事务管理等。
orderby
1.条件有聚合函数要用having,where后面不能跟聚合函数
2.select后有几个字段,若要分组(groupby)则就要将前面几个字段分组
3.当WHERE子句、GROUPBY子句、HAVING子句和聚合函数同时出现在一个查询中时,SELECT命令的执行顺序如下:①执行WHERE子句,从表中选取行。②由GROUPBY对选取的行进行分组。③执行聚合函数。④执行HAVING子句选取满足条件的分组。
先子查询后主查询
union:并;intersect:交;except:差
eg;GRANTALLPRIVILEGESONTABLES.PJTOUserl,User2;
withgrantoption:获得了权限的用户还可以将权限赋给其他用户
语句格式:
CREATEVIEW视图名(列表名)ASSELECT查询子句[WITHCHECKOPTION]注意在视图的创建中必须遵循以下规定。1)子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDERBY子句和DISTINCT短语。2)WITHCHECKOPTION表示对UPDATF、INSERT、DELETE操作时保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)
3)"WITHGRANTOPTION"子句,那么获得了权限的用户,还可以将该权限赋给其他用户。
语句格式:DROPVIEW视图名
内模式:定义所有的内部记录类型、索引和文件的组织方式
候选码中包含的属性称为主属性、不包含在候选码中的属性称为非主属性。若候选码多于一个,可以选定其中的一个为主码。
定义:若关系模式R每一个分量是不可再分的数据项,则关系模式R属于第一范式。1NF不能排除数据冗余和更新异常(修改、插入:实体完整性;删除异常)等问题,因为其中可能存在部分函数依赖。
定义:若关系模式R∈1NF,且每一个非主属性完全依赖于候选码,则关系模式R∈2NF。当1NF消除了非主属性对候选码的部分函数依赖,则称为2NF。可能存在数据冗余和更新异常等问题,因为其中可能存在传递依赖。
3NF消除了主属性对候选码的部分依赖和传递依赖由BCNF的定义可以得到结论,一个满足BCNF的关系模式有:1)所有非主属性对每一个码都是完全函数依赖。2)所有的主属性对每一个不包含它的码,也是完全函数依赖。3)没有任何属性完全函数依赖于非码的任何一组属性。一个满足BCNF的关系模式R已消除了插入和删除异常。
:收集用户需求,确定系统边界,逻辑设计和物理设计以及应用程序的设计以我们的需求分析的一个结果为依据
需求分析的成果是系统需求说明书,主要包括数据流图、数据字典和需求说明文档
:选择局部应用、逐一设计分E-R图(属性、命名和结构冲突)和E-R图合并(解决冲突)
①属性冲突,同一属性可能会存在于不同的分E-R图,由于设计人员不同或是出发点不同,对属性的类型、取值范围和数据单位等可能会不一致②命名冲突。相同意义的属性在不同的分E-R图上有着不同的命名,或是名称相同的属性在不同的分E-R图中代表着不同的意义,这些也要进行统一。③结构冲突。同一实体在不同的分E-R图中有不同的属性,同一对象在某一分E-R图中被抽象为实体,而在另一分E-R图中又被抽象为属性,需要统一。
在E-R模型中,实体用矩形表示,通常矩形框内写明实体名。实体是现实世界中可以区别于其他对象的"事件"或"物体"。
弱实体:一个实体的存在必须以另一个实体为前提。eg:家属的存在必须以职工为前提
在E-R模型中,联系用菱形表示,通常菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标注上联系的类型(1:1、1:n或m:n)。
属性是实体某方面的特性。E-R模型中的属性有以下分类:
(1)简单属性和复合属性。简单属性是原子的、不可再分的,复合属性可以细分为更小的部分(即划分为别的属性)。
(2)单值属性和多值属性。在前面所举的例子中,定义的属性对于一个特定的实体都只有单独的一个值。
(3)NULL属性。当实体在某个属性上没有值或属性值未知时,使用NULL值,表示无意义或不知道。
:E-R图->关系模型,规范化
1)实体向关系模式的转换将E-R图中的实体逐一转换成为一个关系模式,实体名对应关系模式的名称,实体的属性转换成关系模式的属性,实体标识符就是关系的码(键)。2)联系向关系模式的转换E-R图中的联系有3种:一对一联系(1:1)、一对多联系(1:n)和多对多联系(m:n),针对这3种不同的联系,转换方法如下。(1)一对一联系的转换。一对联系有两种方式向关系模式进行转换。一种方式是将联系转换成一个独立的关系模式,关系模式的名称取联系的名称,关系模式的属性包括该联系所关联的两个实体的码及联系的属性,关系的码取自任一方实体的码;
另一种方式是将联系归并到关联的两个实体的任一方,给待归并的一方实体属性集中增加另一方实体的码和该联系的属性即可,归并后的实体码保持不变。
(2)一对多联系的转换。一种方式是将联系转换成一个独立的关系模式,关系模式的名称取联系的名称,关系模式的属性取该联系所关联的两个实体的码及联系的属性,关系的码是多方实体的码;
另一种方式是将联系归并到关联的两个实体的多方,给待归并的多方实体属性集中增加一方实体的码和该联系的属性即可,归并后的多方实体码保持不变。
(3)多对多联系的转换。多对多联系只能转换成一个独立的关系模式,关系模式的名称取联系的名称,关系模式的属性取该联系所关联的两个多方实体的码及联系的属性,关系的码是多方实体的码构成的属性组。
事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(urability)。这4个特性也称事务的ACID性质。
事务恢复有以下3个步骤。(1)反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。(2)对事务的更新操作执行逆操作。(3)继续反向扫描日志文件,查找该事务的其他更新操作,并做同样的处理,直到事务的开始标志。
并发控制的主要技术是封锁。基本封锁的类型有排它锁(简称X锁或写锁)和共享锁(简称S锁或读锁)。1)封锁(1)排它锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁。(2)共享锁。若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A进行任何修改。
分片透明:指用户或应用程序不需要知道逻辑上访问的表具体是怎么分块存储的
复制透明:指采用复制技术的分布方法,用户不需要知道数据是复制到哪些节点,如何复制的。位置透明:指用户无须知道数据存放的物理位置逻辑透明:指用户或应用程序无需知道局部场地使用的是哪种数据模型
共享性:指数据存储在不同的结点数据共享自治性:指每结点对本地数据都能独立管理可用性:指当某一场地故障时,系统可以使用其他场地上的副本而不至于使整个系统瘫痪分布性:指数据在不同场地上的存储
数据库设计:
实体用矩形表示,通常矩形框内写明实体名。
联系用菱形表示,通常菱形框内写明联系名。
属性用椭圆表示
1:1:
1:*:
*:*:转关系模式
职员实体是飞行员、机械师和管理员实体的超类,超类和子类之间具有继承关系。
超类、子类实体都可转换为一个关系,并将超类实体的主码加到子类实体中。
√是可隔离,×是不可隔离
IP所提供的服务通常被认为是无连接的和不可靠的
ARP的作用是将IP地址转换为物理地址(MAC地址),RARP的作用是将物理地址转换为IP地址
广播发送请求(ARPRequest);单播发送响应(ARPResponse)
可靠传输、连接管理、差错校验和重传、流量控制、拥塞控制、端口寻址,其中流量控制采用的是:可变大小的滑动窗口协议。
在IP地址中,全0代表的是网络,全1代表的是广播
A类网络地址占有1个字节(8位),定义最高位为0来标识此类地址,余下7位为真正的网络地址,支持1~126个网络。后面的3个字节(24位)为主机地址,共提供224-2(全0的主机地址和全1的广播地址)个端点的寻址。A类网络地址第一个字节的十进制值为000~127。
B类网络地址占有两个字节,使用最高两位为10来标识此类地址,其余14位为真正的网络地址,主机地址占后面的两个字节(16位),所以B类全部的地址有(214-2)X(216-2)=16382X65534个。B类网络地址第一个字节的十进制值为128~191。
C类网络地址占有3个字节,它是最通用的Internet地址。使用最高三位为110来标识此类地址,其余21位为真正的网络地址,因此C类地址支持221-2个网络。主机地址占最后1个字节,每个网络可多达28-2个主机。C类网络地址第一个字节的士进制值为192~223。
在一个字段内,1的出现表明一个字段包含所有或部分网络地址,0表明主机地址位置
ipconfig/release:DHCP客户端手工释放IP地址
ipconfig/flushdns:清除本地DNS缓存内容
ipconfig/displaydns:显示本地DNS内容
ipconfig/registerdns:DNS客户端手工向服务器进行注册
ipconfig:显示所有网络适配器的IP地址、子网掩码和缺省网关值
ipconfig/all:显示所有网络适配器的完整TCP/IP配置信息,包括DHCP服务是否已启动
ipconfig/renew:DHCP客户端手工向服务器刷新请求(重新申请IP地址)
协议名://主机名.域名.域名后缀.域名分类/目录/网页文件IPv6128位地址空间、IPv432位地址空间。
当Windows服务器收到一个IP数据包时,先查找主机路由,这些路由查找再查找网络路由(直连网络和远程网络),失败时,最后才查找默认路由
解释器:翻译源程序时不生产独立的目标程序。
编译器:翻译时将源程序翻译成独立保存的目标程序。
许多程序设计语言规定,程序中的数据必须具有类型,其作用是:
函数的定义包括两部分:函数首部和函数体。函数的定义描述了函数做什么和怎么做。
函数定义的一般形式为:
返回值的类型函数名(形式参数表)//函数首部函数名(实参表);
{
函数体;
}
(1)值调用(CallbyValue)。若实现函数调用时将实参的值传递给相应的形参,则称为是传值调用。在这种方式下形参不能向实参传递信息。
(2)引用调用(CallbyReference)。引用是C++中引入的概念,当形式参数为引用类型时,形参名实际上是实参的别名,函数中对形参的访问和修改实际上就是针对相应实参所做的访问和改变。
传值调用:
将实参的值传递给形参,实参可以是变量、常量和表达式。
不可以实现形参和实参间双向传递数据的效果。
传引用(地址)调用:
将实参的地址传递给形参,形参必须有地址,实参不能是常量(值,无存储单元),表达式。可以实现形参和实参间双向传递数据的效果,即改变形参的值同时也改变了实参的值。
编译方式:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成解释方式:词法分析、语法分析、语义分析
编译器和解释器都不可省略词法分析、语法分析、语义分析且顺序不可交换即词法分析、语法分析、语义分析是必须的。
编译器方式中中间代码生成和代码优化不是必要,可省略。即编译器方式可以在词法分析、语法分析、语义分析阶段后直接生成目标代码
1)词法分析
输入:源程序
输出:记号流
词法分析阶段的主要作用是分析构成程序的字符及由字符按照构造规则构成的符号,是否符合程序语言的规定。
2)语法分析
输入:记号流
输出:语法树(分析树)
语义分析阶段可以发现程序中所有的语法错误
语法分析阶段的主要作用是对各条语句的结构进行合法性分析,分析程序中的句子结构是否正确。
自上而下语法分析法:递归下降分析法和预测分析法
自下而上语法分析法:移进-归约分析法
3)语义分析
输入:语法树(分析树)
语义分析阶段的主要作用是进行类型分析和检查
语义分析阶段不能发现程序中所有的语义错误
语义分析阶段可以发现静态语义(语法制导翻译)错误,不能发现动态语义错误,动态语义错误(除0或者死循环)运行时才能发现
4)中间代码生成常见的中间代码有:后缀式、三地址码、三元式、四元式和树(图)等形式。
中间代码与具体的机器无关(不依赖具体的机器),可以将不同的高级程序语言翻译成同一种中间代码。
中间代码可以跨平台。
因为与具体的机器无关,使用中间代码有利于进行与机器无关的优化处理和提高编译程序的可移植性。
最常用的一种中间代码
是与汇编语言的指令非常相似的三地址码,其实现方式常采用四元式,后缀式、树等形式的中间代码。
6)目标代码生成
寄存器的分配工作处于目标代码生成阶段
*:代表出现0次或多次
是词法分析的一个工具,它能正确地识别正规集
确定的有限自动机(DFA):对每一个状态来说识别字符后转移的状态是唯一的
不确定的有限自动机(NFA):对每一个状态来说识别字符后转移的状态是不确定的
:是大多数程序设计语言的语法规则
大写字母是非终结符号,小写字母是终结符号
中缀表达式:ab
后缀表达式:ab
优先级(优先级相同,从右往左):1.()2.x/3.+-
中缀转后缀:ab->ab
后缀转中缀:从左往右找操作数(先把其转成后缀,再进行后面的操作。栈的方式,数字入栈,遇到操作数,先把入了栈的数字拿出来放在右边,在往栈里拿一个数字放在左边,把操作数放在中间,然后再把这个组合当作一个整体放回栈里面,依次反复)
就是数据结构的中后序遍历
数据流图的基本图形元素包括数据流、加工、数据存储和外部实体。
外部实体:当前系统之外的人、物、外部系统
人:学生、老师、员工、主管、医生、客户、供应商......
物:传感器、控制器、单车、车辆、采购部门......
外部系统:支付系统、车辆交易系统、库存管理系统、道闸控制系统......
数据存储:存储数据和提供数据,存储加工的输出数据和提供加工的输入数据
加工:将输入数据处理后得到输出数据
数据流的起点或终点必须有一个是加工
问什么的组成的类题型:用加号加起来表示
找实体名称
写法:E1:病人E2:护理人员E3:医生
找数据存储名称
写法:D1:XX表XX文件
D1:销售订单表D2:库存表D3:生产计划表D4:配方表D5:采购订单表
题型:
三个解题方法
答题格式和注意事项
数据流名称:生产计划
①起点:D3终点:3
②起点:生产计划表终点:生产
如何保持数据流图平衡
父图中加工的输入输出数据流必须与子图中的输入输出数据流在数量上和名字上相同;
父图中的一个输入(输出)数据流对应子图中几个输入(输出)数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一条数据流。
结构化语言
:指作者对其创作的作品享有的人身权和财产权;
财产权:除人身权外的权都是财产权
主体:享有著作权的人
客体:指著作权法保护的计算机软件著作权的范围(受保护的对象)
客体分为:
:工作所需得出的项目或者使用单位的设备完成的作品都归单位所有,本人只享有署名权
:有合同就按合同走,无书面合同著作权归受委托方享有
:先申请先得,同一天申请则协商
注册后10年有效期限,在期限到期前六个月可以续展后又是10年有效期
谁先注册商标权归谁,同一天注册谁先使用商标权归谁
面向对象=对象(Object)+分类(Classification)+继承(Inheritance)+通过消息的通信
:实体类、接口类(边界类)和控制类。实体类的对象表示现实世界中真实的实体。接口类(边界类)的对象为用户提供一种与系统合作交互的方式,分为人和系统两大类,控制类的对象用来控制活动流,充当协调者。
对象通常可由对象名、属性和方法3个部分组成。
对象之间进行通信的一种构造叫作消息。当一个消息发送给某个对象时,包含要求接收对象去执行某些活动的信息。接收到信息的对象经过解释,然后予以响应。这种通信机制称为消息传递。发送消息的对象不需要知道接收消息的对象如何对请求予以响应。例如,假设ml是类Manager的一个实例(或对象),当外界要求把这个对象所代表的那位经理的级别改变为2时,就应以下面的方式向这个对象发出一条消息:ml.ChangeLevel(2);
方法名相同参数个数不同/参数类型不同/参数类型顺序不同
一个对象把属性和行为封装为一个整体。封装是一种信息隐蔽技术,它的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。
1.子继承父
2.子加入自己的属性和方法
3.子重写覆盖父
不同的对象收到同一消息可以产生完全不同的结果,这一现象称为多态(Polymorphism)。在使用多态的时候,用户可以发送一个通用的消息,而实现的细节则由接收对象自行决定。这样,同一消息就可以调用不同的方法。多态的实现受到继承的支持,利用类的继承的层次关系,把具有通用功能的消息存放在高层次,而不同的实现这一功能的行为放在较低层次,在这些低层次上生成的对象能够给通用消息以不同的响应。
多态有不同的形式,分为了四类:
静态绑定是在编译时进行的,动态绑定则是在运行时进行的。
动态绑定是和类的继承以及多态相联系的。
因此在运行过程中,当一个对象发送消息请要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定。
共同封闭原则:包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。
共同重用原则:一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
分析软件(系统)做什么
包含5个活动:认定对象(名词短语)、组织对象、描述对象间的相互作用、确定对象的操作(动词短语)、定义对象的内部信息。
理解解决方案,实现系统的实现
面向对象设计的活动(OOD在复用OOA模型的基础上,包含与OOA对应如下五个活动):
面向对象软件的测试可分为4个层次:算法层、类层、模板层和系统层
UML中有4中事物:
UML中有4种关系:依赖、关联、泛化和实现。
对系统的静态方面进行建模
类图(ClassDiagram)展现了一组对象、接口、协作和它们之间的关系。
符号:
+:public公有的
-:private私有的
#:protected受保护的
~:package包的
通常以下述3种方式之一使用类图:
对象图(ObjectDiagram)展现了某一时刻一组对象以及它们之间的关系,描述了在类图中所建立的事物的实例的静态快照。
用例图(UseCaseDiagram)展现了一组用例、参与制(Actor)以及它们之间的关系。
一个用例执行的时候,可能会发生一些特殊的情况或可选的情况,这种情况就是这个用例的扩展用例。
参与者:参与者是与系统交互的外部实体,可能是使用者,也可能是与系统交互的外部系统、基础设备等。
用例:用例是从用户角度描述系统的行为,它将系统的一个功能描述成一系列的事件,这些事件最终对操作者产生有价值的观测结果。用例是一个类,它代表一类功能而不是使用该功能的某一具体实例。
之间的关系:
用例图用于对系统的静态用例视图进行建模。
可用以下两种方式来使用用例图:
用例图的描述
交互图用于对系统的动态方面进行建模。一张交互图表现的是一个交互,由一组对象和一个用例它们之间的关系组成。包含它们之间可能传递的消息。
状态图(StateDiagram)展现了一个状态机,它由状态、转换、事件和活动组成。一种对象
可以用状态图对系统的动态方面建模。当对系统、类或用例的动态方面建模时,通常是对反应型对象建模。
定义的状态主要有:初态(即初始状态)、终态(即最终状态)和中间状态。一张状态图中只能有一个初态,而终态可以没有,也可以有多个
三种标准事件:entry、exit、do
事件是在某个特定时刻发生的事情,它是对引起系统做动作或(和)从一个状态转换到另一个状态的外界事件的抽象。
转换包括两个状态(源状态,目标状态)
监护条件只有在相应的事件发生时才进行检查
转换(迁移)包含事件,监护条件,两个状态
转换(迁移):事件,监护条件和动作都属于转换(迁移)
事件触发转换(迁移)
活动由若干个动作组成
活动(动作)可以在状态内执行,也可以在状态(迁移)转换时执行。
监护条件是一个布尔表达式。
活动图(ActivityDiagram)是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程。
活动图一般包括活动状态和动作状态、转换和对象。
通常有两种使用活动图的方式:
构件图(ComponentDiagram)展现了一组构件之间的组织和依赖。
构件图专注于系统的静态实现试图。
部署图(DeploymentDiagram)是用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件(制品)的配置。通常一个节点包含一个或多个组件,其依赖关系类似于包图。
设计模式基本要素:
简单工厂模式属创建型模式,但不属于23种设计模式之一。
/***简单工厂模式*/publicclassSimpleFactory{publicstaticvoidmain(String[]args){ProductproductA=Factory.createProduct("A");productA.info();ProductproductB=Factory.createProduct("B");productB.info();}}classFactory{publicstaticProductcreateProduct(Stringtype){Productproduct=null;switch(type){case"A":product=newProductA();break;case"B":product=newProductB();break;default:System.out.println("没有"+type+"类型的产品!");returnnull;}returnproduct;}}abstractclassProduct{publicabstractvoidinfo();}classProductAextendsProduct{@Overridepublicvoidinfo(){System.out.println("产品的信息:A");}}classProductBextendsProduct{@Overridepublicvoidinfo(){System.out.println("产品的信息:B");}}2.FactoryMethod(工厂方法)1)意图
定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。
2)结构
/***工厂方法模式*/publicclassFactoryMethod{publicstaticvoidmain(String[]args){//父类对象名=new子类();FactoryfactoryA=newFactoryA();ProductproductA=factoryA.createProduct();productA.info();FactoryfactoryB=newFactoryB();ProductproductB=factoryB.createProduct();productB.info();}}interfaceFactory{ProductcreateProduct();}classFactoryAimplementsFactory{@OverridepublicProductcreateProduct(){returnnewProductA();}}classFactoryBimplementsFactory{@OverridepublicProductcreateProduct(){returnnewProductB();}}interfaceProduct{voidinfo();}classProductAimplementsProduct{@Overridepublicvoidinfo(){System.out.println("产品的信息:A");}}classProductBimplementsProduct{@Overridepublicvoidinfo(){System.out.println("产品的信息:B");}}3)适用性
FactoryMethod模式适用于:
1)意图
AbstractFactory模式适用于:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
Builder模式适用于:
用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
其中:
/***原型模式*/publicclassMain{publicstaticvoidmain(String[]args){Productproduct1=newProduct(2022,5.28);System.out.println(product1.getId()+""+product1.getPrice());Productproduct2=(Product)product1.Chlone();System.out.println(product2.getId()+""+product2.getPrice());}}interfacePrototype{ObjectChlone();}classProductimplementsPrototype{privateintid;privatedoubleprice;publicProduct(){}publicProduct(intid,doubleprice){this.id=id;this.price=price;}publicintgetId(){returnid;}publicdoublegetPrice(){returnprice;}@OverridepublicObjectChlone(){Productobject=newProduct();object.id=this.id;object.price=this.price;returnobject;}}3)适用性
Prototype模式适用于:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
其中:Singleton指定一个Instance操作,允许客户访问它的唯一实例,Instance是一个类
操作:可能负责创建它自己的唯一实例。
3)适用性Singleton模式适用于:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
/***适配器模式*/publicclassAdapterPattern{publicstaticvoidmain(String[]args){Targettarget=newAdapter();target.Request();}}classTarget{publicvoidRequest(){System.out.println("普通请求~");}}/***适配器*/classAdapterextendsTarget{privateAdapteeadaptee=newAdaptee();@OverridepublicvoidRequest(){adaptee.SpecificRequest();}}classAdaptee{publicvoidSpecificRequest(){System.out.println("特殊请求~");}}3)适用性
Adapter模式适用于:
将抽象部分与其实现部分分离,使它们都可以独立地变化。
/***桥接模式*/publicclassBridgePattern{publicstaticvoidmain(String[]args){ProductproductA=newProductA();ProductproductB=newProductA();Colorred=newRed();productA.setName("产品A");productA.setColor(red);productA.Operation();Blueblue=newBlue();productB.setName("产品B");productB.setColor(blue);productB.Operation();}}abstractclassProduct{privateStringname;protectedColorcolor;publicvoidsetName(Stringname){this.name=name;}publicStringgetName(){returnname;}publicvoidsetColor(Colorcolor){this.color=color;}publicabstractvoidOperation();}interfaceColor{voidOperationImpl(Stringname);}classProductAextendsProduct{@OverridepublicvoidOperation(){color.OperationImpl(this.getName());}}classRedimplementsColor{@OverridepublicvoidOperationImpl(Stringname){System.out.println(name+":红色");}}classBlueimplementsColor{@OverridepublicvoidOperationImpl(Stringname){System.out.println(name+":蓝色");}}3)适用性(了解)
Bridge模式适用于:
不希望在抽象和它的实现部分之间有一个固定的绑定关系。类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。对一个抽象的实现部分的修改应对客户不产生影响,即客户代码不必重新编译。(C++)想对客户完全隐藏抽象的实现部分。有许多类要生成的类层次结构。想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。
将对象组合成树型结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。
Composite模式下适用于:
动态地给一个对象添加一些额外的职责。就增加功能而言,Decorator模式比生成子类更加灵活。
/***装饰器模式*/publicclassDecoratorPattern{publicstaticvoidmain(String[]args){Personzhangsan=newStudent("张三");zhangsan=newDecoratorA(zhangsan);zhangsan=newDecoratorB(zhangsan);zhangsan.Operation();System.out.println("==========分割线==============");//对像链Personlisi=newDecoratorB(newDecoratorA(newStudent("李四")));lisi.Operation();}}abstractclassDecoratorextendsPerson{protectedPersonperson;}classDecoratorAextendsDecorator{publicDecoratorA(Personperson){this.person=person;}@OverridepublicvoidOperation(){//职责person.Operation();//原本的职责System.out.println("写作业~");}}classDecoratorBextendsDecorator{publicDecoratorB(Personperson){this.person=person;}@OverridepublicvoidOperation(){//职责person.Operation();//原本的职责System.out.println("考试~");}}abstractclassPerson{protectedStringname;publicabstractvoidOperation();//职责}classStudentextendsPerson{publicStudent(Stringname){this.name=name;}@OverridepublicvoidOperation(){System.out.println(name+"的职责:学习~");}}3)适用性
Decorator模式适用于:
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
importjava.util.Scanner;/***/publicclassFacadePattern{publicstaticvoidmain(String[]args){Facadefacade=newFacade();facade.methodA();facade.methodB();facade.methodC();}}classFacade{SubSystemOnesubSystemOne;SubSystemTwosubSystemTwo;SubSystemThreesubSystemThree;publicFacade(){subSystemOne=newSubSystemOne();subSystemTwo=newSubSystemTwo();subSystemThree=newSubSystemThree();}publicvoidmethodA(){subSystemOne.methodOne();}publicvoidmethodB(){subSystemTwo.methodTwo();}publicvoidmethodC(){subSystemThree.methodThree();}}classSubSystemOne{publicvoidmethodOne(){System.out.println("执行子系统一的功能~");}}classSubSystemTwo{publicvoidmethodTwo(){System.out.println("执行子系统二的功能~");}}classSubSystemThree{publicvoidmethodThree(){System.out.println("执行子系统三的功能~");}}3)适用性
Facade模式适用于:
运用共享技术有效地支持大量细粒度的对象。
Flyweight模式适用于:
为其他对象提供一种代理以控制对这个对象的访问。
/***代理模式*/publicclassProxyPattern{publicstaticvoidmain(String[]args){RealSubjectrealSubject=newRealSubject();Proxyproxy=newProxy(realSubject);proxy.buy();}}interfaceSubject{voidbuy();}classProxyimplementsSubject{protectedRealSubjectrealSubject;publicProxy(RealSubjectrealSubject){this.realSubject=realSubject;}@Overridepublicvoidbuy(){System.out.println("办理购买前的手续~");realSubject.buy();//付钱System.out.println("办理购买后的手续~");}}classRealSubjectimplementsSubject{@Overridepublicvoidbuy(){System.out.println("付钱~");}}3)适用性(了解)Poxy模式适用于在需要比较通用和复杂的对象指针代替简单的指针的时候,常见情况有:
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
ChainofResponsibility模式适用于以下条件:
将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
Command模式适用于:
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
Interpreter模式适用于当有一个语言需要解释执行,并且可将该语言中的句子表示为一个抽象语法树时,以下情况效果最好:
提供一种方法顺序访问一个聚合对象中的各个元素,且不需要暴露该对象的内部表示。
Iterator模式适用于:
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
Mediator模式适用于:
在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。
Mement模式适用于:
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
Observer模式适用于:
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
State模式适用于:
定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。此模式使得算法可以独立于使用它们的客户而变化。
/***策略模式*/publicclassStrategyPattern{publicstaticvoidmain(String[]args){OperationContextcontext=newOperationContext(newAddstrategy());context.Operation(20,17);context=newOperationContext(newSubstrategy());context.Operation(20,17);context=newOperationContext(newMultstrategy());context.Operation(20,17);}}classOperationContext{privateStrategystrategy;publicOperationContext(Strategystrategy){this.strategy=strategy;}publicvoidOperation(inta,intb){strategy.TwoNumberOperation(a,b);}}interfaceStrategy{voidTwoNumberOperation(inta,intb);}classAddstrategyimplementsStrategy{@OverridepublicvoidTwoNumberOperation(inta,intb){System.out.println(a+b);}}classSubstrategyimplementsStrategy{@OverridepublicvoidTwoNumberOperation(inta,intb){System.out.println(a-b);}}classMultstrategyimplementsStrategy{@OverridepublicvoidTwoNumberOperation(inta,intb){System.out.println(a*b);}}3)适用性
Strategy模式适用于:
定义一个操作中的算法骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
TemplateMethod模式适用于:
表示一个作用于某对象结构中的各元素的操作。它允许在不改变各元素的类的前提下定义作用于这些元素的新操作。
Visitor模式适用于:
模块化是指将一个待开发的软件分解成若干个小的简单部分--模块,每个模块可独立地开发、测试,最后组装成完整的程序。这是一种复杂问题“分而治之”的原则。模块化的目的是使程序的结构清晰,容易阅读、理解、测试和修改。
耦合是模块之间的相对独立性(互相连接的紧密程度)的度量。耦合取决于各个模块之间接口的复杂程度、调用模块的方式以及通过接口的信息类型等。
内聚是对一个模块内部各个元素彼此结合的紧密程度的度量。
总结:耦合性和内聚性是模块独立性的两个定性标准,在将软件系统划分模块时,应尽量做到高内聚、低耦合,提高模块的独立性。
1)用户与系统分析人员通过文档进行沟通。这里的文档主要包括可行性研究报告、总体规划报告、系统开发合同和系统方案说明书等;系统开发合同和系统方案说明书==项目开发计划
2)系统开发人员与项目管理人员通过文档在项目期内进行沟通。这里的文档主要有系统开发计划(包括工作任务分解表、PERT图、甘特图和预算分配表等)、系统开发月报以及系统开发总结报告
3)系统测试人员与系统开发人员通过文档进行沟通。系统测试人员可以根据系统方案说明书、系统开发合同、系统设计说明书和测试计划
4)系统开发人员与用户在系统运行期间进行沟通。用户通过系统开发人员撰写的文档运行系统。这里的文档主要是用户手册和操作指南。
5)系统开发人员与系统维护人员通过文档进行沟通。这里的文档主要有系统设计说明书和系统开发总结报告。
6)用户与维修人员在运行维护期间进行沟通。用户在使用信息系统的过程中,将运行过程中的问题进行记载,形成系统运行报告和维护修改建议,系统维护人员根据维护修改建议以及系统开发人员留下的技术手册等文档对系统进行维护和升级。
加工逻辑也称为“小说明”。加工逻辑描述方法有结构化语言、判定表和判定树。
外层:顺序结构、选择结构和循环结构
CMM将软件过程改进分为以下5个成熟度级别:
1)初始级
软件过程的特点是杂乱无章,有时甚至很混乱,几乎没有明确定义的步骤,项目的成功完全依赖个人的努力和英雄式核心人物的作用。
2)可重复级
建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功。
3)已定义级
管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准软件过程。
4)已管理级
制定了软件过程和产品质量的详细度量标准。软件过程的产品质量都被开发组织的成员所理解和控制。
5)优化级
加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续地改进。
CMMI提供了两种表示方法:
1)阶段式模型
有五个成熟度等级:
2)连续式模型
CMMI中包括6个过程域能力等级:
软件开发过程模型是指为了有效地开发、维护和更新软件系统,提出的一系列步骤、阶段和方法的系统框架,以实现提高软件质量、加快开发速度和降低开发成本的目的。
常见的软件开发过程模型包括瀑布模型、增量模型、演化模型和喷泉模型。
结构化方法中的模型,是结构化的开发,开发流程如瀑布一样,一步一步走下去,直到项目完成开发只适用于需求明确或者二次开发(需求稳定)的项目
是瀑布模型的一个变种。特点是增加了多轮测试,并且这些测试贯穿于软件开发的各个阶段
快速原型开发,与瀑布模型相反,原型针对需求不明确的情况
是多种模型的混合,针对需求不明确的项目,与原型相似,但增加了风险分析(制定计划—风险分析—实施工程—用户评估)
首先开发核心功能模块,而后与用户确认,之后再开发次核心功能,即每次开发一部分功能,并与用户需求确认,最终完成项目开发,优先级高的服务最先交付。增量模型的每一次增量版本都可作为独立操作的作品
瀑布模型是一种线性的软件开发过程模型,开发流程严格按照顺序依次进行,每个阶段都必须完成后才能进入下一个阶段。瀑布模型包括需求分析、设计、编码、测试和维护五个阶段。
优点:
不足:
增量模型采用了逐步完善的思路,将软件的开发过程划分为一个个的增量,每个增量都能够独立实现某一或多项功能或特性。在逐步实现的过程中,可以不断根据需求变化来进行迭代,从而保证最终的软件达到客户需求和期望。
特点:
不足:
演化模型是一种以进化为中心的软件开发过程模型,侧重于以人的知识和技能为核心,强调在开发过程中不断地学习、改进和重构。演化模型适用于复杂性较高、需求不稳定的软件开发项目。典型的演化模型有原型模型和螺旋模型
原型方法比较适合于用户需求不清、需求经常变化的情况。当系统规模不是很大也不太复杂时,采用该方法比较好。通过初始原型帮助用户确定需求
对于复杂的大型软件,加入了风险分析
1.制订计划。确定软件的目标选定实施方案,明确项目开发的限制条件2.风险分析。分析所选的方案,识别风险,消除风险。3.实施工程。实施软件开发,验证阶段性产品。4.用户评估。评价开发工作,提出修正建议,建立下一个周期的开发计划。
喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。使开发过程具有迭代性和无间隙性
初启阶段结束时产生一个构想文档;
精化阶段结束时产生一个补充需求分析、一个软件架构描述和一个可执行的架构原型等制品;
构建阶段结束时的成果是个准备交到最终用户手中的产品,包括具有最初运作能力的在适当的平台上集成的软件产品;
移交阶段结束时产生移交给用户产品发布版本
初始阶段:生命周期目标精化阶段:生命周期架构初始运作:功能构建阶段移交阶段:产品发布。
敏捷方法是一种反应灵活、拥有高度互动性和以人为本的软件开发方法。它的核心是通过不断地交付成果和及时反馈,来满足客户需求和不断变化的业务环境。以下是敏捷方法中的一些常见实践:
它由价值观、原则、实践和行为4个部分组成
4大价值观:沟通、简单性、反馈和勇气。
5个原则:快速反馈、简单性假设、逐步修改、提倡更改和优质工作。
12个最佳实践:计划游戏(快速制定计划、随着细节的不断变化而完善)、小型发布(系统的设计要能够尽可能早地交付)、隐喻(找到合适的比喻传达信息、简单设计(只处理当前的需求,使设计保持简单)、测试先行(先写测试代码,然后再编写程序).重构(重新审视需求和设计,重新明确地描述它们以符合新的和现有的需求)、结对编程(可以获得更高的代码质量,编码速度与传统的单人编码相当)、集体代码所有制(任何来开发人员可以对任何部分进行改变)、持续集成(可以按日甚至按小时为客户提供可运行的版本)、每周工作40个小时、现场客户和编码标准。
水晶法认为每一个不同的项目都需要一套不同的策略、约定和方法论
并列争求法使用迭代的方法,其中,把每30天一次的迭代称为一个“冲刺”
敏捷统一过程(AgileUnifiedProcess,AUP)采用“在大型上连续”以及在“在小型上迭的原理来构建软件系统。采用经典的UP阶段性活动(初始、精化、构建和转换),提供了一系列活动,能够使团队为软件项目构想出一个全面的过程流。
每个AUP迭代执行以下活动:
建模;实现;测试;部署;配置及项目管理;环境管理;
自顶向下集成测试是一种构造软件体系结构的增量方法。不用编写驱动模块,需要编写桩模块的
自底向上集成测试就是从原子模块(程序结构的最底层构件)开始进行构造和测试。需要编写驱动模块,不需要编写桩模块的
软件发生变更,建立了新的数据流路径;回归测试有助于保证变更不引入无意识行为或额外的错误。
静态测试。静态测试是指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。
完全不考虑软件的内部结构和特性的情况下
系统是否能被很好地维护,可以用系统的可维护性这一指标来衡量。
系统可维护性的评价指标
文档是软件可维护性的决定因素,必须在开发阶段保证软件具有可维护性的特点
编写高质量文档可以提高软件开发的质量。
文档也是软件产品的一部分,没有文档的软件就不能称之为软件。
软件文档的编制在软件开发工作中占有突出的地位和相当大的工作量高质量文档对于软件产品的效益有着重要的意义。
总的来说,软件文档只好不坏,选项中说软件文档不好的就是不正确的。
系统维护主要包括硬件维护、软件维护和数据维护
软件维护:
计算有向图G的环路复杂性的公式为:
项目估算是项目计划和管理的一个至关重要的方面。
COCOMO模型是一种精确的、易于使用的成本估算模型。COCOMO模型按其详细程度分为基本COCOMO模型、中级COCOMO模型和详细COCOMO模型。
1)基本COCOMO模型:是一个静态单变量模型
2)中级COCOMO模型:是一个静态多变量模型
3)详细COCOMO模型:它将软件系统模型分为系统、子系统和模块3个层次,除包括中级模型所考虑的因素外,还考虑了在需求分析、软件设计等每一步的成本驱动属性的影响。
COCOMOII也是一种层次结构的估算模型,被分为3个阶段性模型:
COCOMOI模型也需要使用规模估算信息,在模型层次结构中有3种不同的规模估算选择:对象点、功能点和代码行。应用组装模型使用的是对象点:早期设计阶段模型使用的是功能点,体系结构阶段模型使用的是源代码行。
当日历中同一时段存在多个水平条时,表示任务之间的并发
优点:
能清晰地描述每个任务从何时开始,到何时结束,任务的进展情况以及各个任务之间的并行性。
它不能清晰地反映出各任务之间的依赖关系,难以确定整个项目的关键所在也不能反映计划中有港力的部分。
只有当流入该结点的所有任务都结束时,结点所表示的事件才出现,流出结点的任务才可以开始。
开始结点的最早时刻=0;结束结点的最迟结点==结束结点的最早时刻
PERT图不能反映任务之间的并行关系。
两个特性:不确定性和损失。不确定性是指风险可能发生也可能不发生;损失是指如果风险发生,就会产生恶性后果。
类型:
风险识别试图系统化地指出对项目计划(估算、进度、资源分配等)的威胁。识别出已知风险和可预测风险后,项目管理者首先要做的是在可能时回避这些风险,在必要时控制这些风险。
风险预测又称风险估计,它试图从两个方面评估一个风险:风险发生的可能性或概率;如果风险发生了所产生的后果。
风险的本质是指当风险发生时可能带来的问题。
风险的范围包括风险的严重性(即风险有多严重)及风险的整体分布情况
整体的风险显露度(RiskExposure,RE)可由下面的关系确定:
RE=P*C
其中,P是风险发生的概率,C是风险发生时带来的项目成本
一种对风险评估很有用的技术就是定义风险参照水准。成本、进度和性能就是3种典型的风险参照水准。也就是说,对于成本超支、进度延期、性能降低(或它们的某种组合),有一个表明导致项目终止的水准。
风险控制的目的是辅助项目组建立处理风险的策略。一个有效的策略必须考虑以下3个问题:1)风险避免应对风险的最好办法是主动地避免风险,即在风险发生前分析引起风险的原因,然后采取措施,以避免风险的发生。
项目管理者应监控某些因素,这些因素可以提供风险是否正在变高或变低的指示。
软件质量是指反映软件系统或软件产品满足规定或隐含需求的能力的特征和特性全体。软件质量管理是指对软件开发过程进行独立的检查活动,由质量保证、质量规划和质量控制3个主要活动构成。软件质量保证是指为保证软件系统或软件产品充分满足用户要求的质量而进行的有计划、有组织的活动,其目的是生产高质量的软件。
ISO/IEC9126软件质量模型由3个层次组成:第一层是质量特性,第二层是质量子特性、第三层是度量指标。
McCall也给出了一个三层模型框架,第一层是质量特性,第二层是评价准则,第三层是度量指标。
模块结构。模块分为处理模块和数据模块两类,模块间的动态结构也与这些模块分类有关。对这样的模块结构进行检查的项目如下。
用来辅助软件开发、运行、维护、管理和支持等过程中的活动的软件称为软件工具。
辅助软件维护过程中活动的软件称为软件维护工具,软件维护工具主要有版本控制工具、文档分析工具、开发信息库工具、逆向工程工具(需求阶段)和再工程工具。
容错技术是对某些无法避开的差错,使其影响减至最小的技术。
在屏蔽硬件错误的容错技术中,冗余附加技术包括:关键程序和数据的冗余存储及调用:检测、表决、切换、重构、纠错和复算的实现
在屏蔽软件错误的容错技术中,冗余附加技术包括:冗余备份程序的存储及调用;实现错误检测和错误恢复的程序;实现容错软件所需的固化程序
特点:微型化;可定制;实时性;可靠性;可移植性
嵌入式系统初始化过程可以分为3个主要环节,按照自底向上、
从硬件到软件的次序依次为:片级初始化、板级初始化和系统级初始化。
公加验,私解签,认证主动攻击,加密被动攻击
认证是处理主动攻击
Hash函数
MD5摘要算法(128位散列值)
SHA-1安全散列算法
防火墙(Firewall)是建立在内外网络边界上的过滤封锁机制。
过滤型的防火墙通常是直接转发报文,它对用户完全透明,速度较快。
优点:低水平控制;每个IP包的字段都被检查,eg:源地址;目的地址;协议和端口;
缺点:不能防范黑客攻击不支持应用层协议、不能处理新的安全威胁。
内网用户对外网的访问变成防火墙对外网的访问,然后再由防火墙转发给内网用户。
优点;可以检查应用层、传输层和网络层的协议特征,对数据包的检测能力比较强;
缺点:难以配置,处理速度非常慢
状态检测技术防火墙结合了代理防火墙的安全性和包过滤防火墙的高速度等优点。
计算机病毒的特征包括:传播性、隐蔽性、感染性、潜伏性、触发性、破坏性等
worm表示蠕虫病毒、Trojan表示特洛伊木马、Backdoor表示后门病毒、Macro表示宏病毒
宏病毒感染的对象主要是文本文档、电子表格等木马软件:冰河蠕虫病毒:欢乐时光、熊猫烧香、红色代码、爱虫病毒、震网
计算队尾元素的指针为:(Q.front+len-1+M)%M
计算队头元素的指针为:(Q.rear-len+1+M)%M
队列中元素个数为:(rear-front+M)%M
串的基本概念:
稀疏矩阵三元组表的顺序存储结构称为三元组顺序表,常用的三元组表的链式存储结构是十字链表
二叉链表:n个结点,有2n个指针域,有n-1个有效指针,空指针有n+1个
三叉链表:n,3n,指向子节点和指向父节点有效指针都为n-1,空指针为3n-(n-1)-(n-1)=n+2
先中后遍历、层次遍历(从上往下,从左往右)
只有通过先序和中序,或通过中序和后序,才可以唯一确定一个二叉树
:二叉树中的任意一个结点的左右子树高度之差的绝对值不超过1
完全二叉树是一个平衡二叉树,平衡二叉树不一定是一个完全二叉树
二叉排序树(二叉查找树):根结点的关健字
大于左子树所有结点的关键字,
小于右子树所有结点的关键字,左右子树也是一颗二叉排序树中序遍历得到的序列是有序序列
具有n个叶子结点的权值的最优二叉树不唯一,WPL值是唯一确定的
权值大的结点里根节点更近,则相反
构造规则:
左分支设0,右分支设1
先看什么排序,再利用空指针域去指向
:总度数=2e(无论有向还是无向),e=1/2总度数
无向完全图最少有n-1条边;有向完全图最少有n条边
:第一个顶点和最后一个顶点相同的路径称为回路或环。顶点均不相同,则称其为简单路径。
无向图的邻接矩阵是对称的,有向图的邻接矩阵则不一定对称。
借助于邻接矩阵容易判定任意两个顶点之间是否有边(或弧)相连,并且容易求得各个顶点的度。
对于无向图,顶点v的度是邻接矩阵第i行(或列)中值不为0的元素个数;对于有向图,有第i行(或列)中值不为0的元素个数是顶点的出度,第j列的非0元素个数是顶点的入度
邻接表可得出:出度
逆邻接表可得出:入度
邻接矩阵用于存储稠密图,邻接表用于存储稀疏图
某顶点查找其邻接点的过程回溯
邻接矩阵:O(n2);邻接表:O(n+e)
回溯,由递归来实现
某顶点开始,访问该层的所有邻接点,再把访问完的邻接点作为开始结点,由队列实现,邻接矩阵:O(n2);邻接表:O(n+e)贪心
有向无环图
(1)在AOV网中选择一个入度为0(没有前驱)的顶点且输出它。(2)从网中删除该顶点及与该顶点有关的所有弧。(3)重复上述两步,直到网中不存在入度为0的顶点为止
静态查找表:顺序查找、折半查找(二分)、分块查找
动态查找表:二叉排序树、平衡二叉树、B_树、哈希表
适用于顺序存储和链式存储(可无序)
顺序表,最多比较log2n+1次
除留取余法:H(key)=key%m(m取接近n但不大于n的质数)
解决冲突:开放地址法:Hi=(H(key)+di)%m
增量序列:
根结点最小,从下往上构造,一层一层来
根结点最大
每一次排序可以确定一个结点的位置
每次排序可以确定最大/最小的数
分治的思想
主方法。主方法也称为主定理,给出了求解以下形式的递归式的快速方法。
非递归:O(1)O(n)O(n2)
0-1背包
递归有两个基本要素:
分支算法在每一层递归上都有3个步骤:
(0-1背包问题,最长公共子序列问题;寻找最优解)
(活动选择,背包问题,最短路径d、p,广度)
#include