软件工程师——(十八)个人总结

93 阅读9分钟

一、上午题经验总结

1. 进制转换

  • 1、二进制3位代表1个8进制位,4位代表1个16进制位
  • 2、16进制十进制 = Sum(对应位置数值 * 16^权值)

2. 原码、反码、补码、移码

  • 1、+0的二进制表示为0000 0000,-0的二进制表示为1000 0000
  • 2、原码、反码、补码、移码之间的关系如下图:
graph LR
正数([正数]) --- 原码
原码 --> |等同于| 反码
反码 --> |等同于| 补码
补码 --> |首位取反,其他不变| 移码
graph LR
负数([负数]) --- 原码
原码 --> |首位不变,其他取反| 反码
反码 --> |增加1| 补码
补码 --> |首位取反,其他不变| 移码

3. 浮点数计算步骤

flowchart LR
subgraph 第一步
   对阶 -.- x>低阶扩大至与最大阶码相同,尾数算数右移]
end
subgraph 第二步
    尾数计算 -->y>尾数进行运算操作]
end
subgraph 第三步
    结果格式化 -->z>科学记数法格式化<尾数的绝对值大于等于1,小于10>]
end
 第一步 --> 第二步 --> 第三步

3. 模2除法

  • 按位异或操作(相同为0,不同为1)

4. 校验码

1. 奇偶校验———检错

  • 1、基本思想
    • 编码中增加一位校验位,使编码中1个数为奇数或者偶数,从而使码距变为2

2. 海明码———检错纠错

  • 1、基本说明
    • 数据位为n二进制数中直接插入k个校验码,且2^k = n + k + 1
  • 2、计算示例 image.png
    • 操作流程(根据上题所示)如下:
      • 0、依题可知信息码长度为———4
      • 1、确定检验位位数———2^r >= 4 + r + 1———r >= 3,即确定检验码为3位,分别放在最终海明码的2^0 = 1、2^1 = 2、2^2 = 4位置
      • 2、确定最终海明码长度=信息位数+检验位数———4 + 3 = 7
      • 3、确定检验位和信息位————检验位位于最终海明码的(4、2、1)位置,信息位位于最终海明码的(7、6、5、3)位置———101?1??
      • 4、得到信息位对应位数二进制多项式
        • 1)7 = 2^2 + 2^1 + 2^0———该信息位值1需要参与r2、r1、r0的异或计算
        • 2)6 = 2^2 + 2^1———该信息位值0需要参与r2、r1的异或计算
        • 3)5 = 2^2 + 2^0———该信息位值1需要参与r2、r0的异或计算
        • 4)3 = 2^1 + 2^0———该信息位值1需要参与r1、r0的异或计算
      • 5、确定检验位的二进制多项式在信息位对应位数的二进制多项式是否出现(如果出现,让其对应的信息位数据参与异或操作,最终得到检验位的数据)
        • 1)r2 = I4 ⊕ I3 ⊕ I2 = 1 ⊕ 0 ⊕ 1 = 0
        • 2)r1 = I4 ⊕ I3 ⊕ I1 = 1 ⊕ 0 ⊕ 1 = 0
        • 3)r0 = I4 ⊕ I2 ⊕ I1 = 1 ⊕ 1 ⊕ 1 = 1
      • 6、检验位数据分别为0、0、1,因此最终信息1011的海明码为1010101
      • 7、海明检验码除了可以检错可以纠错———如果收到的信息为1011101,则可知信息位为1011,校验位为101
      • 8、按照原来产生校验位的形式,再次产生校验位,即得到正确的校验码———001
      • 9、将收到的检验位和产生的检验位进行异或操作,得到新的结果———101 ⊕ 001 = 100 = 4
      • 10、因此第4个位置出错了,进行修正(1更正为0,0更正为1)后得到新的结果———1010101

3. 循环冗余校验码———检错

  • 1、基本说明
    • 利用生成的多项式k个数据位产生r个校验位
    • 编码格式 = k个数据位之后跟r个校验位
    • 编码长度 = k+r
  • 2、计算步骤如下(11001010101为例;多项式为x^4 + x^3 + x + 1):
    • 1、将多项式转换成二进制形式———x^4 + x^3 + x + 1(代表2的4次方、3次方、1次方、0次方各有一个1)———即为二进制的11011
    • 2、在原始报文后添加与生成多项式长度减1个0———110010101010000
    • 3、对改变过后的原始报文进行模2除法操作,得到其余数———0011
    • 4、将得到的余数拼接在原始报文后,即得到其CRC编码后的结果———110010101010011
    • 5、在接收到该CRC编码之后,与多项式生成的二进制形式进行模模2除法后,余数为0,即证明其是正确的

5. 存储设备访问速度

graph LR
通用寄存器 -->|大于| Cache -->|大于| 内存 -->|大于| 硬盘

6. 存储大小关系

  • 1B = 8bit
  • 1KB = 1024B
  • 1MB = 1024KB
  • 1GB = 1024MB
  • 1TB = 1024GB

8. 常见大小

  • 2^1 = 2
  • 2^2 = 2^2 = 4
  • 2^3 = 2^2 * 2 = 8
  • 2^4 = 2^2 * 2^2 = 16
  • 2^5 = 2^2 * 2^2 * 2 = 32
  • 2^6 = 2^2 * 2^2 * 2^2 = 64
  • 2^7 = 2^2 * 2^2 * 2^2 * 2 = 128
  • 2^8 = 2^2 * 2^2 * 2^2 * 2^2 = 256
  • 2^9 = 2^2 * 2^2 * 2^2 * 2^2 * 2 = 512
  • 2^10 = 2^2 * 2^2 * 2^2 * 2^2 * 2^2 = 1024

7. 寻址方式

  • 隐含寻址———指令隐含操作数的地址
  • 寄存器寻址———不在内存中,在CPU寄存器中,给出的是通用寄存器的编号
  • 立即寻址———操作数本身
  • 直接寻址———直接给出操作数在内存中的地址

8. 系统总线包括ISAEISAPCI;SCSI并行外总线

9. 串行n条指令执行时间———(n代表指令条数)

  • (t取指 + t分析 + t执行) * n

10. 流水线

  • 0、流水线周期计算
    • Max(t取指,t分析,t执行)
  • 1、流水线执行时间计算(n代表指令条数)
    • 方式一———Max(t取指,t分析,t执行) * n + 除了Max(t取指,t分析,t执行)之和
    • 方式二(理论公式)———(n - 1) * Max(t取指,t分析,t执行) + (t取指,t分析,t执行)之和
  • 2、吞吐率计算
    • 指令条数 / 流水线执行时间
  • 3、加速比计算
    • (指令条数 * (t取指,t分析,t执行)之和) / 流水线执行时间`

11. 计算环路复杂度

  • 1、流图中的环形复杂度 = 判定节点数 + 1
  • 2、流图中的环形复杂度 = 区域数(P)
  • 3、流图中的环形复杂度 = 边的条数(E) - 结点数(N) + 2

12. 内存容量计算

  • 1、容量计算———内存容量(B) = (Max(字节编址) + 1) - Min(字节编址)
  • 2、单位转换———内存容量(KB) = 内存容量(B) / (1024 = 2^10)

13. 多指令单数据流(MISD)的计算机目前没有

14. 计算机病毒

  • 1、木马———外部主机控制盗取
    • 特洛伊木马————无复制能力,伪装
  • 2、病毒———
    • 蠕虫病毒———通过复制自身互联网环境下进行传播
    • 宏(Melissa)病毒———寄存在文档或模版中的病毒,一般以DOC为扩展的文件
    • CIH病毒———能够破坏计算机系统硬件的恶性病毒,只能在win95\win98\winMe

15. 加密算法分类

  • 1、对称加密———加解密使用相同的密钥
    • DES
    • 3DES
    • AES
    • RC5
    • IDEA
  • 2、非对称加密———加解密使用不同的密钥
    • RSA(512/1024密钥)
    • Elgamal(哈夫曼树算法)
    • ECC(椭圆曲线算法)
    • 背包算法
    • Rabin
    • D-H

16. 系统可靠度计算

  • 1、并联系统———系统可靠度 = 1 - ((1 - R1) * (1-R2) * ... * (1-Rn))
  • 2、串联系统———系统可靠度 = R1 * R2 * ... * Rn
  • 3、混合模型———(分成多个并联和串联)单独计算,然后再求整体

17. 计算机时钟计算

  • 1、指令平均时钟数 = 总时钟数 / 总指令条数
  • 2、计算机运行速度(MIPS) = 时钟频率(M)/指令平均时钟数

18. 双符号位判决法

  • 1、若采用两位表示符号,即00表示正号11表示负号,则溢出时两个符号位就不一致了,从而可以判定发生了溢出。这需要通过异或运算判别

19. 函数调用传参

  • 1、传值方式
    • 只能实参传递给形参(单向———改变形参不影响实参)
  • 2、引用方式
    • 传递的是实参的地址(双向———改变形参影响实参)

20. 正规表达式求解示例

  • 1、求语音L = {a^mb^n | m>=0,n>=1}的正规表达式
    • m>=0———a有0个或者多个
    • n>=1———b有1个或者多个
    • 所以正规表达式为———a ^ * b b ^ *

21. 编译过程

  • 1、词法分析
    • 识别关键字标识符单词符号
  • 2、语法分析
    • 根据语法规则单词符号序列分解成表达式语句程序各类语法单位
  • 3、语义分析
    • 审查程序是否存在语义错误(类型分析和检查)
  • 4、中间代码生成———分水岭(前边的步骤和机器无关,后续的步骤和机器有关)———不是每种编译器都必须的
    • 根据语义分析的输出生成中间代码
  • 5、代码优化———不是每种编译器都必须的
    • 中间代码进行变换或改造,使其变的省时间省空间
  • 6、目标代码生成(是分配寄存器的阶段)
    • 中间代码转换为特定机器上的相关代码
  • 7、符号表管理
    • 记录各个符号的必要信息,辅助语义的正确性检查代码生成
  • 8、出错处理
    • 分类———分为动态(逻辑错误)静态(语法和静态语义错误)错误
    • 任务———检查错误、报告出错信息、排错、恢复编译工作

22. 确定的有限自动机不确定的有限自动机等价的———可标识的记号相同

23. 文法分类

  • 0型(短语)———图灵机
  • 1型(上下文有关)———线性有界自动机
  • 2型(上下文无关)———下推自动机
  • 3型(正规/线性)———有限状态自动机

24. 配置数据库

  • 包括开发库受控库产品库

25. 七层模型

image.png

  • 1、交换器(多端口网桥)———各个接口形成一个广播域
  • 2、集线器(多端口中继器)———所有端口组成一个冲突域

26. 关系代数运算(元组———记录数;元关系———列数)

  • 1、———A∪B———A或B有的
  • 2、———A-B———A有的,B没有
  • 3、———A∩B———A和B共有的
  • 4、笛卡尔积———AxB———A的每一条记录B的每一条记录进行依次拼接
  • 5、自然连接———A⋈B———依据公共列B在A中没有的列拼接A后边
  • 6、投影———πB(A)———从A中选择出符合B条件
  • 7、选择———σB(A)———从A中选择出符合B条件

二、下午题经验总结

1. 数据流图设计

2. 数据库设计

3.