软考程序员备考+笔记

2022/12 软考初级程序员考试
成绩: 上午66/75 下午66/75, 无事合格~

备考

官方教程+往年题(题库还是乖乖买书,电子资源都不太行…)

基本上的流程

  • 通读官方书,大致确认知识点
  • 做题,不会的对应补补
  • 继续做到考试开始,提高熟练度

笔记

当时记下的笔记,英文题目对应记了一些单词

1.计算机系统

1.2 数据的表示及运算

码制

  • 原码
    • 符号位:0正1负
    • 数值:绝对值
  • 反码
    • 符号位:0正1负
    • 数值:正数与原码相同(绝对值),负数按位求反
  • 补码
    • 符号位:0正1负
    • 数值:正数与原码相同(绝对值),负数等于反码末尾+1
  • 移码
    • 补码符号位取反

浮点运算

  • 对阶。阶码小的数的尾数右移(小阶对大阶)
  • 求位数和/差
  • 结果规格化并判溢出
  • 舍入
  • 溢出判别

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

校验码

  • 奇偶校验码:在编码中增加一个校验位来使编码中1的个数为奇数/偶数
    • 码距2
    • 只能发现错误,不能校正错误
  • 海明码:在数据位之间插入k个校验位,通过扩大码距来实现检错和纠错
    • 校验位设在2^i位置
  • 循环冗余校验码CRC:生成多项式,模2运算

1.3 计算机的基本组成及工作原理

CPU组成

  • 运算器 ALU
  • 控制器
    • 程序计数器PC
    • 指令寄存器IR
    • 指令译码器
    • 状态字寄存器PSW
    • 时序产生器
    • 微操作信号发生器
  • 寄存器组
    • 累加器Accumulator
    • 通用寄存器主
    • 标志寄存器/状态字寄存器
    • 指令寄存器
    • 数据缓冲寄存器MDR
    • 地址寄存器MAR
    • 其他寄存器
  • 内部总线

总线

  • 性能指标
    • 位宽:总线能同时传送的二进制数据的位数(32位/64位)
    • 带宽:单位时间总线上传送的数据量,带宽 = 工作频率(MHz) * 位宽 / 8

存储系统

  • 读写存储器 RAM(Random Access Memory):掉电之后丢失数据,通常用作内存
    • 静态 SRAM(Static):数据存入之后不会消失
    • 动态 DRAM(Dynamic):需要周期刷新才能保持数据
  • 只读存储器 ROM(Ready Only Memory):不会丢失数据
    • 固定只读 ROM:厂家生产时就写好数据
    • 可编程 PROM(Programmable):由用户一次性写入内容,后不可更改
    • 可擦除可编程 EPROM(Erasable Programmable):用户写入后可以修改,修改的方式是用紫外线照射以擦去所有信息
    • 电擦除的可编程 EEPROM(Electrically Erasable Programmable):修改方式是电擦除
    • 闪速 Flash Memory:类似于 EEPROM,但删除速度快

CPU对主存的访问方式属于随机存取

  • 随机:以同等时间存取一组序列中的一个随意元素,序列的元素占用地址连续的存储空间(数组)
  • 顺序:访问信息时,只能按存储单元的位置,顺序地一个接一个地进行存取(链表)

存储系统的层次结构

  • CPU
  • 高速缓存(Cache)
    • 速度比主存快,内容是主存的副本
  • 主存(MM)
  • 辅存

硬盘

  • 固态硬盘 SSD:闪存颗粒存储,比机械硬盘功耗低
  • 机械硬盘 HDD:磁性碟片存储

1.4 指令系统简介

寻址方式

  • 立即寻址:操作数就在指令中
  • 直接寻址:操作数在内存单元中,指令直接给出操作数所在存储单元的地址
  • 寄存器寻址:操作数存放在某一寄存器中,指令给出寄存器名
  • 寄存器间接寻址:操作数存放在内存单元中,操作数所在存储单元的地址放在某个寄存器中,指令给出寄存器名
  • 间接寻址:操作数存放在内存单元中,指令给出操作数地址的地址(取出操作数要进行两次访问内存)
  • 基址寻址:操作数存放在内存单元中,指令中操作数地址码给出基址寄存器和一个偏移量
  • 变址寻址:操作数存放在内存单元中,操作数的有效地址等于变址寄存器的内容加偏移量

1.5 多媒体系统简介

媒体分类

  • 感觉媒体:声音、图像等
  • 表示媒体:图像编码(JPEG)、文本编码(ASCII)、声音编码等
  • 表现媒体:键盘、鼠标、扫描仪、显示器、打印机等
  • 交换媒体:包括存储媒体和传输媒体
  • 存储媒体:硬盘、软盘、磁盘等
  • 传输媒体:电缆、光缆、电磁波等

🌸🌻🍁❄️

2.操作系统

2.1 操作系统概述

嵌入式操作系统:微型化、可定制、实时性、可靠性、易移植性

2.2 进程管理

进程状态模型

  • 运行/就绪/阻塞
    • 运行 —等待某事件如IO—> 阻塞
    • 阻塞 —IO结束—> 就绪
    • 就绪 —被调度—> 运行
    • 运行 —时间片到—> 就绪

同步与互斥

  • 同步:合作进程间直接制约(一边进程需要另一边进程的结果)
  • 互斥:申请临界资源进程间的间接制约
  • 临界区:对临界资源实施操作的那段程序
    • 有空即进、无空则等、有限等待、让权等待

信号量机制

  • 信号量:S >= 0 表示某资源的可用数;S < 0 绝对值表示阻塞队列中等待该资源的进程数
  • PV 操作:P 表示申请一个资源;V 表示释放一个资源
    • P:S -= 1。若 S >= 0 则进程继续;若 S < 0 则该进程为阻塞状态,并将其插入阻塞队列
    • V:S += 1。若 S >= 0 则进程继续;若 S < 0 则从阻塞状态唤醒一个进程,并将其插入就绪队列
  • PV 实现互斥:
    • P(mutex)
    • 临界区
    • V(mutex)
  • PV 实现同步:
    • 将一个信号量与信息相联系,但信号量为 0 的时候表示希望的消息未产生,否则表示希望的消息已来到。进程调用 P 测试消息是否到达,调用 V 通知消息已准备好。
  • PV 属于低级通信方式(因为交换信息量只能是1,效率低)。高级方式:共享存储、消息传递、管道通信等

  • 排他锁/写锁/X锁
    • 对数据进行写操作时进行锁定
    • 一个事务加了写锁之后,其他事务不能加任何锁
  • 共享锁/读锁/S锁
    • 对数据进行读操作时进行锁定
    • 一个事务加了读锁之后,其他事务可以继续加读锁,但不可以加写锁

🌸🌻🍁❄️

3.程序设计语言

3.1 程序设计语言概述

  • 汇编程序:汇编语言 -> 机器语言
  • 解释器:直接解释执行;或 源程序 -> 中间表示形式再执行
  • 编译器:源程序 -> 目标语言,再与库函数链接形成可执行程序

🌸🌻🍁❄️

4.数据结构与算法

4.3 树与二叉树

最优二叉树/哈夫曼树:带权路径长度之和最小的二叉树

  • 只有叶子节点才有权!路径长度 * 叶子节点的权
  • 构造方法:不断从二叉树集合 F 挑选两个根结点最小的二叉树作为左右,构成一个新的二叉树,根结点为左右权值之和,然后加到 F 中
  • 编码:左分支0,右分支1
  • 译码:从树根开始,为0进入左,为1进入右,到达叶子节点时得到一个字符

4.4 图

基本概念

  • 完全图:任意两个不同节点之间都有边 / 都存在方向相反的两条弧
  • 连通图:无向图中任意两个节点都是连通的
  • 强连通图:有向图中任意两个节点都存在路径

邻接矩阵

  • 无向图的邻接矩阵是对称的

4.6 算法

排序算法

  • 直接插入
  • 简单选择
  • 冒泡排序
  • 希尔排序
  • 快速排序
  • 堆排序
  • 归并排序
    • 把原始数组分成若干个子数组,对每个子数组进行排序,继续把子数组与子数组合并,合并后依然有序

🌸🌻🍁❄️

5.软件工程

5.4 结构化分析与设计方法

结构化分析

  • 数据流图DFD:功能模型,描述系统的输入数据如何经过一系列的加工,逐步变换成系统的输出数据流
  • 状态迁移图:行为建模

5.5 面向对象分析与设计方法

UML

  • 事物
    • 结构事物
      • 模型中的静态部分,描述概念或物理元素
      • 类Class 接口Interface 协作Collaboration 用例Use Case 主动类Active Class 构件Component 制品Artifact 节点Node
    • 行为事物
      • 模型中的动态部分,描述了跨越时间和空间的行为
      • 交互Interaction 状态机State Machine 活动Activity
    • 分组事物
      • 组织部分,一些由模型分解成的盒子
      • 包Package
    • 注释事物
      • 注解Note
  • 关系
    • 依赖Dependency:两个事物间的语义关系
    • 关联Association:结构关系
    • 泛化Generalization:特殊/一般关系
    • 实现Realization:类元之间的语义关系
    • 类图
    • 对象图
    • 用例图
    • 序列图
    • 通信图
    • 交互概览图
    • 定时图
    • 状态图
    • 活动图
    • 组合结构图
    • 组件图
    • 部署图
    • 包图

面向对象

  • 多态:不同对象对同一消息的不同响应
    • 参数多态
    • 包含多态:同样的操作可用于一个类型及其子类型
    • 强制多态:编译程序通过语义操作,把操作对象的类型强行加以变换
    • 过载多态:同一个名(操作符、函数名)在不同的上下文中有不同的类型

设计模式

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

5.6 软件测试与运行

高效的测试:用较少的测试用例发现尽可能多的错误

软件测试过程

  • 单元测试 Unit
  • 集成测试 Integration
  • 确认测试 Acceptance
  • 系统测试 System
    • 在这里测试兼容性

白盒测试

  • 逻辑覆盖
    • 语句覆盖:每条语句至少执行一次,最弱的逻辑覆盖
    • 判定覆盖:每个判定表达式至少执行一次
    • 条件覆盖:每个逻辑条件的各种可能性至少执行一次
    • 路径覆盖:所有可能的路径
  • 循环覆盖
  • 基本路径测试

系统维护

  • 正确性维护:测试阶段没发现的错误
  • 适应性维护:适应信息技术和管理需求变化
  • 完善性维护:扩充功能和改善性能
  • 预防性维护:预防性的新功能

🌸🌻🍁❄️

6.数据库

6.2 数据模型

数据模型三要素:数据结构、数据操作、数据约束条件

事务

  • 原子性:事务是原子的,要么做,要么都不做
  • 一致性:事务执行的结果必须保证恶搞数据库从一个一致性状态变到另一个一致性状态
  • 隔离性:事务相互隔离。当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事务都是不可见的
  • 持久性:一旦事务成功提交,即使数据库崩溃,其对数据库的更新操作也永久有效
  • 串行调度:多个事务依次串行执行,且只有当一个事务的所有操作都执行完成后才执行另一个事务的所有操作

6.4数据库模式

三级模式

  • 概念模式:数据库中全部数据的逻辑结构和特征的描述
  • 外模式:用户与数据库系统的接口
  • 内模式:数据物理结构和存储方式的描述,数据在数据库内部的表示方式
  • 外 – 概念 – 内

两级映像

  • 模式/内模式:概念模式到内模式
  • 外模式/模式:外模式到概念模式
  • 物理独立性:内模式发生改变时,逻辑结构不变。只需修改概念模式/内模式的映像
  • 逻辑独立性:用户的应用程序与数据库的逻辑结构是相互独立的,数据的逻辑结构发生变化后,用户程序也可以不修改。只需修改外模式/概念模式的映像

6.5 关系数据库与关系运算

基本概念

  • 候选键 Candidate Key:能唯一标识一个元祖
  • 主键 Primary Key:如果有多个的候选键的时候选定一个作为主键
  • 主属性 Key attribute:包含在任何候选键的属性
  • 非码属性 Non-Key attribute:不包含在任何候选键的属性
  • 外键 Foreign Key

属性

  • 简单属性/复合属性
  • 单值属性/多值属性
  • 派生属性:可以由其他属性计算出来

关系代数运算

  • 并 差:两个关系具有相同的关系模式,即结构相同,在此基础上进行运算
  • 投影 Projection:从关系的垂直方向进行运算,在关系 R 中选出若干属性列 A 组成新的关系
  • 笛卡尔积 Cartesian Product:两个元数分别为 n 目和 m 目的关系 R 和 S 的广义笛卡尔积是一个 (n+m) 列的元组的集合,前 n 列是 R 的元组,后 m 列是 S 的元组
  • 连接 Join:从两个关系的笛卡尔积中选择满足条件的元组
    • 自然连接:进行比较的分量必须是相通的,且在结果集中将重复列去掉

冲突

  • 属性冲突:属性域冲突(值的类型、取值域不同)和取值单位不同
  • 结构冲突:同一对象在不同局部应用(子系统)中分别被当作实体和属性对待,或同一实体在不同局部应用中所具有的属性不完全相同

6.6 关系数据库SQL语言简介

  • 数据查询:SELECT
  • 数据定义:CREATE 创建、DROP 删除、ALTER 修改
  • 数据操纵:INSERT、UPDATE、DELETE
  • 数据控制:GRANT 授权、REVOKE 收回权限

🌸🌻🍁❄️

7.网络与信息安全

7.1 计算机网络概述

OSI 7层模型

  • 物理层 比特
  • 数据链路层 帧
  • 网络层 分组
  • 传输层 TPDU
  • 会话层 SPDU
  • 表示层 PPDU
  • 应用层 APDU

7.2 计算机网络硬件

计算机网络互联设备

  • 中继器 Repeater:物理层
    • 放大信号
    • 连接的两个网络在逻辑上是同一个网络
  • 集线器 Hub:物理层
    • 多口中继器
  • 网桥 Bridge:数据链路层
    • 局域网互联,必要时进行链路层的协议转换
    • 在同一个网段的帧不会被网桥转发到另一个网段上,从而不会加重网络负担
    • 透明网桥:局域网上的每个站并不知道所发送的帧将经过哪几个网桥
    • 源站选路网桥:发送帧的源站负责路由选择
  • 交换机 Switch:数据链路层
    • 连接数个相同网段的不同主机,减少网内冲突,隔离冲突域
    • 比传统集线器传输速率高
  • 路由器 Router:网络层
    • 异种网络之间(即不同类型的局域网互连,局域网与广域网,广域网与广域网)
  • 网关 Gateway:传输层及以上层
    • 协议转换

7.3 TCP/IP

4层模型

  • 网络接口层:数据链路层
  • 网际层:互联网层,IP层
    • IP
    • ICMP
    • ARP RARP:IP <-> 物理地址
  • 传输层
    • TCP
    • UDP
  • 应用层
    • FTP 文件传输
    • Telnet 远程登录
    • SMTP 发送邮件 POP3 接收邮件
    • NFS 网络文件服务
    • SNMP 网络管理

ICMP

  • Internet Control Message Protocol, Internet 控制信息协议
  • Ping 命令就是利用 ICMP 报文测试目标是否可达,它发送一个 ICMP 回声请求消息给目的地并报告是否收到所希望的 ICMP 回声应答

IP 地址

  • 0.0.0.0 对应于当前主机,即源地址,不能作为目的地址

域名地址 protocol ://hostname[:port] /path /filename

子网掩码

  • 1表示网络号和子网号字段,0对应主机号字段

7.7 网络安全概述

主动/被动攻击

  • 主动攻击:将虚假信息/病毒传入系统内部,改变数据。拒绝服务攻击(DoS)、分布式拒绝服务(DDos)、信息篡改、资源使用、欺骗、伪装
  • 被动攻击:截获/窃取信息,不改变数据。嗅探、信息收集等

防火墙

  • 防止不希望的、未经授权地进出被保护的内部网络,通过边界控制强化内部网络的安全策略
  • 包过滤防火墙:根据数据包头中的各项信息(源地址、目的地址、端口号、协议状态等)等来确定是否允许该数据包通过,在网络层和数据链路层之间,因此无法控制传输的内容

数字信封

  • 一种分发对称密钥的方法。将对称密钥通过非对称加密后进行的结果分发
  • 发送方先在本地用对称密钥对交易信息进行加密,形成密文;再用接收方的公钥将用于加密交易信息的对称密钥加密,并将加密后的对称密钥信息和密文一同传递给接收方。接收方接收信息后,先用自己的私钥解密加密的对称密钥信息,得到对称密钥后再用其解密密文得到交易信息原文。对称密钥就像被封装在一个“信封”里传递一样,所以叫做数字信封。

🌸🌻🍁❄️

8.标准化和知识产权

8.2 知识产权基础知识

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

知识产权权利人:各类知识产权所有人,包括著作权人、专利权人、商标权人等

软件作品的两类权利:

  • 人身权(精神权利):发表权、署名权。不可转让
  • 财产权(经济权利):使用权、复制权、修改权、发行权、翻译权、注释权、信息网络传播权、出租权、使用许可权和获得报酬权、转让权。

当软件作品创作完成后,其软件著作权才能得到保护。

其他

windows

删除

  • delete:放入回收站
  • delete + shift:永久删除

excel

COUNTIF(range, criteria)

  • range:范围
  • criteria: 条件,数字时可不加双引号,表达式/文本时需加双引号

C++

函数重载:函数名相同,参数个数/类型不同

数组 a[1…n, 1…m] <-> n*m数组 <-> n行m列

🌸🌻🍁❄️

下午题

流程图

  • 流程图中赋值:->

C语言

Java语言

class

算法

  • if/for循环等单句时的括号省略
  • for 循环结束时 i == N(not N-1)

循环队列

  • rear 队尾
  • rear -> next 队头

单词

EN CH
undergo 经历,经受
intergration 集成
acceptance 确认
encrypt 加密
decrypt 解密
intended 预定的,意欲达到的
reciplent 收件人
intermediate 中间的
encapsulate 封装
extend 继承
polymorphism 多态