知识点速记
数据库
三范式和BC范式之间的关系
并发操作带来的问题是数据的不一致性,主要有三类:
丢失更新:两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失
不可重复读,不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。具体地将,不可重复读包括三种情况:
(1)事务T1读取某一数据后,事务T2对其进行了修改,当事务T1再次读该数据时,得到与前一次不同的值。
(2)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘的消失
(3)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。
后两种情况称为“幻影现象”。
读脏数据,读“脏”数据是指事务T1修改某一数据并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时被T1修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。
事务:由一系列操作组成,这些操作“要么都做,要么什么都不做”,拥有四种特性,如下
- 原子性(操作):要么全做,要么全不做。
- 一致性(数据):事务发生后数据是一致的。
- 隔离性(执行):任一事务的更新操作直到其成功提交的整个过程对其他事务都是不可见的,不同事务之间是隔离的,互不干 涉。
- 持续性(改变):事务操作的结果是持续性的。
三级封锁协议
一级解决丢失更新,在事务修改数据前必须加X锁,结束后释放。
二级解决不可重复读,在一级封锁协议的基础上,加上事务T在读数据R前必须先对其加S锁,读完后立即释放S锁。
三级解决读脏数据,在一级封锁协议的基础上,加上事务T在读数据R前必须先对其加S锁,直到事务结束时释放S锁。
分片模式
水平分片:将表中水平的记录分别存在不同的地方。
垂直分片:将表中的垂直的列值分别存在不同的地方。
分布式透明性
分片透明性,用户或应用程序不需要知道 逻辑上存储的表具体是如何分块存储的。
位置透明性:应用程序不关心数据存储物理位置的改变。
逻辑透明性:用户或应用程序无需知道局部使用的是哪种数据结构。
复制透明性:用户或应用程序不关心复制的数据从何而来。
数据仓库
数据仓库是一种特殊的数据库,也是按数据库形式存储数据,但是目的不同,数据库经过长时间的运行,里面的数据会越存越多,就会影响数据库的运行效率,对于某些程序而言,很久之前的数据并非必要的,因此,可以删除掉减少数据,增加效率,考虑到删除这些数据比较可惜,因此,一般将这些数据库提取出来保存到另一个数据库中,称为数据仓库。
数据仓库的目的不是为了应用,是面向主题的,用来做数据分析,集成不同表,而且是相对稳定的,一般不会做修改,同时会在特定的时间点做大量的插入,反应历史的变化。
形成数据仓库后,有两个作用,一个是用来做数据的查询、分析、生成报表,另一个是使用数据挖掘工具对这些历史数据进行挖掘,查询数据之间的关系,发现剩余价值。
数据挖掘的分析方法
关联分析:关联分析主要用于发现不同事物之间的关联性,即一个事物发生的同时,另一个事物也经常发生。
序列分析:序列分析主要用于发现一定时间间隔内接连发生的事件,这些事件构成一个序列,发现的序列应该具有普遍意义。
分类分析:分类分析通过分析具有类别的样本特点,得到决定样本属于各种类别的规则或方法。分类分析时首先为每个记录赋予一个标记,即按标记分类记录,然后检查这些标定的记录,描述出这些记录的特征。
聚类分析:聚类分析师根据“物以类聚”的原理,将本身没有类别的样本聚集成不同的组,并且对每个这样的组进行描述的过程。
反规范化技术
规划化操作可以防止插入异常,更新,删除异常和数据冗余,一般是通过模式分解,将表拆分,来达到这个目的。
但是表拆分后,解决了上述异常,却不利于查询,每次查询时,可能都要关联很多表,严重降低了查询效率,因此,有时候需要反规划技术来提高查询效率。
技术手段包括:增加派生性冗余列,增加冗余列,重新组表,分割表。
主要就是增加冗余,提高查询效率,为规划化操作的逆操作。
增 create 删 delete 改 update 查 select
数据库查询select…(属性)…from…(表名)…where (条件)
分组查询group by 分组是要注意select后的列名要适应分组,having为分组附加条件:select sno,avg from student group by sno having(avg>60)
更名运算 as: select sno as “学号” from t1
字符串匹配 like,%匹配多个字符,_匹配任意一个字符
排序 order by:默认为升序,降序要加关键字desc:select * from order by sno desc。
系统分析
系统分析需要提交**系统方案说明书**
系统开发的目的是将现有系统的物理模型转换为目标系统的物理模型。
系统分析的主要步骤
认识、理解当前的现实环境,获得当前系统的“物理模型”。
从当前系统的“物理模型”抽象出当前系统的“逻辑模型”。
对当前系统的“逻辑模型”进行分析和优化,建立目标系统的“逻辑模型”。
对目标系统的逻辑模型具体化(物理化),建立目标系统的物理模型。
内聚
内聚程度从低到高如下表所示:
内聚分类 定义 记忆关键字
偶然内聚 一个模块内各处理元素之间没有任何联系 无直接关系
逻辑内聚 模块内执行若干个逻辑上相似的功能,通过参数确定改模块完成哪一个功能 逻辑相似,参数决定
时间内聚 把需要同时执行的动作组合在一起形成模块 同时执行
过程内聚 一个模块完成多个任务,这些任务必须按指定的过程执行 指定的过程顺序
通信内聚 模块内所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或产生相同的输出数据 相同的数据结构、形同的输入输出
顺序内聚 一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一个功能元素的输出就是后一个功能元素的输入 顺序执行、输入为输出
功能内聚 最强的内聚,模块内所有元素共同作用完成一个功能,缺一不可 共同作用,缺一不可
耦合
耦合程度从低到高如下表所示:
耦合分类 定义 记忆关键字
无直接耦合 两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,不传递任何信息 无直接关系
数据耦合 两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言中的值传递 传递数据值调用
标记耦合 两个模块之间传递的是数据结构 传递数据结构
控制耦合 一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值,有选择的执行模块内的某一功能 控制变量,选择执行某一功能
外部耦合 模块间通过软件之外的环境联合(如I/O将模块耦合到特定的设备,格式,通信协议)时 软件外部环境
公共耦合 通过一个公共数据环境相互作用的那些模块间的耦合 公共数据结构
内容耦合 当一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个内部模块时 模块内部关联
系统设计
系统设计的主要目的是系统制定蓝图,在各种技术和实施方法中权衡利弊,精心设计,合理的使用各种资源,得出新系统的**详细设计方案**
概要设计基本任务:
- 设计软件系统总体结构
- 数据结构及数据库设计,
- 编写概要设计文档,
- 评审
详细设计基本任务: - 数据库物理设计
- 编写详细设计文档
- 其他设计(编码,用户界面,输入输出格式)
- 评审
- 详细算法设计
- 模块内数据结构设计
软件需求
按需求内容分类:
业务需求:由客户提出的宏观的一个功能需求。
用户需求:设计员去调查需求中涉及的每个用户的具体需求。
系统需求:经过整合,形成最终的系统需求,包括功能,性能,设计约束三个方面的需求。
从客户角度分类:
基本需求:需求明确规定的功能。
期望需求:除了基本需求外,客户认为理所应当包含在内的其他功能。
兴奋需求:客户未要求其他功能需求,会浪费项目开发时间和成本。
软件需求分类:
功能需求:软件必须完成的基本动作。
性能需求:说明软件或人与软件交互的静态或动态数值需求。如系统响应速度,处理速度等。
设计约束:受其他硬件标准限制等方面影响。
属性:可用性、安全性、可维护性,可移植性。
外部接口需求:用户接口,硬件接口,软件接口,通信接口。
1.语句覆盖:逻辑代码中所有的语句都要执行一遍,覆盖层级最低,因为执行了所有语句,不代表执行了所有条件判断。
语句覆盖
- 判定覆盖:逻辑代码中所有判断语句的条件的真假分支都要覆盖一次。
- 条件覆盖:对于代码中的一个条件,可能是组合的,如a>0&&b<0,判断覆盖只针对此组合条件的真假分支做两个测试用例,而条件覆盖是对每个独立的条件都要做真假分支的测试用例,共可有4个测试用例,层级更高,注意区别,条件覆盖,针对每个条件都要真假覆盖,判定覆盖,只针对一个条件判断语句。
- 判定/条件覆盖:使判定中每个条件的所有可能取值(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次,即两种覆盖的综合。
- 条件组合覆盖:每个判定条件中条件的各个可能值的组合都至少出现一次。
- 路径覆盖:逻辑代码中所有可行路径都覆盖了,覆盖层级最高。
计算机组成与体系结构
阶码越长,表示范围越大,尾数越长,表示精度越高。
输入输出系统
程序控制,中断,DMA,通道 效率由低到高 程序控制<中断<DMA 通道程序控制:CPU主动查询外设是否完成数据传输,效率最低
中断:外设完成数据传输后,向CPU发送中断,效率相对较高,适用于键盘等实时性较强的场景,多级中断嵌套,使用堆栈来保护断点和现场,需要恢复现场。
DMA(直接主存存取):是CPU只需向DMA控制器下达指令(初始化),整个数据传输过程都由DMA控制器来完成,在主存和外设之间建立直接的数据通路,效率最高,适用于硬盘。中断和DMA:
1.中断过程需要CPU干预,而DMA传送过程不需要,且传输数据速率高,适合高速外设成组传送,DMA请求优先级应高于中断请求。
2.中断方式是程序切换,需要保护和恢复现场,而DMA方式除了开始和结尾时,不占用CPU资源。
3.对于中断请求只能发生在每条指令执行完毕时,而对DMA请求的响应可以发生在每个机器周期结束时。
CPU主要由 运算器和控制器组成,还有寄存器组和内部总线
运算器(1.算数逻辑单元ALU 2.累加寄存器AC 3.数据缓冲寄存器DR 4.程序状态条件寄存器PSW)
控制器 (1.指令寄存器IR 2.程序计数器PC 3.地址寄存器AR 4.指令译码器ID 5.时序控制器)
原码 反码 补码 移码
0表正 1表负
正数的原 反 补码 都一样
正数移码也是补码符号位取反 其他真值部分不变
负数 反码 为原码除了符号位外全部取反
负数 补码 为反码除了符号位外+1
负数 移码 为补码符号位取反其他真值部分不变
可靠性计算
串联 R1R2 …Rn
并联:1-((1-R)^n)
流水线周期:指令中的最长一段
流水线执行时间:一条指令执行时间+(总指令条数-1)*流水线周期
吞吐率:总指令条数/流水线执行时间
加速比:未使用流水线总执行时间/使用流水线总执行时间
寻址方式
按速度由快到慢排序:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,间接寻址
立即寻址:操作数直接存放在指令中
寄存器寻址:操作数存放在寄存器中,指令给出寄存器名
直接寻址:操作数存放在存储单元,指令给出内存单元的地址
寄存器间接寻址:操作数也存放在存储单元,操作数所在的存储单元在某个寄存器中
间接寻址:指令给出操作数地址的地址
磁盘调度
先进行移臂调度寻找磁道,在进行旋转调度寻找扇区。
算法:
先来先服务FCFS:根据进程请求访问磁盘的的先后顺序进行调度
最短寻道时间优先SSTF:请求访问的磁道与当前磁头所在磁道距离最近。
扫描算法SCAN:又称“电梯算法”,磁头在磁盘上双向移动,其会选择离磁头当前所在磁道最近请求访问的磁道,并且与磁头移动方向一致,磁头永远都是从里向外或者从外向里一直移动完才掉头,与电梯类似。
单向扫描算法CSCAN:单向扫描算法CSCAN:与SCAN不同的是,其只做单向移动,即只能从里向外或者从外向里
差错空值 校验码。。
奇偶校验码 只能检错以为
CRC循环冗余校验码 只能检错不能纠错
海明码,可以检测纠错,必须满足 (2的k次方)-1>=n+k n是数据位 k是检测位
在一个码组内为了检测e个误码,要求最小码距d应该满足:d>=e+1
在一个码组内为了纠正t个误码,要求最小码距d应该满足:d>=2*t+1
计算机内存容量决定地址总线宽度,字长决定数据总线宽度
例如,内存容量为16GB,字长为64位,地址总线宽度为:2的4次方GB = 2的4次方 * 1024 MB = 2的4次方 * 1024 *1024 KB = 2的34次方B 所以地址总线的宽度是 2的34次方B,数据总线跨度是64二(B) 八(O) 十 十六(H)进制转换
计算机网络
必背图
常见协议
属于TCP
FTP–20/21–文件传输协议
Telnet–23–远程登录协议
SMTP–25–简单邮件传输协议
HTTP–80–超文本传输协议
POP3–110–接收邮件
属于UDP
DNS–53–域名解析服务
DHCP–67–动态ip传输协议
TFTP–69–简单文件传输协议
SNMP–161–简单网络管理协议
其他
IP-网际互联协议
MIML-扩展电子邮箱标准,使其能够使用
PGP-用于加密,验证应用程序,可用于加密电子邮件
HTTPS-443-安全的HTTP通道
IP地址
ip地址由32位二进制数组成,共分四段,每段八位A类地址 0.0.0.0-127.255.255.255 范围(0-127)
8位网络号,32-8=24位主机号,能分配的主机号位2的24次方-2,全0和全1不能分配)
最低00000000 00000000 00000000 00000000 转化 0.0.0.0
最高01111111 111111111 111111111 111111111 转化 127.255.255.255
B类地址 128.0.0.0-191.255.255.255 范围(128-191)
16位网络号,32-16=16位主机号,能分配的主机号位2的16次方-2,全0和全1不能分配)
最低 10000000 00000000 00000000 00000000 转化 128.0.0.0
最高 10111111 111111111 111111111 111111111 转化 191.255.255.255C类地址192.0.0.0-223.255.255.255 范围(192-223)
24位网络号,32-24=8位主机号,能分配的主机号位2的8次方-2,全0和全1不能分配)
最低 11000000 00000000 00000000 00000000 转化 192.0.0.0
最高 11011111 11111111 11111111 11111111 转化 223.255.255.255D类地址 193.0.0.0-239.255.255.255 (组播地址)范围(224-239)
8位网络号,32-8=24位主机号,能分配的主机号位2的24次方-2,全0和全1不能分配)
最低 11100000 00000000 00000000 00000000 转化 193.0.0.0
最高 11101111 11111111 11111111 11111111 转化 239.255.255.255E类地址 240.0.0.0-255.255.255.255 范围(240-255)
8位网络号,32-8=24位主机号,能分配的主机号位2的24次方-2,全0和全1不能分配)
最低 11110000 00000000 00000000 00000000 转化 240.0.0.0
最高 11111111 11111111 11111111 11111111 转化 255.255.255.255
无线个人网(WPAN)person
802.15 蓝牙 Bluetooth无线局域网(WLAN)local
802.11 WIFI无线城域网 (WMAN) metropolian
802.16 WiMax无线广域网(WWAN)wide
3G/4G
范围 个人<局域<城域<广域
有线接入(PSTN,DDN,ISDN,ADSL(目前是主流的有线网络接入方式),HFC)
PSTN:以前流行,现在基本淘汰,拨号和上网只能选其一,但是传真和pos机还在用
ISDN:解决了上网和通话不能同时进行的问题,速度达到128KB
ADSL:是ISDN的发展,速度达8MBS,三种拨号上网方式,pppoA,pppoE,专线方式(静态IP)
HFC:目前广泛用于电视机接入网络
TD—SCDMA:是国产的技术,只在中国应用,由移动公司主导推广;目前最为广泛应用的技术是WCDMA,而FDD则是其发展版本
TDD:是LTE—Advanced发展而来,是4G时代智能机的主流接入网络的方式
无线接入(IEE 802.11(局域网) IEE 802.15(个人局域网,蓝牙)IrDA(红外) WAPI)3G/4G(WCDMA(应用最广泛),CDMA2000,TD-SCDMA(国产) ,WiMAX(802.16))
IPV6地址长度128位,地址空间增大了2的96次方倍
单播 用于单个地址的标识符
任播 反驳地址。一组接口的标识符,ipv4广播地址
组播地址,ipv6的组播在功能上与ipv4组播类似
程序设计语言与语言程序处理程序基础
程序编译原理
源程序->词法分析->语法分析->语义分析->中间代码生成->代码优化->目标代码生成->目标程序
(编译型,解释型)词法分析(正规式,有限自动机):非法字符,关键字或者标识符拼写错误
语法分析(根据语言语法规则):语法结构出错,if else 不匹配,缺分好
语义分析(语义检查):死循环,零除数,其他逻辑错误
中间代码:后缀式(逆波兰式)、树型表示、三元式和四元式
编译型和解释型区别
效率。编译方式比解释翻译方式可能取得更高的效率。解释方式运行程序时,可能需要反复扫描源程序。每一次进行类型检查,可能需要重新进行存储分配,从而降低了程序的运行速度,并且运行时需要更多内存灵活性。由于解释程序需要反复检查源程序,这也使得解释程序比编译方式更灵活。当解释器直接运行源程序时,在运行中修改程序中的语句或修改程序中的错误就成为可能,解释程序会根据你的修改而改变运行后的结果,并且它可以对错误进行更精确的定位
可移植性。源程序是由解释器控制来运行的,可以提前将解释器安装在不同的机器上,从而使得在新环境下无须修改源程序就可以使之运行。而编译方式下则需要针对新机器重新生成源程序的目标代码才能运行。
各程序语言设计特点
低级语言:机器语言(硬件只能识别的0,1指令序列),汇编语言
高级语言:功能更强,抽象级别更高,与人们使用的自然语言比较接近Fortran(科学计算,效率高)
Pascal(为了教学而开发,执行效率高,Delphi)
Lisp语言(函数式程序语言, 符号处理,人工智能)
Prolog语言(逻辑推理,简洁性,表达能力,数据库与专家系统)
C语言 (指针操作强,高效)
C++语言(面向对象,高效)
C#语言(面向对象,中间代码,.net)
JAVA语言 (面向对象,中间代码,跨平台)半解释型
Python语言(面向对象,结合解释,编译,互动性,跨平台,脚本语言) 解释型
正规式的识别与判断
主要是判断开头与结尾的条件是否相符合,或者是否只能用某个字符来表示
有限自动机(看图带入选项判断)
表达式 的后缀式(先化成二叉树再根据规则给出正规式)前缀,后缀(逆波兰),中缀
文法???
系统分析
目的和任务:系统分析的主要任务是对现行系统进一步详细调查,将调查中所得到的文档资料集中,对组织内部整体管理状况和信息处理过程进行分析,为系统开发提供所需资料,并提交系统方案说明书
系统设计基本原理
抽象 模块化 信息隐蔽 模块独立
模块独立要求 高内聚 低耦合 (内聚是指模块内部功能之间的相关性,耦合是指多个模块之间的联系)内部相关性高,外部联系低
内聚指的是模块内元素的关系
耦合指的是不同模块间的关系
内聚由低到高:偶逻时过通顺功
耦合由低到高:无数标控外公内
黑盒测试(等价类划分,边界值划分)
白盒测试(覆盖级别由低到高,语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,条件组合覆盖,路径覆盖)
语句覆盖:逻辑代码中所有语句都要执行一遍,覆盖层次最低,执行了所有语句,不代表执行了所有条件判断
判定覆盖:代码中所有判断语句的条件的真假分支都要覆盖一次
条件覆盖,例如判断a>0 && b<0 判定覆盖会产生两个测试用例(真假各一个),而条件覆盖会产生四个(a>0 a<0 b>0 b<0)
判定/条件覆盖:使判断中每个条件所有可能的取值至少出现一次,并且每个判定本身的结果也至少出现一次,是两种覆盖的综合
条件组合覆盖:每个判定条件中条件的各个可能值的组合都至少出现一次
路径覆盖:代码中所有可行路径都覆盖了。覆盖层级最高
面向对象设计和结构化分析设计
23种设计模式,数据流图DFD(下午必考),UML图
关系
14个UML图
UML是统一建模语言,和程序设计语言并无关系。
静态图(结构图)7个:
包图,制品图,组合构件图,构件图,部署图,对象图,类图
记忆:包子足够部队类
动态图(行为图) 7个:
通信图,用例图,状态图,活动图,顺序图,定时图,交互概览图
记忆:通用装货顺时交互
7个设计原则
1.单一职责:设计目的单一的类型
2.开放-封闭:对扩展开发,对修改封闭
3.里式替换:子类可以替代父类
4.依赖倒置:依赖于抽象而非具体实现,针对接口编程 ,不针对实现编程
5.接口隔离:使用多个专门的接口比使用单一的接口要好
6.组合重用:尽量使用组合,而非集成关系达到重用
7.迪米特(最少知识法则):一个对象应该对其他对象有尽可能少的了解
23个设计模式
包含5个创建型模型,7个结构型模式,11个行为型模式
单原生双工,桥组装适享外代,观模职命状,备迭房中解策
数据流图DFD
四大组成元素:
数据流:黑实线箭头
加工:圆形或者圆角矩形
数据存储:类似等号或者更矩形少个宽
外部实体:矩形
数据字典
配合数据流图使用,对数据流图一些数据做进一步解释,包括,数据流,数据顶,基本加工,数据存储
数据流图的元素在数据字典中定义
数据流图平衡原则
父图和子图平衡,子图内平衡
有输入没有输出叫黑洞,有输出没有输入叫奇迹。
面向对象设计方法—多态与绑定
多态
- 参数多态
- 包含多态
- 强制多态
- 过载多态
绑定
- 动态绑定:在程序运行时,把函数(或过程)调用与响应调用所需要的代码结合的过程
- 静态绑定:在程序编译时,把函数(或过程)调用与响应调用所需要的代码结合的过程
类
- 实体类:真实的实体
- 接口类:接口类的对象为用户提供系统交互的方式,分为人和系统,人的接口可以是显示屏,窗口,web窗体,菜单
- 控制类:该类的对象用来控制活动流,充当协调者。
软件工程
软件生存周期(常考产出物)
- 可行性分析和项目开发计划
目标:确定软件的开发目标以及可行性
角色:用户,项目负责人,系统分析师
产出物:可行性分析报告,开发计划,从而确定软件的逻辑模型
- 需求分析
目标:确定软件的功能,性能,数据和界面的需求
角色:用户,项目负责人,系统分析师
产出物:需求分析说明书
- 概要设计详细设计
目标:需要把确定的各项功能,需求转化为需要的体系结构,概要设计就是设计软件的结构
角色:系统分析师,软件设计师
产出物:概要设计说明书
- 详细设计
目标:把每个模块完成的功能进行具体描述,把功能描述变为精确的,结构化的过程描述
角色:软件设计师,程序员
产出物:详细设计文档
- 编码
目标:把每个模块的内容转化为计算机可接受的程序代码。
角色:程序员
产出物:代码
- 测试
目标:保证软件质量
角色:
产出物:软件测试计划,测试用例,软件测试报告
能力成熟度模型CMMI
能力成熟度模型CMMI,将已有的几个CMM模型结合在一起,是指构造成为“集成模型”。
阶段式模型:类似CMM,五个成熟模型
一、初始级:过程不可预测且缺乏控制。
二、已管理级:过程为项目服务。
三、已定义级:过程为组织服务。
四、定量管理级:过程为已度量和控制。
五、优化级:集中于过程改进。
软件过程模型
敏捷开发
敏捷开发的目的是通过“尽早能早,持续地对有价值的的软件的交付”
- 自适应开发(ASD) 强调开发方法的适应性
- 水晶方法(Crystal)水晶法认为每一个不同项目都需要一套不同的策略,约定和方法论
- 特性驱动开发:是一套针对中小型软件开发项目的开发模式,是一个模型驱动的快速迭代开发过程,它强调的是简化,使用,易被开发团队接受,适用于需求经常变动的项目
- 并列争求法(Scrum)并列争求法是一种迭代的增量化过程,其中,把每30天一次的迭代称为一个“冲刺”,并按需求的优先级来实现产品。
- 极限编程(XP):XP是一种轻量级(敏捷),高效,低风险,柔性,可预测,科学的软件开发方式。
四大价值观:沟通,简单性,反馈,勇气
五个原则:快速反馈,简单性假设,逐步修改,提倡更改和优质工作
十二个最佳时间:计划游戏,小型发布,隐喻,简单设计,测试先行,重构,结对编程,集体代码所有制,持续集成,每周工作40小时,现场客户和编码标准。
- 结对编程:一个程序员开发,一个程序员审查代码,能够有效提高代码的质量。
进度管理
Gantt图,甘特图,又称横道图,横轴标识时间,纵轴标识活动,以时间顺序标识活动,能反应活动间的并行关系,但无法反应活动间的依赖关系。
PERT图,类似前趋图,是有向图,反应活动件的依赖关系,但是无法反应并行关系。
PERT图中的关键路径:项目中耗时最长的线路.
松弛时间 = 关键路径-包含(X)的最长路径
软件质量管理
可维护性 常考
易分析性:与为诊断缺陷或失效原因,或为判定待修改部分所需那里有关的软件属性
易测试性:为确认经修改软件所需努力有关的软件属性
易改变性:与进行修改、排错、或适应环境变换所需努力有关的软件属性
稳定性:与修改造成未预料效果风险有关的软件属性
功能性:依从性,安全性,互操作性,适合性,准确性
可用性易理解性,易操作性,易学性
可靠性:成熟性,容错性,易恢复性
可移植性:适应性,已安装性,易替换性,遵循性
软件度量
McCabe算法:又称为环路复杂度,假设有向图中有向边数为M,节点数为N,则此有向图的环路复杂度为M-N+2。边-点+2
操作系统基本原理
ps:在上午考试中一般占到5—7分
重点:银行家算法、pv操作、文件管理、存储管理、操作系统的分类及其特点
进程管理
三态图(运行,等待,就绪 顺时针箭头 就绪运行相互)
程序处于等待状态时:缺少除CPU资源外的其他资源,如用户指令或外设支持
程序处于就绪状态时:除了CPU外的其他资源都已经就绪
运行-等待:等待某个事件
等待-就绪:等待事件发送
就绪-运行:调度
运行-就绪:时间片到
五态图是三态图的发展(运行,活跃阻塞,静止阻塞,活跃就绪,静止就绪)
运行-活跃阻塞:等待事件
活跃阻塞-活跃就绪:等待事件发送
活跃就绪-运行:调度
运行-活跃就绪:时间片到
运行-静止就绪:挂起
活跃就绪-静止就绪:挂起
静止就绪-活跃就绪:恢复或激活
活跃阻塞-静止阻塞:挂起
静止阻塞-活跃阻塞:恢复或激活
静止阻塞-静止就绪:等待事件发生
PV操作
pv操作的根本目的是为了解决两个或多个进程运行时的约束关系造成的麻烦
相关概念
- 临界资源:各个进程间需要互斥方式进行访问对其进行资源的共享
- 临界区:每个进程中访问临界资源的那段代码
- 信号量:符号为S,特殊变量,只用于PV
P操作:将进程挂起或者叫申请资源
S小于0,将进程阻塞,放进进程队列中,让进程处于等待状态。
V操作:将进程唤醒或者释放资源
如果s<0 则从进程中拿出一个进程,并唤醒该进程,使其继续执行
死锁问题
计算机系统至少需要多少资源将不可能发生死锁问题:将每个进程所需资源建议 再相加 最后加一
(5-1)*3+1 = 13
假设有n个进程,r个资源 发生死锁的最大资源数:n*(r-1) 不发生死锁的最大资源数 n*(r-1)+1
发生死锁四大条件
- 进程互斥
- 保持和等待:在资源总量并未满足完成进程所需资源的总量的前提下,每个进程都保存自身占用的资源不变并且一直等待其他进程完成后以获取其释放的系统资源。
- 不剥夺:系统不会把已分配给一个经常的资源剥夺调分配给其他进程
- 环路等待:A等待B,B待C,C待A,等待的进程形成环路.
死锁的预防就是通过打破四大条件来进行
死锁的避免
有序资源分配:将系统资源按照顺序分配给进程,一个进程完成后才将资源分配给下一个进程
银行家算法 该方法是避免死锁问题的常用方法
银行家算法主要思路:就是以银行房贷的思路来做资源的分配,在放贷钱确定这个资源能否回收,如果不能回收就不会提供资源。
- 当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程(你贷款额度不能大于银行的钱)
- 进程可以分期请求资源,加起来的总数不能超过最大需求量(你可以分期贷款,但是总数不能大于银行的钱)
- 当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使进程在有限的时间里得到资源(银行的钱不够你借时,先等等,有钱了会放给你)
解题思路:根据题目给出的数据计算 还需资源数以及 目前已有资源数 去匹配进程 完成一个进程后 已有资源数-匹配进程最大需求量再加上已有进程的现有资源量 = 最新资源量,归零所在进程最大需求量 再继续计算
分区存储组织
- 首次适应法
将即将执行的作业安排到能够容纳他的第一个空间,由上到下
- 最佳适应法
将作业安排到内存空间与它最接近的内存里
- 最差适应法
将作业阿耨待内存空间最大的内存里
- 循环首次适应法
将剩余空间连成环状,讲作业在环装区域内顺次进行二次分配(从第二个空闲区域开始分配)
页式存储组织
提出背景:为了解决碎片化的存储
优点:利用率高,碎片小,分配及管理简单
缺点:增加了系统开销(系统每次读取程序都需要先读取页表将其定位,再进行程序的读取);可能产生抖动现象
逻辑地址和物理地址
高级程序语言使用逻辑地址
运行状态,内存中使用物理地址
逻辑地址=页号+块内地址
物理地址=块号(页帧号)+块内地址
根据逻辑地址求物理地址
首先我们知道,逻辑地址是由页号+页内地址组成,物理地址是由块号+页内地址组成,要通过逻辑地址求物理地址,页内地址由页面大小决定4K = 41024 = 4210次方 = 212次方 就表示逻辑地址的后12位是页内地址就是A29,5是页号,那么物理地址就是页号5所对应的页帧号6+A29
淘汰页面,首先是内存内的页面 也就是状态位为1的 访问位为1的不能淘汰 因为后续可能继续被访问
文件属性:R只读 S系统 H隐藏 A存档
文件名的组成:驱动器号+路径+主文件名+扩展名
1:在页式存储结构中,每一个页面对应一个块,没有使用快表表示每读取一次程序块,都要现在内存查表,再读取相应内存块,所有需要访问6*2=12次 如果使用快表则每读取一次程序块只需要访问一次内存
2:所有的指令都产生一次缺页,而操作数A和B都各产生2次中断 一共5次
快表:联想存储器(由一组高速存储器组成),而段表和页表放在内存中称为慢表。
联想存储器只存储当前进程最活跃的少数几页物理块号
当用户程序要访问数据时,在联想存储器中找出此数据所在的逻辑页号对应的物理块号,与页内地址拼接形成物理地址;若找不到对应的物理页号,则地址映射仍通过内存的页表进行
实际上,查找联想存储器和查找内存页表是并行进行的,但联想存储器的查找优先级更高,只有当通过联想存储器找不到相符的逻辑页号时才会通过查找内存页表得到物理页号
分段存储管理
段是信息的逻辑单位,因此分段系统的一个突出优点是易于实现段的共享,即允许若干个进程共享一个或多个段,可简单地实现段的保护
👉在实现程序和数据的共享时,常常以信息的逻辑单位为基础。分页系统中的每一页只是存放信息的物理单位,其本身没有完整的意义,因而不便于实现信息共享,而段却是信息的逻辑单位,有利于信息的共享和保护
👉在实际系统中,有些数据会不断地增长,而事先却无法知道数据段会增长到多大,分段存储管理方式可以较好地解决这个问题
👉分段系统中的逻辑地址由 段号和端内地址组成。
.
虚拟存储管理
如果一个作业的部分内容装入主存便可开始启动运行,其余部分暂时留在磁盘上,需要时再装入主存。这样,可以有效地利用主存空间。
👉从用户角度看,此系统所具有的主存容量将比实际主存容量大得多,人们把这样的存储器称为虚拟存储器
👉虚拟存储器是为了扩大主存容量而采用的一种设计方法,其容量是由计算机的地址结构决定的
时间局限性
👉如果程序中的某条指令一旦执行,则不久的将来此指令可能再次被执行
👉如果某个存储单元被访问,则不久以后此存储单元可能再次被访问
👉产生时间局限性的典型原因是程序中存在着大量的循环操作
空间局限性
👉一旦程序访问了某个存储单元,则在不久的将来,其附近的存储单元也最有可能被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围内
👉其典型原因在于程序是顺序执行的
👉虚拟存储器具有请求调入功能和置换功能,可以把作业的一部分装入主存使其开始运行,能从逻辑上对主存容量进行扩充
👉虚拟存储器的逻辑容量由主存和外存容量之和以及CPU可寻址的范围来决定,其运行速度接近于主存速度,成本接近于外存
文件和树型目录结构
绝对路径:从盘符开始(/)
相对路径:从当前路径开始
数据结构与算法基础
树与二叉树 基础算法以及时间,空间复杂度(必考) 线性表
数组及稀疏矩阵
数组
一维数组
LOC:首元素地址
L:元素大小
求a[i]的地址
下标从0开始: a[i] = LOC+ i*L
下标从0开始: a[i] = LOC+ (i-1)*L二维数组
LOC:首元素地址
L:元素大小
N:行数
M:列数
求a[i,j]的地址
按行优先存储且下标从0开始:LOC+(i*M+j)*L
按行优先存储且下标从1开始:LOC+((i-1)*M+(j-1))*L
按列优先存储且下标从0开始:LOC+(j*N+i)*L
按列优先存储且下标从1开始:LOC+((j-1)*N+(i-1))*L
稀疏矩阵
即元素先以上下三角矩阵方式排列,然后将其存入数组
对稀疏矩阵进行压缩存储的方式是:三元组顺序表和十字链表
考察:计算矩阵中某一个元素对应的数组的下标
数据结构的定义及线性表的概念
数据结构就是数据存储,组织数据的方式
数据逻辑结构
线性结构:线性表
非线性结构:树形结构,图(可能存在环路)
线性表:是线性结构的基本表现,常见的有两种存储结构 顺序表,链表(不连续的空间下存储数据)
链表:单链表 ,循环链表,双向链表 (需要看看);特点:查询慢,增删快
需要掌握 链表的基本操作(单链表,双向链表的插入删除)
顺序存储与链式存储的比较
空间性能的比较
顺序存储存储密度为1(更优秀),链式存储存储密度小于
容量分配:顺序存储需要事先确定,链式存储则是动态修改
时间性能的比较
查找:普遍情况两者相同,特殊情况顺序表更方便
读:顺序表更优秀
插入:链式存储更优
删除:链式存储更优
队列与栈
栈和队列都属于操作受限制的线性表
队列:两端操作,先进先出
循环队列:是一种特殊队列,尾指针会随着节点的依次存储而主键后移至与头指针重合,队满条件 = 队空条件 头指针 = 尾指针
解决队满与队空判断条件容易混淆的方法:少存一个节点 此时队满条件为(tail+1)%size =head (tail:尾指针)
栈:一端操作,先进后出或者叫后进先出
广义表
考察广义表的长度计算、深度计算、head及tail运算
广义表:是n个表元素组成的有限序列,是线性表的推广,通常用递归形式定义,就是表内包含表(嵌套)
LS=(a0,a1,…an) n是广义表的长度 n=0说明这个广义表是空表,递归定义的重数就是广义表的深度(基层,多深?),原子的深度为0(里面没得再嵌套了),空表的深度为1
1.head运算:即“取表头”(表头就是最外层的第一个表元素)
2.tail运算:即取“表尾”(表尾就是除了表头以外的所有其他元素组成的新广义表)
树与二叉树
结点:1 2 3 4 5 6 7 8 都是
结点的度:结点子结点的个数
树的度:树中结点的度最高的那结点的度数
叶子结点:没有子结点的结点
分支结点:有分支的结点
内部结点:除了叶子结点和跟结点
父结点和子结点:相对概念 1是2 3 的父 2 3 是1的子
兄弟结点:属于同一个父结点的子结点之间称为兄弟结点
层次:就是行数
满二叉树
概念:整个树可以构成一个完整的三角形(倒数第二行(层)的结点的度都为2)
完全二叉树
概念:如果二叉树中去除最后一层为满二叉树, 且最后一层的结点依次从左到右分布,则称他为完全二叉树。
二叉树的重要特性
- 在二叉树的第i层最多有2的(i-1)次方个结点(i>=1)
- 深度为k的二叉树最多有2的k次方-1个结点(k>=1)
- 对于任何一棵二叉树,如果其叶子结点为n0 度为2的结点数为n2 则 n0 = n2+1
- 如果有一颗有n个结点的完全二叉树的结点按照层序编号(从第1层到(log2n)+1层),每层从左到右,对于任一结点i(1<=i<=n) 则有
- 如果i=1,则i没有父结点,是这个完全二叉树的根;如果i>1,则父结点是i/2;
- 如果2i>n,则结点i为叶子结点,且无左子结点;否则,其左子结点为2i;
- 如果2i+1>n,则无右子结点;否则,其右子结点为2i+1
二叉树遍历
前序(根左右) 中序(左根右) 后序(左右根)
考点:知道二叉树的遍历序列,反向退出二叉树的构造
核心要点:可以根据前序遍历推导出根结点,以及初步分析出左右子树,再根据中序或者后序遍历取构造左右子树,当然了左右子树的根结点还是需要前序遍历判断,中序和后序都可以判断出一个二叉树的最左边的结点。
树转二叉树
从根结点开始,从左往右,每个结点的的第一个子结点都会成为他的左子结点,其他子结点会成为左子结点的右子结点
查找二叉树
概念:每一个根结点的左子树结点的键值都小于根结点,根结点的右子树结点都大于跟结点
价值:这种二叉树能极大地提高查询的效率和速度
插入运算:如果键值存在,则不再插入;
插入运算:插入的结点大于父结点就放右边,小于就放左边;
删除结点:
1.如果删除的是叶子结点,则直接删除
2.如果不是,且删除的结点只有一个子结点,则直接将这个子结点与父结点连接
3.若删除的结点有两个子结点,若待删除结点p有两个子结点,则在其左子树上,用中序遍历寻找键值最大的结点s,用结点s的值代替结点p的值,然后删除原结点s,结点s必属于上述(1)或(2)
若查找二叉树为空树,则以欲插入的新结点为查找二叉树;
最优二叉树(哈夫曼树)
概念:这种二叉树是一种工具,用于哈夫曼编码,哈夫曼编码是一种无损压缩的方式,哈夫曼树中每一个父结点的键值都等于其子结点之和(不是子树结点);
1.树的路径长度:在树种指定一条路径,将路径的段数相加
2.权:在最优二叉树中某个叶子结点的键值(代表了某个字符出现的频度)
3.带权路径长度:结点的带权路径长度(路径长度乘以权),二叉树的带权路径长度(为所有结点的带权路径长度之和)
4.哈夫曼设计思想:让二叉树的带权路径长度尽可能小。
线索二叉树
由于二叉树中有许多结点处于空闲的状态,有许多指针并未被利用,而将其空闲资源利用起来方便遍历则是线索二叉树的由来,线索二叉树根据遍历的分类可以被分成三种线索二叉树:前序二叉树、中序二叉树、后序二叉树
平衡二叉树
概念:任意结点的左右子树深度不能相差超过1,即每结点的平衡度(该结点的左右子树结点的深度之差)只能为-1、0或1
平衡二叉树的查询效率远远高于一般的排序二叉树
图
无向图:
有向图:有箭头指向
邻接矩阵
邻接表
图的遍历:深度,广度
拓扑排序
用一个序列来表达哪些事件可以先执行,哪些事件可以后执行
1.AOV网络:我们把用有向边表示活动之间开始的先后关系,这种有向图称之为用顶点表示活动网络,简称AOV网络
图的最小生成树
最小生成树:如图若有a个顶点,则在图中取a-1条边,用这些顶点和边重新构成一个树,而路径值最短的情况下的树即为最小生成树
1.普利姆算法
普利姆算法(最近点法):任选一个结点A并将其标定为红点集,其余所有结点标定为蓝点集,然后将离红点集A距离最短的结点B连接起来并将其也纳入红点集,然后继续寻找蓝点集和红点集之间的最短距离结点并将其纳入红点集,重复该操作直至所有结点被纳入红点集(将结点纳入红点集时注意不能形成环)
2.克鲁斯卡尔算法
克鲁斯卡尔算法(最近边法):任选一条边并将其标定为红点集,其余所有边标定为蓝点集,然后将离红点集边端点距离最短的边连接起来并将其也纳入红点集,然后继续寻找蓝点集和红点集之间的最短距离边并将其纳入红点集,重复该操作直至红点集纳入了结点数-1数量的边(将边纳入红点集时注意不能形成环)
算法基础
特点:
有穷性:算法必须在有穷步后结束
有效性:算法的每个步骤都能有效执行并能得到确定的结果。如a=0,b/就无效
确定性:算法中每一条指令都必须有确切的含义,不能含糊不清
0个或多个输入
1个或多个输出
时间复杂度的概念:时间复杂度是指程序运行从开始到结束所需要的时间。
O(1)<O(log2n)<O(nlog2n)<O(n)<O(n的2次方)<O(n的3次方)<O(2的n次方)<O(!n)<O(n的n次方)
加法规则:多项相加,保留最高项,系数化为1
乘法规则:多项相乘都保留,系数化为1
加法乘法混合规则:小括号再乘法规则最后加法规则
一般来说 :
正常操作赋值,时间复杂度为O(1)
for循环,时间复杂度为O(n)
while,时间复杂度为O(log2n)
for循环嵌套while,时间复杂度为O(nlog2n)
空间复杂度:是指对一个算法在运行过程中临时占用存储空间大小的度量。
查找–顺序查找、二分查找、散列表
顺序查找
概念:将待查找的关键字为key的元素从头到尾与表中元素进行比较,如果中间存在关键字为key的元素,则返回成功;否则,则查找失败
平均长度:(n+1)/2
时间复杂度:O(n)
优缺点:方法简单但是效率低
二分查找:必须是有序序列(从小到大或者从大到小)
概念:首先将n个有序排列数组的元素最小索引值(非零)和最大索引值相加除以二,然后对其进行向下取整,然后查询该取整后的索引值对应
的键值并与待查询键值进行比较,若小于键值则对其右边数组继续使用二分法(从小到大排列的数组中)
及时将序列中最大值和最小值相加除2后向下取整得到中间值,和所需要查询的值对比,如果中间值小于查询值,则取右边数组继续使用二分法
时间复杂度:O(log2n)
优势:效率高
散列表(不太懂)
概念:散列表查找的基本思想是:已知关键值集合U,最大关键字为m。设计一个函数Hash,它以关键字为自变量x,关键字的存储地址为因变量y,将将关键字映射到一个有限的、地址连续的区间T中,这个区间就称为散列表,散列查找中使用到的转换函数称为散列函数
散列表中可能遇到的问题:由于关键值和地址是函数关系,所以可能出现两个关键值对应同一个地址的情况
解决办法——线性探测法:按出现顺序来定义函数中y值相同的关键值的处理,如b和a冲突,则将b放在a的下一个空单元
解决办法——伪随机数法
数据的排序
稳定:直接插入,冒泡,归并,基数
不稳定:希尔,直接选择,堆,快速
.
第一章 计算机组成与体系结构;
第二章.操作系统基本原理 ;
第三章.数据库系统;
第四章.计算机网络;
第五章.系统安全分析与设计;
第六章.数据结构与算法基础;
第七章.程序设计语言与语言程序处理程序基础;
第八章.计算机软件法律法规;
第九章.软件工程概述;
第十章.面向对象设计与结构化分析设计;
第十一章.数据结构与算法应用;
软考-软件设计师 知识点整理(一篇就过了 建议收藏)
软件设计师备考全攻略
三范式
中级软件设计师计算机系统知识点速查
https://blog.csdn.net/weixin_38445123/category_11200192.html
https://www.bilibili.com/read/cv18526892
速记
软件设计师の备考经验帖及复习资料
软考高项记忆小妙招—UML
软考大题做题技巧,下午题目技巧
【软件设计师07】程序设计语言与语言处理程序基础