【软考】软件设计师知识点整理(待更新)

【软考】软件设计师知识点整理(待更新)

Note:以希赛网,信管网的题目为导向而整理的知识点

一、计算机组成与体系结构

  • 【计组】时钟周期、机器周期、指令周期、总线周期、存储周期(指令周期 > 机器周期 > 时钟周期)
    Note

    • 时钟周期:计算机中最小的时间单位,等于cpu主频的倒数。
    • 机器周期(cpu周期):计算机中为了方便管理,常把一条指令 的执行过程划分为若干个阶段(如取指、间址、执行、中断等)每一阶段完成一个基本操作。
    • 指令周期:从取指开始到执行完成该指令所需要的全部时间。指令周期包含若干机器周期。
    • 总线周期:存储器和I/O端口是挂接在总线上的,CPU对存储器和I/O接口的访问通过总线实现。把CPU通过总线对微处理器外部(存储器或I/O接口)进行一次访问所需时间称为一个总线周期。
      采用DMA方式传送数据时,每传送一个数据都需要占用一个总线周期
    • 存储周期:存储周期包含存取时间和恢复时间。指两次独立访问存储器操作之间的最小间隔。
  • 原码、反码、补码详解

  • 浮点数加减法运算(对阶(阶码小向阶码大看齐)、尾数求和、规格化、舍入、溢出判断)
    Note

    • 浮点数能表示的数的范围由 阶码 的位数决定,精度 由 尾数 的位数决定
  • 定点数的移位、加法与减法运算
    Note

    • 符号数算术运算的溢出可根据运算结果的符号位 和 进位标志判别。该方法适用于两同号数求和两异号数求差时判别溢出。溢出的逻辑表达式为:VF=SF ⨁ \bigoplus CF即利用符号位和进位标志相异或,当异或结果为1时(两符号位不同)表示发生溢出,当异或结果为0时,则表示没有溢出
    • 换句话说:两个符号位相同的补码相加,如果和的符号位与加数的符号相反,则表明运算结果溢出;
      两个符号位相反的补码相减,如果差的符号位与被减数的符号位相反,则表明运算结果溢出。
  • 计算机的内部存储(缓存cache、内存main memory)解释概念:内存 = 主存 + cache、外存 = 辅存、闪存、RAM、SRAM、DRAM、ROM、PROM、EPROM、EEPROM

  • cache-主存的三种映射方式(cache比主存快,用于平衡CPU和主存的速率,两者的地址映射需要专门的硬件自动完成)

  • 相联存储器的工作原理(按内容访存,cache、快表中应用)相联存储器(Cache,快表是一种相联存储器,按内容访问,而不是按地址访问)
    Note

    • 访问速度上看,寄存器 > 缓存 > 内存 > 闪存 > 磁盘
    • 高速缓冲存储器(缓存)一般使用是存储速度更快的 SRAM(静态随机访问存储器),成本比DRAM(动态随机访问存储器)高,为了扩大缓存容量,使用SRAM作为一级缓存,使用DRAM作为二级缓存CPU访问数据先是在一级缓存中找,找不到再到二级缓存中找,再没有就去内存中找。
    • ROM不能随意更改。ROM主要用于检查计算机系统的配置情况并提供最基本的输入输出(I/O)程序,如存储BIOS参数的CMOS芯片ROM的特点是计算机断电后存储器中的数据仍然存在
    • 主存储器就是我们常说的(狭义的)“内存” ,使用的是DRAM。它之所以叫动态,是因为将数据写入DRAM后,一段时间过后数据会丢失,需要一个额外的电路不断对其进行刷新操作才行。因为DRAM储存数据利用的是电容中是否有电荷,有代表1,无代表0。但是电容会放电或吸电,刷新操作会对其进行检查。如果电量大于满电量的1/2,则将电充满,否则将电全部放掉。
      SRAM虽然不需要刷新操作,但是断电后仍会丢失数据。 所以 RAM都要在有电源时工作
    • 内存和缓存在广义上整体被称为内存储器(简称内存)或主存储器,而其他外部不依赖电存储数据的设备(如磁盘、光盘等)统称外存储器或辅助存储器。
    • 缓存 ∉ \notin / 内存,缓存是CPU的一部分内存中被CPU访问最频繁的数据和指令复制到CPU中的缓存中。
    • 快闪存储器(闪存)是一种外部存储器,多用于照相机、音乐播放器、手机等设备(如SD卡,Secure Digital Memory Card)。现在的游戏卡一般都是闪存,U盘用的也是快闪技术。另外,快闪存储器也在作为磁盘存储器的替代品越来越多地被使用,即所谓的”固态硬盘(ssd,solid state disk)“。
      闪存在进行数据删除时不是以单个的字节为单位而是以固定的区块为单位,区块大小一般为256KB到20MB。闪存是电子可擦除只读存储器(EEPROM)的变种,EEPROM与闪存不同的是,它能在字节水平上进行删除和重写而不是整个芯片擦写,这样闪存就比EEPROM的更新速度快。由于其断电时仍能保存数据,闪存通常被用来保存设置信息。
      闪存不像RAM(随机存取存储器)一样以字节为单位改写数据,因此不能取代RAM,也不能替换主存(RAM)。但是在嵌入式中,可以用闪存代替ROM存储器。(2021上午4)
    • 在进行主存地址容量计算时,DFFFFH - A0000H = E0000H - A0000H = ( 5 − 1 ) × 1 6 4 (5 - 1) \times 16^4 (51)×164
    • CPU设置高速缓存的目的:用来解决CPU与内存之间速度、容量不匹配的问题,与外存无关,无法提高外存储器的访问速度,可以提高CPU访问主存数据或指令的效率
  • 计算机指令流水线时间计算,计算机指令-流水线和吞吐率流水线吞吐率的计算
    Note

    • 由归纳法可知,指令流水线的总执行时间 = 单条指令执行时间 +(指令条数-1)* 最长的子过程时长
  • 总线复用的概念及目的
    Note

    • 总线复用常见有:时分多路复用、频分多路复用和码分多路复用,目的是减少总线中信号线的数量。
  • 扩展操作码技术 & 单双操作数

  • 指令的寻址方式
    Note

    • 寻址是指寻找操作数的地址下一条将要执行的指令地址。确定指令存放位置的过程称为指令寻址,确定操作数存放位置的过程称为数据寻址
    • 常见的数据寻址方式包括:立即寻址(该数是操作数),直接寻址(地址码字段给出操作数的主存地址),隐含寻址,间接寻址,寄存器寻址(地址码字段给出操作数的寄存器地址),基址寻址,变址寻址等。
      其中按速度快慢排序:立即寻址 > 寄存器寻址 > 直接寻址
    • 指令系统中采用不同寻址方式目的是扩大寻址空间并提高编程灵活性
    • 计算机内存一般分为静态数据区、代码区、栈区和堆区,若某指令的操作数之一采用立即数寻址方式,则该操作数位于代码区
    • 程序运行时,需要将程序代码(机器指令序列)和代码所操作的数据加载至内存指令代码加载至代码区数据则根据绑定关系可能位于静态数据区、栈或堆区
      举一反三:直接寻址方式、间接寻址方式、寄存器寻址方式 和 寄存器间接寻址的指令操作数都位于代码区
  • 虚拟存储器

  • 中断方式DMA方式的区别 - (DMA获得总线控制权,CPU无需调用中断程序处理IO,共同点就是CPU和IO外设可以实现并行工作)查询 / 中断 / DMA / 通道

  • CPU寄存器是否对用户可见

  • 计算机组成之总线结构(单总线/多总线,总线结构可以减少信息传输线的数量)计算机总线结构详解

  • 计算机中三大总线:地址总线、数据总线、控制总线CPU数据总线和地址总线 内存和外存
    Note

    • CPU通过地址总线寻址,然后通过数据总线与外部设备互换信息(即通过地址总线确定要访问的内存地址,再由数据总线传输数据)。若内存容量为4GB,字长为32,则地址总线宽度为32 2 32 = 4 ∗ 2 10 ∗ 2 10 ∗ 2 10 = 4 G 2^{32} = 4* 2^{10} * 2^{10} * 2^{10}=4G 232=4210210210=4G),数据总线长度为32(字长32)
    • 地址总线的位数(宽度)决定CPU的寻址范围;数据总线的位数(宽度)决定CPU单次通信能交换的信息数量,即CPU与其他元器件一次最大传送的数据量
    • 总线宽度为32bit,时钟频率为200MHz,若总线上每5个时钟周期传送一个32bit的字,则该总线的带宽为:一个T 1 / ( 2 ∗ 1 0 8 ) 1/(2 * 10^8) 1/(2108) s,1s内共 2 ∗ 1 0 8 2 * 10^8 2108个周期,传输了 2 ∗ 1 0 8 / 5 2 * 10^8 / 5 2108/532bit字,共160MB/S(注意字节和比特的换算:1B = 8bit)。
  • Flynn分类法(根据指令流和数据流,对计算机体系结构分类:SISD/SIMD/MISD/MIMD)

  • CPU的RISC和CISC架构的区别
    Note

    • RISC在设计时要遵循的基本原则
      1)指令条数少,一般为几十条指令。
      2)寻址方式尽可能少。
      3)采用等长指令,不管功能复杂的指令还是简单的指令,均用同一长度.
      4)设计尽可能多的通用寄存器
    • CISC的指令丰富的优势,使得它的编译器可以少做很多事情,编译器的设计更简单.而RISC在实现一个功能的时候,需要的指令条目数会更多一些,程序也会更大。
    • CISC vs RISC
      指令系统类型指令寻址方式实现方式其它
      CISC数量多,使用频率差别大,可变长格式支持多种微程序控制技术(微码)研制周期长
      RISC数量少,使用频率接近,定长格式,大部分为单周期指令,操作寄存器,只有Load/Store操作支持方式少增加了通用寄存器,硬布线控制逻辑为主,适合采用流水线优化编译,有效支持高级语言
  • 中央处理器—CPU的功能和基本结构
    Note

    • 在编码时,每一种二进制代码,都赋予了特定的含义,即都表示了一个确定的信号或者对象。而译码就是编码的逆过程CPU中的译码器的主要作用是对指令进行译码
  • 计组中CPI和MIPS怎么算, 及其之间的换算关系
    Note

    • 假如CPU主频为2.8GHz,平均CPI为3.5, M I P S = f / ( C P I × 1 0 6 ) = 2.8 × 1 0 9 H z / ( 3.5 × 1 0 6 ) = 800 MIPS = f / (CPI \times 10^6) = 2.8 \times 10^9Hz / (3.5 \times 10^6) = 800 MIPS=f/(CPI×106)=2.8×109Hz/(3.5×106)=800
  • 奇偶校验码、海明码、CRC码
    Note

    • 在奇偶校验码中
      • 若有奇数个数据位出错,则可以检测出该错误但无法纠正错误
      • 若有偶数个数据位出错,则无法检测出该错误
    • CRC冗余校验码的计算
      • 例1:设生成多项式 G ( x ) = X 3 + X 2 + 1 G(x)=X^3+X^2+1 G(x)=X3+X2+1 ,数据序列为101001 ,求对应的CRC码?参考CRC码
        解析:通过多项式,得到除数为1101,数据序列需要左移3位(除数位-1),得到101001000,接着使用如下方法进行计算(异或运算,相同取0,不同取1) :
        在这里插入图片描述

        得到最终的余数001拼接在原数据序列101001 后面,得到CRC冗余校验码(101001 001)。

      • 例2:设生成多项式 P ( x ) = x 4 + x + 1 P(x)=x^4+x+1 P(x)=x4+x+1 ,信息码为 101011 ,求对应的CRC码?参考CRC循环冗余校验(计算机网络)
        解析:通过多项式,得到除数为10011,数据序列需要左移4位(除数位-1),得到1010110000,接着使用如下方法进行计算(异或运算,相同取0,不同取1) :
        在这里插入图片描述

      • CRC冗余校验码如何检错和纠正错误
        生成的CRC码除以生成多项式G(x)所对应的的二进制数码,若余数为0,则信息码在传输过程中没有产生错误,数据正确。

  • 吞吐量(数)和网络负载(百分比)的区别jmeter之吞吐量 / 吞吐率 / TPS / 带宽及压力测试和负载测试及其区别
    Note

    • 流水线的吞吐率是指单位时间内流水线处理机输出的结果的数目,因此流水线的吞吐率为一个流水级时间的倒数,即最长流水级时间的倒数

二、操作系统

  • 字符、字、字长、字节、比特、位

  • 操作系统中调度算法(FCFS、RR、SPN、SRT、HRRN)

  • 页面变换表

  • 位示图的概念
    Note

    • 位示图是利用二进制的一位(eg: 1bit)来表示磁盘中的一个盘块(eg:4MB)的使用情况。
  • 位示图的计算、页式存储、磁盘管理

  • 进程资源图,化简,阻塞(非阻塞),死锁(死锁并不一定会发生,死锁的四个必要条件)

  • 什么是死锁?死锁发生的四个必要条件是什么?如何避免和预防死锁产生?

  • 嵌入式系统初始化过程
    Note:嵌入式操作系统的特点:

    • 1)微型化:从性能和成本角度考虑,希望占用的资源和系统代码量少
    • 2)可定制:从减少成本和缩短研发周期考虑,要求嵌入式操作系统能运行在不同的微处理器平台上,能针对硬件变化进行结构与功能上的配置,以满足不同应用的需求
    • 3)实时性:嵌入式操作系统主要应用于过程控制、数据采集、传输通信、多媒体信息及关键要害领域需要迅速响应的场合,所以对实时性要求较高;
    • 4)可靠性:系统构件、模块和体系结构必须达到应有的可靠性,对关键要害应用还要提供容错和防故障措施
    • 5)易移植性:为了提高系统的易移植性,通常采用硬件抽象层板级支撑包的底层设计技术
  • 存储管理之页式、段式、段页式存储 以及 优缺点页式存储、段式存储、段页式存储
    Note

    • 页式管理
      • 优点:没有外碎片,每个内碎片不超过页的大小。
      • 缺点:程序全部装入内存,要求有相应的硬件支持,如地址变换机构缺页中断的产生和选择淘汰页面等都要求有相应的硬件支持。增加了机器成本和系统开销。
    • 段式管理
      • 优点:可以分别编写和编译,可以针对不同类型的段采取不同的保护,可以按段为单位来进行共享,包括通过动态链接进行代码共享。
      • 缺点:会产生碎片
    • 段页式管理
      • 优点:段页式管理是段式管理和页式管理相结合而成,具有两者的优点。
      • 缺点:由于管理软件的增加,复杂性和开销也增加。另外需要的硬件以及占用的内存也有所增加,使得执行速度下降。
  • 文件管理-索引文件结构
    Note
    假设在采用索引节点管理的某文件系统中,磁盘索引块磁盘数据块大小均为1KB每个文件索引节点有8个地址项:iaddr[0]~iaddr[7],每个地址项为4B,其中

    • iaddr[0]~iaddr[4]直接地址索引,每个直接索引地址指向一个磁盘数据块,共5个磁盘索引块;
    • iaddr[5]~iaddr[6]一级间接地址(的起始)索引,即每个一级间接地址索引指向一个磁盘索引块,该磁盘索引块可以划分成1024/4=256个间接索引地址,每个间接索引地址指向1个磁盘数据块,因此两个一级间接地址索引实际上间接指向了2 * 256 = 512个磁盘索引块;
    • iaddr[7]二级间接地址(的起始)索引(指向一级间接地址索引),即每个一级间接地址索引指向一个磁盘索引块,每个磁盘索引块又分成256一级间接地址,存放着二级间接地址索引,每个二级间接地址索引指向一个磁盘索引块,每个磁盘索引块又分成256二级间接地址,每个二级间接地址指向1个磁盘数据块,因此对于该文件的地址项iaddr[7],最多可以指向256 * 256 = 65535个磁盘数据块。

    由于每个磁盘数据块大小均为1KB,因此该文件的最大长度是(5 + 512 + 65535)* 1KB

  • 磁盘寻道调度算法(FCFS, SSTF, SCAN, CSCAN)
    Note

    • 文件的存取时间 = 寻道时间 + 等待时间,寻道时间是指磁头移动到磁道所需的时间;等待时间为等待读写的扇区转到磁头下方所用的旋转延迟时间

三、数据库系统

  • 笛卡尔积(非等值连接,左表一条元组拼接右表所有元组),等值连接,自连接,非等值连接,外连接的原理

  • 自然连接(两表相同列名自然等值拼接) & 等值连接

  • 内连接(有条件)、自然连接(无条件)、外连接的区别

  • 一文搞懂候选码、主码、全码、外码、主属性、主键、主关键字、非主属性清晰总结(候选码(画图后)可以遍历所有属性)数据库的规范理论

  • SQL 形式化语言——关系代数(⋈为自然连接,σ为选择(select),Π为投影(where))

  • 数据库范式 & 模式分解 详细介绍(1NF,2NF,3NF,BCNF,4NF)数据库的规范理论
    Note

    • 函数依赖
      • 如果码为(A,B)A,B → \rightarrow 非主属性E,则非主属性E完全函数依赖于(A,B)
      • 如果码为(A,B)B → \rightarrow 非主属性C,D,则非主属性C,D部分函数依赖于(A,B)
      • 如果码为A,存在A->BCB->DA->D,则非主属性D传递函数依赖A
    • 数据库范式
      举个例子,假设已知表SLC(Sno - 学生号, Sdept - 部门, Sloc - 学生住处, Cno - 课程编号, Grade - 学生成绩)
      • 1NF:如果一个关系模式R的所有属性都是不可分的基本数据项,则 R ∈ 1 N F R \in1NF R1NF
        第一范式是对关系模式的最起码的要求,不满足第一范式的数据库模式不能称为关系数据库

        上图中SLC符合1F,原因是 S-L-C的码为(Sno,Cno),其中:
        • (Sno,Cno) → \rightarrow 决定 → \rightarrow Grade,则非主属性Grade完全函数依赖于(Sno,Cno)
        • Sno → \rightarrow 决定 → \rightarrow SdeptSloc,则非主属性SdeptSloc部分函数依赖于(Sno,Cno)
      • 2NF的定义为:满足1NF,非主属性 完全函数依赖 于候选码
        如果去除掉1F图中的部分函数依赖,则变成如下:

        上图中SLC符合2F,原因是 S-L-C的码为(Sno,Cno),其中:
        • 非主属性Grade完全函数依赖于(Sno,Cno)
        • 非主属性SdeptSloc部分函数依赖于(Sno)
        • 在S-L中,Sno → \rightarrow 决定 → \rightarrow SdeptSloc,非主属性Sdept → \rightarrow 决定 → \rightarrow Sloc,因此存在Sno → \rightarrow SdeptSdept → \rightarrow Sloc,则非主属性Sloc传递函数依赖于Sno
      • 3NF的定义为:符合2NF,并且消除了非主属性对于候选码的 传递函数依赖
        如果去除掉2F图中S-L的传递函数依赖,则变成如下:

        将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余
    • 关系模式规范化的基本步骤
      • 目的:尽量消除插入、删除异常,修改复杂,数据冗余
      • 基本思想:逐步消除数据依赖中不合适的部分
      • 实质:概念的单一化
  • 关系模式的范式(带例题详细解析):非主属性和主码之间是否存在依赖传递

  • 什么是事务和事务回滚?

  • 数据库设计过程(需求阶段形成的数据字典,数据流图和需求说明文档是逻辑结构设计的依据)数据库设计的主要步骤

  • 三种数据模型—层次模型、网状模型以及关系模型
    Note

    • 不同的数据模型具有不同的数据结构形式。目前最常用的数据结构模型有层次模型(hierarchical model)、网状模型(network model)、关系模型(relational Model)和面向对象数据模型(object oriented model)
    • 其中层次模型和网状模型统称为非关系模型Nosql)。层次数据模型只能表示实体之间的1:n的关系,不能表示m:n的复杂关系。而网状模型结构复杂,使用不易,随着应用环境的扩大,数据结构越来越复杂,数据的插入、删除牵动的相关数据太多,不利于数据库的维护和重建。
      非关系模型的数据库系统在20世纪70年代非常流行,在数据库系统产品中占据了主导地位。到了20年纪80年代,逐渐被关系模型的数据库系统取代,但某些地方,由于历史的原因,目前层次和网状数据库系统仍在使用。
    • 关系模型sql)是目前最常用的数据模型之一。关系数据库系统采用关系模型作为数据的组织方式,在关系模型中用二维表格结构表达实体集以及实体集之间的联系,其最大特色是描述的一致性
  • 详解MySQL事务(超详细)Mysql的四个隔离级别是如何实现的
    Note

    • 4大属性:原子性/一致性/隔离性/持久性;
      • 隔离性:当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事务都是不可见的。
    • 不同隔离级别产生的问题:脏读/不可重复读/幻读
      • 脏读:
        对于两个事务 T1T2, T1 读取了已经被 T2 更新(update) 但还没有被提交(commit)的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的( T2 update → \rightarrow T1 read → \rightarrow T2 rollback ).
      • 不可重复读: 读两次前后数据变了
        对于两个事务T1T2,T1 读取了一个字段, 然后 T2 更新(update)了该字段之后, T1再次读取同一个字段, 值就不同了(T1 read → \rightarrow T2 update → \rightarrow T1 read).
      • 幻读: 读两次行数变了
        对于两个事务T1T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行之后, 如果 T1 再次读取同一个表, 就会多出几行(T1 read → \rightarrow T2 insert → \rightarrow T1 read
    • 4大隔离级别 及 如何实现:
      • 读未提交(RU:三个问题都不可以解决
        • 所有的读不加锁,读到的数据都是最新的数据,性能最好。
        • 所有的写加行级锁,写完释放。
      • 读已提交(RC使用MVVC技术实现):可以解决脏读;
        • 写操作:加行级锁。事务开始后,会在UNDO日志中写入修改记录,数据行中的隐藏列DATA_POLL_PTR存储指向该行的UNDO记录的指针。
        • 读操作不加锁。在读取时,如果该行被其它事务锁定,则顺着隐藏列DATA_POLL_PTR指针,找到上一个有效的历史记录(有效的记录:该记录对当前事务可见,且DELETE_BIT=0)。
      • 可重复读(RR:可以解决脏读和可重复读;
        • 写操作:加行级锁读操作不加锁
        • RR读写操作和加锁逻辑和RC相同,都是使用MVVC(多版本并发控制)技术实现
        • 不同点在于:行记录对于当前事务的可见性(可见性:即哪个版本的行记录对这个事务是可见的)。RC级别对数据的可见性是该数据的最新记录RR级别对数据的可见性是事务开始时,该数据的记录
      • 串行化:可以解决幻读(设置读锁(共享锁)和写锁);
    • mysql锁的分类
      • 按照锁的粒度可以把锁分为表级锁行级锁
        • 表级锁:Mysql中粒度最大的一种锁,会锁住当前操作的整张表,并发性能低,但表锁的实现简单,耗费资源少,加锁快,不会出现死锁
        • 行级锁:Mysql中粒度最小的一种锁,只会锁住当前操作的数据行。行锁极大地提高了Mysql的并发性能,但行锁的开销较大,速度较慢,会出现死锁
      • 按照锁的性质可以把锁分为共享锁排它锁
        • 共享锁(S锁):又称读锁,若事务T对数据对象A加上S锁,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁;其他事务可以读取被共享锁锁住的数据行,不能修改该数据行
        • 排他锁(X锁):又称写锁。若事务T对数据对象A加上X锁,该事务可以读取和修改该数据行,其他事务不能再对A加任何锁,直到T释放A上的锁。

四、计算机网络

五、信息安全

  • 浅谈常见的七种加密算法及实现,参考加密,签名,token解释及场景分析摘要算法和加密算法区别
    Note:

    • 摘要算法和加密算法是不同的

      • 摘要算法:用于生成签名,而签名主要用于身份验证。签名的生成方式通过密钥 + 时间 +消息内容 + 自定义算法(比如抽取消息内容中截取一些字符)来生成。
        摘要算法只能用于对数据的单项运算无法还原被摘要源数据,其特点为定长输出、雪崩效应(少量消息位的变化会引起信息摘要的许多位变化)。摘要算法有三个特性,一是不可逆,即无法从摘要算法的输出推出输入;二是唯一,即在同一种摘要算法下,不同的输入一定会产生不同的输出;三是输出结果长度固定。基于以上特性,摘要算法通常用来判断某个消息在传输过程中是否被改变,这里的改变包括恶意篡改和噪声。
        简单理解,配合密钥的摘要算法(参考token验证过程)将明文处理成密文,密文作为签名用于比较验证,无法处理成明文
      • 加密算法:加密是对数据进行机密性保护,过程是发送者对明文进行加密,接收者对密文进行解密的过程。
    • Token也是基于签名的,是在服务器端和客户端进行发送的,比如说服务器用HMAC-SHA256算法(信息摘要算法),加上一个密钥(加密算法), 对用户名的数据(通常对userId)做一个签名,并将“数据 + 签名”作为token保存在客户端的cookies中。
      在验证的时候,客户端通过cookies向服务端发送token,服务端会
      使用私钥对数据部分进行解密得到新的签名
      ,并与原token中的签名进行比较,如果相等则验证通过,如果不等说明数据已被篡改。参考加密,签名,token解释及场景分析cookie、session与token的真正区别

    • RSA是非对称加密算法;SHA-1MD5属于信息摘要算法(不属于加密算法);RC-5属于对称加密算法。

    • 这些算法中SHA-1与MD5是不能用来加密数据的,而RSA由于效率问题,一般不直接用于大量的明文加密,适合明文加密的,也就只有RC-5了。

  • 对称加密、非对称加密、摘要算法介绍
    Note

    • 公开密钥加密(public-key cryptography),也称为非对称加密(asymmetric cryptography),一种密码学算类型,在这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥
      常见的公钥加密算法有:RSAEIGamal背包算法Rabin(RSA的特例)、迪菲-赫尔曼密钥交换协议中的公钥加密算法、椭圆曲线加密算法(Elliptic Curve Cryptography,ECC);
      DSA数字签名(又称公钥数字签名), 将摘要信息用发送者的私钥加密,接收者只有用发送者的公钥才能解密被加密的摘要信息,也是属于公开密钥加密算法。
    • DES是典型的私钥加密体制,属于对称加密,不属于公开秘钥加密,所以本题选择D选项。
  • 什么是数字签名?(数字签名又称公钥数字签名)
    Note

    • 数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名用到了非对称密钥加密技术与数字摘要技术。
    • IDEADESRC4算法都是对称加密算法(私钥加密体制),只能用来进行数据加密
    • MD5算法是消息摘要算法,只能用来生成消息摘要无法进行数字签名
    • RSA算法是典型的非对称加密算法,主要具有数字签名和验证的功能。
  • 数字证书及CA详解
    Note

    • 某电子商务网站向CA申请了数字证书,用户可以通过使用 CA的公钥 验证 CA的签名 的真伪来确定该网站的合法性。
      在这里插入图片描述
    • 1)网站向机构发送公钥;
      2)机构对网站发过来的公钥用私钥对其加上数字签名(即数字证书 = 网站公钥 + 机构在网站公钥上做的数字签名);
      3)接着用户获得了网站的数字签名证书和网站的公钥,利用机构提供的公钥对数字签名进行解密,将解密后的结果与数字证书中网站所提供的原始公钥进行匹配,验证网站的公钥的合法性
      4)用户先使用网站提供的公钥对消息进行加密,再向网站发送消息。
      5)网站收到用户发过来的密文之后,使用私钥进行解密
    • 数字签名中应该没用到摘要算法,否则用户无法使用CA的公钥对CA密钥加密后的数字签名进行解密。
  • PPP与PPPoe
    Note

    • PPP的简介
      1、PPP的NCP可以承载多种协议的三层数据包
      2、PPP使用LCP控制多种链路的参数(建立、认证、压缩、回拨)
    • PPP的认证类型
      1、PPP的pap认证是通过二次握手建立认证(明文不加密
      2、PPP的chap质询握手认证协议,通过三次握手建立认证(密文采用MD5加密
      3、PPP的双向验证,采用的是chap的主验证风格
      4、PPP的加固验证,采用的是两种(pap,chap)验证同时使用
  • 公开密钥 和 共享密钥

  • 防火墙技术 - 百度百科

  • 防火墙技术(包过滤)
    Note

    • 防火墙是位于两个(或多个)网络间,实施网络间访问控制的一组组件的集合,它是一套建立在内外网络边界上的过滤封锁机制。防火墙的主要功能有:过滤掉不安全服务和非法用户;控制对特殊站点的访问;提供了监视Internet安全和预警的方便端点。
    • 漏洞扫描系统通常是指基于漏洞数据库,通过扫描等手段,对指定的远程或者本地计算机系统的安全脆弱性进行检测,发现可利用的漏洞的,利用漏洞扫描系统可以获取某FTP服务器中是否存在可写目录的信息
    • 入侵检测是防火墙的合理补充,帮助系统对付网络攻击,扩展了系统管理员的安全管理能力(包括安全审计、监视、进攻识别和响应),提高了信息安全基础结构的完整性。它从计算机网络系统中的若干关键点收集信息,并分析这些信息,看网络中是否有违反安全策略的行为和遭到袭击的迹象。入侵检测被认为是防火墙之后的第二道安全闸门,在不影响网络性能的情况下能对网络进行监测,从而提供对内部攻击、外部攻击和误操作的实时保护。
    • 病毒防御系统是一个用来防止黑客、病毒、木马的防御系统。
  • 计算机病毒的6大特征
    Note

    • 病毒的特性:计算机病毒的特性包括隐蔽性、传染性、潜伏性、触发性和破坏性
    • 感染特洛伊木马后的典型现象是有未知程序试图建立网络连接
  • 计算机病毒分类
    Note

    • 引导区病毒:破坏引导盘和文件目录。
    • 宏病毒:宏病毒感染的对象是使用某些程序创建的文本文档、数据库、电子表格等文件,比如破坏office相关文件,一般感染以doc为后缀名的文件。
    • 特洛伊木马病毒:特洛伊木马是一种秘密潜伏且能够通过远程网络进行控制的恶意程序。控制者可以控制被秘密植入木马的计算机的一切动作和资源,是恶意攻击者窃取信息的工具。比如X卧底,冰河
    • 蠕虫病毒:蠕虫程序驻于一台或多台机器中,它会扫描其他机器是否有感染同种计算机蠕虫,如果没有,就会通过其内建的传播手段进行感染,以达到使计算机瘫痪的目的。比如红色代码、爱虫病毒、熊猫烧香、Nimda病毒、爱丽兹病毒、震网病毒,欢乐时光等。
  • DDOS - 分布式拒绝服务攻击
    Note

    • 拒绝服务(DOS): 对信息或其它资源的合法访问被无条件地阻止
    • 会话拦截未授权使用一个已经建立的会话。
    • 修改数据命令截获并修改网络中传输的数据命令
    • 系统干涉:指的是攻击者获取系统访问权,从而干涉系统的正常运行,一般可以归于被动攻击。

    拒绝服务,会话拦截和修改数据命令为主动攻击,系统干涉为被动攻击

  • 网络安全管理(如何进行内防内控,强化访问控制策略:访问控制策略,网络权限控制策略等)
    Note

    • 加强内防内控主要通过访问授权、安全策略、安全检查与行为审计等多种安全手段的综合应用来实现。
    • 终端接入的数量影响的是网络的规模、数据交换的性能,不是内防内控关注的重点。

六、软件工程

  • 软件开发过程模型——喷泉模型
  • 软件工程五大模型(瀑布 / 原型 / 渐增 / 螺旋 / 喷泉)
    Note
    • 螺旋模型考虑风险因素
  • 敏捷开发方法 水晶法/Scrum/ASD(方法论和思想)
    Note
    • 极限编程是一种轻量级的开发方法,它提出了四大价值观:沟通、简单、反馈、勇气。五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。“Extreme”(极限) 是指,对比传统的项目开发方式,XP强调把它列出的每个方法和思想做到极限、做到最好;其它XP所不提倡的,则一概忽略(如开发前期的整体设计等)。一个严格实施XP的项目,其开发过程应该是平稳的、高效的和快速的,能够做到一周40小时工作制而不拖延项目进度。
    • 水晶法强调经常交付,认为每一种不同的项目都需要一套不同的策略、约定和方法论。水晶方法相较于XP,纪律性较弱,但其管理运作与团队产出相协调
    • 并列争球法SCRUM)的核心是迭代、增量交付,按照30天进行迭代开发交付可实际运行的软件。Scrum开发流程中的三大角色分别为产品负责人,流程管理员开发团队,开发方式包括站立会议,任务看板,计划纸牌
    • 自适应软件开发的核心是三个非线性的,重迭的开发阶段:猜测、合作、学习
  • 敏捷开发方法XP的12个最佳实践
  • 数据流图DFD(数据字典,结构化分析)软件工程 – 数据流图的画法软件工程:数据流图和结构图怎么画?
    Note
    • 数据流图概念
      • 数据流图是结构化分析的工具,结构化方法就是采用自顶向下逐层分解的思想进行分析建模的。随着分解层次的增加,抽象的级别也越来越低,即越来越接近问题的解。
        数据流图建模应遵循:自顶向下、从抽象到具体的原则
      • 数据流图中的基本图形元素包括数据流、加工、数据存储和外部实体。其中,数据流、加工和数据存储用于构建软件系统内部的数据处理模型,而外部实体表示存在于系统之外的对象,用来帮助用户理解系统数据的来源和去向
        外部实体包括:人/物、外部系统、组织机构等。
      • 数据源的起点和终点(外部实体)用矩形框表示,数据处理用圆角框表示,数据存储用栈/队列表示,数据流用箭头表示。
      • 数据流图中的元素在数据字典中进行定义。
      • 在绘制数据流图时,应遵循父图与子图平衡的原则,所谓平衡是指父图的输入/输出数据流与子图的输入/输出数据流一致,有时看起来不一致,但是经过查数据字典可能发现是一致的。
    • 结构图概念
      • 结构化设计方法中使用结构图来描述软件系统的体系结构,指出一个软件系统由哪些模块组成,以及模块之间的调用关系
      • 通常先根据软件的功能需求绘制数据流图,在绘制好数据流图之后,分级绘制结构图结构图的基本成分包括模块、调用和数据
        • 模块是指具有一定功能并可以用模块名调用的一组程序语句,如函数、子程序等,它们是组成程序的基本单元
        • 调用表示模块之间的关系,用从一个模块指向另一个模块的箭头来表示,其含义是前者调用了后者。
        • 数据是指模块调用过程中来回传递的信息,用带注释的短箭头表示。
  • 集成测试 - 自顶向下 & 自底向上(桩函数模拟未开发的函数)
  • 桩程序
  • 软件测试—白盒测试(先画流程图,再考虑路径覆盖还是语句覆盖),参考语句覆盖、条件覆盖(分支覆盖)、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖 的区别
    Note
    • 路径覆盖:覆盖被测试程序中所有可能的路径。
    • 条件覆盖:每一个判定语句中每个逻辑条件的各种可能的取值至少满足一次(条件语句覆盖,每个判定中包含多个条件,eg: a > 0 && b > 0)。
    • 分支覆盖:又叫做判定覆盖,被测程序每个判定表达式至少获得一次“真”值和“假”值
    • 语句覆盖:被测试程序中的每条语句至少执行一次
  • 模块的作用范围与控制范围
  • McCabe度量法
    Note
    • 在2017年上半年软件设计师上午试卷36题中,对于路径个数的计算,即计算从开始节点出发到结束节点的路径个数(这里计算共4条),而MaCabe度量法计算环路复杂度时,开始和结束节点纳入节点个数的计算中(即13 - 11 + 2 = 4)。
    • 如果题目只提供代码,不要忘了将每一个语句看成是一个节点,并补充画上“开始”和“结束”节点
  • 软件工程中的所有耦合类型软件设计模块之间7种耦合关系7大内聚类型(模块的联系程度)
    Note
    • 7大内聚类型
      • 1)功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。
      • 2)顺序内聚:处理元素相关,而且必须顺序执行
      • 3)通信内聚:所有处理元素集中在一个数据结构的区域上
      • 4)过程内聚:处理元素相关,而且必须按特定的次序执行
      • 5)瞬时内聚(时间内聚):所包含的任务必须在同一时间间隔内执行。
      • 6)逻辑内聚:完成逻辑上相关的一组任务
      • 7)偶然内聚(巧合内聚):完成一组没有关系或松散关系的任务(不是内容内聚)
    • 7大耦合类型(传参3,直接访问3):
      根据耦合性从低到高为:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合和内容耦合。
      • 1)非直接耦合:彼此间没有直接关系,而是通过主模块调用来建立两模块间的联系;
      • 2)数据耦合彼此间通过参数传递进行信息交换;
      • 3)标记耦合彼此间通过 参数表(数据结构) 传递进行信息交换
      • 4)控制耦合:模块A通过传递标志变量参数flag,或者叫做控制变量),来控制模块B执行某一个功能。
      • 5)外部耦合:一组模块访问同一个全局变量(非全局数据结构)
      • 6)公共耦合:一组模块访问同一个公共数据环境(全局数据结构,共享通信区等)
      • 7)内容耦合:模块A 直接访问模块B的内部数据;一个模块不通过正常入口转到另一个模块内部;两个模块有一部分程序代码重叠;一个模块有多个入口。
    • 软件设计原则始终强调高内聚、低耦合的设计原则,具体包括:
      1)保持模块的大小适中
      2)尽可能减少调用的深度
      3)多扇入,少扇出:
      扇入是指该模块被多少个上级模块给调用,扇入大表示模块的复用程度高
      扇出是指该模块直接调用的下级模块的个数,扇出大表示模块的复杂度高,需要控制和协调过多的下级模块。参考什么是扇入和扇出?
      4)单入口,单出口:
      单入口单出口指为了保证开发程序的质量,要求过程中的数据流控制是必须在固定的程序段入口进入, 固定的出口返回,不允许在编程中随意使用数据。参考什么是单入口单出口
      5)模块的作用域应该在模块之内
      6)功能应该是可以被预测的。
    • 耦合性也叫块间联系,指软件系统结构中各模块间相互联系紧密程度的一种度量
      模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息(模块被调用的次数),并不取决模块的功能数
  • 软件容错技术(恢复能力) - (实现容错的主要手段是冗余)
  • 冗余技术 - 结构 / 时间 /信息冗余
  • 软件调试的具体方法(演绎法,归纳法等)
  • CMM(软件能力成熟度模型)
    Note
    • 初始级(无管理,无定义):
      • 对于软件的管理制度较为缺乏,过程缺乏定义
    • 可重复级(有管理制度):
      • 管理制度化,建立了基本的管理制度以及规程,管理工作有章可循
    • 已定义级(有评审制度):
      • 在开发的过程中,技术工作以及管理工作开始文档化和标准化。采用了评审的制度保证了软件质量(关注过程的组织标准化和部署)。
    • 已管理级(有数据分析,产品质量监控过程):
      • 能够制订效率目标并且收集和测试,可以利用统计数据进行相应的改进,对于软件进程以及产品质量有定量的理解和控制(过程制度化)。
    • 优化级(过程优化):
      持续改进软件的过程,效率以及质量都稳步提升。
  • 模型驱动技术
  • 软件维护类型
    Note
    • 改正性维护是指改正在系统开发阶段已发生而系统测试阶段尚未发现的错误(维护工作量的17%~21%)。
    • 适应性维护是指使用软件适应信息技术变化管理需求变化而进行的修改(维护工作量的18%~25%)。
    • 完善性维护是为扩充功能改善性能而进行的修改,主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征(维护工作量的50%~60%)。
    • 预防性维护为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,应主动增加预防性的新的功能,以使应用系统适应各类变化而不被淘汰(维护工作量的4%)。
  • 软件维护工具(版本控制/文档分析/开发信息库/逆向工程/再工程,不包括配置管理)
  • 软件可靠性和可用性的区别(可靠性强调在时间间隔内有效,可用性强调在某时刻有效)
    Note
    • 软件产品的可靠性指的是:软件产品与在规定的一段时间内和规定的条件下维持其性能水平有关的能力,是一个系统对于给定时间间隔内、在给定条件下无失效运作的概率。它的子特性包括:成熟性、容错性、易恢复性
    • 对于软件可靠性与软件潜在错误的数量、位置有关,并且与软件产品的使用方式有关,对于软件产品的开发方式并不能决定软件产品的可靠性
    • MTTFMTTR分别表示平均无故障时间平均修复时间,则可用公式MTTF / (1 + MTTF)计算软件可靠性MTBF/(1+MTBF)可以用来度量可用性1/(1+MTTR)可以用来度量可维护性。参考MTTR、MTTF、MTBF详解
    • 计算机系统是一个复杂的系统,而且影响其可靠性的因素也非常繁复,很难直接对其进行可靠性分析。参考预测可靠性模型公式_《可靠性设计》—可靠性预计与分配
      • 若采用串联方式,则系统可靠性为每个部件的乘积 R = R 1 × R 2 × R 3 × . . . × R n R=R_1 \times R_2 \times R_3 \times...\times R_n R=R1×R2×R3×...×Rn;
      • 若采用并联方式,则系统的可靠性为 R = 1 − ( 1 − R 1 ) × ( 1 − R 2 ) × ( 1 − R 3 ) × . . . × ( 1 − R n ) R=1-(1- R_1)\times(1-R_2)\times(1-R_3)\times...\times(1-R_n) R=1(1R1)×(1R2)×(1R3)×...×(1Rn)
      • 若采用串并联方式(假设两个并联1个串联),则系统可靠性为 ( 1 − ( 1 − R ) 2 ) × R × ( 1 − ( 1 − R ) 2 ) (1 - (1 - R)^2) \times R \times(1 - (1 - R)^2) (1(1R)2)×R×(1(1R)2)
  • 软件相关文档汇总
    Note
    • 概要设计说明书:主要说明系统的功能分配、模块划分、程序的总体结构、I/O及接口设计、运行设计、数据结构设计,数据库设计和错误处理设计等内容;(结构图)
    • 详细设计说明书:着重描述每个模块是如何实现的,对模块内的数据结构进行设计,对数据库进行物理设计,对每个模块进行详细的算法设计代码设计、输入输出设计、用户界面设计等其他设计;
    • 用户手册:帮助用户了解软件的使用,需要描述软件的功能、性能和用户界面
    • 用户需求说明书:是开发人员和用户经过充分沟通后对软件需求的共同理解,主要说明软件的功能、性能和运行环境等内容。
  • 软件评审(管理评审,技术评审,文档评审和过程评审)
    Note
    • 技术评审的输入内容包括需求文档、源代码、测试用例等,技术评审的输出是技术评审报告
    • 正式的技术评审FTR(Formal Technical Review)是软件工程师组织的软件质量保证活动,技术评审的指导原则是
      • 评审软件产品,不要涉及对软件生产者能力的评价;
      • 评审前要制定严格的评审计划,并严格遵守预计的日程安排
      • 对评审中出现的问题要记录在案,不要过多地讨论解决方案,把问题留给软件生产者来解决:
      • 限制参与者人数,并要求参加评审的人员在评审会之前仔细阅读文档,做好充分的准备。
    • 软件设计的质量评审包括(不包括功能与模块之间的对应关系):
      • 评价软件的规格说明是否合乎用户的要求,即总体设计思想和设计方针是否正确。
      • 评审可靠性,即是否能避免输入异常(错误或超载等)、硬件失效及软件失效所产生的失效,一旦发生应能及时采取代替手段或恢复手段。
      • 评审保密措施实现情况,即是否提供对使用系统资格、对特定数据的使用资格及特殊功能的使用资格进行检查,在查出有违反使用资格情况后,能否向系统管理人员报告有关信息,是否提供对系统内重要数据加密的功能。
      • 评审操作特性实施情况,即操作命令和操作信息的恰当性,输入数据与输入控制语句的恰当性,输出数据的恰当性,应答时间的恰当性等
      • 评审软件是否具有可修改性、可扩充性、可互换性和可移植性
      • 评审软件是否具有可测试性
      • 评审软件是否具有复用性
  • 软件风险和风险管理PMP之项目风险管理
    Note
    • 一般认为软件风险包含两个特性:不确定性和损失,不确定性即指风险可能发生也可能不发生。
    • 如果风险可以预测,可以避免其发生,有些风险可以预测但无法避免
    • 风险的优先级通常是根据风险暴露设定的。
    • 风险暴露又称风险曝光度,测量的是资产的整个安全性风险,它将表示实际损失的可能性与表示大量可能损失的资讯结合到单一数字评估中。在形式最简单的定量性风险分析中,风险曝光度可透过将风险可能性及影响相乘算出。风险曝光度(Risk Exposure) = 错误出现率(风险出现率)× 错误造成损失(风险损失)
  • ISO/IEC 9126软件质量模型
    Note
    • ISO/IEC 9126软件质量模型中可靠性质量特性是指在规定的一段时间内和规定的条件下,软件维护其性能水平有关的能力。包括的子特性有成熟性、容错性(故障)和易恢复性(失效)
    • 易使用性的子特性包括:易学性,易理解性,易性操作性。
    • 可维护性的子特性包括:易分析性
  • 软件测试:失效,故障,缺陷,错误
    Note
    • 软件失效失效是面向用户的,软件在运行时偏离了用户需求,比如登录功能失效
    • 软件故障故障是面向开发者的,程序在执行时输出错误结果,比如数组越界,程序崩溃,功能失效等
    • 软件缺陷:软件缺陷是存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差。缺陷是错误的结果(缺陷是错误的表现),缺陷很难捕获。
      当一个软件缺陷被激活时,便产生一个软件故障;同一个软件缺陷在不同条件下被激活,可能产生不同的软件故障
    • 软件错误:软件错误即人为错误,指软件开发人员在开发软件的过程中无意间犯下的技术错误
    • 四者的因果关系(->表示导致):错误 -> 缺陷 -> 故障 -> 失效
  • 决策表是什么?怎么使用决策表?(条件和事件竖着来标识,对于事件相同但条件不同的列可以进行合并,进而计算条件组合数)
  • 「软件项目管理」成本估算模型——Walston-Felix模型 和 COCOMO Ⅱ模型(COCOMO-81包括基本/中级/高级,COCOMO Ⅱ模型中项目估算的三个阶段:规划 / 设计/ 开发阶段,不同阶段使用不同估算单位)
    Note
    • IBM模型和基本COCOMO模型为静态单变量模型
    • Putnam模型为动态多变量模型(软件方程和人力增加方程,适合70000行以上的项目)
    • 中级COCOMO模型在基本模型中已计算的软件开发工作量的基础上,在用涉及产品、硬件、人员、项目和项目的15个成本驱动因素来调整工作量的估算。高级COCOMO模型不但包括中级COCOMO模型的所有特性,而且为上述15个因素在软件生存周期的不同阶段赋予了不同的权重
  • 人机交互“黄金三原则”(用户操纵控制、减轻用户的记忆负担、保持界面的一致性)

七、面向对象

  • uml边界类例子_UML中边界对象、控制对象、实体对象

  • 设计模式的3大类型和6大原则(先判断是创建型/结构型/行为型,再确定是哪个模式)

  • 组件聚合原则(复用/发布原则,共同闭包原则,共同复用原则)
    Note面向对象设计的几大原则

    • 单一职责原则:在面向对象设计时,就一个类而言,应该仅有一个引起变化的原因
    • 里氏替换原则:子类可以替换父类。
    • 依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程(没有强调不强迫客户依赖于他们不用的方法)。
    • 接口分离原则:使用多个专门的接口要比使用单一的总接口要好。不强迫客户依赖于他们不用的方法,即:依赖于抽象,不依赖于具体,同时在依赖级别不应有对于细节的依赖。
    • 开放-封闭原则:对扩展开放,对修改关闭。
    • 共同封闭原则:包中的所有类对于同一性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包里的所有类产生影响,而对于其他的包不造成任何影响。
    • 共同重用原则:一个包里的所有类应该是共同重用的。如果重用了包里的一个类,那么就要重用包中的所有类
  • JAVA实现23种设计模式Java中常用的设计模式
    Note

    • 创建型对象模式:单例模式,简单工厂模式,抽象工厂模式,生成器模式,原型模式
    • 结构型对象模式:组合模式,适配器模式,装饰者模式,代理模式,外观模式,桥接模式,享元模式
    • 行为型对象模式:策略模式,模板方法模式,观察者模式,迭代器模式,责任链模式,命令模式,备忘录模式,状态模式,访问者模式,中介者模式,解释器模式
  • 观察者模式状态模式(行为型)建造者(生成器)模式

  • 桥接模式(结构型,接口和实现类)责任链模式(行为型)迭代器模式(行为型)

  • 组合模式(结构型;部分整体模式;依据树形结构来组合对象,用来表示部分以及整体层次)
    Note

    • 原型模式的适用场景:当一个系统应该独立于它的产品创建、构成和表示时。
    • 工厂模式的适用场景:当一个类希望由它的子类来指定它所创建的对象的时候
    • 抽象工厂模式的适用场景:当要强调一系列相关的产品对象的设计以便进行联合使用时
    • 生成器模式的适用场景:当构造过程必须允许被构造的对象有不同的表示时
  • MVC 模式

  • 面向对象分析的5个活动(识别对象,类定义与类继承,对象间的通信)
    Note

    • 认定对象:在应用领域中,按自然存在的实体确立对象。在定义域中,首先将自然存在的“名词”作为一个对象,这通常是研究问题定义域实体的良好开始。通过实体间的关系寻找对象常常没有问题,而困难在于寻找(选择)系统关心的实质性对象。实质性对象是系统稳定性的基础。例如在银行应用系统中,实质性对象应包含客户账务、清算等,而门卫值班表不是实质性对象,甚至可不包含在该系统中。
    • 组织对象:分析对象间的关系,将相关对象抽象成类,其目的是为了简化关联对象,利用类的继承性建立具有继承性层次的类结构。抽象类时可从对象间的操作或一个对象是另一个对象的一部分来考虑;如房子由门和窗构成,门和窗是房子类的子类。由对象抽象类,通过相关类的继承构造类层次,所以说系统的行为和信息间的分析过程是一种迭代表征过程。
    • 描述对象的相互作用:描述出各对象在应用系统中的关系。如一个对象是另一个对象的一部分,一个对象与其他对象间的通信关系等。这样可以完整地描述每个对象的环境,由一个对象解释另一个对象,以及一个对象如何生成另一个对象,最后得到对象的界面描述。
    • 确定对象的操作
    • 定义对象的内部信息

    识别对象目的是为了定义类,而类可以分为三种:实体类、接口类(边界类)和控制类,所以一开始就需要对对象进行好好分析,接着组织对象(创建类,类继承),描述对象相互作用(传参或者设置为类属性)

  • UML中类之间的关系
    Note

    • 类与类之间6种关系:依赖(带箭头的虚线),关联(不带箭头的实线),聚合(空心菱形,has a),组合(实心菱形,contain a),泛化 / 继承(空心三角形,实线),实现(空心三角形,虚线)(在UML中聚合和组合表示容易记错,这里用谐音来记:聚(ju 类似 zuo)空;组实(主食),因此转化成“做空,主食”来记;两者的强弱等级也容易记错,这里可以通过字典序j < z,判断聚合的关联等级低于组合的等级

    • 聚合和组合的区别:两者都是整体和部分之间的关系,但在聚合关系中,成员对象可以脱离整体对象而独立存在,例如,学校与老师的关系;在组合关系中,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如,头和嘴的关系

    • 类与类之间的6种关系,按相互联系程度由强至弱依次为:继承/泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

    • 依赖是通过类方法来调用,即其他类的对象通过方法参数与当前类交互;关联是通过类的实例化来创建,即对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时(类A对象是类B成员变量),这两个对象之间为关联关系。关联关系分为单向关联和双向关联,在java中:

      • 单向关联表现为:类A当中使用了类B,其中类B是作为类A成员变量
      • 双向关联表现为:类A当中使用了类B作为成员变量;同时类B中也使用了类A作为成员变量。

      因此组合和聚合也属于关联,只不过组合和聚合强调类之间的主次关系(只能在类的设计阶段看出来,仅通过代码看不了),而关联没有。组合例子:人和人的生命;聚合例子:笔和笔芯;关联的例子:笔记本和鼠标;参考关联,聚合,组合三者之间的关系
      A的某个属性是类B的一个对象,并且类A对象消失时,类B对象也随之消失,则类A与类B的关系应为组合关系
      UML三种关系简化为继承(实现,泛化),关联和依赖,参考UML类图的依赖和关联详解(含代码)

  • UML之状态图
    Note

    • UML状态图(state diagram) 展现了一个状态机,它由状态(简单状态和组合状态)、转换(迁移)、事件和活动组成
      某个事件(满足监护条件) 发生后,对象的状态将发生变化。转换是两个状态之间的一种关系,表示对象将在源状态中执行一定的事件或动作,并在某个 特定事件发生而且某个特定的监护条件满足时离开当前状态而进入目标状态。
      由于状态可以嵌套,所以活动可以在状态内执行,也可以在状态迁移时执行。(2019下半年41题)
    • [tries<3]tries++分别表示监护条件转换,带有【】表示限制条件,没带【】的具体操作表示一个状态到另外一个状态的转换
  • 时序图时序图学习2_组成元素之角色和对象
    Note

    • 同步消息进行阻塞调用,调用者中止执行,等待控制权返回,需要等待返回消息;
    • 异步消息的调用者是发送消息后继续执行,不引起调用者的阻塞,也不必等待返回消息
    • 从图示中判断异步消息,就是找没有实线返回消息的请求消息
      从概念上讲,就是不需要等待返回消息就可以去做其他事情的请求消息就是异步消息有返回消息的就是同步消息
  • UML图:活动图详细介绍(动作状态、活动状态、起始点、结束点、分支与合并、泳道和对象流)
    Note

    • 对一个复杂用例中的业务处理流程进行进一步建模的最佳工具是UML活动图
    • 活动图 和 状态图的区别:
      • 1)活动图着重表现从一个活动到另一个活动的控制流,是内部处理驱动的流程,强调对象间的控制流程
      • 2)状态图着重描述从一个状态到另一个状态的流程,主要有外部事件的参与。
    • 活动图 和 时序图的区别:
      • 1)时序图(顺序图)着重描述处理过程,它的主要控制结构是顺序、分支和循环,各个处理之间有严格的顺序和时间关系(时序图中每个参与者都有一条生命线,表示处理的时间段,而且具有循环分支结构)。
      • 2)活动图(流程图)描述的则是对象活动的顺序关系所遵循的规则,它着重表现的是系统的行为,而非系统的处理过程。
      • 3)活动图能够表示并发活动的情形,时序图不能。
  • 软考必考题型之UML图形
    Note:UML中提供了多种建模系统需求的图,体现系统的静态方面和动态方面

    • 类图(Class Diadram)展现了一组对象、接口、协作和它们之间的关系。在面向对象系统的建模中,最常见的就是类图,它给出系统的静态设计视图
    • 对象图(Object Diagram)展现了某一时刻一组对象以及他们之间的关系
      对象图描述了在类图中所建立的事物的实例的静态快照,给出系统的静态设计视图或静态进程视图。
    • 用例图(Use Case Diagram)展现了一组用例、参与者(Actor)以及它们之间的关系。这个视图主要支持系统的行为,即该系统在它的周边环境的语境中所提供的外部可见服务。用例图用于对一个系统的需求进行建模,包括说明这个系统应该做什么(从系统外部的一个视点出发), 而不考虑系统应该怎样做。
    • 序列图(顺序图)展示的是一个用例与多个对象的行为(对单个用例图的扩展)
    • 活动图(activity diagram) 将进程或其他计算结构展示为计算内部一步步的控制流和数据流。活动图专注于系统的动态视图。它对系统的功能建模和业务流程建模特别重要,并强调对象间的控制流程
    • 交互图用于对系统的动态方面进行建模。一张交互图表现的是一个交互,由一组对象和它们之间的关系组成,包含它们之间可能传递的消息。交互图表现为通信图、交互概览图和时序图,每种针对不同的目的,能适用于不同的情况。
      • 通信图是强调接收和发送消息的对象的结构组织的交互图;
      • 交互概览图强调控制流的交互图
      • 时序图/顺序图(Timing Diagram)关注沿着线性时间轴、生命线内部和生命线之间的条件改变。
        系统顺序图和顺序图的区别参考系统顺序图与顺序图区别
    • 部署图(Deploy Diagram)是用来对面向对象系统的物理方面(软件和硬件)建模的方法,展现了运行时处理结点以及其中构件(制品)的配置。
    • 组件图(Component Diagram)展现了一组组件之间的组织和依赖
      • 构件应是可替换的;
      • 构件表示的是物理模块而不是逻辑模块;
      • 构件应是组成系统的一部分;
      • 构件与类处于不同的抽象层次
  • 模型驱动架构(模型驱动分析方法包括 结构化分析,面向对象分析)结构化开发方法 & 数据流图

  • C++中的public,protected,private继承机制 - (C++默认使用私有继承,三者区别在于 派生类会将父类的成员转换成那种类型 & 对象访问权限)

  • java的继承机制
    Note

    • java默认使用公有继承,而没有c++中的私有继承和保护继承。因此子类将父类的publicprotected方法变成子类的publicprotected方法,子类无法获得父类的private方法
    • 对于java的成员属性和方法,如何不加任何访问修饰符,通常称为“default访问模式“。该模式下,只允许在同一个包中进行访问,访问权限仅次于private
    • 与C++不同的是,java只允许单继承一个父类,但是接口允许多继承
    • 抽象类不能直接进行实例化。
    • 特殊 / 一般关系也叫做泛化(Generalization)关系,可以理解成:特殊元素(即子类对象)是一般元素(即父类对象)的一种特殊体现
  • java中的public,protected,private,default详解(对象中的成员是否可访问)

  • 重写和重载及其区别

  • 参数多态、包含多态、过载多态和强制多态C++>多态,强制多态,参数类型多态,重载多态,包含多态(运行时多态)
    Note

    • 强制多态:强制类型转换
    • 过载多态:函数重载
    • 包含多态:子类对父类方法的重写
    • 参数多态:泛型
    • 特定多态包含 强制多态 和 重载多态, 通用多态包含参数多态 和 包含多态。

    其中在面向对象方法中,动态绑定是实现多态的基础(通过动态绑定机制,在调用子类对象方法或属性时,会选择调用子类还是父类的方法或属性),换句话说,运行时结合是动态绑定(泛化过程的实现),编译时结合是静态绑定。参考java的动态绑定机制(不是动态分配)(2019下半年40题)

八、数据结构与算法基础

九、程序设计语言

  • 有限自动机;正规式->NFA->DFA->最小化DFA->词法分析器
    Note

    • 不确定的有限自动机(NFA):NFA是一个五元组,M=(S,Σ,move,s0,F)
      • S是有限个状态的集合
      • Σ是有限个输入字符(包括ε)的集合
      • move是一个状态转移函数,move(si,ch) = sj表示当前状态si下若遇到输入字符ch,则迁移到状态sj
      • s0是唯一的初态
      • F是终态集,它是S的子集,包含了所有的终态
    • 确定的有限自动机(DFA):DFA是NFA的特例,其特点是某个状态通过指定字符转移到下一个状态具有确定性,即对每一个状态s和每一个字符a,最多有一个下一个状态
    • NFADFA 能识别的字符串从初始态出发,到终止态结束(期间可多次转移至初始态或终止态
    • 若两个FA识别同一个正规集,则这两个FA等价。对于每个NFA,都存在与之等价的DFA
  • 语法分析器的输入
    Note

    • 词法分析是编译过程的第一阶段,其任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个的“单词”符号(2019下半年20题中,词法分析输出的结果为 记号流,不是字符流(Java Reader)。
      完成的工作:检测非法字符、单词拼写错误

    • 语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”、“语句”和“程序”等
      完成的工作:标点符号错误、表达式中缺少操作数、括号不匹配等有关语言结构上的错误。

    • (静态)语义分析阶段主要检查源程序是否包含语义错误,并收集类型信息供后面的代码生成阶段使用。只有语法和语义都正确的源程序才能被翻译成正确的目标代码

      • 这里要注意的是语义错误有动态语义错误和静态语义错误。静态语义错误是指在编译的语义分析阶段可以发现。动态语义错误是指在运行时才能发现。在语义分析阶段并不能识别出所有的语义错误,只能发现静态语义错误。
      • 完成的工作:完成类型检查,运算符与运算对象类型不合法等错误。
    • 目标代码(机器码)生成是编译器工作的最后一个阶段(动态语义分析)。这一阶段的任务是把中间代码(汇编语言) 变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密切相关
      完成的工作:动态语义错误,包括陷入死循环、变量取零时做除数、引用数组元素下标越界等错误等。

    • 从原理上讲,对源程序进行语义分析之后就可以直接生成目标代码,但由于源程序与目标代码的逻辑结构往往差别很大,特别是考虑到具体机器指令系统的特点,要使翻译一次到位很困难,而且用语法制导方式机械生成的目标代码往往是繁琐和低效的,因此有必要设计一种中间代码,将源程序首先翻译成中间代码表示形式,以利于进行与机器无关的优化处理。
      由于中间代码实际上也起着编译器前端和后端分水岭的作用,所以使用中间代码也有助于提高编译程序的可移植性。常用的中间代码有后缀式、三元式、四元式和树(图)等形式。中间代码并不依赖于具体的机器

    • 源程序不可避免地会有一些错误,这些错误大致可分为语法错误和语义错误

      • 语法错误是指语言结构上的使用错误,是指编译时所发现的程序错误,如单词拼写错误、标点符号错、表达式中缺少操作数、括号不匹配等有关语言结构上的错误
      • 对于语义错误有动态语义错误和静态语义错误。静态语义错误为在编译的语义分析阶段可以发现。动态语义错误为在运行时才能发现。因此语义分析阶段并不能发现程序中所有的语义错误
  • 上下文有关文法(1型文法)/ 上下文无关文法(2型文法)文法和正规式(四种文法)
    Note

    • 上下文有关文法(1型文法):此文法对应于线性有界自动机,它是在0型文法的基础上增加了一条对于每一个a->b,都存在|a|<=|b|,这里的|b|表示的是b的长度,而不是绝对值。即由Ab->B不属于1型文法,而A->Bba则属于1型文法。即左侧可以既有终结符也有非终结符

    • 上下文无关文法(2型文法)左侧只含有一个非终结符,在推导式的过程中,左侧会被完全替换掉,只起到一个中间的作用。如A->Ba符合2型文法要求,如Ab->Bab不是2型文法,因为Ab不是非终结符。

    • 正规文法(3型文法):它对应于有限状态自动机,它是在2型文法的基础上满足:A->a|aB右线性)或A->a|Ba左线性)。如果有A->a,A->aB,B->a,B->cB则符合3型文法的要求。但是A->ab,A->aB,B->a,B->cBA->a,A->Ba,B->a,B->cB则不符合3型文法的要求。正规文法要求,不能够推导出两个终结符,而且左线性和右线性只能使用一种,不能够同时出现。

    • 大多数程序设计语言的语法规则上下文无关文法 来描述。

  • 编译原理之求FIRST集FIRST集合FOLLOW集

  • 正规文法和正规式的相互转换(理解正规文法的概念,以及正规式转正规文法的规定)

  • 正规式和有限自动机的转换(有限自动机转正规式的3个图 / 正规式转有限自动机的3个图)

  • 根据文法进行表达式推导

  • 什么是脚本,脚本语言?
    Note

    • 脚本语言是介乎于 HTML 和诸如 JAVA 、 Visual Basic 、 C++ 等编程语言之间的一种特殊的语言。常见的脚本语言有:Python、JavaScript
      • 脚本语言一般都有相应的脚本引擎来解释执行,是一种解释性语言,一般需要解释器才能运行。也就是指令被立即执行,不存在一个编译的中间状态。
      • 脚本语言运行效率比汇编语言低。
    • 动态程序一般有两种实现方式,一是二进制方式,一是脚本方式
      • 二进制方式是先将我们编写的程序进行编译,变成机器可识别的指令代码(如.exe文件),然后再执行。
      • 脚本简单地说就是一条条的文字命令,以文本形式存在
    • 编译和解释是语言处理的两种基本方式。
      • 编译过程包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等阶段,以及符号表管理与出错处理模块。
      • 解释过程在词法、语法和语义分析方面与编译程序的工作原理基本相同,但是在运行用户程序时,它直接执行源程序或源程序的内部形式(解释过程不会生成目标程序)。
    • 这两种语言处理程序的根本区别是:
      • 编译方式下,机器上运行的是与源码程序等价的目标程序,源程序和编 译程序都不再参与目标程序的执行过程;
      • 而在解释方式下,解释程序和源程序(或其某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。
    • 在编译方式下,词法、语法和语义分析是必须要进行的工作,而生产中间代码和优化则是可以进行也可以不进行
  • 编译与反编译详解C语言编译过程(预处理,编译(汇编码),汇编(机器码),链接)
    Note

    • 编译是将高级语言源程序 翻译成 机器语言程序(汇编形式或机器代码形式),反编译是编译的逆过程。
    • 反编译通常不能把可执行文件 还原成 高级语言源代码,只能转换成功能上等价的汇编程序
  • 可视化程序设计的基本理论
    Note

    • 可视化程序设计主要是让程序设计人员利用软件本身所提供的各种控件,像搭积木式地构造应用程序的各种界面。
    • 可视化程序设计最大的优点是设计人员可以不用编写或只需编写很少的程序代码,就能完成应用程序的设计,这样就能极大地提高设计入员的工作效率。
    • 在可视化程序设计中,采用解释方式可随时查看程序的运行效果。
    • 能进行可视化程序设计的语言很多,比较常用的有微软的Visual BasicVisual C++Visual C#、中文Visual Foxpro、Borland公司的Delphi等。
  • 强类型&弱类型语言、动态&静态语言有什么区别强类型语言和弱类型语言的区别
    Note

    • 强类型语言有些类型不支持隐式类型转换,需要通过强制类型转换才可实现,比如javapythonpython代码如下:
      b = 3
      c = 3.1415926
      print(b + c)
      ---
      6.1415926
      
      a = "123"
      b = 3
      print(a + b)
      ---
      TypeError: can only concatenate str (not "int") to str
      
      弱类型语言中所有类型都支持隐式类型转换,比如jsphpjs代码如下:
      var a = "123"
      var b = 3
      console.log(a + b)
      ---
      1233
      
      对于弱类型语言,需要弄清楚不同类型之间是如何隐式变换的,比如str + int → \rightarrow str
    • 动态类型语言在运行期间才去做数据类型检查(python);而静态类型语言在编译期间就去做数据类型检查(javac++)。
    • 许多程序设计语言规定,程序中的数据都必须具有类型,其作用包括:
      • 便于为数据合理分配存储单元;
      • 便于对参与表达式计算的数据对象进行检查
      • 便于规定数据对象的取值范围及能够进行的运算;

十、多媒体基础

  • 多媒体开发你必须知道的各种音频格式之间的比较(WAV/MIDI/AAC…)
  • WAV格式音频
    Note
    • 声音(音频)信号的一个基本参数是频率,它是指声波每秒钟变化的次数,用Hz表示。人耳能听到的音频信号的频率范围20Hz ~ 20KHz
    • CIF是Common Intermediate Format的简称,即常用的标准化图像格式。在H.323协议簇中,规定了视频采集设备的标准采集分辨率CIF=352×288像素
    • 使用150DPI的扫描分辨率扫描一幅3×4英寸的彩色照片,得到原始的24位真彩色图像的数据量是 3 ∗ 4 ∗ 150 ∗ 150 ∗ 24 / 8 = 810000 3 * 4 * 150 * 150 *24 / 8 = 810000 3415015024/8=810000 字节
    • 矢量图中的图形元素称为图元。而另一类图具有代表性的图像表示形式是位图图像,该图采用像素来表示图。
    • 某数码相机内置128MB的存储空间,拍摄分辨率设定为1600×1200像素,颜色深度为24位(bit),若不采用压缩存储技术,使用内部存储器最多可以存储 128 ∗ 1024 ∗ 1024 ∗ 8 / ( 1600 ∗ 1200 ∗ 24 ) = 23 128 * 1024 * 1024 * 8 / (1600 * 1200 * 24 ) = 23 128102410248/(1600120024)=23 张照片(颜色空间为 2 24 2^{24} 224种颜色,而存储空间只有8位)。
    • 计算机通过MIC(话筒接口) 收到的信号是模拟信号:通过话筒传入计算机的是人类的声音,而这种声音信号是一种连续的模拟信号,而非离散的数字信号,在接收到模拟信号以后,经过采样、量化等工作将模拟信号转换为数字信号在计算机中处理。
    • 未经压缩的数字音频数据传输率可按下式计算:数据传输率(b/s)=采样频率(Hz) ×量化位数(b)×声道数,比如对于44.1khz、样本精度为16b/s的双声道数字音频其数据传输率为44.1 * 16 * 2 = 1411.2kb/s

十一、知识产权标准化

  • 知识产权与标准化
  • 知识产权(包括著作权法(保护期限,权利归属,侵权判定))和标准化(标准化知识,软件工程国家标准(标准种类,文档指南,软件质量特性,软件质量保证))
    Note
    • 按照我国著作权法的权利保护期,署名权修改权保护作品完整权受到永久保护。
      • 其中法律依据,著作权法规定“执行本单位的任务或者主要是利用本单位的物质条件所完成的职务作品,其权利属于该单位。
      • 某软件公司参与开发管理系统软件的程序员张某,辞职到另一公司任职,于是该项目负责人将该管理系统软件上开发者的署名更改为李某(接张某工作),该项目负责人的行为侵犯了张某开发者身份权(署名权)
      • 著作权有可复制性。著作权的对象是作品,是指文学、艺术、和科学领域内具有独创性并能以某种有形形式复制的智力成果,因此,著作权必然具有可复制性,但是复制并原封不动发行别人的作品就属于侵权
      • 软件著作权保护目标程序、源程序、软件文档,但不包护开发软件的所有操作方法(比如IDE等工具)(2021上12)
    • 据《中华人民共和国商标法》,烟草制品中必须使用注册商标
    • 甲乙两公司的财务软件产品功能基本一致,这两公司分别申请“大堂”和“大唐”商标注册(无法区分谁先使用)。两财务软件相似,且经协商双方均不同意用其申请注册的商标标识。此情形下由甲乙抽签结果确定谁获准注册。但如果甲第一次使用时间为2019年7月,而乙第一次使用时间为2019年5月,如果两公司同一天申请注册商标,则乙公司的"大唐"获准注册。
      原因分析
      • 这个是同一类产品,构成近似商标,“近似商标”是指文字、数字、图形、三维标志或颜色组合等商标的构成要素的发音、视觉、含义或排列顺序及整体结构上虽有一定区别,但又使人难以区分,容易产生混滑的商标。上述案例会产生商标故不能同时注册。由双方协商决定。
      • 首先第一原则是,谁先申请谁获得;其次,同时申请时,谁先使用谁获得
        如果无法区分谁先使用,则协商归属,协商不成可以抽签决定
  • 商业秘密一般是指不为公众所知悉,能为权利人带来经济利益,具有实用性并经权利人采取保密措施的技术信息和经营信息。对于公司采取保密措施的行为,该公司具有商业秘密权

十二、案例分析

Note:下午案例分析题共5道题,每题15分。算法题变化性较大,个人建议要保证1,2,3,5题的正确性,争取每题拿到12分以上

1、结构化分析
  • 数据流图(结构化分析)
    Note
    • 数据流图中存在3种数据流向

      • 1)实体(E → \rightarrow 加工(P → \rightarrow 存储(D

      • 2)实体(E ← \leftarrow 加工(P ← \leftarrow 存储(D

      • 3)加工(P → \rightarrow 加工(P)(例如2021上半年案例分析:P1(车辆识别) → \rightarrow 车辆入场信息 → \rightarrow P5(道闸控制) )

      • 不存在E → \rightarrow ED → \rightarrow DD → \rightarrow EE → \rightarrow D的数据流,必须有P加工的过程。

    • 数据流图的题目经常会问存储(D)的名称,最简单的解题规范:“直接使用数据流传入 或 传出的名称” + “信息表”,比如2019年上半年题1:

      其中D2为学生信息,D3为校园场所信息;如果想要获得更准确的D的名称,可以在"数据流缺失问题求解"上进行修补。比如2021年上半年题1:D2初定为会员信息表,后来确定为两张表:车位信息表和车主余额表

    • 在问数据流图缺失情况时(补充图中缺失的数据流及其起点终点),即分析数据流图中的 数据流向 是否完整(是否满足上面2种),如果不完整,再判断该数据流图是否存在“分布式”存储

      • 步骤1:比如2019年上半年题1,D2D1的数据流向虽然不完整,但是是“分布式”存储,因此缺失的数据流从D4D3开始分析:
      • 步骤2:经过补充后图中的数据流向是完整的,接着从题目中挖掘,分析是否存在某个字段信息没有被存储,由于题目中要求学生信息中要包含家长ID,这时就找到了D2

      如何对步骤2中题干内容的提炼,决定着我们是否能找到缺失数据流的关键,以2021年上半年案例分析为例,题干内容和数据流图如下,假设我们已知:E1:汽车,E2:车主,E3:支付系统,E4:管理人员,E5:道闸控制系统;D1:停车记录表,D2:用户或车主账号储存余额表/会员信息表,D3:车位信息表/基础信息表。

      1、信息维护。管理人员E4对车位(总数、空余车位数等)计费规则等基础信息D3进行设置。
      2、会员注册。车主E2提供手机号、车牌号等信息D3进行注册,提交充值信息D2(等级、绑定并授权支付系统进行充值或交费的支付账号),不同级别和充值额度享受不同停车折扣点。
      3、车牌识别。当车辆E1进入停车场时,若有(空余车位数大干1),自动识别车牌号P1后进行道闸控制P5 ,当车主开车离开停车场时,识别车牌号P1,计费成功P3后,请求道闸控制P5
      4、计费。更新车辆离场时间,根据计费规则计算出停车费用,若车主E2是会员,提示停车费用P2:若储存余额够本次停车费用,自动扣费P3,更新余额D2 ,若储值余额D2不足,自动使用授权缴费账号请求支付系统E3进行支付,获取支付状态。若非会员临时停车,提示停车费用,车主通过扫描费用信息中的支付码调用支付系统E3自助交费P3,获取支付状态。
      5、道闸控制。根据道闸控制P5请求向道闸控制系统E5发送若干放行指令和接收道闸执行状态。若道闸执行状态为正常放行时,对入场车辆,(道闸控制P5)将车牌号及其入场时间信息存入停车记录,修改空余车位数D3(道闸控制P5)对出场车辆更新停车状态,修改空余车位数D3。当因道闸重置系统出现问题(断网断电或是故障为抬杠等情况),而无法在规定的时间内接收到其返回的执行状态正常放行时, 系统P5向管理人员发送异常告警信息,之后管理人员E4安排故障排查处理P4 ,确保车辆有序出入停车场。

      :缺失数据流及其起点和终点?
      答题思路:已完成1~2题对实体(E)和存储(D)的补充之后,先从题干中圈出并标记每个实体E,加工P和存储D,然后再通过标记去逐一检查那条数据流丢失了,一般丢失情况包括一开始介绍的3种数据流情况。如上面删除线表示:
      标准答案为:

      • P3D2:余额(若储存余额够本次停车费用,自动扣费,更新余额)
      • P5D3:车位数(修改空余车位数)
      • P1P5:车辆入场信息
      • P4P5:故障排查处理
    • 在问数据流“学生状态”,“学生信息” 的组成时,其实是在问这些数据在数据库中用哪些字段进行存储,此时需要结合题意和数据流图进行分析。

      • 学生状态包括:学生卡ID,学生心率,体温(摄氏度)等健康指标及其所在位置等信息;
      • 学生信息包括:家长ID,学生ID,学生卡ID,班主任等信息
    • 如果要求使用结构化语言对业务需求进行分析时,解题步骤为:

      • 1)从题干中抽取“动词 + 名词” 或者 “名词 + 动词”,而不是直接COPY整个句子。
      • 2)从题干内容中提炼出IFWHILE:比如2021上半年1题中,车辆入场和出场是想对的概念,因此是IF;比如2020下半年1题中,图像采集是一个WHILE过程。
      • 3)利用伪代码(参考latex代码格式,参考Latex写伪代码)书写,常见语法包括:while(...) do {xxx} end whileif(...) then {xxx} end if
        例如2020下半年第一题,需求如下,要求用结构化语言对缺陷检测的加工逻辑进行描述

      缺陷检测。根据检测模型和检测质量标准对图像采集所收到的产品检测信息中所有图像进行检测或所有图像检测合格。若一个产品出现一张图像检测不合格,就表示该产品不合格,对不合格产品,其检测结果包括,产品型号和不合格类型
      参考答案:

      WHILE(接收图像)DO{
      	检测所收到的所有图像;
      	IF(出现一张图像检测不合格)THEN{
      		返回产品不合格;
      		不合格产品检测结果=产品星号+不合格类型;
      	}END IF
      }END WHILE
      
2、数据库设计
  • 实体联系图(ER图有实体(entity)、属性(attribute)、关系(relationship)三部分)『数据库』 E-R图(实体联系图)你都不会,你设计什么数据库?
    Note
    • 矩形框表示实体型,矩形框内写明实体名称;
    • 椭圆框表示 实体的属性,将属性名记入框中;(矩形框 或者 菱形框 都可以通过椭圆框添加属性
    • 菱形框表示实体型之间的关系,在菱形框内写明关系名,即实体 – 联系 – 实体;而关联关系的一般性约束包括:一对一(1 : 1),一对多(1 : *),多对多(* : *)的关系
    • 实心连线表示:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。
  • 一文搞懂候选码、主码、全码、外码、主属性、主键、主关键字、非主属性清晰总结(候选码(画图后)可以遍历所有属性)什么是外键/外键的作用(如果一个实体的某个字段指向另一个实体的主键则称为外键;主从表关系;作用是保证数据的一致性)
    Note
    • 如果一名培训师可以讲授多门课程、一门课程可由多名培训师讲授,如果关系模式设计如下:

      • 员工(员工号,姓名,部门号,岗位,基本工资,电话,家庭住址);
      • 讲授(课程号,员工号,培训地点)
      • 课程(课程号,课程名称,学时)

      则关于讲授关系的主键(课程号,员工号)讲授关系的外键(课程号,员工号),即这两个字段分别对应 员工表 和 课程表的主键。(2019下半年第二题)

    • 如果A->BC,B->D,则存在传递依赖A->D;比如关系模式设计如下:

      • 部门(部门号,部门名,部门负责人,电话)
      • 员工(员工号,姓名,部门号,岗位,基本工资,电话,家庭住址);
      • 岗位 (岗位号,基本工资)

      题目给定不同岗位设置不同的基本工资,因此员工号(主键A)可以决定岗位号(B),岗位号(主键B)可以决定基本工资(C),则员工与基本工资之间存在传递依赖。(2019下半年第二题)

    • 比如问某个字段(所属公司代码,投资方编号)的完整性约束关系(2019年上半年第二题),则把该字段在哪个表中作为外键,主键都罗列出来,比如:

      • 员工 - 外键:所属公司代码
      • 项目 - 外键:投资方编号
      • 项目 - 主键:(项目编号,投资方编号)组合

      有时要注意题干中给出的字段信息不全,主键/外键信息可能没有明确在题干中显示,需要自己归纳出一个字段名(比如2020年下半年第二题),题干如下:

      业务部关系模式需要记录的信息包括业务部的编号、名称、地址、电话和分公司编号,业务部编号唯一标记分公司关系模式中的每一个元素,每个业务部各有一名主管负责业务部的管理工作,每个业务部有多名职员,每个职员只能来源于一个业务部。

      在确定业务部关系模式中的主外键时,业务部的主键很容易得到,即业务部的编号,但业务部的外键不单单只有分公司编号,还有主管编号(题目中未明确给出,建议参照第二问的ER图归纳得到)

  • 数据库范式 & 模式分解 详细介绍(1NF,2NF,3NF,BCNF,4NF)数据库的规范理论
    Note
    • 如果题目中问表设计是否合理时,可以从数据是否存在冗余、插入异常、更新异常、删除异常等问题考虑。比如2020下半年第二题问:

      职员关系模式需要记录的信息包括职员号、姓名、所属业务部编号、岗位、电话、家庭成员姓名和成员关系。在职员关系模式中,假设每个职员有多名家庭成员,那么职员关系模式存在什么问题?应如何解决?

      在原来的职员关系表中,主键为(职员号,家庭成员姓名),有些非主属性存在部分依赖于职员号,即该表符合1F但不符合2F。这里可以将字段(职员号,家庭成员姓名)从表中抽离出来,并共同构成主键
      参考答案为:

      对职员关系模式进行拆分,职员1(职员号、姓名、岗位、所属业务部编号,电话);职员2(职员号,家庭成员姓名,关系)。这样非主属性完全依赖于码(2F)。

3、统一建模语言UML
  • ER图和类图之间的关系,用例图、类图、顺序图操作
    Note
    • 用例图中:
      • 每个用例用 “动词 + 名词” 来表示,比如2020下半年第三题题干中写的是:“将房产信息从系统中删除”,在写用例时则要替换成:“删除系统中的房产信息”
      • 关联关系包含3种:包含,扩展和继承;参考 用例图里3种关系的内涵和2021年上半年题3
        • include基用例是一个抽象的用例,不能单独作为一个完整用例,需要配合子用例使用
        • extend:基用例是一个扩展点,子用例在执行时必须先激活基用例
        • generalize子用例继承基用例的所有属性和通信方式, 与extend不同的是,基用例并不是一个扩展点,子用例在执行时不需要先激活基用例
      • 参与者不一定是人
    • 类图中(类可分为3种,不一定是现实中的实体类):
      • 类图是软件的蓝图,用于详细描述系统内各个对象的相关的类,以及这些类之间的静态关系。设计类是已经完成了规格说明并且达到能够被实现程度的类

      • 类组件:类名 - 如果是抽象类需要斜体

      • 类属性:可见性 名称:类型 [=缺省值]
        +(public),(private), #(protected) ~(package)

      • 六种类间关系(耦合度由低到高):依赖关系use-a、关联关系has-a、聚合关系(has a)、组合关系(contain a)、泛化关系is a、实现关系(类与接口)

      • 类可以分为三种:实体类、接口类(边界类)和控制类

        • 实体类的对象表示现实世界中真实的实体,如人、物等。
        • 接口类(边界类)的对象为用户提供一种与系统合作交互的方式,分为人和系统两大类,其中人的接口(用户界面)可以是显示屏、窗口、Web窗体、对话框、菜单、列表框、其他显示控制、条形码、二维码或者用户与系统交互的其他方法。系统接口涉及把数据发送到其他系统,或者从其他系统接收数据
        • 控制类的对象用来控制活动流,充当协调者。
      • 实体类是应用领域的核心类,一般用于保存系统中的信息以及提供针对这些信息的相关处理行为,主要负责数据和业务逻辑

      • 接口类(边界类)是系统内对象和系统外参与者的联系媒介,负责和用户进行交互,即用户界面

      • 控制类主要是协调实体类和边界类之间的交互。

    • 在进行用例描述时,必须包括基本事件流备选数据流,参考场景法:基本流、备选流、构造场景
      • 基本事件流:按照正确的业务流程来实现的一条操作路径;
      • 备选数据流:导致程序出现错误的操作流程;
  • 用例图里3种关系的内涵(include基用例为抽象用例;extend基用例为扩展点;generalize基用例被子用例继承)
    Note
    用例之间的includeextendgeneralize关系的内涵。
    • include包含关系,当两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例共享。因为子用例被抽出,基用例并非一个完整的用例,所以include关系中的基用例必须和子用例一起使用才够完整,子用例也必然被执行。include关系在用例图中使用带箭头的虚线表示(在线上标注<<include>>),箭头从基用例指向子用例。如2021上半年题3,文字描述和用例图如下:

      3)确认处方。患者登录后,可以查看医生开具的所有处方。患者选择需要抓药的处方和数量(需要抓几副药),同时说明是否需要煎制。选择取药方式:自行到店取药或者送药上门,若选择送药上门,患者需要提供提供收贷人姓名、联系方式和收货地址。系统自动计算本次抓药的费用,患者可以使用微信或支付宝等支付方式支付费用。支付成功之后,处方被发送给药师进行药品配制。

      :因为U1作为基用例,即抽象的用例,需要配合U2子用例一起使用,由题干可知U1:确认处方,U2:支付

    • extend扩展关系,表示对基用例的扩展。基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能。extend基用例中存在一个扩展点,只有当扩展点被激活时,子用例才会被执行extend关系在用例图中也使用带箭头的虚线表示(在线上标注<<extend>>),但箭头是从子用例指向基用例。
    • generalize泛化关系,是一种继承关系。子用例将继承基用例的所有行为关系和通信关系,也就是说在任何使用基用例的地方都可以用子用例来代替。泛化关系在用例图中使用实线空心箭头表示,箭头方向从子用例指向基用例。
      如2021上半年题3,文字描述和用例图如上,由题干可知:U3,U4继承于U2(支付) ,而U1(确认处方) 又包含着U2(支付) ,因此U3U4分别为微信支付、支付宝支付
4、设计模式
  • Java中常用的设计模式(23种)
  • JAVA实现23种设计模式
    Note
    • 历年题型整理:
      • 生成器模式:2017上,2018上
      • 桥接模式(无类图):2017下
      • 状态模式:2018下
      • 策略模式:2019上
      • 观察者模式:2019下
      • 组合模式:2021上
    • 答题技巧:该题型较为简单,不要求对设计模式有较深的理解(难的考点已放在上午题了),该题更注重的是代码的阅读理解能力。选择擅长的编程语言(C++/Java二选一),利用接口与实现类、抽象类与子类的关系,直接进行代码填充即可(试了2017~2021的设计模式题,亲测有效)。
      • 可以通过设计模式题目中给出的类图,理解要实现什么一个功能,而在代码填充上主要还是依赖于平时对编程语言的熟悉掌握程度,以及代码的阅读理解能力;
      • 注意不要马虎大意,比如多写了标点符号,少写了abstract
  • 11
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值