软件设计师(中级) 笔记

软件设计师

「学习路线」(推荐该顺序学习,按照先易后难排序)

1、上午题—计算机系统(5~6分)

  1.cpu:cpu是硬件系统的核心

    功能:控制器(程序控制,操作控制) 运算器(时间处理,数据处理)

      运算器:

        算术逻辑单元(ALU):实现算术运算和逻辑运算

        累加寄存器(AC):为ALU提供一个工作区,可以暂存被减数,结果。

        数据缓冲寄存器(DR):作为中转站,暂存指令或数字

        状态条件寄存器(PSW):保存条形码内容 

      控制器:控制整个cpu工作,不仅要保证程序的正确执行,还要处理异常时事件。

        指令寄存器(IR):指令寄存器用于存储当前正在执行的指令,以便进行解码和执行

        程序计数器(PC):控制指令的执行顺序,指示了下一条指令的位置,PC + 1,根据位移量得到。跟踪下一个地址

        地址寄存器(AR):保存CPU访问的地址,因为CPU和内存存在操作速度上的差异。

        指令译码器(ID):指令包含操作码和地址码两个部分。识别分析该指令规定的操作。

        有关CPU寄存器中,用户不能访问指令寄存器。,可以访问PC

  2.计算机基本单位

    位(比特) bit b

    字节 byte B 1b = 8B
    千字节 KB      1024B = 1KB
    兆字节 MB  1024KB = 1MB
    吉字节 GB  1024MB = 1GB
    太字节 TB  1024GB = 1TB
    最小的数据单位:b
    最小的存储单位:byte(B)
  十进制与二进制
    十(D):0~9  二(B):0~1  八(O):0~7  十六(H) 0~9 A~F

 

 按权展开是从后往前来,次幂从0开始。

 

2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256
2^9 = 512
2^10 = 1024
2^11 = 2048
2^12 = 4096
2^13 = 8192

 八进制转二进制:一位八进制代表三位的二进制

十六进制转二进制 :一位十六进制代表四位二进制

加法逢1进1,减法借1当n

 

  计算机中 原码 反码 补码的关系

    如果数值是正数 那它的原码 反码 补码 都是相同的;

    但是 如果数值为负,则 反码是与原码相反 而补码是反码+1;(ps:忘了为啥了,反正如果负数按照正数的情况下写码会出错)

  移码:将原本的数的补码算出来,符号位取反就是移码。

 

为什么呢?原因如下:

 

EG:

 

 

   补码简化计算机运算部件的设计

     浮点数

      二进制数N可以表示为N = 2^E * F ,其中,E是阶码,F称为尾数。称为浮点表示法

      对阶时,小阶向大阶对齐,浮点数向右移。

 

       规格化就将尾数的绝对值限定在[0.5,1]

      当R是移码,尾数是M位的补码时,有如下公式

   3.寻址(不同方式存储提高灵活性)

    立即寻址:操作数就在指令中(1)

    直接寻址:操作数存放在内存单元中,指令给出操作数的存储单元地址(3)

    寄存器寻址:操作数存在某一寄存器中,指令中给出存放操作数的寄存器名。(2)

    寄存器间接寻址:操作数存放在内存单元,存储单元的地址在某个寄存器中(4)

    间接寻址: 指令给出操作数地址的地址(5)

  4.校验码

  奇偶校验码:码距 = 2 只能检错不能纠错,奇数个数据位出错 

  码距:是指一个编码系统中任意两个合法编码之间至少有多少个二进制位不同

  海明码:码距=3, 检错纠错都可 ,设数据位n,校验位是k,则有 2^k -1 >= n + k 也是奇偶检测

  循环冗余校验码:码距=2,可以检错不能纠错 k个数据位 + r 个校验位 总长为k + r

  5.RISC和CISC

 6.流水线公式:

单条指令下流水线和顺序没有区别。

 

   7.存储器的分类:

     按位置分可以分为内存(主存)和外存(辅存)

    按工作方式分:(从低到高,依次cpu对其访问速度越来越快。所以,通用寄存器最快,脱机,磁盘最慢)

 

 

    EPROM,EEPROM,俩E带电可擦可编程

    闪存也带电,一块为单位删除,代替ROM不能代替主存

  按访问方式分类:地址访问(随机储存器,顺序储存器,直接储存器)

          内容访问(相联储存器,虚拟存储器(由主存辅存构成))

  空间时间局部性

    8.高速缓存(Cache)

    合理成本下提高命中率。 和内存容量比微不足道,对程序员来说是透明的

    用来存放主存的活跃程序数据副本,和缓存差不多。 是主存速度的5~10倍。

    Cache主存地址映像(转换工作)是由硬件自行完成的

 

Cache命中率和容量的关系

 但是随着容量越大成本越高,命中时间越长

  高速缓存地址映像方法:

    1,直接映像:主存块与Cache块关系固定(1:1)冲突大

    2,全相联映像允许主存的任意一块调入到Cache的任何一个块空间中(N :M)冲突小

    3,组相联映像:组与组之间固定,其组中可以任意调入(组内N:M,组外1:1)冲突较小

  9.中断

    为了提高响应速度,通常把中断服务地址入口统一汇集为中断向量表

 

      1.中断向量:提供中断服务程序的入口地址

      2.中断响应时间:发出中断请求开始到进入中断服务程序

      3.保存现场:返回未执行的源程序

   10.输入输出(I/O)

中断驱动也是一次只能读取一个字

  11、直接存储器存取方式(DMA)

    ①CPU和I/0(外设)可并行工作

    ②仅在传送数据块的开始和结束时才需要CPU的干预,DMA控制器可以直接控制数据的传输,所以无需cpu干预

    ③由外设直接将数据放入内存

    ④一次读写的单位为“块”而不是字

  了解

 

   由IO设备提出的中断请求是可屏蔽中断,电源掉电是不可屏蔽中断

  CPU是在一个总线周期结束时响应DMA请求的

  12.总线:

    总线分类“数据,地址,控制

    PCL总线--->并内总线 并行传输;SCSI总线---->并行外总线 SCSI不属于系统总线

    内容量是地址总线,按照2^n次,n就是地址总线宽度,单位是B

    字长是数据总线宽度,是多少字长就是多少数据总线宽度

    采用总线结构可以减少信息传输的数量

    总线带宽=每个时钟周期*频率;单次*200hz

 

   13.加密技术(防被动攻击)

 

  1.对称加密(共享密钥加密)

    加密和解密是同一把密钥,只有一把密钥。

    密钥分发有缺陷

    1.加密解密速度很快 

    2.适合加密大量明文数据

  2.非对称加密

    加密和解密不是一把密钥,一共两把,分别是公钥和私钥

    公钥只能由私钥来解密,反之,同理,且不能由其中一把推出另一把

    用接收方的公钥加密,可以实现防窃听效果。

    密钥分发没有缺陷,加密解密速度慢

  3.混合加密

    用非对称加密加密外包装,内包装由对称加密,这样速度会快一点。

  认证技术:(防主动攻击)

  摘要(防篡改)

  将明文进行hash算法得到摘要后和密文一起发送过去,如果接收方解密后的摘要和发送的摘要不一致,说明被篡改了。

 

  数字签名

  发送方将用自己的私钥对摘要加密,得到的数字签名和密文一起发送过去,如果接收方用对方的公钥解密失败,说明发送的消息是假冒消息。

 

  权威机构:(通过CA的公钥验证消息属实,是CA自己的公钥,不是CA中的公钥,那个是用户的公钥,签名是由对方的私钥加密的)

  数字证书

    用户向CA机构申请数字证书,将个人信息和公钥发给CA机构,数字证书用CA机构的私钥加密(签名)

    用CA的公钥认证(解密)数字证书,得到用户公钥。

 加密算法

 

 中间是E的 和 两个RC是对称;中间是S的 和 ECC是非对称

 MD5摘要算法 128

 

   14.可靠性公式

    1.串联系统

    2.并联系统

    所有部件都是R,带入公式求即可

 15.编译器和解释器

   解释程序不生成目标程序(中间程序)

  编译程序生成目标程序

 

 A.教程p61,B.若一种程序设计语言不依赖于机器硬件,则称为高级语言,P57。C.D.按照程序运行时数据的值能否改变,将数据分为常量和变量。P61

 二、上午题—程序设计语言(固定6分) 

  1.低级语言和高级语言

    人称机器语言和汇编语言为低级语言,面向各类应用的程序设计语言称为高级语言(JAVA,py,C++/C)。

  2.编译程序和解释程序

    高级语言需要翻译,而翻译程序的形式有多种,基本方式为汇编,解释和编译

  解释器(不需要)

    翻译源程序不生成独立的目标程序

    解释程序和源程序都要参与到程序的运行过程中

  编译器(需要)

    翻译时需将源程序翻译为目标程序

    机器上运行的是与源程序等价的目标程序

    源程序和编译程序都不参与目标程序的运行。

  3.程序语言基本成分

    不需要讲

  4.传值调用

    将实参传递给形参,不可以实现形参和实参双向传递数据的结果。

  传引用(地址)调用:

    将实参的地址传递给形参,形参必须要有地址,实参不能是常量,表达式

    可以实现形参和实参间双向传递数据的效果,即改变形参值同时也改变了实参值,不可以是数组?

    就是说,形参和实参是一个,其中一个改变另一个也会变

  5.编译和解释方式:(词法语法语义)

 编译/解释器不可省略,也不可交换顺序,词法分析、语法分析、语义分析。

编译器中间代码生成和代码优化不是必要的,可以忽略

反编译只能转换成等价的汇编程序

LISP是一种函数语言

  符号表

    不断收集,记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符合表中。

    记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成

 

 词法分析

  输入:源程序

  输出:记号流

  词法分析阶段主要作用是分析构成程序的字符及判断字符是否符合规定

语法分析

  输入:记号流

  输出:语法树(分析树)

  语法分析阶段的主要作用是

    对各条语句的结构进行合法性分析

    分析程序中的句子结构是否正确

语义分析

   输入:语法树(分析树)

    语义分析主要作用是对类型分析和检查

语法分析可以发现程序中所有语法错误

语义分析不能发现程序中所有的语义错误

语义分析可以发现静态语义错误,不能发现动态错误,动态错误运行的时候才能发现

目标代码生成

  目标代码生成工作和具体机器密切相关

寄 存器的分配工作处于目标代码生成阶段

中间代码生成

  常见中间代码:后缀式,三地址码,三元式,四元式和树(图)等

  中间代码和具体机器无关

  可以将不同高级程序语言翻译成同种中间代码

  中间代码可以跨平台

  因为与具体的机器无关,使用中间代码有利于进行,与机器无关的优化处理和提高编译程序的可移植性

6.正规式

下边的其实没用,主要就看一个*能不能控制同一个能就是偶数个,*是出现0~n的次数

 7.有限自动机

 直接看题理解,就是,要从左边第一个箭头(初态)最后要走到带两圈的圆(终态),并且输入每一步都按照之后的箭头走,没有对应的箭头就说明识别不了。最后识别完停在两圈圆(终态)上说明可以识别,比如说下边我给aba,a走到2,b走到3,a自返还是3,最后在两圈上,说明可以识别,这个的意思是无条件直达到所指的圈

 

8.上下文无关文法

  被用于表示各种程序设计语言的语法。

大写字母都是非终结符

小写字母表示终结符

小写希腊字母是他们俩的混合

到最后剩下的都是终结符

S(开始符号)→P(产生式集合)→N(非终结符号)→T(终结符)

 按的题目来推就行。不会了就看视频

9.中、后缀表达式

就是二叉树中序后序遍历

中序遍历:左中右

后续遍历:左右中

 优先级

 按照优先级遍历,中后序从右至左

算术表达式都是中序

 答案 D

3、下午题—试题一(15分)

  数据流图

  基本图形元素:数据流,加工,数据存储,外部实体。

 问题一:推实体名

  数据流的起点或终点必须要有一个加工

问题二:推数据存储名

  数据存储的名字一般看数据流是什么,在实在推不出来在数据流后加个表/文件两个字

问题三:补充数据流,可能出错点如下:

    一,父子图平衡(数据流数量不一致)

    二,加工既有输入数据流也有输出数据流(数据流要有输入和输出)

上午题中,图中有两条相同名称的数据流也算错。

     三,数据守恒

      更像阅读理解,看题目描述和图哪里不一样,补充数据流即可

      数据流起点到终点有一个是加工

模板

 问题四: 随缘

 4、上午题—知识产权(2~3分) 

著作权(版权)

  分为人身权和财产权

  其中人身权包括(发表权 著名权 修改权 保护作品完整权),只有发表权不是永久 终生+死亡后50年,其他三个都是永久的

  《中华人民共和国著作权法》 和《计算机软件保护条例》 是构成保护计算机软件著作权的两个基本法律文件

职务作品

  在公司期间做的软件程序和软件文档的著作权都归公司所有,除非是和公司一点点关系都没有才能算自己的,自己本身只有署名权。别的都没有

其他

  什么商业秘密权,专利权等,感觉都是常识性问题。不记笔记了

  商标权可以先整个10年,快到期了可以无限续10年

  近似商标算同一种商标 ,有纠纷就抽签

 

 5、上午题—数据库(固定6分) 

 概念数据模型(ER)

   一般采用E-R图表示

   常用术语如下:实体 属性 码(唯一标识) 域(属性范围) 实体型 实体集 联系 (1:1 , 1:n, N:M 三种)

  结构数据模型

   主要包括 : 层次 网状 关系和面向对象模型

    层次模型类似于二叉树

    网状模型类似于图

    关系模型类似于二维表格(题目里会经常出现)

  数据库的三级模式结构 “三级模式和两级映像”

    1.概念模式(模式) → 基本表

    2.外模式(用户模式/子模式)→ 视图

    3.内模式(存储模式)→ 存储文件

   两级映像

    1 模式/内模式映像  需要 物

    2 外模式/模式映像  需要 逻

  数据的独立性

 

    1 数据的物理独立性

    2 数据的逻辑独立性

 

 关系模型中的基本术语

 

 

 关系模型的定义

 完整性约束

实体完整性:属性中主码的值不能为空或者部分为空

参照完整性:外键的值必须在其他对应表的主码值找到或者为空值

用户自定义完整性:用户条件约束的检验

笛卡尔积:对应相乘,8*8 = 64;

关系代数

 投影:按一列算。

 

选择:按行算,看需求是多少;B="5",也可以写成1=“5”,因为是第一行

 连接

  

判断条件后两张表符合的就全部连接

等值连接:两个条件相等的表全部连接

自然连接:去重的,一般去掉的是后边的表。只要两张表属性相同,去重后才能连接,所以会丢失数据

 外连接:分为左外连接,右外连接,全外连接,什么连接join的那边就是主表,全外连接是两张表的全部的结合,缺失部分一般为默认值,null啊,0啊之类的。

 除法:就是找和除数都相同的,都相同就算,有一个不相同都不行

 

 数据定义语言-sql不记了,详情见这篇:MySql - 22软工冷薄 - 博客园 (cnblogs.com)

4.SQL访问控制

授权(GRANT ON TO)

收回(REVOKE ON FROM)

 关系模式:其实是一个5元组,但是有两个不重要可以算成三元组了

 R:关系名。

U:一组属性

F:函数依赖。

这个从左往右念是 学号决定姓名 ,从右往左念是 姓名依赖学号

 5.数据依赖

  1.函数依赖:一个属性集能推出另一个属性集。

  2.非平凡函数依赖:两个属性集之间没有关系。,算是属性集有没有重合,各推各的。

  3.部分函数依赖:需要2个或以上的属性集才能推出函数依赖。

  4.传递依赖:A,B,C属性集间,A能推B,B能推C,其中A间接可以退出C,这个就叫做传递依赖

  5.完全函数依赖:有且仅有A才能推出B,中间没有传递,才叫完全函数依赖。

  6.候选码:就是能当主键的可能会有多个属性决定,这个属性集统一叫做候选码。

  7.主属性,非主属性:只要算在候选码其中之一的就是主属性,不算的是非主属性。

  8.外码:外键 

 属性闭包计算

6.给定关系模式

 就是,利用函数依赖,使用最少的关键字能够代替U属性集

  +是闭包

做题小技巧:找F函数依赖里谁决定不了,就这道题来讲,只有AC是别人替代不了的,其他关键字都能被AC替代,所以AC一定是代替U属性集的其中之一

 只要是在U里的关键字都是主属性/候选码

关系范式

 关系分解

 将范式分解的更合理化。

无损连接:分解后能通过自然连接恢复

依赖保持性:分解后的属性集自然连接后还能保持原来的F函数依赖!

数据库设计步骤(新奥尔良)

(1)用户需求分析【需求文档 数据字典 数据流程图】

(2)概念设计 【E-R图】

(3)逻辑设计【数据模型 关系范式化 用户子模式】

(4)物理设计 【定义数据库 数据装入 运行数据库】

ER模型的属性

(1)简单属性和复合属性:简单属性不可再分,复合可以分成更小的属性。比如省市

(2)单值属性和多值属性:一个属性可能对应多个,职工家人等。

(3)NUll属性:没有值,表示不知道或无意义

(4)派生属性:由另一个属性决定值,比如说年龄是由出生年月求出来的。

ER模型主要构建

 

 

 

 ER设计冲突

1.属性冲突:同一属性可能会存在于不同的分ER图,可能因为设计的人员不同,思路不同,属性的范围,类型,数据单位可能会不一致。需要统一

2.命名冲突:相同意义的属性在不同的ER图上可能有不同命名,或者是在名称相同的属性在不同的ER图上代表不同意义也需要统一。

3.结构冲突:同一实体在不同的ER图上有不同的属性,可能一张图上是实体,一张图上是属性,需要统一

优化方面:

   1.实体类合并。两个有1:1联系或1:n可以合并成一个类型,使实体个数减少。

   2.冗余属性的消除:实体图合并后可能出现冗余

   3.冗余联系的消除:同样的情况也会在联系上出现。

异名同义 同名异义

实体向关系模式转换:看ER图就行,联系上有关系的加上其他实体的主键,多对多得找到有联系的其他主键(多对多要一定要有独立的关系模式)

需求分析阶段

 概念设计阶段

逻辑机构设计

 数据库的物理维护

数据库的控制功能

事务管理

要么都不做,要么都做

ACID原则

 数据库的备份与恢复

1.故障类型

(1)事务内部故障

(2)系统故障:软故障,系统停止运行,比如cpu故障,操作系统故障,设备停电等。

(3)介质故障:硬件故障

(4)计算机病毒:人为的一种故障和破坏。

2.备份方法

(1)静态转储和动态转储。静态转储是指再转储期间不容许对数据库进行增改操作,动态是允许。所以转储和用户事务可并发执行。

(2)海量转储和增量转储:海量是每次转储全部数据,增量转储是指每次只转储上次更新后的数据。
(3) 日志文件:利用日志文件通过事务回退到最后事务的初始。

 3.恢复

(1)反向扫描文件日志

(2)对事务的更新执行逆操作

(3)继续反向扫描日志文件,同上

4.数据库镜像

DBMS提供的复制数据,为了不影响运行效率,一般只对关键数据和日志文件镜像

并发控制

封锁:(1)排它锁 X锁 按照只能一个事务一个事务来,只允许事务T读取和修改数据对象A,其他事务不能再对A上任何类型的锁,只能等事务T结束。

   (2)共享锁 S锁 可以备被多个事务上锁,只能允许事务T对数据对象A加上S锁,只能读取不能修改A。直到事务T结束后没有S锁就可以修改A了

分布式数据库

分片透明:至用户或应用程序不需要知道逻辑上访问的表是怎么分块储存的。

复制透明:指采用复制技术的分布方法,用户不需要知道数据是复制到那些节点,如何复制的。

位置透明:指用户无需知道数据存放的物理位置。

逻辑透明:指用户或应用程序无需知道局部场地使用的是哪种数据模型

 

共享性:指数据存储在不同的结点数据共享

自治性:指每结点对本地数据都能独立管理。

可用性:指当某一场地故障时,可使用其他场地上的副本不至于整个系统瘫痪

分布性:指数据在不同场地存储。

目录

 

6、下午题—试题二(15分) 

看题目补充即可,记得如何判断联系

概念设计模式

问题1:直接看题写联系是1:1,1:*,还是*:*。

逻辑设计模式

问题2:看题填关系模式

一对一关系:把其中一方实体主键加入另一方

一对多关系:将一方实体主键加入多方实体中

多对多关系:创建独立的关系名,取多方实体的主键作为属性

 弱实体不能单独存在,一定要以另一个实体为前提。

 问题3 一般是拓展,题目系统优化,改进,还是看题目,照做就行

7、上午题—面向对象(3~4分) 

 面向过程和面向对象

面向过程·:注重步骤。关心我怎么做?

面向对象:注重调用那个对象操作实现功能。关心我该让谁去做?

实体类:系统中存在的。也是最重要的

接口类(边界类):是系统和外界接口的媒介

控制类:控制活动流,充当协调者

一般与特殊关系

一般和特殊关系就是父类和子类之类的关系。

 

 

 感觉·消息像实参,属性就是状态,行为是方法

方法重载

在方法名相同的前提下,参数个数不同,或者参数类型不同,参数类型顺序不同,都算方法重载。

封装

 

 

 

 父类子类

 参数多态特征是最纯多态,应用范围广

包含多态特征是子类型化,即一个类型是另一个类型的子类型

过载多态是同一个名字在不同上下文中所代表的含义不同

编译的时候是静态绑定

运行的时候是动态绑定

都支持多态

面向对象设计原则

     

 面向对象分析

 面向对象设计

 面向对象测试

 面向对象程序设计:JAVA基础

8、上午题—UML(3~4分) 

事务:是对模型中最有代表性的抽象

 四种事务:结构事务 行为事务 分组事务 注释事务‘

结构事务

行为事务:就是交互。

 

分组事物:最主要的分组事务是包,任何事务都可以包内,不过这个包是概念上的。

 

注释事务:是UML的解释部分,用来说明任何元素。折角

 

关系:把事务结合在一起

图:聚集相关事物

 关系

UML中有四种关系:依赖 关联 泛化 实现

依赖:其中一个事务变化会影响另一个事务。

记作

 关联:分为两个(菱形那边是整体)是一种结构关系,链

聚合:部分和整体生命周期不一致,整体消失部分可以独立存在

空心菱形

 

组合:部分和整体生命周期一致,整体消失部分也消失,不能独立存在

实心菱形

泛化:就是继承,箭头那边是父类

 实现:

 多重度:一共类的实例能够被多少个实例相关联

 UML类图 

类图包含类,接口,依赖,泛化,关联。实现少。

 

 类图概念

对系统的词汇建模

对简单协作建模

对逻辑数据库建模

对象图

展示了某一时刻一组对象及他们之间的关系,一般包括对象和链

 

用例图

 展现了用例,参与者之间的关系
包括用例,参与者/用例之间的扩展关系《extend》和包含关系《include》,参与者和用例之间的关联关系,用例参与者/用例之间的泛化关系。
泛化关系是有可能发生,包含关系是必须发生。
包含关系:

    主------------------------------------------------------------------次

 拓展关系

一个用例执行的时候,可能会发生一些特殊的情况,这种情况就是这个用例的拓展用例。

 泛化关系

父类子类继承。。

小结

用例图是对于静态用例进行建模,方向有两种:
1.对系统语境建模

2.对系统的需求建模

 交互图(一般包含对象,链,消息)

1.序列图

时间顺序来组织对象之间的交互,可以根据生命线一目了然的看到每个对象的生命周期。

 

B

A实现的方法看哪个消息指向A生命线,谁指向生命线就是需要实现的方法

 2.通信图

 对消息有一个清晰的可视化轨迹

消息前的数字执行顺序

序列图和通信图之间可以相互转换

3.状态图

是从一个状态到另一个状态的转换

由状态,转换,事件,,活动组成,通常是对反应型对象建模

状态和活动

 

 转换和事件

是对系统做动作或切换状态的外界事件的抽象。点击鼠标等。

如果箭头线上没有标明事件,说明这个事件自动执行触发转换。

只要事件动作为TRUE,即可执行

 

 

 完整状态图

4. 活动图

活动图展现了从一个活动到另一个活动的流程

一般包括活动状态和动作状态,转换和对象

活动图可表示分支,合并,分岔,汇合

当需要使用活动图时,一般从两个方面入手

1.对工作流建模

2.对操作建模

 5.构件图

展现了一组构件之间的组织和依赖

与类图相关,通常把构件映射为一个类,多个类,接口或协作。

 

 个人总结,供接口(手)去抓需接口(球),才能实现供接口

6.部署图

展现了系统的软件和硬件之间的关系,在实施阶段使用,类似包依赖

9、下午题—试题三(15分) 

 泛化关系是有可能发生,包含关系是必须发生。

注意细节,一般带英文的就是类/。然后一定要看所有的关系,尤其是多重度,多重度可以更快的将类猜出来。

 

事件流

只要是显示,给用户看啥的就是接口类,有动词修饰的就是控制类,实体类就是永久存储的

UML这里就截止吧,到时候边做题边总结套路。状态图套路还没看,应该问题不大!

10、上午题—设计模式(固定4分)主要看意图和适用性

设计模式要素:能复用成功的设计和体系结构

 简单工厂

 容易改一个影响其他的

工厂方法

意图:创建对象的接口,让子类决定实例化哪一个类。

 

 抽象工厂

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类

 

生成器模式

将一个复杂对象的构建与他的表示分离,

意图:使用同样的构建过程可以创建不同表示。

 

 prototype(原型)

意图:用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象

 

 1.上边工厂是产品创建组成,这个是构成。

SingLeton(单例)

意图:保证一个类仅有一个实例,并提供一个访问它全局访问点

 突出一个单字。

适用性:唯一实例

 结构型设计模式:

 

Adapter(适配器) 口诀 我(w外观)兄(x享元)弟(d代理)竖(s适配器)起(q桥接)中(z组装)指(z装饰)我xd竖起中指

意图:将一个类的接口转换为客户希望的接口,这样就能一起工作了

 适用性:接口不符合要求

 Bridge(桥接)模式

意图:将抽象部分 与其 实现部分分离,使他们都可以独立发生变化。

 compostite(组合)模式

意图:将对象组合成树形结构表示“部分-整体”的层次结构。

 

 

 有叶子结点就是组合(leaf)

Decorateor(装饰器)模式

意图:动态的给对象添加一些额外的职责。

 添加职责

Facade外观

意图:为子系统的一组接口提供一个一致的界面

 适用:为一个复杂子系统提供一个接口时,

    客户程序与抽象类的实现部分存在很大的依赖性时,

    构建一个层次结构系统时。

Flyweight(享元)模式

 

 适用性:使用了大量对象,对象大多数可以变为外部状态,应用不依赖于对象标识。

Proxy(代理)

意图:对其他对象提供一种代理以控制对这个对象的访问

类似替身,间接控制对象访问。

 适用性:在需要比较通用和复杂的对象指针代替简单的指针的时候。

 行为设计模式

Chain of Responsibility (责任链)模式

意图:使多个对象都有机会处理请求,避免发生耦合关系,将这些对象连成一条链,并沿着这条链传递请求直到处理为止。

 

 Command(命令)模式

 

意图:对请求封装,可以处理多个请求排队记录支持撤销

适用于:抽象待出行动作以参数化某对象

    不同时刻排列请求。

    支持取消操作

    支持修改日志

Interpreter(解释器)模式

意图:就是将语言解释

适用于,需要将语言解释,可以将语言表示为抽象语法树

 Iterator(迭代器)

意图:提供一种方法顺序访问一个聚合对象的各个元素

 Mediator 中介者模式

意图:用一个中介对象封装一系列的交互,不需要显式地相互引用,使其耦合分散

 设计模式第一空选择看后边说的什么。

Memento(备忘录)模式

意图:在不破坏封装性前提下捕获一个对象的内部状态。以后就可以将对象回复到原先保存的状态

 Observe(观察者)模式

意图:定义一种对象间1对多的依赖关系,当一个对象状态发生改变时,所有依赖他的对象都得到通知并自动更新

适用性:一个对象必须通知或改变其他对象时。

一般是具体子类实现功能

state(状态)模式

意图:允许对象在其内部状态改变时改变他的行为,看起来似乎修改了它的类

 strategy(策略)模式

意图:定义一些列算法,封装并使他们可以相互替换。

适用:算法 多种行为

 Template Method(模板方法)

意图:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。

 Visitor(访问者)

意图:表示一个作用于某对象结构的各个元素操作,在不改变类的前提下定义新操作。

适用:定义对象的类结构很少改变,但需要在此结构上定义新的操作

小结:

创建型设计模式

Factory Method 工厂方法:意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method 使一个类实例化延迟到子类。

     适用性:当一个类不知道它所创建的对象的类时。

         当一个类不希望它的子类指定它所创建的对象的时候。

         当类将创建对象委托给子类。

Abstract Factory (抽象工厂):意图:提供一个创建系列相关或相互依赖对象的接口,无需指定具体类。

                适用性:

Bulider (生成器):意图:将一个复杂对象构建与它的表示分离,使同样的构建过程可以创建不同的表示。

          适用性:当创建复杂对象的算法应该与对象分离。当构造过程必须被构造对象有不同表示时。

 Prototype(原型):意图:用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象。

         适用性:

Singleton(单例):意图:保证一个类仅有一个实例,提供一个访问它的全局访问点。

         适用性:访问点能拓展

结构型设计模式

Adapter(适配器)意图:使接口和接口不兼容的类能一起工作

        适用性:想用类但接口不符合要求/不能协同工作。

        仅适用对象Adapter:想用一个存在的子类,对象适配器可以适配它父类接口

* Bridge桥接模式:意图:将抽象部分与其实现部分分离。

         适用性:抽象部分和实现部分分开的很彻底。

             想对客户完全隐藏抽象的实现部分。

             有许多类要生成类的层次结构。

             想在多个对象间共享实现。

Composite(组合):意图:将对象组合成树形结构表示“部分-整体”的层次结构。使得用户对单个对象和组合对象的使用有一致性。

          适用性:部分与整体

              希望用户忽略组合对象单个对象不同。

decorator(装饰):意图:动态的给一个对象添加一些额外职责。

         适用性:不影响其他对象前提下,添加职责

             处理可撤销职责           

             不能采用生成子类方式扩充时。

Facade(外观):意图:为接口提供一个一致的界面。像浏览器界面一样

        适用性:要为一个复杂子系统提供一个接口时。

            客户程序和抽象类实现部分有很大的依赖性

            当需要构键一个层次结构系统时。

Flyweight(享元):意图:运用共享技术有效的支持大量细粒度对象。

         适用性:使用了大量对象。

             对象大多数状态都可变为外部状态。

              应用程序不依赖标识。

Proxy(代理):意图:为其他对象提供一种代理以控制这个对象的访问。

 行为型设计模式

 InterPreter(解释器):意图:解释语言

Iterator(迭代器):意图:提供一种方法顺序访问一个对象中的各种元素。

 Mediator(中介者):意图:用一个中介对象来封装一些列的交互。不需要显式的互相引用。比较松散。

          

 Memento(备忘录):意图:不破坏封装的前提下捕获一个对象的内部状态,这样就可以将对象恢复到原先保存的状态。

* Observer(观察者):意图:定一个对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,

             所有依赖它的对象都会得到通知并自动更新。

 

          适用性:

一个对象必须通知或改变其他对象时。

一般是具体子类实现功能

State(状态):意图:允许一个对象在其内部状态改变时改变他的行为,看起来修改了类

 

 Strategy(策略):意图:定义一些列算法,一个个封装起来,使他们可以相互替换。  

         

 Template Method(模板方法):意图:定义一个操作中的算法骨架,将一些步骤延迟到子类当中。

 Visitor(访问者):意图:表示一个作用于某对象结构中的各种元素操作,允许在不改变各元素的类的前提下定义作用于这些元素的新操作。

          

 

  

 

 

 

    

 有问题去看设计模式最后一个视频————》设计模式总结

软件维护

 

11、下午题—试题六 JAVA(15分)

看图说话。

抽象类不一定有抽象方法,但是有抽象方法的一定是抽象类。

12、上午题—操作系统(固定6分)

计算机系统层次结构图

 

前趋图

程序顺序执行。

 PV方式:P前驱 V后继(实现同步和互斥)P-1,V+1

信号量S(箭头)大小判断:SPV:P1——>P2 == S12.

当S < 0 时,|S| = S个进程,S >= 0 表示某资源可用数

 

 程序并发执行

同理,根据题目给出的顺序,大胆推理。

进程三态模型

 进程一个个带,在三态模型上走一下就知道了。

 j技巧:如果一个S的第一次出现是P()就肯定是n,如果是V()那肯定是0

成对出现是互斥(0|1)

死锁

 

 

好像做过类似的题,不发生死锁的话至少需要 m -1 >= n * ( k - 1 ) 个资源,即是m最小值

//资源数-1 大于等于 n个进程*(每个进程资源数-1)

 

 先分配,再申请。

按箭头走,资源点满了还有箭头就是阻塞,有空余资源点是非阻塞

当有空余资源点时,还有箭头指向,说明这个图可以优化,化简顺序从非阻塞开始。

死锁,资源点都被占用还有多的箭头就是死锁。有多余就是非死锁

死锁避免

看题吧。简单的数学加减

 

 线程:线程可与同一个进程的其他线程共享进程所拥有的全部资源。(进程的资源可以被全部线程共享)

 没被动过的代价最小,看访问和修改,前提在内存里

分页存储管理

16进制,转物理地址就看页号,页号转页帧。其余不变

 

 段页式存储管理

单缓冲区,双缓冲区

单缓冲区算n个*(前两个)+最后一个   N *(T+M)+ C

双缓冲区算N * T + M+C

磁盘调度算法

1.先来先服务 FCFS:纯按照请求顺序访问,这个最慢了。频繁改变方向

2.最短寻道优先 SSTF:看磁头两边那个近选哪个。频繁改变方向

3.扫描算法/电梯调度算法 SCAN:磁头两边任意一个方向,碰壁回头算另一边

4.循环扫描算法/单项扫描 CSCAN:磁头两边任意方向,碰壁后回头到另一边碰壁再返回算。

 

 总时间: (读时间+处理时间)+ (n-1)(处理时间+转一圈时间)

优化:优化算 N*最大时间(读时间和处理时间)

 

 1级170

2级170*170

二级包含一个一级。

 相对路径:包含文件名的那个目录。不带/

绝对路径:把访问点文件名去掉就是绝对路径。带/

  位示图

 物理块号/字长=第几个字。

13、上午题—结构化开发(3~4分)

耦合:

 无直接耦合:两个模块间没有直接联系

数据耦合:传递的是简单的数据值。

标记耦合:两个模块间传递的是数据结构

控制耦合:传递的是控制变量。

外部耦合:模块间通过软件之外的环境联结

公共耦合:通过公共数据环境相互作用的耦合

内容耦合:一个模块直接使用另一个模块的内部数据,或者非正常入口转入另一个模块内部时。

内聚

偶然内聚:指一个模块内部的各种处理元素之间没有任何联系

逻辑内聚:指模块执行若干个逻辑相似的功能。

时间内聚:同时执行的动作组合一起。(特定时间)

过程内聚:必须按照指定过程执行。

顺序内聚:指模块内所有处理元素都密切相关于同一功能而且必须顺序执行。

通信内聚:指模块都在同一个数据结构上操作。

功能内聚:所有元素共同完成一个功能。

划分模块:高内聚,低耦合

 数据字典:

 

 

14、上午题—软件工程(上)(上+下一共:10分左右) 

 CMMI

1)阶段性模型 

 瀑布模型

需要很明确的需求,没有很好的风险评估。

 增量模型:瀑布模型plus

不断更新产品的一部分,直到完善,第一个交付产品的成本和时间少。要提前规划 。

演化模型:包括原型模型和螺旋模型。 

原型模型:快速设计一个模型出来。

比较适合用户需求不清,需求经常变化的情况,系统规模不是很大也不是很复杂时,采用该方法。

 螺旋模型:首次提到风险的处理,适合大型开发。

 

喷泉模型:适合面向对象开发方法,不断迭代,是无间隙开发,每个阶段之间互不影响(无边界),同时进行,但是对文档的要求比较高。

 敏捷方法

1.极限编程:

4大价值观:沟通,简单性,反馈,勇气

5个原则:快速反馈,简单性假设,逐步修改,提倡更改和优质工作

 2.水晶法:认为每个不同的项目都需要一套不同的策略、约定、和方法论

3.并列争求法:30天迭代。

 

 建模,实现,测试,部署,配置及项目管理,环境管理。

软件需求

 

 

回归测试:软件发生变更时,以前正确的功能产生问题,这时候用回归

单元测试和模块有关。 

集成测试

自顶向下集成测试

不用编写驱动模块,需要编写桩模块。

 

 自底向上用驱动。

 

 测试方法

静态测试:被测试程序采用人工和计算机辅助。

动态测试:通过运行程序发现错误,黑盒白盒测试两种。

黑盒测试:功能测试,不考虑软件内部结构的情况下,测试软件外部特性。(只看重输入数据输出的结果)

*1.等价类划分:将输入域划分为若干等价类。从每个等价类中选取一个代表性数据。

 

 

 测试用例要确保只有个一个错误!(一次只覆盖一个无效等价类)

McCabe度量法:V(G) = m - n + 2,m 是箭头数,n是节点数,这个公式数的是环路个数,下图答案是3,除去自环的两个环之外,图本身也算一个环,所以 8 - 7 + 2 = 3。

 如果是程序设计图,要把这个(未知指向)箭头所指的结点算上

白盒测试:也称结构测试,根据程序内部结构和逻辑来设计用例。

(1)逻辑覆盖

语句覆盖:选择足够的数据,使程序中每条语句至少执行一次。

判定覆盖:也叫分支覆盖,使得测试程序的每个判定表达式至少获得一次 真值 和 假值,都真 和 都假。

条件覆盖:使得测试程序中每个逻辑的可能都满足至少一次。00 00 和 11 11

判定/条件覆盖:使得设计足够测试用例,保证判断真和假的条件都至少出现一次,00 11 真和假

 条件组合覆盖:判断所有可能出现真假的可能性。01 10 11 00.真 假 真 假

路径覆盖:对所有路径都覆盖

循环覆盖

基本路径测试

语句覆盖是最弱的准则,路径覆盖是最强。

(2)循环覆盖

(3)基本路径测试

 

15、上午题—软件工程(下)(上+下一共:10分左右) 

16、上午题—信息安全(5分左右)

 

防火墙:建立在内外网络边界上的过滤封锁机制。

包过滤防火墙:处于网络层和数据链路层,检查源地址,目的地址,协议,端口等。对用户完全透明,速度较快,安全性较低。

应用代理网关防火墙:隔绝内网与外网的直接通信,所有通信必须经过防火墙转发,不能建立直接的TCP连接。可以检测应用层网络层传输层的协议特征。难配置,处理速度很慢。

 

 

 

 

 

 

 POP3接受邮件,端口号110

MIME和安全无关

TCp传输控制协议

TFTP简单文件传输

 

17、上午题—计算机网络(固定5分) 

 

 

 

 所有带T的除了TFTP其他都是TCP,所有不带T的除了POP3其他都是UDP​

带IP/AP的都是网络层

FTP 控制21 | 数据20(控2120)

 

 

,开销较小。

 

 

MIME:文件附件拓展类型,SMTP:发送邮件,POP3:接收邮件,PEM私密邮件

 DES53

 ARP和RARP

 DCHP

 

 

 

18、上午题—数据结构(上)(上+下一共:5分左右) 

 

 

 

渐进上界的括号内要大于等于等式左边的计算结果,渐进下界的括号内要小于等于等式左边的计算结果,渐进紧致界括号内的只能等于等式左边的计算结果

19、上午题—数据结构(下)(上+下一共:5分左右) 

20、上午题—算法(4~5分) 

动态规划:

1.最优子结构

2.重叠子问题

贪心法:局部最优

1.最优子结构

2.贪心性质

回溯法:

N皇后,跳跃性的搜索算法,深度优先遍历

分支限界法:广度优先

 3.分治算法

归并排序

最大子段和问题

 

21、下午题—试题四(15分) 

 

 

 

   面向对象分析包含5个活动:认定对象、组织对象、描述对象间的相互作用、确定对象的操作、定义对象的内部信息

 

 

 

 

posted @ 2024-05-17 21:10  22软工冷薄  阅读(142)  评论(0编辑  收藏  举报