系统总线
系统总线分为三部分:
- 数据总线
- 地址总线
- 控制总线
主要作用:用于CPU、主存和外设部件之间的连接
DMA控制器/中断控制器(CPU)
DMA控制器和中断控制器(CPU)发出的数据地址:主存物理地址
释:和I/O设备相关的数据都是直接读入主存里面的,不会直接放到缓存,也不会保存到硬盘
主要作用:用于I/O设备的连接
三级存储体系
第一层:高速缓存(Cache)
第二层:主存(内存)
第三层:硬盘(外存)
海明码
k:校验位
n:信息位
存在关系:2k ≥ n + k + 1
码距:
码距≥2开始具有检错(校验)能力
奇偶校验码的码距=2
中断向量
中断向量提供:中断服务程序的入口地址
OSI参考模型
有五层和七层之分
应用层:对接用户,提供接口等服务
表示层:对内容进行格式化表示和转换数据(加密解密)
会话层:建立、维护和结束会话连接
传输层:提供可靠的数据传输服务
网络层:负责将数据包(packet)从源端传输到目的端,并处理网络路由和转发(路由器、三层交换机)
数据链路层:在物理层提供的服务基础上向网络层提供服务(网卡、网桥、交换机、无线接入点WAP)
物理层:在物理信道上透明地传输原始的比特流,为数据链路层提供数据传输服务(集线器、中继器)
PKI体系
由SSL/TSL实现HTTPS应用
浏览器和服务器之间用于加密HTTP消息的方式是:会话密钥 + 对称加密
浏览器和服务器之间用于加密会话密钥的方式是:对方公钥 + 公钥加密
著作权
署名权不能被继承。
好的软件设计原则
模块化
提高模块独立性
提高抽象层次
活动图
关键路径:用时最长的路径
位示图
作用:用1位二进制数来表示物理块的使用情况,0表示未使用,1表示已经使用
通常会提供一下参数:
计算机系统的字长,比如64位
磁盘容量,比如512GB
物理块大小,比如4MB
求位示图的大小(单位字)
计算:
①先求磁盘一共有多少个物理块:512GB ÷ 4MB = 128 × 1024 个
②求需要多少个字能完全表示这些物理块的使用情况,也就是位示图的大小:
128 × 1024 / 64 = 2048 字
磁盘调度
分为移臂调度和旋转调度
移臂调度中,先来先服务和最短寻道算法都可能随时改变移动臂的运行方向。
电梯调度和单向扫描算法则不会随意变换方向
多线程
进程中的所有资源(代码段、全局变量、打开的文件),线程都可以共享;
线程的栈指针不能被共享。
PV信号
① 先按顺序把信号量标出来,从小到大P12 P13 P23 P24 P34 P45 P46 P56
分别用 S1 S2 S3 S4 S5 S6 S7 S8 表示
② 执行前用P(Si)表示,执行后用V(Si)表示,直接按照标出来的信号量对号入座即可。
软件开发方法
原型化
开发人员首先对用户提出的问题进行总结,并就与系统的主要需求取得一致意见后,开发出一个原型并运行。随后,开发人员会反复对原型进行修改,使之逐步完善,直到用户对系统完全满意为止。
原型化开发方法的优势在于,它能够帮助开发人员更快地理解并确定用户需求,提高产品设计的质量和效率,同时也能够提高用户对产品的满意度和忠诚度。此外,原型还可以作为开发人员与用户以及团队中其他利益相关者(如产品经理、设计师等)之间沟通的桥梁,从而提高团队的协作效率。
然而,原型化开发方法也有其局限性。它可能不适用于开发大型、复杂的信息系统,因为对于大型系统来说,完全通过原型来模拟和实现所有功能可能并不实际。此外,如果系统难以维护,或者用户合作不好,盲目纠错,可能会拖延开发进度。
总的来说,原型化开发是一种动态设计过程,它需要加强用户的参与和决策,以尽快地将需求确定下来。这种方法适用于需求不明确、变化频繁的小型、简单项目,可以帮助开发人员更快地确定产品的需求和设计方案,加速开发进度。
结构化
结构化开发方法是一种用系统工程的思想和工程化的方法,按照用户至上的原则,结构化、模块化、自顶向下地对系统进行分析和设计的方法。其基本思想是软件功能的分解和抽象。
结构化开发方法的开发过程通常包括以下几个阶段:
- 系统规划阶段:根据用户的系统开发请求,进行初步调查,明确问题,确定系统目标和总体结构,确定分阶段实施进度,然后进行可行性研究。
- 系统分析阶段:分析业务流程、数据与数据流程、功能与数据之间的关系,最后提出分析处理方式和新系统逻辑方案。
- 系统设计阶段:进行总体结构设计、代码设计、数据库(文件)设计、输入/输出设计、模块结构与功能设计。根据总体设计,配置与安装部分设备,进行试验,最终给出设计方案。
- 系统实施阶段:按照系统设计成果,组织人员编程,并进行人员培训、数据准备和试运行等工作。
- 系统运行与维护阶段:进行系统的日常运行管理、评价、监理审计。在运行的过程中,系统难免会出现修改、调整和维护。如果出现了不可调和的大问题(这种情况一般是若干年后,系统运行的环境已经发生了根本的变化时才可能出现),则用户将会进一步提出开发新系统的要求,这标志着老系统生命的结束、新系统的诞生。
结构化开发方法的主要优点包括:
- 开发工作的顺序性、阶段性适合初学者参与软件的开发。
- 开发工作的阶段性评估可以减少开发工作重复性和提高开发的成功率。
- 有利于提高系统开发的正确性、可靠性和可维护性。
- 具有完整的开发质量保证措施和开发文档标准体系。
然而,结构化开发方法也存在一些不足,主要是开发周期较长,个件化开发阶段的文档编写工作量过大或过于烦琐,无法发挥开发人员的个性化开发能力。此外,该方法主要适用于组织规模较大、组织结构相对稳定的企业,这些企业往往业务处理过程规范、信息系统数据需求非常明确,在一定时期内需求变化不大。
结构化方法:这是一种基于系统工程思想的开发方法,强调开发过程的整体性和全局性。它包括结构化分析、结构化设计和结构化程序设计三个阶段,面向数据流进行开发。
Jackson方法:这是一种面向数据结构的开发方法,首先描述问题的输入/输出数据结构,分析其对应性,然后推出相应的程序结构。它以数据结构为驱动,适合小规模项目。
原型方法:在用户需求不清、需求经常变化的情况下,原型方法非常适用。它通过快速构建和展示软件原型,让用户参与反馈和修改,从而逐步明确需求。
面向对象方法:这是一种以对象作为基本元素,分析、设计和实现软件的方法。它符合人类认识世界的方式,易于理解和维护。面向对象的方法包括多种实现方式,如Booch、Coad和OMT等。
敏捷开发方法:敏捷开发方法强调快速迭代、逐步交付,以及团队协作和快速响应需求变化。它包括多种具体的开发方法,如极限编程(XP)、Scrum、看板(Kanban)等。
除了上述方法外,还有一些其他常见的软件开发方法,如:
瀑布模型:这是一种线性的开发过程,按照顺序完成需求分析、设计、实现、测试和维护等阶段。每个阶段的输出是下一个阶段的输入,各个阶段的执行是串行的。
原型模型:通过快速建立初步系统原型,进行用户反馈并交互改进的方法。
迭代模型:将软件开发划分为多个迭代周期,每个迭代周期按照瀑布模型进行开发,每个迭代周期的输出是可交付的软件产品,可以根据用户反馈进行调整。
增量模型:将软件开发划分为多个增量,每个增量包含一部分功能,完成后将其交付给用户。每个增量都是可用的软件版本,可以反馈用户需求和意见。
螺旋模型:将软件开发划分为多个循环,每个循环包含需求确定、风险分析、开发和测试等阶段。
敏捷开发方法
极限编程
关键字:4大价值观、5个原则、12个最佳实践
水晶法
关键字:策略、约定、方法论
并列争求法
关键字:30天、迭代、冲刺、优先级、多个小组并行、
自适应软件开发
关键字:6个原则
耦合
管道-过滤器体系
MaCabe计算程序复杂度
软件维护
面向对象测试
面向对象设计原则
序列图(时序图)
描述以时间顺序组织的对象之间的交互活动。
用例图
描述系统在它的周边环境的语境中所提供的外部可见服务
对象图
描述某一时刻一组对象以及他们之间的关系。
类图
描述一组对象、接口和它们之间的关系
活动图
描述系统内从一个活动到另一个活动的流程。
包图
Python
① for语句可以用在序列(如列表、元组和字符串)上进行迭代访问
② 循环结构如for和while后可以加else语句
③ 不可以用if…else和switch…else语句表示选择结构
④ 支持嵌套循环
元组
定义一个元组的语法:
x = (1,2,1,2)
x = tuple()
x = 1,2,1,2
易错:
x = (1)
这样定义出来的 x 不是一个元组,而是一个 int 类型的变量
函数依赖的公理系统
自反律
Y∈X 和 X→Y(属于和决定是相对概念)可以对倒,叫自反,这种规律就叫自反律
关系模式
例题:
推出候选关键字:
AB 能决定 C
CD 能决定 B
只有A、D是不能被决定的,所以候选关键字(主码)必然包含A和D,如ABD、ACD。
ABD,因为AB能决定C,所以可以推出ABCD
ACD,因为CD能决定B,所以可以推出ABCD
推出主属性和非主属性:
上面知道了候选关键字(主码)为ABD和ACD,所以主属性就是ABCD,全部都是。
SQL授权语句格式
哈夫曼编码
每一颗哈夫曼二叉树,每个中间节点下都是2个节点,不会是单个叶子;
哈夫曼的节点是以权重排列的,所以从最小权重的两个数开始生成;
每次用最小的两个数生成子树,然后用子树父节点和其余数重新排序,如此重复
左比右小,左0右1;
二分查找
例题
二分查找画图判断,不会有分歧,一条路下去。
森林
森林转换二叉树过程:
例题:
结论:
如果有n棵树,结点总数分别为n1+n2+…+nm,转换成一颗二叉树
那么左子树包含n1个结点,右子树包含n2+n3+…+nm个节点
Kruskal算法
例题:
Web服务器
Linux常用Apache,默认Web目录为/home/httpd(/var/www/html)
Windows常用IIS,
协议
传输层协议
TCP: 可靠,面向连接
UDP: 不可靠,无连接
实体联系图
① 椭圆是属性,方形是实体,菱形是联系
② 联系也可以有属性
③ 实体与实体之间的一 一对应关系用 1 和 *表示
④ 关系模式格式(包括实体和联系):名称(属性一,属性二…)
⑤ 主键用实线,外键用虚线
设计模式
观察者模式
该模式适合当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
邻接表、邻接矩阵
防火墙
防火墙的层次越高,效率越低,安全性越高(因为检查的东西越多,实现越复杂)
常见防火墙类型:
- 包过滤防火墙:包过滤技术是一种基于网络层、传输层的安全技术,优点是简单实用,实现成本较低同时,包过滤操作对于应用层来说是透明的,它不要求客户与服务器程序做任何修改。但包过滤技术无法识别基于应用层的恶意入侵,如恶意的Java小程序以及电子邮件中附带的病毒。
- 代理服务器防火墙:代理服务技术基于应用层,需要检查数据包的内容,能够对基于高层协议的攻击进行拦截,安全性较包过滤技术要好。缺点是处理速度比较慢,不适用于高速网之间的应用。另外,代理使用一个客户程序与特定的中间节点连接,然后中间节点与代理服务器进行实际连接。因此,使用这类防火墙时外部网络与内部网络之间不存在直接连接,即使防火墙发生了问题,外部网络也无法与被保护的网络连接。
- 电路级网关防火墙:这种防火墙工作在传送层,主要用于监视和过滤进出网络的TCP或UDP数据包。它根据数据包的连接状态信息来决定是否允许该连接。
COCOMO软件成本估算模型
COCOMO用3个不同层次的模型来反映不同程度的复杂性,它们分别为:
- 基本模型(Basic Model):是一个静态单变量模型,它用一个以已估算出来的源代码行数(LOC)为自变量的函数来计算软件开发工作量。
- 中级模型(Intermediate Model):则在用LOC为自变量的函数计算软件开发工作量的基础上,再用涉及产品、硬件、人员、项目等方面属性的影响因素来调整工作量的估算。
- 详细模型(Detailed Model):包括中级COCOMO型的所有特性,但用上述各种影响因素调整工作量估算时,还要考虑对软件工程过程中分析、设计等各步骤的影响。
统一过程UP
Rational Unified Process 是软件工程的过程。它提供了在开发组织中分派任务和责任的纪律化方法。它的目标是在可预见的日程和预算前提下,确保满足最终用户需求的高质量产品。
- “用例驱动,以体系结构为核心,迭代及增量”的软件过程框架,由UML方法和工具支持。
- 四个阶段:起始、细化、构建、移交
- 每次迭代包含:计划、分析、设计、构造、集成、测试、内部发布和外部发布
- 每个迭代有五个核心工作流
中间代码
常见的中间代码表达形式有三种:
- 后缀式(逆波兰表达式)
- 三地址码(三元式、四元式都属于三地址码的变种)
- 树
MPEG
MPEG-1 音视频编码压缩方案,用于VCD
MPEG-2 音视频编码压缩方案,用于DVD
MPEG-7 是多媒体内容描述接口标准
MPEG-21 是多媒体应用框架标准
双端队列
当双端队列要求进出同一端口时,表现为先进后出
数据库设计
简述数据库设计的六个步骤。
1)需求分析,得出数据流图DFD(Data Flow Diagram)、数据字典DD(Data Dictionary)
2)概念设计,设计E-R图(Entity-Relationship Diagram)
3)逻辑设计,设计关系模式
4)物理设计,设计数据存储结构、索引
5)数据库实施,数据装载
6)数据库运行和维护
参考教程:B站Up主 zst_2001