考点
操作系统
1、操作系统概述
1.1、操作系统功能
- 管理系统的硬件、软件、数据资源
- 控制程序运行
- 人机之间的接口
- 应用软件与硬件之间的接口
- 进程管理
- 存储管理
- 文件管理
- 作业(多个进程组成,类似于进程管理)管理
- 设备管理
- 分层:计算机硬件、操作系统、语言处理程序(系统软件)、应用软件
1.2、特殊的操作系统
分类 | 特点 |
---|---|
批处理操作系统(bat) | 单道批:一次一个作业入内存,作业由程序、数据、作业说明书组成 多道批:一次多个作业入内存,特点:多道、宏观上并行微观上串行 |
分时操作系统 | 采用时间片轮转的方式为多个用户提供服务,每个用户感觉独占系统 特点:多路性、独立性、交互性和及时性 |
实时操作系统 | 实时控制系统和实时信息系统 交互能力要求不高,可靠性要求高(规定时间内响应并处理) |
网络操作系统 | 方便有效共享网络资源,提供服务软件和有关协议(TCP/IP)的集合 主要的网络操作系统有:Unix、Linux和WindowsServer系统 |
分布式操作系统 | 任意两台计算机可以通过通信交换信息 是网络操作系统的更高级形式,具有透明性、可靠性和高性能等特性 |
微机操作系统(主机) | Windows:Microsoft开发的图形用户界面、多任务、多线程操作系统 Linux:免费使用和自由传播的类Unix操作系统,多用户、多任务、多线程和多CPU的操作系统 |
嵌入式操作系统(智能手表系统) | 运行在智能芯片环境中 特点:微型化、可定制(针对硬件变化配置)、实时性、可靠性、易移植性(HAL和BSP支持) |
进程管理
考点:进程(process)与线程(thread)的概念
- 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。它由程序块、进程控制块(PCB)和数据块三部分组成。
- PCB:PCB是进程存在的唯一标志。内容包含进程标识符、状态、位置信息、控制信息、队列指针(链接同一状态的进程)、优先级、现场保护区等。
- 程序是一个静态的概念,而进程是一动态的概念,进程是程序的一次执行过程。
- 进程的2个基本属性**:可拥有资源的独立单位;可独立调度和分配资源的基本单位**。
考点:进程的状态
三状态
- 运行:当一个进程在CPU上运行时。(单处理机处于运行态的进程只有一个且必须有一个)
- 就绪:一个进程获得了除CPU外的一切所需资源,一旦得到处理机即可运行。
- 阻塞:阻塞也称等待或睡眠状态,一个进程正在等待某一事件发生(例如请求I/O、等待I/O完成等)而暂时停止运行,此时即使把CPU分配给进程也天法运行,故称进程处于阻塞状态。
五状态
- 将优先级不高的进程挂起,先调度优先级高的进程
- 进程过多,主存资源不足,此时必须将某些进程挂起,放到磁盘对换区,暂时不参与调度,以平衡系统负载,CPU不分配时间片。
- 系统出现故障,或者是用户调试程序,也可能需要将进程挂起检查问题。
考点:信号量和PV操作
- 同步:速度有差异,在一定情况停下等待。(直接制约:生产者和消费者)
- 互斥:如千军万马过独木桥 。(间接制约)
- 临界资源:诸进程间需要互斥方式对其进行共享的资源。(进程中访问临界资源的那段代码称为临界区)
- 信号量:是一种特殊的变量,以表示资源数量; 为负数时还可以表示排队进程数。
- P是请求资源,V是释放资源
-访问权是一类特殊的互斥资源,同一时刻仅允许1个人用,则信号量初值为1。 - 同步模型中有两个信号量S1、S2,S1表示市场,初始值为1,S2表示商品初始值为0
考点:前趋图与PV操作
- 并发图中某活动有后继就有v操作释放资源,有前驱就有p操作消耗资源。
- 实现并发的信号量初值一般为0。有几个箭头就有几个信号量。
考点:死锁问题
- 死锁:两个以上的进程互相都要求对方已经占有的资源导致无法继续运行下去的现象。
- 死锁四大条件:互斥、保持和等待、不剥夺、环路等待
- 死锁处理
- 死锁的预防:(打破四大条件)、有序资源分配法、静态资源分配
- 死锁的避免:银行家算法
- 死锁的检测与解除
- 鸵鸟策略(不予理睬)
- 不发生死锁的最小资源数:(w-1)* m + 1
- 可发生死锁的最大资源数:(w-1)* m
考点:进程资源图
存储管理
考点:段页式存储
- 层次化存储体系:寄存器、Cache、高速缓存、主存、辅存(硬盘)
- 段页式存储:硬盘与主存之间如何进行数据的映射和互换
1、页式存储
- 页式存储:将程序与内存均划分为同样大小的块,以页为单位将程序调入内存。
- 优点:利用率高,碎片小,分配及管理简单
- 缺点:增加了系统开销;可能产生抖动现象
- 逻辑地址=页号+页内地址
- 物理地址=页帧号+页内地址
- 抖动现象:内存中无法将所有页载入,造成频繁的I/O操作,加重系统开销
2、段式存储
- 段式存储:按**用户作业中的自然段(程序逻辑)**来划分逻辑空间,然后调入内存(按需加载),段的长度可以不一样。
- 优点:多道程序共享内存,各段程序修改互不影响
- 缺点:内存利用率低,内存碎片浪费大
- 判断地址是否合法:看逻辑地址是否超出了段长
3、段页式存储
- 段页式存储:段式与页式的综合体。先分段,再分页。1个程序有若干个段,每个段中可以有若干页,每个页的大小相同,但每个段的大小不同。
- 优点:空间浪费小、存储共享容易、存储保护容易、能动态连接
- 缺点:由于管理软件的增加,复杂性和开销也随之增加,需要的硬件以及占用的内容也有所增加,使得执行速度大大下降
考点:磁盘管理
- 存取时间=寻道时间+等待时间+读取时间,寻道时间(由算法计算)是指磁头移动到磁道所需的时间;等待时间为等待读写的扇区转到磁头下方所用的时间。
- 多个磁片的同一磁道形成一柱面,所以磁道有时也叫做柱面。
寻道算法
- 先来先服务 (FCFS):最早到的
- 最短寻道时间优先(SSTF):最近的
- 扫描算法(SCAN):保持从里到外
- 循环扫描(CSCAN)算法:从里到外,在从外到里
- 先来先服务和最短寻道时间优先随时会改变移动臂的方向
设备管理
考点:I/O设备管理
考点:单双缓冲区计算问题
考虑并行问题
文件管理
考点:文件相关概念
- 文件:具有符号名的、在逻辑上具有完整意义的一组相关信息项的集合。
- 逻辑结构:有结构的记录式文件、无结构的流式文件。
- 物理结构:连续结构、链接结构、索引结构、多个物理块的索引表。
- 目录结构
- 一级目录结构:线性结构,查找速度慢,不允许重名和实现文件共享等
- 二级目录结构:主文件目录(MFD)+用户目录(UFD)
- 三级目录结构:树型目录结构(多级目录结构)
考点:树形目录结构
考点:索引文件结构
- 直接索引(存储大小1):直接到物理块号
- 一级间接索引(存储大小N)、二级间接索引(存储大小 N 2 N^2 N2)、三级间接索引(存储大小 N 3 N^3 N3):中间物理块也存储地址
- N = 索引块大小 / 地址项大小 N=索引块大小/地址项大小 N=索引块大小/地址项大小
考点:位示图
求解字号和位号(字长取决于系统)
- 字号:编号/字长
- 位号:编号%字长
2、算法
算法效率
- 空间复杂度:执行过程中的所用空间
- 时间复杂度:操作次数
- O ( 1 ) < O ( l o g 2 n ) < O ( n l o g 2 n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) O(1)<O(log_2n)<O(nlog_2n)<O(n^2)<O(n^3)<O(2^n)<O(n!) O(1)<O(log2n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)
查找算法
顺序查找
- 平均查找长度: n + 1 2 \frac{n+1}{2} 2n+1
- 时间复杂度:O(n)
二分查找
- 最多查找次数: l o g 2 n + 1 log_2n+1 log2n+1
- 时间复杂度:O( l o g 2 n log_2n log2n)
- 前提:有序的顺序表
哈希表查找(散列查找)
- 把具有相同特性的数字放到一组,加速查找
- 相同元素重复,只存储一遍
- 冲突处理:不同元素,映射到相同位置
- 链地址法:将所有哈希地址为i的元素构成一个单链表
- 开放地址法
- 线性探测法:顺序查找下一个空位
- 平方探测法:查找跳跃式的空位( 1 2 、 − 1 2 、 2 2 、 − 2 2 1^2、-1^2、2^2、-2^2 12、−12、22、−22)
- 伪随机探测再散列:建立一个伪随机数发生器
- 再哈希法:当通过某个哈希函数计算的key存在冲突时,再用另外一个哈希函数对这个key做哈希
排序算法
基本概念
考点:稳定排序与不稳定排序
- 定义:相同元素的相对位置不变则为稳定排序,否则则为不稳定排序
- 判断技巧:排序中进行相邻位置比较则为稳定,跨区域比较则为不稳定
- 稳定排序: 直接插入排序、冒泡排序、归并排序、基数排序
- 不稳定排序:希尔排序、直接选择排序、堆排序、快速排序
考点排序算法分类
- 插入类排序
- 直接插入排序
- 希尔排序
- 选择类排序
- 简单选择排序
- 堆排序
- 交换类排序
- 冒泡排序
- 快速排序
- 归并排序
- 基数排序
插入类排序算法
直接插入排序
- 当前i元素和前i-1个有序元素进行比较找到插入位置进行插入
- 时间复杂度:O( n 2 n^2 n2)
- 空间复杂度:O(1)
- 极端有序情况下时间复杂度为:O(n)
希尔排序
- 取一个为奇数的增量,进行分组,组内进行简单插入排序,增量迭代直到为1
- 时间复杂度:
- 时间复杂度:O($n^{1.3} $)
- 空间复杂度:O(1)
选择类排序算法
直接选择排序
- 找到最小的与第1个元素进行交换,迭代到有序
- 时间复杂度:O( n 2 n^2 n2)
- 空间复杂度:O(1)
堆排序
- 小顶堆:任何一个根节点既小于左孩子又小于 孩子
- 大顶堆:任何一个根节点既大于左孩子又大于右孩子
- 依靠堆寻找最值,取出最值之后,重新构建堆
- 构建堆:从n/2(最后一个父节点)开始,逐步调整整个树(所有父节点)
- 拿走根节点后重新构建堆:把最后一个元素放到根,然后从根开始逐层调整
- 时间复杂度:O( n l o g 2 n nlog_2n nlog2n)
- 空间复杂度:O(1)
交换类排序算法
冒泡排序
- 通过与相邻元素之间的比较和交换进行排序
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
快速排序
- 找一个基准(分组 l o g 2 n log_2n log2n组),比他小换到左边,比它大的换到右边
- 时间复杂度:O( n l o g 2 n nlog_2n nlog2n)
- 空间复杂度:O(1)
- 最差时间复杂度: O( n 2 n^2 n2)
归并类排序算法
- 将数组递归划分为小区间,再逐层合并成有序区间
- 合并两个有序区间使用两个指针去判断谁小则插入谁
- 时间复杂度:O( n l o g 2 n nlog_2n nlog2n)
- 空间复杂度:O(n)
基数排序
- 从个位到最高位、按位进行划分和排序,再拉直,直到最高位之后则为有序序列
- 时间复杂度:O( d ( 位数 ) ( n + r (取值范围) ) d(位数)(n+r(取值范围)) d(位数)(n+r(取值范围)))
- 空间复杂度:O(r)
排序算法对比
- 若待排序列的记录数自n较小,可采用直接插入排序和简单选择排序。
- 若待排记录按关键字基本有序,宜采用直接插入排序。
- 当n很大且关键字位数较少时,采用基数排序较好。
算法策略
策略概述
一、分治法
- 特征:把一个问题拆分成多个小规模的相同子问题,一般可用递归解决
- 经典问题:斐波那契数列、归并排序、快速排序、矩阵乘法、二分搜索、大整数乘法、汉诺塔
二、贪心法《一般用于求满意解)
- 特征:局部最优,但整体不见得最优。每步有明确的、既定的策略。
- 经典问题:部分背包问题、多机调度、找零钱问题,最小生成树问题(普里姆算法、克鲁斯卡尔算法)
三、动态规划法(用于求最优解)“最优子结构”和递归式
- 特征:划分子问题,使用数组存储子问题结果,利用查询子问题结果构造最终问题结果。(一般自顶向下(递归)时间复杂度为O( 2 n 2^n 2n),自底向上时间复杂度为O( n a n^a na)效率更高)
- 经典问题:斐波那契数列、矩阵乘法、背包问题、LCS最长公共子序列
四、回溯法
- 特征:系统地搜索一个问题的所有解或任一解。
- 经典问题:N皇后问题、迷宫、背包问题
- (回溯法对解空间做深度优先探索,分支限界法对解空间做广度优先探索)
3、面向对象技术
考点:基本概念
1、封装
隐藏对象属性和实现细节,仅对外公开接口
- 对象(具体的)
- 属性(数据)(+public(公共)、#protected(同胞、子类)、-private(私有)、default(同胞、子类))
- 方法 (行为、收到消息(即为调用方法))
- 对象ID
- 类(抽象的)
- 数据成员
- 成员函数
- 分类
- 实体类(数据类:例用户类):现实世界真实存在的实体有大量属性。
- 接口类(功能类、interface:例二维码类)):为用户提供系统合作交互的方式,有大量方法。
- 控制类(:例支付功能):描述业务逻辑,用来控制活动流充当实体类和接口类之间的协调者。
- 接口:只有定义没有实现
2、继承
- 子类继承父类(超类、泛型)(extends)
- 子类是父类的特殊化
- 父类是子类的泛化
- Java中子类只能有一个父类,C++中可以有多个父类
- 重写/覆盖(子类重写父类方法)发生在之间、重载(方法名相同、传参和实现不同)发生在类之内
3、多态
- 重写和重载是多态的具体表现形式
- 参数多态:应用广泛、最纯的多态。(方法参数写为父类、传递参数可谓父类或者子类)
- 包含多态:同样的操作可用于一个类型及其子类型(List<父类>)。
- 强制多态: 编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求(1+2.0)。
- 过载多态(重载):同一个名(操作符、函数名)在不同的上下文中所代表的含义不同。
- 动态绑定:运行时
- 静态绑定:编译时
考点:开发流程
开发流程
- 可行性分析
- 需求分析:得到数据流图、数据字典、ER图
- 系统设计(开发文档):概有设计、详细设计
- 书写代码
- 测试
- 上线维护
面向对象的开发流程
- 面向对象分析
- 认定对象(名词)
- 组织对象(抽象成类)
- 对象间的相互作用
- 基于对象的操作
- 面向对象设计
- 识别类及对象
- 定义属性
- 定义服务
- 识别关系
- 识别包
- 面向对象程序设计
- 程序设计范型
- 选择一种开发语言
- 面向对象测试
- 算法层
- 类层
- 模板层
- 系统层
7大原则
- 单一职责原则:设计目的单一的类
- 开放-封闭原则:对扩展开放,对修改封闭
- 里氏(Liskov)替换原则:子类可以替换父类
- 依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程不要针对实现编程
- 接口隔离原则:使用多个专门的接口比使用单一的总接口要好
- 接口重用原则:要尽量使用组合,而不是继承关系达到重用目
- 迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解
包设计其他原则
- 重用发布等价原则:重用的粒度就是发布的粒度。
- 共同封闭原则:包中的所有类对于同一性质的变化应该是共同封闭的。
- 共同重用原则:一个包里的所有类应该是共同重用的。如果重用了包里的一个类,那么就要重用包中的所有类。
- 无环依赖原则:在包的依赖关系图中不允许存在环,即包之间的结构必须是一个直接的无环图形。
- 稳定抽象原则:包的抽象程度应该和其稳定程度一致
- 稳定依赖原则:朝着稳定的方向进行依赖。
4、UML(Unified Modeling Language,统一建模语言)
- 类图:一组对象、接口、协作和它们之间的关系;对系统词汇(类名)、简单协作(继承多态)、逻辑数据库模式建模(类->表)
- 对象图:一组对象以及它们之间的关系;运行时的某一刻对象间的关系;命名(类名:对象名 )
- 用例(功能)图:用例、参与者以及它们之间的关系;偏向代码实现
- 序列图:场景的图像化表示单一功能,以时间顺序组织的对象间的交互活动
- 通信图:单一功能强调收发消息的对象之间的组织结构
- 状态图:展现了一个状态机,由状态、转换、事件和活动组成
- 活动图:专注于系统的动态视图,一个活动到另一个活动的流程;偏业务逻辑
- 组件图:组构件(系统模块)之间的组织和依赖,专注于系统的静态实
现视图 - 部署图:运行处理结点以及构件的配置,给出体系结构的静态实施视图
考点:UML中的关系
类图中的关系
- 关联关系:类A中方法getB可以拿到类B对象,反之亦然
- 依赖关系:类A中的某个方法需要用到类B
- 泛化关系:子类泛化为父类;只需要记住为子父类间的关系
- 实现关系:子类为父类的实现;只需要记住为子父类间的关系
- 聚合关系:有聚有散;1-N的关系;B{List}
- 组合关系:分散则为空
用例(功能)图中的关系
- 包含(include)关系:当可以从两个或两个以上的用例中提取公共行为时应该使用包含关系来表示它们,其中这个提取出来的公共用例称为抽象用例,而把原始用例称为基本用例或基础用例;从大功能指向小功能;执行大功能时一定会触发;
- 扩展(extend)关系:如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,这样使描述可能更加清晰;从小功能指向大功能;在特定情况下会触发;
- 泛化关系:当多个用例共同拥有一种类似的结构和行为的时候,可以将它们的共性抽象成为父用例,其他的用例作为泛化关系中的子用例。在用例的泛化关系中,子用例是父用例的一种特殊形式,子用例继承了父用例所有的结构、行为和关系。
考点:UML中的图
1、类图/对象图
一组对象、接口、协作和它们之间的关系;
- 第一行:类名
- 第二行:属性
- 第三行:方法
- 关系(线)
- 多重度
- 1:1个对象
- 0…*:0个或多个对象
- 1…*:1个或多个对象
- 0…1:0个或1个对象
对象图:区别只在于名字(类名:/类名:对象名)
2、用例图
用例、参与者以及它们之间的关系
用例建模的流程
- 识别参与者(必须)
- 合并需求获得用例(必须)
- 细化用例描述(必须)
- 调整用例模型(可选)
3、顺序图
某个功能一组对象或参与者以及它们之间可能发送的消息构成。
- 实线箭头:调用消息
- 虚线箭头:返回消息
- 备注:以()为标准,有()为调用方法;没有则为返回数据
4、通信图
顺序图强调的是时序,通信图强调的是对象之间的组织结构(关系)
5、活动图
某个功能在业务逻辑上如何实现,强调对象间的控制流程。
- 并发分叉
- 并发回合
- 监护表达式
泳道图
- 将对应功能设计到对应类内
6、状态图
- 状态图描述一个状态机,它由状态转移、事件和活动组成。
- 由以下五部分进行构成:一般状态(起始状态,终止状态)、事件、监护条件、动作,转移(又叫转换)
- 格式:事件(参数)【条件】/动作
事件类型
- 信号事件: 对象之间发送信号和接收信号实现通信,如鼠标
- 调用事件: 一个对象请求调用另一个对象的操作!如方法调用
- 变换事件: when后面接布尔表达式如when(A>100)
- 时间事件: 到达某一时间或经过某一个时间段,用when和after表示
一个状态有几个部分
- 状态名(name)
- 进入/返出动作(entry/exit action)
- 内部转移(internal transition)
- 子状态(substate)
- 延迟事件(deferred event)
7、构件图
- 构件即为系统模块,用于表示系统的静态设计实现视图。
8、部署图
给出架构的静态部署视图,通常一个节点包含一个或多个部署图;与硬件有关。
5、设计模式(23种)
- 考法1:识别设计模式(应用场景-文本)
- 考法2:识别设计模式(图示)
- 考法3:设计模式分类
- 考法4:设计模式类图组成部分分析
一、创建型设计模式(5种)
1、抽象工厂模式(Abstract Factory)
- 提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类。
- 可以生产多个产品
- AbstractFactory:抽象工厂,声明抽象产品的方法
- ConcreteFactory:具体工厂,执行生成抽象产品的方法,生成一个具体的产品。
- AbstractProduct:抽象产品,为一种产品声明接口。
- Product:具体产品,定义具体工厂生成的具体产品的对象,实现产品接口。
- Client:客户,我们的应用程序使用抽象产品和抽象工厂生成对象。
2、工厂模式(Factory Method)
- 定义一个创建对象的接口,但由子类决定需要实例化哪一个类。工厂方法使得子类实例化的过程推迟。
- 只生产一个产品
- Product:产品角色定义产品的接口。
- ConcreteProduct:真实的产品,实现接口Product的类。
- Creator:工厂角色声明工厂方法(Factory Method),返回一个产品。
- ConcreteCreator:真实的工厂实现Factory Method工厂方法,由客户调用,返回一个产品的实例。
3、原型模式(Prototype)
- 用原型实例指定创建对象的类型,并且通过拷贝原型来创建新对象,实现快速拷贝 。
- Prototype:抽象原型类,定义具有克隆自己的方法的接口。
- ConcretePrototype:具体原型类,实现具体的克隆方法。
- Client:客户。
4、单例模式(Singleton)
- 保证一个类只有一个实例,并提供一个访问它的全局访问点。
- static保证可以使用类名调用方法
5、生成器模式。(Builder)
- 将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示。
- 构建过程相同,但是根据传入的参数不同,生成的表示也不同
二、结构型设计模式(7种)
1、适配器模式(Adapter)
- 将一个接口转换成用户希望得到的另一种接口。它使原本不相容的接口得以协同工作。
- 目标抽象(Target)类:定义客户要用的特定领域的接口。
- 适配器公接口(Adapter):调用另一个接口,作为一个转换器。
- 适配器母接口(Adaptee):Adapter需要接入。
- 客户调用(Client)类:协同对象符合Adapter适配器(公接口)
2、桥接模式
- 将抽象部分与它的实现部分分离,使它们都可以独立地变,基于imp可以将主体部分和实现部分结合起来。
- Abstraction:抽象类定义抽象类的接口。维护一Implementor(实现抽象类)的对象
- RefinedAbstraction:扩充的抽象类,扩充由Abstraction定义的接口。
- lmplementor:实现类接口,定义实现类的接口,这个接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同,一般来讲,Implementor接口仅仅给出基本操作,而Abstraction接口则会给出很多更复杂的操作。
- Concretelmplementor:具体实现类,实现Implementor定义的接口并且具体实现它。
3、组合模式(Composite)
- 将有层级关系的多个对象组合成树型结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
- Leaf:叶部件,在组合中表示叶节点对象,叶节点没有子节点。定义组合中原有接口对象的行为。
- 组合类,定义有子节点(子部件)的部件的行为。
- Composite:Component接口中实现与子部件相关的操作。
- Client:客户应用程序,通过Component接口控制组合部件的对象。
4、装饰模式(Decorator) - 动态地给一个对象添加一些额外的职责、功能。它提供了用子类扩展功能的一个灵活的替代,比派生一个子类更加灵活。
- Component:部件,定义对象的接口,可以给这些对象动态的增加职责(方法)
- Concrete Component:具体部件,定义具体的对象,Decorator可以给它增加额外的职责(方法)
- Decorator:装饰抽象类,维护一个内有的Component,并且定义一个与Component接口一致的接口。
- Concrete Decorator:具体装饰对象,给内在的具体部件对象增加具体的职责(方法)。
5、外观模式(Facade)
- 为子系统中的一组接口对外提供一个唯一的接口,从而简化了该子系统的使用。
- Facade:外形类,知道哪些子系统负责处理哪些请求,将客户的请求传递给相应的子系统对象处理。
- Subsystem:子系统类,实现子系统的功能,处理由Facade传过来的任务。子系统不用知道Facade,在任何地方也没有引用Facade.
6、享元模式(Flyweight)
- 享元**(轻量级)模式的意图是:提供支持大量细粒度对象共享元对 象的有效方法**。
- Flyweight:抽象轻量级类,声明一个接口,通过它可以接受外来的状态并作出处理。
- ConcreteFlyweight:具体轻量级类,实现Flyweight接
- UnsharedConcreteFlyweight:不共享的具体轻量级
- UnsharedFlyweight对象常常将ConcreteFlyweight对象作为子节点。
- FlyweightFactory:轻量级类工厂,创建并且管理flyweight对象确保享用flyweight。
Client:客户应用程序。
7、代理模式
- 为对象提供一个代理,通过代理访问这个对象。
- Proxy:代理维护一个引用使得代理可以访问实体,如果RealSubject和Subject的接口相同,则Proxy会引用Subject。其他功能取决于Proxy的类型。
- 远程代理:负责对请求及其参数编码,向不同地址空间中的实体发送已编码的请求。
- 虚拟代理:可以缓存实体的其他信息,以便延迟对它的访问。
- 保护代理:检查调用者的请求是不是有所需的权限。
- Subject:抽象实体接口,为RealSubject实体和Proxy代理定义相同的接口,使得RealSubject在任何地方都可以使用Proxy来访问
- RealSubject:真实对象,定义Proxy代理的实体。
三、行为型设计模式(11种)
1、观察者模式(0bserver)
- 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
- Concrete Subject:具体被观察对象,存储具体观察者,Concrete Observer有兴趣的状态。当其状态改变时,发送一个通知给其所有的观察者对象。
- Observer:观察者,定义一个更新接口,在一个被观察对象改变时应被通知。
- Subject:被观察对象,了解其多个观察者,任意数量的观察者可以观察一个对象,提供一个接口用来绑定以及分离观察者对象。
- Concrete Observer:具体观察者,维护一个对ConcreteSubject对象的引用。
2、访问者模式(Visitor)
- 一个作用于某对象结构中的各元素的操作,使得在不改变各元素的类的前提下定义作用于这些元素的新操作。
- Visitor:抽象访问者,为对象结构类中每一个ConcreteElement的类声明一个Visit操作。
- ConcreteVisitor:具体访问者,实现每个由Visitor声明的操作。
- Element:元素,定义一个Accept操作,它以一个访问者为参数
- ConcreteElement:抽象具体元素,实现Accept操作,该操作以一个访问者为参数。
- ObjectStructure:对象结构类。
3、状态模式(State)
- 允许一个对象在其内部状态改变时改变行为。
- Context:情景类,定义客户应用程序有兴趣的接口,维护一个Concrete State(具体状态)子类的实例对象。
- State:抽象状态类,定义一个接口用来封装与Context的一个特别状态(State)相关的行为。
- Concrete State:具体状态类,每一个具体状态类(ConcreteState)实现了一个Context的状态(State)相关的行为。
4、职责链模式(Chain of Responsibility)
- 为解除请求的发送者和接收者之间耦而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链(构造一个next存储下一个对象)传递和处理该请求,直到有一个对象停止传递它。
- Handler:传递者接口,定义一个处理请求的接口。
- ConcreteHandler:具体传递者,处理它所负责的请求。可以访问链中下一个对象,如果可以处理请求,就处理它,否则将请求转发给后继者。
- Client:客户应用程序,向链中的对象提出最初的请求。
5、命令模式(Command)
- 将一个请求(方法调用)封装为一个对象从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作。
- Command:抽象命令类,声明执行操作的一个接口
- ConcreteCommand:具体命令类,将一个接收者对象绑定于一个动作。实现Excute方法,以调用接收者的相关操作(Action)
- Invoker:调用者,要求一个命令对象执行一个请求
- Receiver:接收者,知道如何执行关联请求的相关操作。
- Client:客户应用程序,创建一个具体命令类对象,并且设定它的接收者。
6、解释器模式(Interpreter)
- 给定一种语言,定义它的文法表示,并定义一个解释器,该解释器用来根据文法表示来解释语言中的句子。
- NonTerminalExpression:非终结符表达式
- Context:场景,包含解释器的所有全局信息。
- Client:客户程序,建造(或被给定)由这种语言表示的句子的抽象文法树,文法树由终结符表达式或非终结表达式的实例组成。
- AbstractExpression:抽象表达式类,定义一个接口来执行解释操作,实现与文法中的元素相关联的解释操作
- TerminalExpression:终结符表达式,实现文法中关联终结符的解释操作。文句中的每个终结符都需要一个实例。
7、 迭代器模式(lterator)
- 提供一种统一的方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
- lterator:迭代器,迭代器定义访问和遍历元素的接
- Concretelterator:具体迭代器,实现迭代器的接口,F在遍历时跟踪当前聚合对象中的位置。
- Aggregate:聚合,定义一个创建迭代器对象的接
- ConcreteAggregate:具体聚合,实现创建选代器对象返回一个具体迭代器的实例。
8、中介者模式(Mediator)
- 用一个中介对象来封装一系列的对象交互。它使各对象不需要显式地相互调用,从而达到低耦合,还可以独立地改变对象间的交互。
- Mediator:抽象中介者角色定义统一的接口用于各同事角色之间的通信。
- ConcreteMediator:具体中介者,协调各个同事对象之间实现协作的行为,掌握并且维护它的各个同事对象引用。
- Colleague:同事类,每一个同事角色都知道对应的具体中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作。
9、 备忘录模式(Memento)
- 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,从而可以在以后将该对象恢复到原先保存的状态。
- Memento:备忘录对象,保持Originator(原发器)的内部状态根据原发器来决定保存哪些内部的状态。保存原发器之外的对象访问备忘录。
- Originator:原发器,通常是需要备忘的对象自己,创建一个备忘录,记录它的当前内部状态。可以利用一个备忘录来恢复它的内部状态。
- CareTaker:备忘录管理者,只负责看管备忘录,不可以对备忘录的内容操作或者检査。
10、策略模式(Strategy)
- 定义一系列算法,把它们一个个封装起来,并且使它们之间可互相替换,从而让算法可以独立于使用它的用户而变化。
- Strategy:抽象策略类,定义一个接口给所有支持的算法,Context使用这个接口调用ConcreteStrategy定义的算法
- ConcreteStrategy:具体策略类,用ConcreteStrategy对象配置其执行环境。
11、模板方法模式(TemplateMethod)
- 定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义算法的某些特定步骤。
- AbstractClass:抽象类,定义一个抽象原始的操作,其子类可以重新定义它实现一个算法的各个步骤。实现一个模板方法定义一个算法的骨架,此模板方法不仅可以调用原始的操作,还可以调用定义于Abstractclass中的方法或者其他对象中的方法。
- ConcreteClass:具体子类,实现原始的操作以完成子类特定算法的步骤。
6、信息安全
信息安全基础知识
5个基本要素
- 机密性:确保信息不暴露给未授权的实体或进程。
- 完整性:只有得到允许的人才能修改数据,并且能够判断出数据是否已被篡改。
- 可用性:得到授权的实体在需要时可访问数据,即攻击者不能占用所有的资源而阻碍授权者的工作。
- 可控性:可以控制授权范围内的信息流向及行为方式
- 可审查性:对出现的信息安全问题提供调查的依据和手段。
加密技术与认证技术
考点:对称与非对称加密技术
- 对称加密(非公开密钥、单钥密码):双方使用相同的密钥( 秘密密钥) 对消息进行加密/解密
- 非对称加密(双钥密码体制、公钥密码体制):使用公钥加密消息,使用私钥来解密。
对称加密
- K e = K d K_e=K_d Ke=Kd;
- 特点
- 1、加密强度不高,但效率高;
- 2、密钥分发困难。
- 常见对称密钥(共享密钥)加密算法:DES、AES、3DES(三重DES)、 RC-5、IDEA算法。 口诀:3S+51。
非对称加密- K e ≠ K d K_e≠K_d Ke=Kd;
- 密钥必须成对使用(公钥加密,相应的私钥解密)
- 特点:加密速度慢,但强度高。
- 常见非对称密钥(公开密钥)加密算法:RSA、DSA、ECC。口诀:AA、CC
考点:数字签名与信息摘要
- 数字签名:用于认证;使用非对称加密算法,私钥加密公钥解密,可解密则为确定用户发送
- 接收者可验证消息来源的真实性发送者
- 无法否认发送过该消息
- 接收者无法伪造或篡改消息
- 信息摘要:用于信息的完整性,确保没有被篡改;消息摘要相同则为完整
- 常用的消息摘要算法有MD5、SHA等,散列值分别为128和160位)由于SHA通常采用的密钥长度较长,因此安全性高于MD5。
数字证书
- 解决身份认证,判断身份是否合法
网络安全协议
- PGP (Pretty Good Privacy):优良保密协议。针对邮件和文件的混合加密系统。
- SSL(Secure Sockets Layer):安全套接字协议。工作在传输层至应用层。
- TLS(Transport Layer Security):传输层安全协议。
- SET(Secure ElectronicTransaction):安全电子交易协议。用于电子商务和身份认证。普遍的说法是将其归为应用层。
- IPSEC(Internet Protocol Security):互联网安全协议。对IP包加密。网络层
- HTTP的默认端口是80、HTTPs的默认端口443
网络安全威胁
考点:网路攻击
- 主动攻击会立马造成损失
- 被动攻击不会即刻发生损失
被动攻击
主动攻击
- WEB应用防火墙:具有WEB应用相关的防护能力,比如防SQL注入、网页防篡改等功能。
考点:计算机病毒
- 病毒:编制或者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码。
- 木马:计算机木马是一种后门程序,常被黑客用作控制远程计算机的工具。
- 计算机病毒具有隐蔽性、传染性、潜伏性、触发性和破坏性等特点。
常见病毒
网络安全控制技术
1、信息存储安全
- 信息使用的安全(如用户的标识与验证、用户存取权限控制、安全问题跟踪等)
- 系统安全监控
- 计算机病毒防治
- 数据的加密
- 防治非法的攻击
2、用户识别技术
用户识别和验证。核心是识别访问者是否属于系统的合法用户,目的是防止非法用户进入系统。比如:
- 口令认证
- 生物识别认证
- U盾认证
- 多因子认证
3、访问控制技术
控制不同用户对信息资源的访问权限。
4、访问控制列表ACL
访问控制列表(ACL)是一种基于包过滤的访问控制技术它可以根据设定的条件对接口上的数据包进行过滤,允许其通过或丢弃。访问控制列表被广泛地应用于路由器和三层交换机借助于访问控制列表,可以有效地控制用户对网络的访问,从而最大程度地保障网络安全。ACL也可以结合防火墙使用。
5、网络安全漏洞扫描技术
漏洞监测和安全风险评估技术,可预知主体受攻击的可能性和具体地指证将要发生的行为和产生的后果。网络漏洞扫描技术主要包括网络模拟攻击、漏洞监测、报告服务进程、提取对象信息以及测评风险、提供安全建议和改进等功能,帮助用户控制可能发生的安全事件,最大可能地消除安全隐患。【可以发现高危风险和安全漏洞,单纯的漏洞扫描技术是不包括修复功能的】
6、入侵检测技术
通过对系统中用户行为或系统行为的可疑程度进行评估,并根据评估结果来鉴别系统中行为的正常性,从而帮助系统管理员进行安全管理或对系统所受到的攻击采取相应的对策。评估(专家系统)过程:攻击者行为与模式库可疑行为记录进行模式匹配,如果匹配成功则报警。
7、防火墙技术
防火墙的作用是防止不希望的、未经授权地进出被保护的内部网络,通过边界控制强化内部网络的安全策略。防火墙是建立在内外网络边界上的过滤封锁机制。它认为内部网络是安全和可信赖的,而外部网络是不安全和不可信赖的。
功能
- 访问控制功能
- 内容控制功能
- 全面的日志功能
- 集中管理功能
- 自身的安全和可用性
- 流量控制
- 网络地址转换(NAT)
- VPN
防火墙的工作层次是决定防火墙效率以及安全的主要因素。一般来说防火墙工作层次越低,则工作效率越高,但安全性就低了;
网络安全防范体系
- 1、物理环境的安全性:包括通信线路、物理设备和机房的安全等。物理层的安全主要体现在通信线路的可靠性(线路备份、网管软件和传输介质)、软硬件设备的安全性(替换设备、拆卸设备、增加设备)、设备的备份、防灾害能力、防干扰能力、设备的运行环境(温度、湿度、烟尘)和不间断电源保障等。
- 2、操作系统的安全性:主要表现在三个方面,一是操作系统本身的缺陷带来的不安全因素,主要包括身份认证、访问控制和系统漏洞等;二是对操作系统的安全配置问题;三是病毒对操作系统的威胁。
- 3、网络的安全性:网络层的安全问题主要体现在计算机网络方面的安全性,包括网络层身份认证、网络资源的访问控制、数据传输的保密与完整性、远程接入的安全、域名系统的安全、路由系统的安全、入侵检测的手段和网络设施防病毒等。
- 4、应用的安全性:由提供服务所采用的应用软件和数据的安全性产生,包括Web服务、电子邮件系统和DNS等。此外:还包括病毒对系统的威胁。
- 5、管理的安全性:包括安全技术和设备的管理、安全管理制度、部门与人员的组织规则等。管理的制度化极大程度地影响着整个计算机网络的安全,严格的安全管理制度、明确的部门安全职责划分与合理的人员角色配置,都可以在很大程度上降低其他层次的安全漏洞
7、数据结构
8、计算机组成原理与体系结构
考点
- 数据的表示
- 计算机结构
- Flynn分类法
- CISC与RISC
- 流水线技术
- 存储系统
- 总线系统
- 可靠性校验码
数据的表示
- R进制转十进制使用按权展开法
- 十进制转为R进制使用短除法(逆序排列余数则为结果)
考点:原码、反码、补码
- 原码:有符号位(+0/-0)
- 反码:有符号位、正数与原码相同;负数除符号位外按位取反
- 补码(适用于二进制运算):无符号位、正数与原码相同;负数在反码基础上+1
- 移码(浮点运算的阶码):在补码基础上首位取反
考点:浮点数运算
计算机结构
Flynn分类法
CISC与RISC
- CISC:计算机少、定制设计、指令复杂、数量多、差别大
- RISC:计算机数量增加、通用设计、指令数量少且接近
流水线技术
- 流水线为同步操作
流水线计算
- 流水线周期为执行时间最长的一段
- 计算公式:1条指令执行时间+(指令条数-1)流水周期
- 理论(偏多)公式: ( t 1 + t 2 + . . . + t k ) + ( n − 1 ) ∗ Δ t (t_1+t_2+...+t_k)+(n-1)*\Delta t (t1+t2+...+tk)+(n−1)∗Δt
- 实践公式 : ( k + n − 1 ) ∗ Δ t (k+n-1)*\Delta t (k+n−1)∗Δt
流水线吞吐率计算
- 指在单位时间内流水线所完成的任务(指令)数量或输出的结果数量
- 最大吞吐率取决于流水线周期即执行时间最长的一段
流水线加速比
- 完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线的加速比。
- 加速比越高,则表明使用流水线效果越好
- 断流则加速比下降
流水线的效率
- 指流水线的设备利用率。在时空图上,流水线的效率定义为n个任务占用的时空区与k个流水段总的时空区之比
- 各阶段采用相同时间效率最高
存储系统
层次化存储结构
Cache
- Cache的功能:提高CPU数据输入输出的速率,突破冯·诺依曼瓶颈,即CPU与存储系统间数据传送带宽限制。
- 在计算机的存储系统体系中,Cache是访问速度最快的层次。
- 使用Cache改善系统性能的依据是程序的局部性原理。
局部性原理
- 时间局部性:频繁访问某一变量
- 空间局部性:访问某一位置数据和其邻近数据
- 工作集理论:工作集是进程运行时被频繁访问的页面集合
主存
- 随机存取存储器:断电数据就丢失
- 只读存储器:断电数据仍在
- 地址单元:做差+1
- 存储单元位数:地址单元数*字长/片数/片内容量=存储位数
磁盘结构与参数
- 给定磁道分布求取最长和最短的读取时间
总线系统
根据总线所处的位置不同,总线通常被分成三种类型,分别是:
- 内部总线:外围芯片与处理器的连接
- 系统总线:各个插线板与系统板之间的连接
- 数据总线:传输数据
- 地址总线:32位系统管理内存为4G
- 控制总线:发送控制信号
- 外部总线:微机 和外部设备的链接
系统可靠性分析
计算可靠度
串联系统
并联系统
模冗余系统与混合系统
串并连系统
差错控制-校验码(检错和纠错)
- 码距:一个编码系统的码距是整个编码系统中任意(所有)两个码字的最小距离
- 可以提高码距实现检错和纠错
循环校验码CRC
- 可以检错但是不能纠错
- 编码尾部加入校验信息,使得编码后数据与循环校验码的生成多项式相除余数为0,除法为模2除法(按位做异或操作)
求编码结果
- 多项式转二进制(系数)
- 补0(多项式位数-1个)
- 做模2除法
- 将余数替换到刚才的补0位置,则为最终编码结果
海明校验码-难点
- 可以检错也可以纠错
- 在 2 n 2^n 2n位置放置校验数据
- 校验位为r,信息位x,之间的关系为
- 2 r > = x + r + 1 2^r>=x+r+1 2r>=x+r+1
- 将存储数据为按2进制展开,看他与哪些校验位有关则参与异或
- 纠错:将数据产生的校验码与错误校验码做异或,哪位为1则发生了错误
9、数据库系统
考点
- 数据库模式
- ER模型
- 关系代数与元组演算
- 规范化理论
- 并发控制
- 数据库完整性约束
- 分布式数据库
- 数据仓库与数据挖掘
数据库模式
三级模式-两级映射
- 内模式:管理数据如何存放
- 概念模式:数据库表
- 外模式:视图(更灵活的调用)
- 外模式-概念模式映射:表发生变化,只需要改映射关系
- 概念模式-内模式映射:存储结构发生变化,只需要改映射关系
数据库设计过程
- ER模型
- 规范化理论
ER模型
局部ER模型集成方法
- 多个局部E-R图一次集成。
- 逐步集成,用累加的方式一次集成两个局部E-R。
集成产生的冲突及解决办法:
- **属性冲突:**包括属性域冲突和属性取值冲突
- **命名冲突:**包括同名异义和异名同义。
- **结构冲突:**包括同一对象在不同应用中具有不同的抽象,以及同一实体在不同局部E-R图中所包含的属性个数和属性排列次序不完全相同。
转关系模式
- -个实体型转换为一个关系模式
- 1:1联系(最少两个关系模式,可以将联系转到两边实体的任意一方)、1:n联系(最少两个关系模式,可以将联系转到N的实体一方)、m:n联系(最少三个关系模式)
- 三个以上实体间的一个多元联系
关系代数
- 并:集合内容合并,都有内容只显示一次
- 交:求取公共部分
- 差:求取A有B没有的部分
- 笛卡尔积: A中每一行和B中每一行的乘积
- 投影(列名/列号):选择列; π \pi π(1,2,4)
- 选择:选择行: σ \sigma σ(1,2,4)
- 联接(必须有相同字段):有连接条件(无条件则相同字段做等值)可以做字段选择( π \pi π(1,2,4))
联接
规范化理论
函数依赖
- 函数依赖:设R(U)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u[X]=v[X],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X→Y。由X可以确定Y;
价值与用途
- 非规范化的关系模式,可能存在的问题包括:数据几余、异常、删除异常
键
- 超键:唯一标识元组(存在冗余)
- 候选键:超键去除冗余(可有多个)
- 主键:只有一个
- 外键:其他关系的主键
求解候选键
- 将关系模式的函数依赖关系用“有向图”的方式表示
- 找入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集即为关系模式的候选
- 若入度为0的属性集不能遍历图中所有结点,则需要尝试性的将一些中间结点(既有入度,也有出度的结点)并入入度为0的属性集中,直至该集合能遍历所有结点,集合为候选键
范式
- 第一范式(1NF):在关系模式R中,当且仅当所有域只包含原子值,即每个分量都是不可再分的数据项,则称R是第一范式。
- 第二范式(2NF):当且仅当R是1NF,且每一个非主属性完全依赖主键(不存在部分依赖(双主属性))时,则称R是第二范式。(消除非主属性对候选键的部分依赖)
- 存在 数据冗余、更新异常、插入异常、删除异常
- 解决将部分依赖的非主属性提取出来重新构建关系模式,原表删除非主属性
- 第三范式(3NF):当且仅当R是1NF,且E中没有非主属性传递依赖于码时,则称R是第三范式。(消除非主属性对候选键的传递依赖)
- 存在 数据冗余、更新异常、插入异常、删除异常
- 将冗余数据列独立出来,成立一个新的关系模式
- BC范式(BCNF):设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码。(依赖关系的左边部分都是候选键)
模式分解
- 保持函数依赖分解:将原有的所有函数依赖关系都保存到新拆分关系中,冗余的不需要保存
- 无损分解:将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式
- 有损:不能还原。
- 无损:可以还原
一分为二,确定是否为无损分解
- 先做交集
- 做差
- 判断依赖关系
并发控制
并行问题
- 一级封锁协议。事务T在修改数据R之前必须先对其加X(写)锁,直到事务结束才释放。可防止丢失修改
- 二级封锁协议。一级封锁协议加上事务T在读取数据R之前先对其加S(读)锁,读完后即可释放S锁。可防止丢失修改,还可防止读“脏”数据。
- 三级封锁协议。一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。可防止丢失修改、防止读“脏”数据与防止数据重复读
- 两段锁协议。可串行化。可能发生死锁
数据库完整性约束-提高数据可靠性
- 实体完整性约束:主键的值不为空不得重复
- 参照完整性约束:外键必须为另一张表内的内容(允许为空)
- 用户自定义完整性约束:年龄(范围)
- 触发器:脚本约束数据要求
数据库安全
数据库备份和恢复
数据仓库与数据挖掘
反规范化-牺牲空间提高查询速度
- 由于规范化会使表不断的拆分,从而导致数据表过多。这样虽然减少了 数据冗余,提高了增、删、改的速度,但会增加查询的工作量。系统需要进行多次连接,才能进行查询操作,使得系统效率大大下降
- 技术
- 增加派生性冗余列
- 增加冗余列
- 重新组表
- 分割表
大数据
10、计算机网络
七层模型
统一的标准和协议
- 只使用前两层协议交换数据的设备处于一个局域网
技术标准与协议
- IP:IP地址
- ICMP:ping连接
- IGMP:IPV4组播成员管理协议
- ARP:IP->MAC
- RARP:MAC->IP
- TCP:可靠、面向连接
- UDP:不可靠
- POP3、SMTP:邮件
- Telnet:远程连接
- HTTP:网页数据
- FTP:文件传输
- DHCP:IP地址动态分配
- TFTP:小文件传输协议
- SNMP:网络管理标准协议
- DNS:域名解析为IP地址
- Samba:文件共享协议(可跨平台)
- CIFS:文件共享协议
- NFS:文件共享协议
- 迭代查询:收到请求,不向下传递直接返回
- 递归查询:收到请求,向下传递,拿到结果再返回
计算机网络分类
- 星型:易单点故障
网络规划与设计
逻辑网络设计
分层设计
IP地址与子网划分
解决分类太大或太小问题-----子网划分
求子网掩码
判断两个IP地址是否在一个子网:化为十进制,判断网络号和子网号分别是多少位,看是否相同,相同则为一个子网
无分类编制
特殊含义的IP地址
HTML
无线网
无线接入技术
IPV6
11、程序设计语言(编译原理)
考点
- 编译与解释
- 文法
- 正规式—有限自动机
- 表达式
- 传值与传址
- 多种程序语言特点
编译与解释
- 目标代码是中间代码的底层表达
- Java/.Net 不生成目标代码,只基于中间代码和虚拟机进行运行
文法
语法推导树
正规式和有限自动机
有限自动机
- 能否解析出01串(看能否找到起点到终点的这个串)
正规式
- 1、层层解析,看能否得出对应的串
- 2、看正规式能否表示上面正确的各个选项且无法表示错误的选项
正规式转NFA
NFA转DFA
- 子集法
- 快捷方法:初态和终态相同、且识别的字符串相同
表达式
传址与传值
- 形参
- 实参
- 传值还是引用
多种程序语言特点
12、法律法规
保护期限
知识产权人确定
侵权判定
标准化
13、多媒体基础
考点
- 多媒体技术基本概念
- 多媒体相关计算问题
- 常见多媒体标准
- 数据压缩技术
多媒体技术基本概念
音频相关概念
- 采样频率应为声音最高频率的两倍
图像相关概念
媒体的种类
多媒体相关计算问题
- 1MB=1024KB
- 1KB=1024B
- 1B=8bit
- K=1024 、k=1000
常见多媒体标准
数据压缩技术(有冗余才能压缩)
- 空间冗余(几何冗余):大面积相同颜色
- 时间冗余:视频内不变化的部分
- 视觉冗余:jpg压缩(人眼识别范围)
- 信息熵冗余:合理编码降低冗余
- 结构冗余:结构都相同
- 知识冗余:知识不记录,可以分析得出
有损压缩和无损压缩
- 无损压缩编码法(Lossless compression coding),也称冗余压缩法或熵编码法;WinRAR;可以还原到原来形式
- 有损压缩编码法(Loss compression coding),也称为熵压缩法;JPG;较高压缩比
14、软件工程基础知识
软件开发模型和方法
结构化模型:除喷泉模型
1、瀑布模型
- 各步骤分阶段进行,各阶段后做好评审再进行下一阶段
- 产生问题可以回溯,回溯之后再往下进行
- 缺点:前期需求分析难以确定,后期调整需求需要从头开始再做编码和测试
- 适用于:需求明确、二次开发
2、原型模型
- 开发前构造简易系统(前端、简要系统)探讨需求,再经过调整形成最终系统
- 一般用于需求分析阶段,针对需求不明确的情况进行解决
- 不适用于大型系统
3、演化模型
- 由原型模型逐步演化调整形成最终软件产品
4、螺旋模型
- 多个模型的组合
- 引入风险分析
5、增量模型
- 多种需求先完成核心模块,修正问题,再开发剩余模型
7、V模型
- 强调测试,细化层级测试
- 需求分析与验收测试和系统测试有对应关系(提前发现问题)
- 概要设计和集成测试对应(测试模块间的衔接)
- 详细设计和单元测试对应(测试单元设计的完善性)
8、喷泉模型
- 面向对象模型
- 迭代、无间隙
9、快速开发模型(RAD)
- 瀑布模型和构件化开发组合
- 快速构建应用系统
- 可视化(VB)则符合RAD
10、构建组装模型(CBSD)
- 各模型都做为构件,再将构件组装则构成相应的系统
- 提高复用性、可靠性、缩短时间、节省成本
- 添加架构设计、构件库建立
11、统一过程(UP/RUP)
- 多轮循环最终产出产品
- 特点:用例驱动、以架构为中心、迭代和增量
12、敏捷开发方法
- 适用于小型项目
- 小步快跑的模式;简单;快速反馈
信息系统开发方法
- 结构化方法:固化不灵活
- 面向对象方法:抽象对象、更好的复用性
- 原型法:需求不明确开发
- 面向服务方法:操作、服务、业务流程
需求分类和需求获取
结构化设计-基本原则
- 自顶向下、逐步求精
- 信息隐蔽:内部信息不展露,显示只是接口
- 模块独立
软件测试
测试原则与类型
测试用例设计
- 黑盒测试
- 等价类划分:分等级,各级选一个
- 边界值分析:选级别的边界值测试
- 错误推测:经验或灵感推断
- 因果图:由果找因推出测试用例
- 白盒测试
- 基本路径测试
- 循环覆盖测试
- 逻辑覆盖测试
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 条件判定覆盖
- 修正的条件判断覆盖
- 条件组合覆盖
- 点覆盖
- 边覆盖
- 路径覆盖
测试阶段
- 单元测试:局部模块的功能
- 集成测试:测试各模块的衔接和沟通
- 确认测试:测试需求
- Alpha测试:开发环境测试
- Beta测试:用户下载后测试
- 系统测试:测试性能、压力、可靠性
McCabe复杂度计算
- m-n+2(m为有向弧数(边数)、n为节点数)
系统运行与维护
可维护性
- 易分析性:代码规范
- 易改变性:低耦合
- 稳定性
- 易测试性
维护类型
- 改正性维护(25%):修改功能
- 适应性维护(20%):变更运行环境、外部环境或数据环境
- 完善性维护(50%):扩充功能或改善现有性能
- 预防性维护(5%):为将来维护做提前维护
软件能力成熟度模型集成(CMMI)
- 评价一个开发机构的成熟度
阶段级-组织能力成熟度
- 已管理级:项目级
- 已定义级:组织级、文档化;标准化
- 定量管理级:量化管理
- 优化级:持续优化
连续式-软件过程能力
- 过程管理
- 项目管理
- 工程
- 支持
项目管理
时间管理
- 优点:明确表达时间关系
- 缺点:不能表达逻辑关系
计算
- 求关键路径
- 求最晚、最早时间
- 求时差
关键路径
- 关键路径:正向求最大,记录前驱,最终行程则为关键路径
- 松弛时间:总的项目时间-经过该边到终点的最长时间
- 节点最早(正向最大)最晚(反向最小)
- 边的最早(起点最早)最晚(终点最晚-边值)
- 松弛时间:线段的最晚-线段的最早=终点最晚-边值-起点最早
风险管理
- 风险:损失或伤害的可能性
分类
- 项目风险:项目评估
- 技术风险:技术开发
- 商业风险:大环境
风险曝光度(Risk Exposure):风险出现的概率乘以风险可能造成的损失。
扩展点
- VLAN的优点:允许逻辑划分网段
- www.abc.com和abc.com不是同一网址;www是主机名不可省略
- 遗传算法:繁殖、交叉、变异
- 保持函数依赖分解:将原有的所有函数依赖关系都保存到新拆分关系中,冗余的不需要保存
- 无损分解:将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式
- 递归下降分析:自上而下的语法分析
- 内聚类型
- 功能内聚:单一功能,各个部分协同工作,缺一不可处理元素相关
- 顺序内聚:必须顺序执行
- 通信内聚:所有处理元素集中在一个数据结构的区域上
- 过程内聚:必须按特定的次序执行
- 瞬时内聚(时间内聚):必须在同一时间间隔内执行完成
- 逻辑内聚:逻辑上相关的一组任务
- 偶然内聚(巧合内聚):一组没有关系或松散关系的任务
- 软件配置管理:版本控制、变更控制、过程支持
- 敏捷开发中的水晶法不同的项目需要一套不同的策略、约定和方法论
- 全局变量存储在静态数据去
- 风险优先级由风险暴露决定;风险曝光度(Risk Exposure):风险出现的概率乘以风险可能造成的损失。
- Cache中冲突最小的是全相联映射
- 先栈后队列,队列无用,出栈顺序为入队和出队顺序
- NFA转DFA快捷方法:初态和终态相同、且识别的字符串相同
- 一分为二,判断无损连接:先求交集、再做差、看能否推出
- 一个总线周期结束相应DAM
- 一个指令执行结束响应中断请求
- 虚拟存储体系:主存+辅存
- 真实存储体系:Casche+内存
- 浮点数表示范围:阶码
- 浮点数表示精度:尾数
- 计算题注意B和KB
- CISC:复杂指令系统
- 署名权、修改权、保护作品完整权都是永久的 发表权使用权获得报酬权受时间限制
- 结构化开发方法:需求明确,变化不大
- 编译中:中间代码和代码优化不是必须的
- 解释型语言参与运行控制,执行速度慢
- 原型过程模型不适用于大型系统
- 喷泉开发模型:以对象为驱动,适用于面向对象开发方法
- 逆向工程工具:软件维护
- 类的对象共享类的属性和方法
- 装饰器模式:添加额外职责
- 工厂方法:子类决定实现哪一个类
- 中介模式:后端被多个前端连接
- 数据库范式
- 1NF:不可分解
- 2NF:不存在部分依赖(完全相关、将部分依赖非主属性和主属性单独成立关系)
- 3NF:不存在传递依赖(直接相关、 将间接相关的冗余数据列独立出来,成立一个新的关系模式)
- BCNF:每个依赖的决定因素必定包含R的某个候选码,即依赖关系的左边部分都是候选键
- 4NF:消除非平凡且非函数依赖的多值依赖(即将每个多值属性拆开与实体构成新的关系模式)
- 5NF:消除不是由候选码所蕴含的连接依赖
- 物理层:中继器、集线器
- 数据链路层:网桥、交换机、网卡
- 网络层:三层交换机、路由器
- TCP流量控制协议是可变大小滑动窗口协议,可靠传输后退 N帧的 ARQ 协议和停等协议
- 子网掩码全1,则网络号全1,没有主机号,只有主机本身不需要主机号来确认身份
- 层次化局域网模型中核心层只负责高速的数据交换,因此是将分组数据从一个区域高速的转发到另一个区域