| Candidates should be able to: | Notes and guidance |
|---|---|
| Show understanding of binary magnitudes and the difference between binary prefixes and decimal prefixes | Understand the difference between and use: • kibi and kilo • mebi and mega • gibi and giga • tebi and tera |
| Show understanding of different number systems | Use the binary, denary, hexadecimal number bases and Binary Coded Decimal (BCD) and one’s complement and two’s complement representation for binary numbers |
| Convert an integer value from one number base/ representation to another | |
| Perform binary addition and subtraction | Using positive and negative binary integers |
| Show understanding of how overflow can occur | |
| Describe practical applications where Binary Coded Decimal (BCD) and Hexadecimal are used | |
| Show understanding of and be able to represent character data in its internal binary form, depending on the character set used | Students are expected to be familiar with ASCII (American Standard Code for Information Interchange), extended ASCII and Unicode. Students will not be expected to memorise any particular character codes |
A-Level 计算机科学
剑桥国际 A-Level 计算机科学(9618)由两部分组成,感觉像两门不同的学科。理论部分从信息表示 与通信,一直讲到硬件、处理器基础、系统软件、安全、数据库与伦理。实践部分是算法设计、数据 结构、编程与软件开发,A2 阶段还加入递归、面向对象编程与更复杂的数据结构。
理论卷的评分比大多数学生预期的要"字面"得多。存在一套标准术语——寄存器名称、寻址方式、 范式、validation 与 verification 的确切区别——用自己的话改述通常一分不得。请按考纲原文 记忆定义,而不是按自己的理解。
编程卷奖励的是手写代码的能力:在纸上写到你在脑中就能"编译"通过。历年真题共四个卷种。本站 笔记按考纲主题逐页编写,算法同时给出伪代码与 Python;本站 /code 的每节课都可在浏览器中 直接运行,你可以立刻验证想法,而不是假设它能work。
-
1
信息表示
1.1
数据表示
大纲
来源:剑桥国际大纲
二进制计数:0 到 15 你必须使用的三种数制(number systems):
- 十进制(denary,decimal,基数 10)——用数字 0–9。位值是十的幂。
- 二进制(binary,基数 2)——用 0 和 1。位值是二的幂。每个字节(byte)是 8 个位(bits)。
- 十六进制(hexadecimal,基数 16)——用 0–9 然后 A–F 表示 10–15。每个十六进制数位(digit)恰好代表 4 个位。

算盘用位值表示数字——这与十进制、二进制和十六进制背后的想法相同 转换
十进制 → 二进制:不断除以 2 并记录余数,从下往上读。或者减去装得下的最大位值(place value,2 的幂)。
例子:$558_{10}$:$558 = 512 + 32 + 8 + 4 + 2 = 2^{9} + 2^{5} + 2^{3} + 2^{2} + 2^{1}$。用 12 位:
0010 0010 1110。二进制 → 十六进制:从右边起把位分成半字节(nibbles,4 位)并转换每一个。
0010 0010 1110→2 2 E→22E。十六进制 → 二进制:把每个十六进制数位换成它的 4 位模式。十六进制 → 十进制:把每个数位乘以它的位值。
22E$= 2 \times 256 + 2 \times 16 + 14 = 558$。例题。 把十进制 200 转换成 8 位二进制,然后转换成十六进制。
$200 = 128 + 64 + 8$,所以二进制是
11001000。分成半字节,11001000$= 12$ 和 $8$,即 $\text{C}$ 和 $8$,所以十六进制是C8。
从 200 的位值读它,然后把位分成半字节得到十六进制 C8 二进制与十进制词头
两个词头族看起来相似但不同——十进制(10 的幂)和二进制(2 的幂):
十进制(SI) 二进制(内存) kilo $= 10^{3}$ kibi (Ki) $= 2^{10} = 1024$ mega $= 10^{6}$ mebi (Mi) $= 2^{20}$ giga $= 10^{9}$ gibi (Gi) $= 2^{30}$ tera $= 10^{12}$ tebi (Ti) $= 2^{40}$ 所以一个 tebibyte(TiB)略多于一个 terabyte(TB)。一个"1 TB"的驱动器容纳 $10^{12}$ 字节,但一个以 TiB 报告的操作系统显示一个较小的数字。
探索Binary, denary and hex
Type a number and see it in binary, denary and hexadecimal at once — and how the place values add up.
词汇表 训练英文 中文 拼音 number system 数制 shù zhì denary 十进制 shí jìn zhì binary 二进制 èr jìn zhì byte 字节 zì jié bit 位 wèi hexadecimal 十六进制 shí liù jìn zhì digit 数位 shù wèi place value 位值 wèi zhí nibble 半字节 bàn zì jié 1.1
二进制运算
二进制加法
从右边起逐列相加,像十进制那样进位:
位 A 位 B 进位输入 和位 进位输出 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 1 0 0 1 1 1 1 1 1 当结果需要的位比寄存器(register)能容纳的更多时,发生溢出(overflow)——最左列的进位输出就是溢出位。
二进制减法
通常的方法是补码(two's complement)加法:要做 $A - B$,构成 $B$ 的补码(每一位取反并加 1),然后相加,并丢弃任何最终的进位输出。
从 $01100100$ 中减去 $00011110$(无符号 8 位):
- $00011110$ 的补码:取反 → $11100001$,加 1 → $11100010$。
- 加到 $01100100$:结果 $1\,01000110$(9 位)——丢弃前导的 1 → $01000110 = 70_{10}$。检验:$100 - 30 = 70$。✓
补码有符号整数
在一个 $n$ 位补码数中:
- 最高有效位(most significant bit,MSB)是符号位(sign bit):0 = 正,1 = 负。
- 要读一个负数:每一位取反,加 1,然后取负。
所以 $11100010$ 是负的;取反 → $00011101$,加 1 → $00011110 = 30$,所以它是 $-30$。这是一个有符号整数(signed integer,不同于无符号(unsigned)的)。$n$ 位的范围是 $-2^{n-1}$ 到 $+2^{n-1} - 1$;对 8 位,$-128$($10000000$)到 $+127$($01111111$)。

8 位补码:符号位把范围分成负($-128$ 到 $-1$)和正($0$ 到 $127$) 例题。 8 位补码数 $10110100$ 表示什么十进制值?
MSB 是 1,所以它是负的。取反 → $01001011$,加 1 → $01001100 = 76$,所以值是 $-76$。用位值检验:$-128 + 32 + 16 + 4 = -76$。
有符号运算中的溢出发生在真实结果落在这个范围之外时——当符号位错误地翻转时可以发现(两个正数给出一个负数,或两个负数给出一个正数)。
反码
在补码之前,一个较老的方案叫反码(one's complement),它表示一个负数只是把正数的每一位取反——没有"加 1"步骤。
- $+30 = 00011110$,所以在反码中 $-30 = 11100001$(就是取反)。
- 缺点:它有两个零——$00000000$($+0$)和 $11111111$($-0$)——这浪费了一个位模式,并使运算别扭。
补码(取反并加 1)去除了负零:它有单一的零,并让加法和减法使用同一个电路。这就是为什么现代计算机以补码而非反码存储有符号整数。
探索Binary & signed integers
byte = Σ place values
See how an 8-bit pattern maps to a number (and how it would overflow past 255).
探索Two's complement signed bits
The leftmost bit carries a negative place value. Flip any bit — or hit Negate (invert every bit, then add 1) — and watch the signed value change.
词汇表 训练英文 中文 拼音 overflow 溢出 yì chū register 寄存器 jì cún qì two's complement 补码 bǔ mǎ most significant bit 最高有效位 zuì gāo yǒu xiào wèi sign bit 符号位 fú hào wèi signed integer 有符号整数 yǒu fú hào zhěng shù unsigned 无符号 wú fú hào one's complement 反码 fǎn mǎ 1.1
二进制编码的十进制(BCD)
在 BCD(二进码十进数)中,每个十进制数位被写成它自己的 4 位模式。数字 $93$ 在 BCD 中是
1001 0011——不是二进制 93($01011101$)。每个半字节只用 0–9;模式 $1010$–$1111$ 是无效的。BCD 读法:
0010 0111 0101→ 2, 7, 5 → 275。用途:计算器、数字钟,以及显示十进制数位的设备——每个数位驱动一个七段显示器(7-segment display)。货币代码常用 BCD 以避免把像 0.1 这样的分数转换成二进制时的舍入误差。

一个七段显示器显示一个十进制数位,常由 BCD 驱动 词汇表 训练英文 中文 拼音 BCD 二进码十进数 èr jìn mǎ shí jìn shù 7-segment display 七段显示器 qī duàn xiǎn shì qì 1.1
十六进制 —— 实际用途
十六进制是写二进制的一种紧凑方式(1 个十六进制数位 = 4 位):

一个字节是两个半字节;每个半字节是一个十六进制数位 - 底层编程中的内存地址(memory addresses)——
0x7FFE。 - HTML/CSS 中的颜色值——
#FF8800。 - MAC 地址——
AC:DE:48:00:11:22。
十六进制不改变存储的数据——它只是使二进制对人类更容易。
词汇表 训练英文 中文 拼音 memory address 内存地址 nèi cún dì zhǐ 1.1
字符编码
计算机把文本存储为数字;每个字符有一个由字符集(character set)设定的数字码点(code point)。
ASCII
- ASCII 用 7 位——128 个码点。基本拉丁字母、数字、标点和控制码。
- 扩展 ASCII 用 8 位——256 个码点;低 128 个与 ASCII 相符,高 128 个因地区而异。

每个字符被存储为一个数字——几个 ASCII 码点的十进制和二进制 Unicode
- Unicode 是一个通用字符集,涵盖几乎每一种文字,加上符号和表情符号。
- 常见的编码(encodings):UTF-8(1–4 字节,兼容 ASCII)、UTF-16(2 或 4 字节)、UTF-32(固定 4 字节)。
为什么 Unicode 胜过 ASCII
- 它表示多得多的字符(每一种文字、表情符号);ASCII 只涵盖基本英语。
- 文件可移植、没有代码页混乱,并允许一个文档中的多语言文本。
- 权衡:对于纯英语文本,Unicode 文件通常更大。
探索A character is stored as a number
Each character has a code number — 'A' is 65. Flip the bits to see that code in binary and hex, exactly how the computer holds it.
词汇表 训练英文 中文 拼音 code point 码点 mǎ diǎn character set 字符集 zì fú jí encoding 编码 biān mǎ 1.2
多媒体
大纲
Candidates should be able to: Notes and guidance Show understanding of how data for a bitmapped image are encoded Use and understand the terms: pixel, file header, image resolution, screen resolution, colour depth / bit depth Perform calculations to estimate the file size for a bitmap image Show understanding of the effects of changing elements of a bitmap image on the image quality and file size Use the terms: image resolution, colour depth / bit depth Show understanding of how data for a vector graphic are encoded Use the terms: drawing object, property, drawing list Justify the use of a bitmap image or a vector graphic for a given task Show understanding of how sound is represented and encoded Use the terms: sampling, sampling rate, sampling resolution, analogue and digital data Show understanding of the impact of changing the sampling rate and resolution Including the impact on file size and accuracy 来源:剑桥国际大纲
一个位图(bitmap)图像(也叫位映射图像)在一个网格中存储每个像素(pixel)的颜色。在文件的开头,一个文件头(file header)记录图像的元数据——它的宽度、高度和颜色深度——这样软件就知道如何读取随后的像素数据。
- 图像分辨率(image resolution):位图自身的大小,以像素计的宽 × 高(例如 1920 × 1080)。
- 屏幕分辨率(screen resolution):显示器能显示的宽 × 高。如果一个图像的分辨率比屏幕大,它被缩小以适应;一个低分辨率图像被拉伸到一个较高分辨率的屏幕上时看起来有块状感。
- 颜色深度(colour depth,位深度(bit depth)):每像素的位数。1 位 → 黑/白;8 位 → 256 种颜色;24 位 → 1670 万("真彩色")。

同一图像以三种分辨率存储,从高(A)到低(C):更少、更大的像素意味着更少的细节 文件大小
$$\text{size in bits} = \text{width} \times \text{height} \times \text{bit depth}.$$除以 8 得字节,除以 1024 得 KiB,等等。例子:一个 $3000 \times 2000$、24 bpp 的图像是 $3000 \times 2000 \times 24 = 1.44 \times 10^{8}$ 位 $\approx 17.2\ \text{MiB}$。
改变设置
- 较低分辨率 → 较小的文件,较少的细节(放大时看起来有块状感)。
- 较低颜色深度 → 较小的文件,但平滑的色调显示出条带。
- 两者中较高的 → 较大的文件,更好的质量。
词汇表 训练英文 中文 拼音 bitmap 位图 wèi tú pixel 像素 xiàng sù file header 文件头 wén jiàn tóu image resolution 图像分辨率 tú xiàng fēn biàn lǜ screen resolution 屏幕分辨率 píng mù fēn biàn lǜ colour depth 颜色深度 yán sè shēn dù bit depth 位深度 wèi shēn dù 1.2
矢量图形
一个矢量图形(vector graphic)把画图像的指令存储为一个绘图列表(drawing list)——一个有序的绘图对象(drawing objects,几何图元(primitives):线、曲线、多边形、圆)列表。每个绘图对象有属性(properties),如颜色、填充、线宽和位置(坐标)。要显示它,程序以所需的任何分辨率渲染(renders)这个绘图列表。

一个矢量图像由标注的几何形状构成,每个带属性 位图与矢量
任务 较好的选择 为什么 照片 位图 复杂的像素级细节不能被描述为形状。 徽标、图标、标志 矢量 边缘清晰;缩放到任何大小都不模糊。 工程图 矢量 精确的几何和缩放。 绘画、纹理 位图 每个区域平滑的色调细节。 矢量的优点:它缩放而不损失质量——一个矢量徽标在任何大小都保持清晰,而一个位图放大时会模糊。矢量的缺点:它不能描述任意的像素细节(照片)。

放大后,一个位图的像素变得锯齿状;一个矢量在任何大小都保持平滑 探索Computing concept lab
Classify concrete examples by the computing idea they demonstrate.
词汇表 训练英文 中文 拼音 vector graphic 矢量图形 shǐ liàng tú xíng drawing list 绘图列表 huì tú liè biǎo drawing object 绘图对象 huì tú duì xiàng primitive 图元 tú yuán property 属性 shǔ xìng render 渲染 xuàn rǎn 1.2
声音
一个连续的模拟数据(analogue data,声音)波通过采样(sampling)被转换成数字数据(digital data):
- 采样率(sampling rate)——每秒的采样数(Hz)。CD 质量是 $44.1\ \text{kHz}$。
- 采样分辨率(sampling resolution,位深度)——每个采样的振幅(amplitude)的位数。CD 质量是 16 位。

采样一个声波:在每个时间间隔读它的振幅 文件大小
$$\text{size in bits} = \text{sampling rate} \times \text{resolution} \times \text{duration} \times \text{channels}.$$一段 10 秒的立体声 CD 片段:$44100 \times 16 \times 10 \times 2 = 14\,112\,000$ 位 $\approx 1.68\ \text{MiB}$。
改变设置
- 较高采样率 → 捕捉较高的音调,较大的文件。
- 较高采样分辨率 → 更精细的振幅步长,较少的量化(quantisation)噪声,较大的文件。
- 两者中较低的 → 较小的文件,明显的质量损失。
(采样率必须至少是你想保留的最高频率的两倍。)
探索Sound sampling
y = a sin(bt + c)
Sampling measures a sound wave at regular intervals — a higher rate copies it more truly.
词汇表 训练英文 中文 拼音 analogue data 模拟数据 mó nǐ shù jù digital data 数字数据 shù zì shù jù sampling 采样 cǎi yàng sampling rate 采样率 cǎi yàng lǜ sampling resolution 采样分辨率 cǎi yàng fēn biàn lǜ amplitude 振幅 zhèn fú quantisation 量化 liàng huà 1.3
压缩
大纲
Candidates should be able to: Notes and guidance Show understanding of the need for and examples of the use of compression Show understanding of lossy and lossless compression and justify the use of a method in a given situation Show understanding of how a text file, bitmap image, vector graphic and sound file can be compressed Including the use of run-length encoding (RLE) 来源:剑桥国际大纲
压缩(compression)减小文件大小,节省存储和传输的带宽(bandwidth)。两种:
- 无损(lossless)——原始数据被精确恢复(文本、程序、ZIP/PNG)。
- 有损(lossy)——为了小得多的文件丢弃一些细节(JPEG、MP3、视频)。
何时用哪种
- 无损用于文档、源代码、医学图像——任何需要精确数据的东西。
- 有损用于流媒体。实时视频流用有损压缩,因为它必须在有限的带宽上实时发送大量数据;无损不能把它缩得足够小。原始高清视频是每分钟几个吉字节,所以没有压缩画面会不断卡住。
无损方法
- 行程编码(run-length encoding,RLE):存储"接下来的 $n$ 个值是 $x$",而不是重复 $x$。对平坦区域很好;对噪声数据没用。
- 字典编码(dictionary methods,ZIP、PNG):用一个短引用替换重复的字节序列。对文本和代码很好。
- 霍夫曼编码(Huffman coding):给常见符号短码、给罕见符号长码,使平均码长接近数据的熵(entropy)。

一个 $8\times8$ 黑白网格中字母 F 的行程编码 有损方法
- 图像(JPEG):丢弃眼睛几乎看不见的精细细节和颜色差异。
- 声音(MP3、AAC):丢弃我们听得不太清楚的音调,以及被较响声音掩盖的安静声音。
- 视频结合空间(spatial)压缩(在每一帧内,像 JPEG)与时间(temporal)压缩(大多数帧只存储与前一帧的差异)。

压缩方法:无损对有损,以及常见的例子 探索Run-length encoding
Watch a run of repeated symbols get squashed into a count — simple lossless compression.
词汇表 训练英文 中文 拼音 compression 压缩 yā suō bandwidth 带宽 dài kuān lossless 无损 wú sǔn lossy 有损 yǒu sǔn run-length encoding 行程编码 xíng chéng biān mǎ dictionary methods 字典编码 zì diǎn biān mǎ Huffman coding 霍夫曼编码 huò fū màn biān mǎ entropy 熵 shāng spatial 空间 kōng jiān temporal 时间 shí jiān 1.3
考试技巧
- 显示进制转换的过程:十进制 → 二进制用位值,二进制 → 十六进制分半字节(4 位一组)。
- 对于补码,MSB 是负的;要取负,取反并加 1;当符号位错误地翻转时留意溢出。
- 区分位图(像素;文件大小 $=$ 宽 $\times$ 高 $\times$ 颜色深度)和矢量(绘图命令;缩放而不损失)。
- 声音文件大小取决于采样率 $\times$ 位深度 $\times$ 时间——每样越多意味着越好的质量但越大的文件。
- 比较无损与有损压缩并给出各自的一个用途。
-
2
通信
2.1
网络(含互联网)
大纲
Candidates should be able to: Notes and guidance Show understanding of the purpose and benefits of networking devices Show understanding of the characteristics of a LAN (local area network) and a WAN (wide area network) Explain the client-server and peer-to-peer models of networked computers Roles of the different computers within the network and subnetwork models Benefits and drawbacks of each model Justify the use of a model for a given situation Show understanding of thin-client and thick-client and the differences between them Show understanding of the bus, star, mesh and hybrid topologies Understand how packets are transmitted between two hosts for a given topology Justify the use of a topology for a given situation Show understanding of cloud computing Including the use of public and private clouds Benefits and drawbacks of cloud computing Show understanding of the differences between and implications of the use of wireless and wired networks Describe the characteristics of copper cable, fibre-optic cable, radio waves (including WiFi), microwaves, satellites Describe the hardware that is used to support a LAN Including switch, server, Network Interface Card (NIC), Wireless Network Interface Card (WNIC), Wireless Access Points (WAP), cables, bridge, repeater Describe the role and function of a router in a network Show understanding of Ethernet and how collisions are detected and avoided Including Carrier Sense Multiple Access/Collision Detection (CSMA/CD) Show understanding of bit streaming Methods of bit streaming, i.e. real-time and on-demand Importance of bit rates broadband speed on bit streaming Show understanding of the differences between the World Wide Web (WWW) and the internet Describe the hardware that is used to support the internet Including modems, PSTN (Public Switched Telephone Network), dedicated lines, cell phone network Explain the use of IP addresses in the transmission of data over the internet Including: • format of an IP address including IPv4 and IPv6 • use of subnetting in a network • how an IP address is associated with a device on a network • difference between a public IP address and a private IP address and the implications for security • difference between a static IP address and a dynamic IP address Explain how a Uniform Resource Locator (URL) is used to locate a resource on the World Wide Web (WWW) and the role of the Domain Name Service (DNS) 来源:剑桥国际大纲
一个网络(network)是一组连接起来以便能通信和共享资源的计算设备。好处:
- 共享资源(打印机、文件服务器、互联网)——比给每台计算机都配备更便宜。
- 共享数据——许多用户访问相同的文件。
- 集中管理——在一台服务器上一次性安装软件、管理用户和备份。
- 通信——电子邮件、视频通话、消息。
- 远程访问——从任何地方工作。
探索Network route lab
Follow data from a device through network hardware and protocols.
词汇表 训练英文 中文 拼音 network 网络 wǎng luò 2.1
局域网与广域网
一个局域网(local area network,LAN)覆盖一个小区域——一个家庭、办公室或学校,通常由组织拥有,数据速率高、延迟(latency)低。
一个广域网(wide area network,WAN)覆盖一个大区域——一个城市、国家或全世界(互联网是最大的 WAN)。它使用电信公司的基础设施——常常是公共交换电话网(Public Switched Telephone Network,PSTN)、租用线路或光纤——数据速率较低、延迟较高。一个 WAN 把各个 LAN 连接在一起。

一个广域网把大区域上的许多系统连接起来 词汇表 训练英文 中文 拼音 local area network 局域网 jú yù wǎng latency 延迟 yán chí wide area network 广域网 guǎng yù wǎng switch 交换机 jiāo huàn jī PSTN 公共交换电话网 gōng gòng jiāo huàn diàn huà wǎng 2.1
客户端-服务器与对等网络
客户端-服务器
- 强大的机器充当服务器(servers),提供服务(文件、网页、电子邮件)。
- 其他机器是请求服务的客户端(clients)。
- 集中且易于管理,但除非备份,服务器是单点故障。

在一个客户端-服务器网络中,客户端向一个中央服务器请求服务 对等网络(P2P)
- 所有机器都是平等的对等方(peers);每个既可以是客户端又可以是服务器(对等网络(peer-to-peer))。
- 资源分散在各对等方上——没有中央服务器。对单个故障稳健,但更难保持安全和一致。

在一个对等网络中,每个节点既是客户端又是服务器 词汇表 训练英文 中文 拼音 server 服务器 fú wù qì client 客户端 kè hù duān peer-to-peer 对等网络 duì děng wǎng luò 2.1
瘦客户端与胖客户端
一个瘦客户端(thin client)在本地做很少的处理,依赖一台强大的服务器(网页终端、远程桌面)。一个胖客户端(thick client)有强的本地处理和存储,自己运行完整的应用程序(一台普通的台式 PC)。
特性 瘦客户端 胖客户端 本地处理 极少 大量 本地存储 极少 大量 对网络的依赖 高 较低 服务器负载 高 较低 词汇表 训练英文 中文 拼音 thin client 瘦客户端 shòu kè hù duān thick client 胖客户端 pàng kè hù duān 2.1
网络拓扑
拓扑(topology)是节点和链路如何排列。
- 总线(bus)——所有设备在一条共享电缆上。便宜;如果总线故障,整个 LAN 就故障;随着更多设备共享带宽(bandwidth),性能下降。
- 星形(star)——每个设备连到一个中央交换机。一个设备故障不影响其他;交换机故障使全部瘫痪。今天最常见。
- 网状(mesh)——每个设备直接连到其他设备,有许多路径。非常容错(fault-tolerant,流量重新路由),但需要大量布线。
- 混合(hybrid)——一种混合(每个办公室内一个星形,办公室之间网状链路)。

总线拓扑:所有设备共享一条电缆,每端有一个终结器 
星形拓扑:每个设备连到一个中央集线器或交换机 
网状拓扑:每个设备直接连到其他设备 
混合拓扑:由一条中央总线连接的星形簇 探索Compare the network topologies
Tap through the four topologies. Each trades off cost, speed and how well it survives a failure — notice what breaks the whole network in each one.
词汇表 训练英文 中文 拼音 topology 拓扑 tuò pū bus 总线 zǒng xiàn bandwidth 带宽 dài kuān star 星形 xīng xíng mesh 网状 wǎng zhuàng fault-tolerant 容错 róng cuò 2.1
云计算
云计算(cloud computing)通过互联网交付计算服务(服务器、存储、软件),由第三方托管。好处:可扩展性(scalability,按需付费)、较低的成本、从任何地方访问,以及可靠的冗余数据中心。缺点:需要互联网、你的数据由第三方持有,以及可能的供应商锁定。
词汇表 训练英文 中文 拼音 cloud computing 云计算 yún jì suàn scalability 可扩展性 kě kuò zhǎn xìng 2.1
有线与无线
- 有线(以太网(Ethernet)通过双绞线(twisted-pair)或光纤(fibre-optic)):速度更高、延迟更低、错误更少、更安全。
- 无线(Wi-Fi、蓝牙、蜂窝):没有电缆、设备可以移动,但更慢、易受干扰和窃听。
对于同一代,有线在速度和可靠性上胜出;无线在便利性上胜出。
词汇表 训练英文 中文 拼音 Ethernet 以太网 yǐ tài wǎng twisted-pair 双绞线 shuāng jiǎo xiàn fibre-optic 光纤 guāng xiān 2.1
局域网硬件
- 网络接口卡(network interface card,NIC)——让一个设备能在网络上发送和接收;有一个唯一的 MAC 地址(MAC address,一个 48 位的硬件地址)。一个无线设备用一个无线网络接口卡(wireless network interface card,WNIC)。
- 交换机(switch)——只把以太网帧转发到目标 MAC 地址所对应的端口。
- 集线器(hub)——一个更简单的设备,把流量复制到所有端口(现已过时)。
- 无线接入点(wireless access point,WAP)——让无线客户端加入一个有线 LAN。
- 布线——短距离用双绞线;较长、较快的用光纤。

一个网络交换机:每个设备的电缆插入它的一个端口 
一根双绞线以太网电缆上的一个 RJ-45 插头 
一个交换机只把每个帧发送到它目标所对应的端口 词汇表 训练英文 中文 拼音 network interface card 网络接口卡 wǎng luò jiē kǒu kǎ MAC address MAC地址 MAC dì zhǐ hub 集线器 jí xiàn qì wireless access point 无线接入点 wú xiàn jiē rù diǎn wireless network interface card 无线网络接口卡 wú xiàn wǎng luò jiē kǒu kǎ 2.1
路由器
一个路由器(router)连接不同的网络并在它们之间转发数据——通常在一个 LAN 与互联网的边界处。它做:
- 转发——读取每个数据包(packet)的目标 IP 地址(IP address),并用一个路由表(routing table)从正确的端口把它发出去。
- 网络地址转换(network address translation,NAT)——让许多私有 LAN 地址共享一个公共 IP。
- DHCP(动态主机配置协议)——向 LAN 设备分发私有 IP 地址。
- 防火墙(firewall)——阻止不需要的入站流量。

一个路由器把一个 LAN 连到互联网或另一个网络 词汇表 训练英文 中文 拼音 router 路由器 lù yóu qì packet 数据包 shù jù bāo IP address IP地址 IP dì zhǐ routing table 路由表 lù yóu biǎo network address translation 网络地址转换 wǎng luò dì zhǐ zhuǎn huàn firewall 防火墙 fáng huǒ qiáng internet 互联网 hù lián wǎng 2.1
以太网与 CSMA/CD
以太网是主要的有线 LAN 技术。在共享介质上,当两个设备同时发送时可能发生一次冲突(collision)。协议是 CSMA/CD(载波侦听多路访问,Carrier Sense Multiple Access with Collision Detection):
- 载波侦听——发送前先听;如果电缆繁忙就等待。
- 多路访问——许多设备共享介质。
- 冲突检测——发送时持续听;一次碰撞就是一次冲突。
- 发生冲突时,两者都停止,发送一个短暂的"干扰"信号,然后等待一个随机退避时间再重试。
现代交换式以太网使用全双工(full-duplex)点对点链路,所以冲突不再发生。

用于处理共享介质上冲突的 CSMA/CD 过程 词汇表 训练英文 中文 拼音 collision 冲突 chōng tū CSMA/CD 载波侦听多路访问/冲突检测 zài bō zhēn tīng duō lù fǎng wèn chōng tū jiǎn cè full-duplex 全双工 quán shuāng gōng 2.1
比特流传输
流式传输(bit streaming)把多媒体作为一个连续的流发送,接收方在它到达时播放,而不是先下载整个文件。
- 实时(直播):在事件发生时被捕捉并流出(现场体育、视频通话)。你不能倒退;低延迟至关重要。
- 点播:在一台服务器上预先录制(YouTube、Netflix)。你可以暂停和倒退;服务器可以提前缓冲(buffer)。
实时流作为一个短流水线工作:
- 捕捉并采样源(一个摄像机或麦克风)。
- 编码它,用压缩(compression)缩小数据。
- 作为数据包在网络上发送它。
- 接收方缓冲一点,然后实时播放它——丢弃任何迟到的数据包,因为一个直播流不能等它。
这里用有损(lossy)压缩:活动画面掩盖小的损失,而流必须小到足以适应带宽。

数据从服务器流入一个缓冲区,然后媒体播放器读取它 词汇表 训练英文 中文 拼音 bit streaming 流式传输 liú shì chuán shū buffer 缓冲 huǎn chōng compression 压缩 yā suō lossy 有损 yǒu sǔn 2.1
互联网与万维网
互联网(internet)是一个使用共同协议(protocol)族(TCP/IP)的全球网络的网络。万维网(World Wide Web,WWW)是在它上面运行的一项服务:由 URL 标识的超链接文档,通过 HTTP/HTTPS 在浏览器中查看。电子邮件和文件传输是其他不属于 WWW 的互联网服务。

万维网是运行在互联网之上的一项服务 词汇表 训练英文 中文 拼音 protocol 协议 xié yì World Wide Web 万维网 wàn wéi wǎng URL 统一资源定位符 tǒng yī zī yuán dìng wèi fú 2.1
IP 地址
一个 IP 地址唯一地标识一个设备。
- IPv4——32 位,四个 0–255 的十进制数字(
192.168.1.10);约 $4.3 \times 10^{9}$ 个地址(现已耗尽)。 - IPv6——128 位,八组四个十六进制数位;约 $3.4 \times 10^{38}$ 个地址。
子网划分
一个网络可以被分成子网(subnets)。IP 地址分成一个网络部分和一个主机部分,由一个子网掩码(subnet mask,例如
255.255.255.0= 前 24 位是网络)给出。子网划分改善管理、减少广播流量,并改善安全。
把一个网络分成子网,每个部门一个网络 ID 公共地址与私有地址
- 私有地址在一个 LAN 内使用,在互联网上不可路由(例如
192.168.0.0/16)。 - 一个公共 IP 地址(public IP address)全球唯一且可路由,由一个 ISP(互联网服务提供商)分配。
在 NAT 后面带私有地址的设备不能从互联网直接到达,提供了一些保护。
静态与动态
- 一个静态 IP 地址(static IP address)是固定的;用于必须在一个已知地址被找到的服务器。
- 一个动态 IP 地址(dynamic IP address)由 DHCP 分配,可能改变;对客户端设备更容易,并高效地使用一个有限的地址池。
例题。 某主机的 IP 地址是
192.168.10.130,子网掩码是255.255.255.192。它在哪个网络上?192.168.10.200和它在同一个网络上吗?掩码的最后一段192的二进制是11000000,所以前 26 位是网络部分,后 6 位用于主机寻址。这使得各子网以 $256 - 192 = 64$ 为步长划分:.0、.64、.128、.192。地址130落在从.128开始的那一块,所以该主机在网络192.168.10.128/26上,其可用主机地址从.129到.190(.191是广播地址)。200落在下一块(.192)里,所以它在不同的子网上,两者之间的通信必须经过路由器。要先从掩码算出块大小($256$ 减去掩码那一段的值) - 只看前三段来猜,正是这类题出错的原因。词汇表 训练英文 中文 拼音 DHCP 动态主机配置协议 dòng tài zhǔ jī pèi zhì xié yì subnets 子网 zi wǎng subnet mask 子网掩码 zi wǎng yǎn mǎ ISP 互联网服务提供商 hù lián wǎng fú wù tí gōng shāng 2.1
URL 与 DNS
一个 URL(统一资源定位符,Uniform Resource Locator)定位 WWW 上的一个资源:
https://www.example.com/about/contact.html protocol domain name path- protocol:
http、https等。 - domain name 域名:一个可读的服务器地址。
- path:那台服务器上的资源。
域名系统(Domain Name System,DNS,也叫域名服务)是一组分布式服务器,它把域名变成 IP 地址。当你输入一个 URL 时,浏览器向一个 DNS 解析器询问 IP,解析器查询 DNS 服务器(根 → 顶级 → 权威)直到找到它;然后浏览器连到那个 IP 并请求路径。DNS 使人类免于记忆 IP 地址,并让一个站点在不改变它名称的情况下更换服务器。

DNS 如何在浏览器连接前找到一个网站的 IP 地址 探索How DNS finds a website
Step through a DNS lookup. The network routes by IP, not by name — so before anything loads, DNS must turn the domain name into an IP address.
词汇表 训练英文 中文 拼音 domain name 域名 yù míng Domain Name System 域名系统 yù míng xì tǒng 2.1
考试技巧
- 通过谁存储和控制资源来区分 LAN 与 WAN 以及客户端-服务器与对等网络。
- 把每种拓扑(总线、星形、网状)与它的优点和缺点(成本、可靠性、冲突)匹配。
- 知道每个设备的工作:一个交换机按 MAC 地址在一个 LAN 内定向,一个路由器按 IP 在网络之间路由。
- 解释流式传输以及为什么需要缓冲(数据到达的速率与播放不同)。
- 区分 IPv4 与 IPv6 以及公共与私有地址;DNS 把一个 URL 变成一个 IP 地址。
-
3
硬件
3.1
计算机及其部件
大纲
Candidates should be able to: Notes and guidance Show understanding of the need for input, output, primary memory and secondary (including removable) storage Show understanding of embedded systems Including: benefits and drawbacks of embedded systems Describe the principal operations of hardware devices Including: Laser printer, 3D printer, microphone, speakers, magnetic hard disk, solid state (flash) memory, optical disc reader/writer, touchscreen, virtual reality headset Show understanding of the use of buffers Explain the differences between Random Access Memory (RAM) and Read Only Memory (ROM) Including their use in a range of devices and systems Explain the differences between Static RAM (SRAM) and Dynamic RAM (DRAM) Including the use of SRAM and DRAM in a range of devices and systems and the reasons for using one instead of the other depending on the device and its use Explain the difference between Programmable ROM (PROM), Erasable Programmable ROM (EPROM) and Electrically Erasable Programmable ROM (EEPROM) Show an understanding of monitoring and control systems Including: • difference between monitoring and control • use of sensors (including temperature, pressure, infra-red, sound) and actuators • importance of feedback 来源:剑桥国际大纲
一台通用计算机有四个构件:
- 输入设备(input devices)——把数据输入(键盘、鼠标、麦克风、扫描仪、传感器)。
- 输出设备(output devices)——把结果输出(显示器、扬声器、打印机、执行器)。
- 主存储器(primary memory)——处理器(processor,CPU)直接访问的快速存储器(RAM 和 ROM)。容纳运行中的程序及其数据。
- 辅助存储器(secondary storage)——较慢、较大,在不用时保存程序和数据(硬盘、SSD、光盘、U 盘)。

一个键盘:用于输入文本和命令的常见输入设备 
一个鼠标:一个指点输入设备 
一个平板扫描仪:把一张纸页变成一个数字图像的输入设备 
一个显示器:显示屏幕图像的常见输出设备 探索Tap the blocks of a computer system
Explore the four blocks plus the CPU. Data flows input → processing → output, while primary memory holds the running program and secondary storage keeps it for later.
探索Network route lab
Follow data from a device through network hardware and protocols.
词汇表 训练英文 中文 拼音 input devices 输入设备 shū rù shè bèi output devices 输出设备 shū chū shè bèi primary memory 主存储器 zhǔ cún chǔ qì processor 处理器 chǔ lǐ qì secondary storage 辅助存储器 fǔ zhù cún chǔ qì RAM 随机存取存储器 suí jī cún qǔ cún chǔ qì 3.1
嵌入式系统
一个嵌入式系统(embedded system)是一台内置于另一个设备中、做一个固定工作的计算机(洗衣机、微波炉、汽车发动机单元、恒温器)。
- 好处:为一个任务优化(低功耗、小、便宜);可靠;启动快;批量便宜。
- 缺点:限于它的一个任务;难以更新(它的固件(firmware)可能需要特殊工具);常常不可维修;有时安全性弱。
词汇表 训练英文 中文 拼音 embedded system 嵌入式系统 qiàn rù shì xì tǒng firmware 固件 gù jiàn 3.1
主要硬件设备
激光打印机
一台激光打印机(laser printer)把页面图像扫描到一个带电的感光感光鼓(drum)上。墨粉(toner)黏附到带电区域,转移到纸上,并被一个定影器熔上去。快速、清晰、大批量。

一台激光打印机:用一个带电的感光鼓和墨粉进行快速、清晰的打印 3D 打印机
一台 3D 打印机(3D printer)逐层构建一个物体:FDM 通过一个喷嘴熔化塑料丝;立体光刻用一个 UV 激光固化液态树脂。用于原型和定制医疗部件。

一台 FDM 3D 打印机通过熔化塑料丝逐层构建一个物体 麦克风和扬声器
一个麦克风(microphone)把声音变成一个电信号(一个膜片振动,改变电容器(capacitor)的电荷或线圈位置);信号被一个模数转换器(analogue-to-digital converter,ADC)数字化。一个扬声器做相反的——一个变化的信号驱动一个磁场中的线圈,移动一个纸盆来发声。

一个麦克风把声音变成一个电信号 
一个麦克风的内部:声音使膜片和线圈振动以产生一个电流 
一个扬声器的内部:线圈中一个变化的电流移动纸盆来发声 磁性硬盘(HDD)
一个硬盘(hard disk)把数据存储在涂有磁性材料的旋转盘片上。每个盘片有分成扇区(sectors)的磁道(tracks)。一个读写头(read/write head)浮在其上方,磁化微小区域(写)或感应它们(读)。每吉字节便宜,但比 SSD 慢,并有运动部件。

一个打开的硬盘:执行臂载着读写头越过一个盘片 
一个硬盘盘片上的磁道和扇区 固态(闪存)存储器
一个固态硬盘(solid-state drive)把数据作为电荷存储在晶体管(transistors)中,没有运动部件。随机访问比 HDD 快、更耐用、功耗更低,但每吉字节更贵;每个单元在许多次写入后会磨损。

一个 SSD 的内部:数据存储在闪存芯片中,没有运动部件(比较上面的硬盘) 光盘
一个激光检测来自一个光盘(optical disc,CD、DVD、蓝光)上微小凹坑的反射。驱动器是一个光盘读写器:写入用一个更强的激光来改变表面的反射率。

一个光盘驱动器:一个激光读取一张 CD、DVD 或蓝光盘上的微小凹坑 触摸屏
一个触摸屏(touchscreen)感应接触。电阻式(resistive):两个导电层被压在一起;能与任何东西一起工作但不太准确。电容式(capacitive):一根手指扰乱一个电荷场;准确、多点触控,用于手机。

一个触摸屏感应一根手指触碰玻璃的位置 虚拟现实头显
一个虚拟现实(virtual reality,VR)头显有两个小显示屏(每只眼一个)和跟踪头部运动的运动传感器(加速度计(accelerometer)、陀螺仪(gyroscope)),这样当你环顾四周时场景就移动。

一个虚拟现实头显:两个小显示屏和运动传感器跟踪头部 词汇表 训练英文 中文 拼音 laser printer 激光打印机 jī guāng dǎ yìn jī drum 感光鼓 gǎn guāng gǔ toner 墨粉 mò fěn 3D printer 3D打印机 3D dǎ yìn jī microphone 麦克风 mài kè fēng capacitor 电容器 diàn róng qì analogue-to-digital converter 模数转换器 mó shù zhuǎn huàn qì hard disk 硬盘 yìng pán tracks 磁道 cí dào sectors 扇区 shàn qū read/write head 读写头 dú xiě tóu solid-state drive 固态硬盘 gù tài yìng pán transistors 晶体管 jīng tǐ guǎn optical disc 光盘 guāng pán touchscreen 触摸屏 chù mō píng resistive 电阻式 diàn zǔ shì capacitive 电容式 diàn róng shì virtual reality 虚拟现实 xū nǐ xiàn shí accelerometer 加速度计 jiā sù dù jì gyroscope 陀螺仪 tuó luó yí 3.1
缓冲区
一个缓冲(buffer)是在数据于不同速度的设备之间移动时暂时容纳数据的存储器。例子:CPU 快速地把一个文档写入一个打印机缓冲区,然后就能自由地做其他工作,而打印机以它自己的速度从缓冲区打印。缓冲区阻止快设备等待慢设备(也用于流式传输、键盘和磁盘访问)。
词汇表 训练英文 中文 拼音 buffer 缓冲 huǎn chōng 3.1
RAM 与 ROM
- RAM(随机存取存储器,Random Access Memory)——易失性(volatile,断电丢失数据)。容纳操作系统、运行中的程序及其数据;不断地读和写。
- ROM(只读存储器,Read-Only Memory)——非易失性(non-volatile,断电保持数据)。通常写一次;容纳启动时所需的固件(BIOS / 引导加载程序)。

RAM 是易失性且读/写的;ROM 是非易失性且只读的 ROM 启动系统;然后 RAM 容纳活动的工作。

一个 RAM 模块(DIMM)插入主板,作为计算机的快速主存储器 探索Device and storage lab
Classify computing examples by what job they do in a system.
词汇表 训练英文 中文 拼音 volatile 易失性 yì shī xìng ROM 只读存储器 zhī dú cún chǔ qì non-volatile 非易失性 fēi yì shī xìng 3.1
SRAM 与 DRAM
- SRAM(静态 RAM,Static RAM)把每一位存储在一个由几个晶体管构成的触发器(flip-flop)中。快,但昂贵且不密集。用于 CPU 高速缓存(cache)。
- DRAM(动态 RAM,Dynamic RAM)把每一位作为电荷存储在一个微小的电容器上。更便宜、更密集但更慢,并且必须每秒刷新(refreshed,重写)数千次。用于主存储器。
小的快速存储器(高速缓存)用 SRAM;大的主存储器用 DRAM。
词汇表 训练英文 中文 拼音 SRAM 静态RAM jìng tài RAM flip-flop 触发器 chù fā qì cache 高速缓存 gāo sù huǎn cún DRAM 动态RAM dòng tài RAM refreshed 刷新 shuā xīn 3.1
PROM、EPROM 与 EEPROM
制造后你能编程的 ROM 变体:
- PROM(可编程 ROM)——写一次(由一个编程器烧断熔丝);不能改变。
- EPROM(可擦可编程 ROM)——通过一个窗口用强 UV 光擦除,然后重写(一次整个芯片)。
- EEPROM(电可擦可编程 ROM)——电气地擦除和重写,一次一个字节,在电路中。闪存是一个为块擦除优化的衍生物。
3.1
监测与控制系统
两者都读传感器;区别在于它们接下来做什么。
- 监控(monitoring)——收集并报告数据但不采取行动(一个记录读数的气象站)。
- 控制系统(control system)——用传感器数据通过执行器来决定并行动,通常在一个反馈回路中(一个开关锅炉的恒温器)。

监控报告数据;一个控制系统通过一个反馈回路行动 传感器和执行器
一个传感器(sensor)把一个物理量变成一个信号:温度(一个热敏电阻(thermistor)或热电偶)、压力(应变片)、红外、声音。模拟信号需要先经过一个 ADC。一个执行器(actuator)做相反的——把一个信号变成一个动作(一个电机、阀门、加热器、蜂鸣器)。

一个热敏电阻:一个电阻随热变化的温度传感器 
一个小电机:一个把信号变成运动的执行器 反馈
在一个控制系统中,执行器改变环境,传感器随即重新测量它——一个反馈(feedback)回路。没有反馈,系统不能自我纠正或知道何时停止(一个没有温度反馈的恒温器会永远加热)。
探索The control feedback loop
Tap round the loop a thermostat or autopilot repeats. A control system doesn't just read the world — it acts, then re-measures, correcting itself again and again.
词汇表 训练英文 中文 拼音 monitoring 监控 jiān kòng control system 控制系统 kòng zhì xì tǒng sensor 传感器 chuán gǎn qì thermistor 热敏电阻 rè mǐn diàn zǔ actuator 执行器 zhí xíng qì feedback 反馈 fǎn kuì 3.2
逻辑门与逻辑电路
大纲
Candidates should be able to: Notes and guidance Use the following logic gate symbols: [NOT, AND, OR, NAND, NOR, XOR] Understand and define the functions of: NOT, AND, OR, NAND, NOR and XOR (EOR) gates All gates except the NOT gate will have two inputs only. Construct the truth table for each of the logic gates above Construct a logic circuit From: • a problem statement • a logic expression • a truth table Construct a truth table From: • a problem statement • a logic circuit • a logic expression Construct a logic expression From: • a problem statement • a logic circuit • a truth table 来源:剑桥国际大纲
半加器:XOR + AND 相加两个位 一个逻辑门(logic gate)是一个做一个布尔(Boolean)运算的小电路。输入和输出是 0(假、低)或 1(真、高)。要知道每个门的符号、功能和真值表(truth table)。

六个逻辑门的符号 NOT(反相器)
A NOT A 0 1 1 0 AND —— 仅当所有输入都为 1 时输出 1
A B A AND B 0 0 0 0 1 0 1 0 0 1 1 1 OR —— 若至少一个输入为 1 则输出 1
A B A OR B 0 0 0 0 1 1 1 0 1 1 1 1 NAND(NOT AND)—— 仅当所有输入都为 1 时输出 0
A B A NAND B 0 0 1 0 1 1 1 0 1 1 1 0 NOR(NOT OR)—— 仅当所有输入都为 0 时输出 1
A B A NOR B 0 0 1 0 1 0 1 0 0 1 1 0 XOR(异或,也叫 EOR)—— 若输入不同则输出 1
A B A XOR B 0 0 0 0 1 1 1 0 1 1 1 0 探索Logic gates
Switch the inputs and pick a gate. Each gate has its own rule — the building blocks of every digital circuit.
词汇表 训练英文 中文 拼音 logic gate 逻辑门 luó jí mén Boolean 布尔 bù ěr truth table 真值表 zhēn zhí biǎo 3.2
逻辑电路
一个逻辑电路(logic circuit)是一个执行一个布尔表达式的门网络。你应当能够在一个问题陈述、一个逻辑表达式、一个真值表和一个电路图之间转换。
从表达式到电路
每个运算符画一个门并把它们连起来。对于 $X = (A \text{ AND } B) \text{ OR } (\text{NOT } C)$:$C$ 上一个 NOT 门、$A$ 和 $B$ 上一个 AND 门,然后两个结果上一个 OR 门。

连接在一起的门执行一个布尔表达式 从电路到表达式
从输入向前推进,标注每个门的输出,直到你到达最终输出。
从电路到真值表
对于 $n$ 个输入有 $2^{n}$ 行。列出每个输入组合;对每一个,算出内部的门再算出输出。
从真值表到表达式(积之和)
对每个输出为 1 的行,写一个输入的 AND(对那一行中为 0 的任何输入取 NOT);把这些 OR 在一起。例子:一个只在 $(A=0,B=1)$ 和 $(A=1,B=0)$ 输出 1 的表给出 $\overline{A}B + A\overline{B}$,即 $A \text{ XOR } B$。
从一个问题陈述
先把英语变成一个布尔表达式:"A and B" → A AND B;"A or B or both" → A OR B;"exactly one of A and B" → A XOR B;"neither A nor B" → A NOR B;"not both" → A NAND B。
例题。 某机器的警报 $X$ 在防护罩打开($A=1$)并且电机运转($B=1$)或温度过高($C=1$)时鸣响。写出布尔表达式,并给出 $X=1$ 的各行。把英文一句一句地转成逻辑:"B 或 C"是 $B + C$,"A 并且这个"是 $X = A\cdot(B + C)$。至于各行,$X=1$ 需要 $A=1$ 并且 $B$、$C$ 中至少有一个为 1 - 所以是 $(A,B,C) = (1,0,1)$、$(1,1,0)$ 和 $(1,1,1)$,八行中的三行。注意 $A=0$ 时无论 $B$ 和 $C$ 怎样都不会报警。在与 A 相与之前要给 OR 加括号:$X = A\cdot B + C$ 完全是另一个电路,它会在防护罩关着时也因高温而报警。
探索Half adder
Wire XOR and AND to the same two inputs: XOR gives the sum bit, AND gives the carry. Click A and B.
探索Logic circuits
gates combine into circuits
Each gate has a fixed rule; chaining them builds every circuit — start with one gate.
词汇表 训练英文 中文 拼音 logic circuit 逻辑电路 luó jí diàn lù 3.2
考试技巧
- 区分 **RAM(易失性、读/写)**和 ROM(非易失性、容纳引导程序);SRAM(高速缓存、更快)和 DRAM(主存储器、需要刷新)。
- 对于一个逻辑电路,逐门构建布尔表达式,然后一个覆盖每个输入组合的真值表。
- 学每个门(AND、OR、NOT、NAND、NOR、XOR)的符号、表达式和真值表。
- 解释一个缓冲(一个桥接两个不同速度的临时存储)以及一个中断的作用。
-
4
处理器基础
4.1
中央处理器(CPU)体系结构
大纲
Candidates should be able to: Notes and guidance Show understanding of the basic Von Neumann model for a computer system and the stored program concept Show understanding of the purpose and role of registers, including the difference between general purpose and special purpose registers Special purpose registers including: • Program Counter (PC) • Memory Data Register (MDR) • Memory Address Register (MAR) • The Accumulator (ACC) • Index Register (IX) • Current Instruction Register (CIR) • Status Register Show understanding of the purpose and roles of the Arithmetic and Logic Unit (ALU), Control Unit (CU) and system clock, Immediate Access Store (IAS) Show understanding of how data are transferred between various components of the computer system using the address bus, data bus and control bus Show understanding of how factors contribute to the performance of the computer system Including: • processor type and number of cores • the bus width • clock speed • cache memory Understand how different ports provide connection to peripheral devices Including connection to: • Universal Serial Bus (USB) • High Definition Multimedia Interface (HDMI) • Video Graphics Array (VGA) Describe the stages of the Fetch-Execute (F-E) cycle Describe and use 'register transfer' notation to describe the F-E cycle Show understanding of the purpose of interrupts Including: • possible causes of interrupts • applications of interrupts • use of an Interrupt Service Routine (ISR) • when interrupts are detected during the fetch-execute cycle • how interrupts are handled 来源:剑桥国际大纲
取指-译码-执行周期 冯·诺依曼体系结构(Von Neumann architecture)是几乎每一台通用计算机的基础:
- 一个单一存储器——立即存取存储器(Immediate Access Store,IAS)——同时容纳程序指令和数据(存储程序(stored program)概念)。
- 一个处理器(processor,CPU)从存储器取指令并一次运行一条。
- 除非一个分支改变流程,指令按顺序运行。
存储程序的想法就是使一台计算机灵活的东西:改变程序,你就改变它所做的事,不用重新布线。
探索Tap the parts of a Von Neumann computer
Explore each block. The CPU (control unit, ALU, registers) talks to a single main memory over the buses — and that one shared memory for instructions AND data is the Von Neumann idea.
词汇表 训练英文 中文 拼音 Von Neumann architecture 冯·诺依曼体系结构 féng · nuò yī màn tǐ xì jié gòu stored program 存储程序 cún chǔ chéng xù processor 处理器 chǔ lǐ qì arithmetic and logic unit 算术逻辑单元 suàn shù luó jí dān yuán Immediate Access Store 立即存取存储器 lì jí cún qǔ cún chǔ qì 4.1
CPU 的主要部件
所有这些部件都位于一个小芯片内。本节后面的图显示它们如何连接;下面的照片显示实物。

一个现代 CPU:整个处理器是一个小芯片(这里从下方看,显示触点) 
主板上匹配的 CPU 插座:芯片的触点压到这些针脚上 算术逻辑单元(ALU)
ALU(算术逻辑单元)做算术(加、减……)和逻辑(AND、OR、比较)。它从寄存器(registers)取操作数,并把结果放回一个寄存器。
控制单元(CU)
控制单元(control unit)译码每条指令,并发送控制信号来执行它——打开数据通路、告诉 ALU 做什么,以及控制存储器读和写。
系统时钟
时钟发送一串稳定的脉冲,使 CPU 保持同步。每条指令占固定数目的周期,时钟频率(clock speed,例如 3.8 GHz)是性能的一个因素。
寄存器
寄存器是 CPU 内微小、非常快的存储。专用寄存器(special purpose registers)各在周期中有一个固定的工作:
- 程序计数器(Program Counter,PC)——下一条指令的地址。
- 内存地址寄存器(Memory Address Register,MAR)——正在读或写的地址。
- 内存数据寄存器(Memory Data Register,MDR)——正在往存储器去或从存储器来的数据。
- 当前指令寄存器(Current Instruction Register,CIR)——正在译码的指令。
- 累加器(Accumulator,ACC)——ALU 正在处理的值。
- 状态寄存器(Status Register)——容纳分支所用的标志(flags,进位、零、负、溢出)。
- 变址寄存器(Index Register)——变址寻址中所用的一个偏移量。
通用寄存器(general-purpose registers)由程序员用于计算过程中的临时值。寄存器与存储器之间的数据移动用寄存器传送(register transfer)记法写——例如
MAR ← [PC]("把 PC 的内容复制到 MAR")。
冯·诺依曼 CPU:由总线连接的寄存器、控制单元和 ALU 词汇表 训练英文 中文 拼音 register 寄存器 jì cún qì control unit 控制单元 kòng zhì dān yuán clock speed 时钟频率 shí zhōng pín lǜ Program Counter 程序计数器 chéng xù jì shù qì Memory Address Register 内存地址寄存器 nèi cún dì zhǐ jì cún qì Memory Data Register 内存数据寄存器 nèi cún shù jù jì cún qì Current Instruction Register 当前指令寄存器 dāng qián zhǐ lìng jì cún qì Accumulator 累加器 lěi jiā qì Status Register 状态寄存器 zhuàng tài jì cún qì flags 标志 biāo zhì Index Register 变址寄存器 biàn zhǐ jì cún qì general-purpose registers 通用寄存器 tōng yòng jì cún qì special purpose registers 专用寄存器 zhuān yòng jì cún qì register transfer 寄存器传送 jì cún qì chuán sòng 4.1
总线
三条内部总线(buses,一组组并行导线)连接各部件:
- 地址总线(address bus)——传送存储器地址。单向(CPU → 存储器)。
- 数据总线(data bus)——传送数据。双向。
- 控制总线(control bus)——传送控制信号(读、写、中断)。双向。
一条 $n$ 位地址总线能到达 $2^{n}$ 个存储单元。数据总线宽度决定每次访问移动多少位(常常是字长)。

连接 CPU、存储器和输入/输出的三条系统总线 词汇表 训练英文 中文 拼音 buses 总线 zǒng xiàn address bus 地址总线 dì zhǐ zǒng xiàn data bus 数据总线 shù jù zǒng xiàn control bus 控制总线 kòng zhì zǒng xiàn 4.1
影响性能的因素
- 时钟频率——每秒更多的周期。
- 核心数(cores)——一个多核 CPU 一次运行几个线程。
- 字长(word size)——一个 64 位 CPU 每周期处理 64 位块,并能寻址比一个 32 位的多得多的存储器。
- RAM 数量(随机存取存储器)——更多的 RAM 容纳更多的工作集;太少迫使操作系统页(page)到磁盘。
- 高速缓存(cache memory)大小——更多的高速缓存减少平均存储器访问时间。
- 辅助存储器(secondary storage)类型——一个 SSD 加载程序比一个 HDD 快得多。
- 总线宽度和速度——更宽/更快的总线更快地移动数据。
使规格与工作负载匹配:一个四核在并行工作上胜过一个双核,但更高的每核速度在单线程工作上胜出。
词汇表 训练英文 中文 拼音 cores 核心 hé xīn word size 字长 zì zhǎng RAM 随机存取存储器 suí jī cún qǔ cún chǔ qì page 页 yè secondary storage 辅助存储器 fǔ zhù cún chǔ qì cache memory 高速缓存 gāo sù huǎn cún 4.1
端口
一个端口(port)是一个用于连接外围设备(peripheral)的物理插座:
- USB(通用串行总线)——通用(键盘、驱动器、手机)。
- HDMI(高清多媒体接口)——向一个屏幕的数字视频和音频。
- VGA(视频图形阵列)——向一个显示器的较老的模拟视频输出。
- Ethernet(RJ-45)——有线 LAN。音频插孔——耳机/麦克风。
不同的端口用不同的信号,所以一根 HDMI 电缆不会装进一个 USB 插座。USB-C 不寻常,它携带视频、数据和电力。
词汇表 训练英文 中文 拼音 port 端口 duān kǒu peripheral 外围设备 wài wéi shè bèi 4.1
取指-执行周期
CPU 重复取指-执行周期(fetch-execute cycle),每条机器指令运行一次。
取指
- PC 的地址被复制到 MAR。
- PC 被递增以指向下一条指令。
- 一个读信号经控制总线传送。
- 存储器把指令放到数据总线上。
- 它被复制到 MDR,然后到 CIR。

一次取指中的寄存器传送:PC → MAR → 存储器 → MDR → CIR,PC 被递增 译码
CU 译码 CIR 中的指令——什么运算,以及哪些操作数或地址。
执行
CU 执行它:算术/逻辑去 ALU(结果到 ACC);一个加载/存储在存储器和一个寄存器之间移动数据;一个分支改变 PC。然后周期重复。

取指-执行周期,每次都有一个中断检查 探索The fetch-execute cycle
Tap round the loop the CPU repeats billions of times a second. Watch how fetch uses the PC/MAR/MDR/CIR registers, then decode and execute act on what was fetched.
探索The fetch–execute cycle
Step through how the CPU runs one instruction — fetch it from memory, decode it, then execute it, over and over.
词汇表 训练英文 中文 拼音 fetch-execute cycle 取指-执行周期 qǔ zhǐ - zhí xíng zhōu qī 4.1
中断
一个中断(interrupt)是一个暂停正常周期的信号,以便 CPU 能处理一个紧急事件(一次按键、一个数据包到达、一个硬件故障、除以零、操作系统计时器)。
处理一个:
- 完成当前指令。
- 保存状态(PC 和寄存器)。
- 把中断服务程序(interrupt service routine,ISR)的地址加载到 PC 并运行它。
- ISR 处理事件。
- 恢复保存的状态并继续。
中断让系统及时响应,而 CPU 不用不断检查设备,并且这是操作系统多任务的方式。

一个中断如何嵌入取指-执行周期 词汇表 训练英文 中文 拼音 interrupt 中断 zhōng duàn interrupt service routine 中断服务程序 zhōng duàn fú wù chéng xù 4.2
汇编语言
大纲
Candidates should be able to: Notes and guidance Show understanding of the relationship between assembly language and machine code Describe the different stages of the assembly process for a two-pass assembler Apply the two-pass assembler process to a given simple assembly language program Trace a given simple assembly language program Show understanding that a set of instructions are grouped Including the following groups: • Data movement • Input and output of data • Arithmetic operations • Unconditional and conditional instructions • Compare instructions Show understanding of and be able to use different modes of addressing Including immediate, direct, indirect, indexed, relative 来源:剑桥国际大纲
CPU 实际运行机器码(machine code)——位模式,专属于一个体系结构。汇编语言(assembly language)是一种可读的形式,每条机器指令一条指令,用像
LDD、ADD、JMP这样的助记符(mnemonics)书写。一个汇编器(assembler)把它翻译成机器码。
一个汇编器把助记符变成机器码位模式 两遍汇编器
一个两遍汇编器读源两次:
- 第一遍构建一个符号表(symbol table):每当一个标签(label,如
LOOP:)出现时,记录它的地址;还不生成代码。 - 第二遍生成代码:翻译每条指令,当一条引用一个标签(如
JMP LOOP)时,在符号表中查找它的地址。
两遍处理前向引用(forward references,一个跳到后面定义的标签的跳转)。
示例指令集
剑桥用一个小的通用集:数据移动(
LDD、LDM、LDI、LDX、STO、MOV)、算术(ADD、SUB、INC、DEC)、逻辑/位(AND、OR、XOR、LSL、LSR)、比较和分支(CMP、JMP、JPE、JPN)、I/O(IN、OUT),以及END。确切的助记符在试卷的参考表中给出。探索How a two-pass assembler works
Step through it. The assembler reads your code twice: pass 1 just finds where every label lives, so pass 2 can fill in the addresses — that is how a jump to a label defined later still works.
词汇表 训练英文 中文 拼音 machine code 机器码 jī qì mǎ assembly language 汇编语言 huì biān yǔ yán mnemonics 助记符 zhù jì fú assembler 汇编器 huì biān qì symbol table 符号表 fú hào biǎo label 标签 biāo qiān forward references 前向引用 qián xiàng yǐn yòng 4.2
寻址方式
寻址方式(addressing mode)说明 CPU 如何找到操作数:
- 立即寻址(immediate addressing)——操作数是指令中的值。
LDM #10加载 10。 - 直接寻址(direct addressing)——指令容纳一个地址;操作数是那里的值。
LDD 200。 - 间接寻址(indirect addressing)——指令容纳一个地址,它容纳另一个地址,那才是数据。
LDI 200。 - 变址寻址(indexed addressing)——有效地址是
address + index register;用于数组。LDX 100且 IR = 5 读地址 105。
(相对寻址(relative addressing)把地址作为从 PC 起的一个偏移量给出——用于跳转。)

每种寻址方式如何到达它的操作数——立即、直接、间接和变址 例题。 内存中:地址
200存放250,地址250存放99,地址105存放7。变址寄存器中是5。分别执行LDM #200、LDD 200、LDI 200和LDX 100之后,累加器中各是什么?跟着每种寻址方式要找多远来看。LDM #200是立即寻址 - 操作数就是指令中写的那个数,所以累加器中是 200。LDD 200是直接寻址 - 去地址 200 取出其中的内容:250。LDI 200是间接寻址 - 地址 200 中存的是 250,那是另一个地址,所以继续去地址 250:99。LDX 100是变址寻址 - 把变址寄存器加到地址上,$100 + 5 = 105$,再读地址 105:7。用"跳几次"来区分它们:立即 0 次,直接 1 次,间接 2 次,变址 1 次(在加上变址值之后)。词汇表 训练英文 中文 拼音 addressing mode 寻址方式 xún zhǐ fāng shì immediate addressing 立即寻址 lì jí xún zhǐ direct addressing 直接寻址 zhí jiē xún zhǐ indirect addressing 间接寻址 jiàn jiē xún zhǐ indexed addressing 变址寻址 biàn zhǐ xún zhǐ relative addressing 相对寻址 xiāng duì xún zhǐ 4.2
跟踪汇编程序
要跟踪它:做一个表,列有 PC、ACC、变址寄存器、每个变量和任何标志。逐条走过指令,每条之后更新表;当分支改变 PC 时跟随它们;在
END停止。一个常见模式是用变址寻址在一个数组上循环。4.3
位操作
大纲
Candidates should be able to: Notes and guidance Show understanding of and perform binary shifts Logical, arithmetic and cyclic Left shift, right shift Show understanding of how bit manipulation can be used to monitor/control a device Carry out bit manipulation operations Test and set a bit (using bit masking) Instruction Label | Opcode | Operand Explanation AND #n / Bn / &n Bitwise AND operation of the contents of ACC with the operand AND Bitwise AND operation of the contents of ACC with the contents of XOR #n / Bn / &n Bitwise XOR operation of the contents of ACC with the operand XOR Bitwise XOR operation of the contents of ACC with the contents of OR #n / Bn / &n Bitwise OR operation of the contents of ACC with the operand OR Bitwise OR operation of the contents of ACC with the contents of LSL #n Bits in ACC are shifted logically n places to the left. Zeros are introduced on the right hand end LSR #n Bits in ACC are shifted logically n places to the right. Zeros are introduced on the left hand end Labels an instruction Gives a symbolic address All questions will assume there is only one general purpose register available (Accumulator) ACC denotes Accumulator IX denotes Index Register can be an absolute or symbolic address # denotes a denary number, e.g. #123 B denotes a binary number, e.g. B01001010 & denotes a hexadecimal number, e.g. &4A 来源:剑桥国际大纲
一个逻辑移位(logical shift)把所有位向左或向右移若干位,用 0 填充新位置。
- 左移 1(
LSL #1)——位向左移,一个 0 从右边进入;对一个无符号数这是 × 2。 - 右移 1(
LSR #1)——位向右移,一个 0 从左边进入;对一个无符号数这是整数 ÷ 2。
移 $n$ 位乘以或除以 $2^{n}$。例子:
00001011(11)LSL #1→00010110(22)。一个算术右移保留符号位,使一个负的有符号数保持为负。一个循环移位(cyclic shift,旋转)把从一端掉出的位从另一端送回,所以没有位丢失。

逻辑左($\times 2$)、逻辑右($\div 2$)和算术右(保留符号位) 用于监控/控制的位操作
嵌入式设备常常每个信号用一个寄存器位(bit)(例如位 $n$ = LED $n$)。用一个掩码(mask)——位掩码——你可以:
- 置位 $n$:
R = R OR一个位 $n$ 置位的掩码。 - 清位 $n$:
R = R AND一个位 $n$ 清零而其余置位的掩码。 - 翻转位 $n$:
R = R XOR一个位 $n$ 置位的掩码。 - 测试位 $n$:
R AND掩码,然后检查结果是否非零。

用 OR 置一个位、用 AND 清它、用 XOR 翻转它——每个都用一个掩码 位操作快、用很少的存储器,并让一个字节容纳至多 8 个开/关状态。
探索Shift and mask the bits of a byte
Pick an operator and watch each result bit. A left shift (<<) moves every bit up one place (×2); a right shift (>>) moves them down (÷2); AND with a mask clears the bits you don't want.
词汇表 训练英文 中文 拼音 logical shift 逻辑移位 luó jí yí wèi mask 掩码 yǎn mǎ bit 位 wèi cyclic shift 循环移位 xún huán yí wèi 4.3
考试技巧
- 用寄存器传送术语(PC、MAR、MDR、CIR、ACC)学取指-执行周期,以及什么递增 PC。
- 说出每个寄存器的工作;地址总线是单向的,数据总线是双向的。
- 区分寻址方式(立即、直接、间接、变址)——一个常见的题目。
- 解释时钟频率、核心数、高速缓存大小和字长如何影响性能。
- 对于一个二进制移位,说明它是逻辑的还是算术的;左移乘以 2,右移除以 2。
-
5
系统软件
5.1
操作系统
大纲
Candidates should be able to: Notes and guidance Explain why a computer system requires an Operating System (OS) Explain the key management tasks carried out by the Operating System Including memory management, file management, security management, hardware management (input/output/peripherals), process management Show understanding of the need for typical utility software provided with an Operating System Including disk formatter, virus checker, defragmentation software, disk contents analysis / disk repair software, file compression, back-up software Show understanding of program libraries Including: • software under development is often constructed using existing code from program libraries • the benefits to the developer of software constructed using library files, including Dynamic Link Library (DLL) files 来源:剑桥国际大纲
为什么一台计算机需要一个操作系统
硬件本身只能取指令并运行它们——它对文件、程序、网络或用户一无所知。操作系统(operating system,OS)是这样一个软件层,它:
- 为运行中的程序管理硬件(处理器(processor)、内存、I/O、存储)。
- 通过一个清晰的接口提供服务(文件系统、网络、用户账户),所以程序不必直接与硬件对话。
- 提供一个用户界面(命令行、GUI、触控)。
- 让几个程序安全地共享硬件——每个获得公平的 CPU 时间并被挡在其他程序的内存之外。
没有操作系统,每个程序都需要它自己的驱动,而且一次只能安全地运行一个程序。

一个桌面操作系统为用户管理屏幕、文件和程序 
一部智能手机运行一个移动操作系统,如 Android 关键的管理任务
- 进程管理(process management)——加载程序、在 CPU 上调度它们、在它们之间切换,并杀死行为不当的。(一个运行中的程序是一个进程(process)。)
- 内存管理(memory management)——把内存给进程、使它们分开,并使用虚拟内存(virtual memory)/ 分页(paging)使工作集能超过物理 RAM(随机存取存储器)。
- 文件管理——在辅助存储器(secondary storage)上组织文件和文件夹、控制权限、防止写入损坏。
- 设备管理(硬件管理)——通过设备驱动(device drivers)处理 I/O 和外围设备、缓冲数据、管理中断,并给出一个统一的接口。
- 安全管理——账户、权限、防火墙、加密。
- 用户界面和联网。

操作系统所管理的主要工作 
内存保护使每个应用程序保持在它自己的内存块中 实用软件
大多数操作系统包含实用程序(utility programs)来维护系统:

实用程序:杀毒软件、备份、压缩和碎片整理 - 磁盘格式化程序——一个文件 / 磁盘管理工具,它准备一个磁盘(建立它的文件系统);相关工具复制、移动和删除文件。
- 碎片整理软件(磁盘碎片整理(disk defragmenter))——在一个硬盘上把碎片文件的各部分移到一起以减少寻道时间(对 SSD 无用)。
- 磁盘内容分析 / 磁盘修复软件——检查磁盘完整性并修复文件系统错误和坏扇区。
- 备份软件(备份(backup))——把用户数据复制到别处,以便能恢复。
- 病毒检查器(杀毒软件(antivirus))——扫描恶意软件并隔离威胁。
- 防火墙(firewall)——按规则过滤网络流量。
- 文件压缩(压缩(compression))/ 归档;系统监视器;更新。
把这些与操作系统捆绑,省去用户安装每一个。
探索Where the operating system sits
Tap each layer. The OS is the middle layer — it sits between your applications and the hardware, sharing the machine safely so programs never touch the hardware directly.
词汇表 训练英文 中文 拼音 operating system 操作系统 cāo zuò xì tǒng processor 处理器 chǔ lǐ qì process management 进程管理 jìn chéng guǎn lǐ process 进程 jìn chéng memory management 内存管理 nèi cún guǎn lǐ virtual memory 虚拟内存 xū nǐ nèi cún paging 分页 fēn yè RAM 随机存取存储器 suí jī cún qǔ cún chǔ qì secondary storage 辅助存储器 fǔ zhù cún chǔ qì device driver 设备驱动 shè bèi qū dòng utility program 实用程序 shí yòng chéng xù disk defragmenter 碎片整理 suì piàn zhěng lǐ backup 备份 bèi fèn antivirus 杀毒软件 shā dú ruǎn jiàn firewall 防火墙 fáng huǒ qiáng compression 压缩 yā suō 5.1
程序库
一个程序库(program library)是预先写好的代码(子程序(subroutines)、类、模块),程序重用它而不是自己写——例如一个数学库、一个网络库、一个图形库。

一个新程序重用来自库的现成例程 好处:节省时间(现成的代码)、可靠(经过充分测试、广泛使用),以及标准化(一致的行为)。
- 一个静态库(static library)在编译时被复制到可执行文件中(独立,但更大且需要重建来更新)。
- 一个动态库(dynamic library,DLL,动态链接库;
.so)在运行时被加载(可执行文件更小、被许多程序共享、一次更新惠及所有)。

静态:库被复制到可执行文件中。动态:一个共享库文件在运行时被加载 探索Computing concept lab
Classify concrete examples by the computing idea they demonstrate.
词汇表 训练英文 中文 拼音 program library 程序库 chéng xù kù subroutines 子程序 zi chéng xù static library 静态库 jìng tài kù dynamic library 动态库 dòng tài kù 5.2
语言翻译程序
大纲
Candidates should be able to: Notes and guidance Show understanding of the need for: • assembler software for the translation of an assembly language program • a compiler for the translation of a high-level language program • an interpreter for translation and execution of a high-level language program Explain the benefits and drawbacks of using either a compiler or interpreter and justify the use of each Show awareness that high-level language programs may be partially compiled and partially interpreted, such as Java (console mode) Describe features found in a typical Integrated Development Environment (IDE) Including: • for coding, including context-sensitive prompts • for initial error detection, including dynamic syntax checks • for presentation, including prettyprint, expand and collapse code blocks • for debugging, including single stepping, breakpoints, i.e. variables, expressions, report window 来源:剑桥国际大纲
你写源代码;计算机运行机器码(machine code)。一个翻译器(translator)在它们之间转换。
汇编器
一个汇编器(assembler)把汇编语言(assembly language)翻译成机器码,每条指令一条指令。用于底层代码(嵌入式系统、驱动)。
编译器
一个编译器(compiler)在运行之前一次性把一个高级程序翻译成机器码。
- 它在编译时报告所有错误;一旦干净,它产生一个独立的可执行文件(executable),它在没有安装编译器的情况下运行,并能运行许多次。
- 通常运行时更快(运行时没有翻译),但绑定到一个 CPU/OS——为每个平台重新编译。
解释器
一个解释器(interpreter)一次一行地翻译并运行一个高级程序,不产生可执行文件。
- 它在到达那一行时报告一个错误,然后停止;你可以修正它并继续——对开发很好。
- 必须安装解释器才能运行程序;通常更慢(每次运行都重新翻译),但容易跨平台移植(port)。

一个编译器一次性翻译成一个独立程序;一个解释器每次运行都逐行翻译 在它们之间选择
用编译器当: 用解释器当: 运行时速度重要 你想要快速的编辑-运行循环 分发给没有开发工具的用户 编写跨平台脚本 程序运行许多次 程序小或只运行一次 教初学者 混合:Java
Java 被编译成字节码(bytecode,一种平台无关的中间形式),一个虚拟机(virtual machine,JVM)随即解释它——或使用即时编译(just-in-time compilation)把热点部分变成本地代码。所以错误被及早捕获、字节码在任何有 JVM 的地方运行("一次编写,到处运行"),并且长时间运行的程序达到接近本地的速度。C# 和 Python 用类似的设计。

Java 编译成可移植的字节码,任何 JVM 都能运行它——一次编写,到处运行 例题。 Java 源代码被编译成字节码,再由 JVM 解释执行。为什么两者都用,而不直接编译成机器码?编译器生成的是针对某一种处理器和操作系统的机器码,所以在一台机器上编译的程序无法在另一台上运行。而 Java 的编译器面向的是一台虚拟机器,所以它产生的字节码在哪里都完全相同;各个平台再各自提供自己的 JVM,把这些字节码解释成本平台的原生指令。因此一个编译好的文件可以在任何有 JVM 的地方运行 - "一次编写,到处运行"。代价是速度:解释字节码比运行原生代码慢,这正是真实的 JVM 还会用 JIT 编译在运行时把频繁执行的字节码转成原生代码的原因。要把两面都说出来 - 得分点是用速度换来的可移植性。
探索The compiler route: source to running program
Step through how a compiler works — translating the whole program once, before it runs. Contrast it with an interpreter, which translates and runs one line at a time.
词汇表 训练英文 中文 拼音 machine code 机器码 jī qì mǎ translator 翻译器 fān yì qì assembler 汇编器 huì biān qì assembly language 汇编语言 huì biān yǔ yán compiler 编译器 biān yì qì executable 可执行文件 kě zhí xíng wén jiàn interpreter 解释器 jiě shì qì bytecode 字节码 zì jié mǎ virtual machine 虚拟机 xū nǐ jī just-in-time compilation 即时编译 jí shí biān yì 5.2
集成开发环境(IDE)
一个集成开发环境(integrated development environment,IDE)把写、测试和调试代码的工具带进一个应用程序:

一个 IDE 捆绑编辑器、一个运行按钮和一个调试器 - 带语法高亮(syntax highlighting,关键字、字符串、注释用不同的颜色)、自动缩进和括号匹配的源代码编辑器。
- 自动补全(auto-complete)——在你输入时建议名称并显示函数参数。
- 翻译器集成——用一次击键编译/运行;错误内联显示。
- 调试器(debugger)——设置断点(breakpoints)来暂停、逐行单步执行(step through),并检查变量。
- 版本控制(version control)集成(git)、项目管理、一个帮助系统、重构(refactoring)工具(安全重命名),以及单元测试(unit test)集成。
一个 IDE 通过把写 → 运行 → 调试 → 修正放在一个接口后面来加速开发。常见的 IDE:Visual Studio、PyCharm、Eclipse、VS Code。

一个调试器:设置一个断点、运行,然后暂停来检查变量并单步执行代码 词汇表 训练英文 中文 拼音 integrated development environment 集成开发环境 jí chéng kāi fā huán jìng syntax highlighting 语法高亮 yǔ fǎ gāo liàng auto-complete 自动补全 zì dòng bǔ quán debugger 调试器 tiáo shì qì breakpoints 断点 duàn diǎn version control 版本控制 bǎn běn kòng zhì refactoring 重构 zhòng gòu unit test 单元测试 dān yuán cè shì 5.2
考试技巧
- 列出操作系统的工作(内存、进程、文件、设备和安全管理)——单说"管理资源"太含糊。
- 比较编译器对解释器对汇编器:每个翻译什么,以及何时报告错误。
- 解释一个 IDE 提供什么(编辑器、调试器、错误诊断、自动补全)。
-
6
安全、隐私与数据完整性
6.1
数据安全
大纲
Candidates should be able to: Notes and guidance Explain the difference between the terms security, privacy and integrity of data Show appreciation of the need for both the security of data and the security of the computer system Describe security measures designed to protect computer systems, ranging from the stand-alone PC to a network of computers Including user accounts, passwords, authentication techniques such as digital signatures and biometrics, firewall, anti-virus software, anti-spyware, encryption Show understanding of the threats to computer and data security posed by networks and the internet Including malware (virus, spyware), hackers, phishing, pharming Describe methods that can be used to restrict the risks posed by threats Describe security methods designed to protect the security of data Including encryption, access rights 来源:剑桥国际大纲
这些听起来相似,但意思不同:
- 安全(security)——保护数据免于未授权(unauthorised)的访问、更改或破坏。
- 隐私(privacy)——个人控制谁看到他们个人数据的权利,带有同意和一个明确的目的。
- 完整性(integrity)——数据是准确且完整的——没有被损坏或意外更改。
一个文件可以是安全的(只有正确的人能打开它)但缺乏完整性(一个拼写错误把它损坏了);或者准确但不私密(任何人都能读它)。三者都需要。
探索Risk and responsibility lab
Sort examples by the rule, risk or protection involved.
词汇表 训练英文 中文 拼音 security 安全 ān quán unauthorised 未授权 wèi shòu quán privacy 隐私 yǐn sī integrity 完整性 wán zhěng xìng 1. Malware 恶意软件 è yì ruǎn jiàn 6.1
安全为何重要
要保护两样东西:数据本身(保持它机密、完整和可用)和计算机系统(一个被攻破的系统可以攻击其他人、窃取凭据,或被勒索赎金)。
6.1
来自网络和互联网的威胁
威胁分成三组。

一个中间人攻击者坐在双方之间 1. 恶意软件(malware,malicious software)——有害的程序:
- 病毒(virus)——附着到其他程序、在它们运行时传播的自我复制代码。
- 蠕虫(worm)——在网络(networks)上无需用户操作就传播的自我复制代码。
- 木马(Trojan horse)——看起来有用但隐藏恶意代码。
- 间谍软件(spyware)——秘密收集信息(击键、密码)。
- 勒索软件(ransomware)——加密你的文件并要求付款。
- 广告软件(adware)——推送不需要的广告。
2. 欺骗人(社会攻击):
- 网络钓鱼(phishing)——欺骗用户交出凭据的假邮件/网站。
- 域名欺骗(pharming)——即使用户输入正确的地址,也把他们重定向到一个假网站。
- 社会工程(social engineering)——欺骗人交出信息。
3. 对网络的攻击:
- 黑客(hackers)的黑客入侵(hacking)——未授权访问,常通过弱密码或软件缺陷。
- 拒绝服务(denial of service,DoS/DDoS)——淹没一台服务器,使真实用户不能到达它。
- 窃听(eavesdropping)——捕获传输中的数据(在开放 Wi-Fi 上的一个风险)。
- 中间人攻击(man-in-the-middle)——一个攻击者秘密地在双方之间转发或更改消息。

恶意软件按行为:自我传播(病毒、蠕虫)对隐藏/伪装(木马、间谍软件、勒索软件、广告软件) 词汇表 训练英文 中文 拼音 virus 病毒 bìng dú worm 蠕虫 rú chóng networks 网络 wǎng luò Trojan horse 木马 mù mǎ spyware 间谍软件 jiàn dié ruǎn jiàn ransomware 勒索软件 lè suǒ ruǎn jiàn adware 广告软件 guǎng gào ruǎn jiàn phishing 网络钓鱼 wǎng luò diào yú pharming 域名欺骗 yù míng qī piàn social engineering 社会工程 shè huì gōng chéng hacking 黑客入侵 hēi kè rù qīn hackers 黑客 hēi kè denial of service 拒绝服务 jù jué fú wù eavesdropping 窃听 qiè tīng man-in-the-middle 中间人攻击 zhōng jiān rén gōng jī malware 恶意软件 è yì ruǎn jiàn 6.1
安全措施
措施既保护数据的安全(免于丢失、被盗或损坏)又保护计算机系统的安全(它的硬件、软件和网络)。
一台独立 PC
- 一个强密码;保持最新的杀毒软件;及时的软件更新;向单独介质的备份(backup);全盘加密(encryption);一个锁定的屏幕。
一台联网 PC
以上全部,加上一个防火墙(firewall)、每用户的权限(admin 权限只给 admin)、用户账户(user accounts)的集中管理,以及审计日志(audit logs,谁登录、他们碰了什么)。

一个防火墙位于用户的计算机和互联网之间 跨越互联网
- VPN(虚拟专用网)——加密用户和企业网关之间的流量。
- HTTPS / TLS——加密网络流量。
- 数字签名(digital signatures)——证明谁发送了一个消息,以及它在传输中没有被更改。
- 入侵检测——观察流量以寻找已知的攻击模式。
词汇表 训练英文 中文 拼音 backup 备份 bèi fèn encryption 加密 jiā mì firewall 防火墙 fáng huǒ qiáng user accounts 用户账户 yòng hù zhàng hù audit logs 审计日志 shěn jì rì zhì VPN 虚拟专用网 xū nǐ zhuān yòng wǎng digital signatures 数字签名 shù zì qiān míng 6.1
使措施与威胁相匹配
- 传输中被拦截 → 加密数据(HTTPS、VPN)。被拦截的密文没有密钥就没用。
- 未授权访问 → 强身份验证(authentication,长密码;带手机码或密钥的双因素认证(two-factor authentication));用户授权(authorisation);登录失败后锁定。
- 恶意软件 → 带实时扫描的杀毒软件和反间谍软件(anti-spyware);打补丁;避免不受信任的下载。
- 网络钓鱼 → 用户培训;邮件过滤;在输入凭据前检查 URL。
- 内部威胁 → 最小权限(least-privilege)原则(只给每个用户他们需要的);审计。
- DDoS → 速率限制和流量过滤。
词汇表 训练英文 中文 拼音 authentication 身份验证 shēn fèn yàn zhèng two-factor authentication 双因素认证 shuāng yīn sù rèn zhèng authorisation 授权 shòu quán anti-spyware 反间谍软件 fǎn jiàn dié ruǎn jiàn least-privilege 最小权限 zuì xiǎo quán xiàn 6.1
保护数据本身
- 加密——用一个密钥把明文(plaintext)变成密文(ciphertext)。对称加密(symmetric encryption,AES)用一个共享密钥;非对称加密(asymmetric encryption,RSA)用一个公钥(public key)和一个私钥(private key)。保护静止和传输中的数据。
- 访问控制(access control)——文件权限(读/写/执行)和访问权限(access rights),由操作系统强制执行。
- 身份验证——身份验证技术核实用户:你知道的东西(密码)、你有的东西(令牌、手机),或你是的东西(生物识别(biometrics)——指纹、面部、虹膜);组合起来最强。
- 备份——保留副本(一些异地),使丢失或损坏可恢复。
- 物理安全——上锁的服务器机房、电缆锁。

对称用一个共享密钥;非对称用一个公钥加密、一个私钥解密 
一个安全令牌显示一个变化的码用于双因素认证("你有的东西") 
一个指纹读取器检查"你是的东西"——一个人的特征,而不是一个密码 探索Encrypt with a Caesar cipher
Change the shift — that is the key. Each letter slides that many places along the alphabet to make the ciphertext, and the same key slides it back. That shared key is symmetric encryption in miniature.
词汇表 训练英文 中文 拼音 plaintext 明文 míng wén ciphertext 密文 mì wén Symmetric encryption 对称加密 duì chèn jiā mì asymmetric encryption 非对称加密 fēi duì chèn jiā mì public key 公钥 gōng yào private key 私钥 sī yào access control 访问控制 fǎng wèn kòng zhì access rights 访问权限 fǎng wèn quán xiàn biometrics 生物识别 shēng wù shí bié 6.2
数据完整性
大纲
Candidates should be able to: Notes and guidance Describe how data validation and data verification help protect the integrity of data Describe and use methods of data validation Including range check, format check, length check, presence check, existence check, limit check, check digit Describe and use methods of data verification during data entry and data transfer During data entry including visual check, double entry During data transfer including parity check (byte and block), checksum 来源:剑桥国际大纲
数据在它准确且完整时有完整性。两种技术:数据验证(在存储前抓住坏数据)和数据核对(确认数据被正确地输入或传输)。
验证——数据说得通吗?
验证(validation)自动地对照合理的规则检查数据:
- 范围检查——在限度内(一个月是 1–12)。
- 界限检查——在一个单一界限的正确一侧(例如年龄 ≥ 18)。
- 存在检查——被引用的项存在(例如一个产品代码在表中)。
- 长度检查——正确数目的字符。
- 类型 / 字符检查——正确种类的数据(一个电话字段只允许数字)。
- 格式检查——匹配一个模式(一个电子邮件必须含有
@)。 - 存在性检查——必填字段不为空。
- 校验位(check digit)——从其他位算出的一个额外数位(ISBN、卡号),它发现誊写错误。
- 查找检查和一致性检查(例如交货日期 ≥ 订购日期)。
验证抓住格式错误的数据,但抓不住格式正确却事实上错误的数据("Bob" 写成 "Bib")。
核对——数据被正确地输入或传输了吗?
核对(verification)检查数据在从一个地方移到另一个地方时没有被改变。
在输入时:双重输入(输入两次并比较,如同一个新密码)或目视检查。
在传输时(位可能翻转):
- 奇偶校验(parity check)——一个额外的位使 1 的数目为偶(偶校验)或奇。接收方重新计数。抓住单位错误。
- 校验和(checksum)——发送方发送数据的一个摘要值;接收方重新计算它并比较。
- 循环冗余校验(cyclic redundancy check,CRC)——一个用多项式除法的更强的校验和,抓住多得多的错误类型。
一个奇偶块校验(parity block check)更进一步,还能定位错误。把字节排成一个网格:给每个字节一个行奇偶位,然后计算一个额外的奇偶字节,它的各位是上方字节的列奇偶。一个翻转的单一位现在会使一行和一列都不通过——它们的交叉点精确指出哪一位改变了,所以它甚至能被纠正。

校验位被设置以使 1 的数目为偶或奇 
为一个数据块算出一个校验和 核对只证明到达的与发送的相符——不证明数据是正确的,也不能抵御蓄意篡改。验证问"这说得通吗?";核对问"这被正确地复制了吗?"——两者都用。

验证检查数据说得通;核对检查它被无变化地复制 例题。 一位用户把出生日期输成
31/02/2009,并把电子邮箱地址输入了两遍。哪种检查能抓到哪个错误?两者的区别是什么?验证(合法性检查)问的是"这个数据合理吗?" - 计算机按某条规则去检验它,格式检查或范围检查会拒绝31/02/2009,因为二月从来没有 31 号。核验问的是"这个数据输入正确吗?" - 把邮箱输两遍就是双重输入,比较两份副本就能抓到打字失误。正是它们的局限使这成为常考题:验证永远无法告诉你数据是正确的,只能说明它是可能的 - 即使用户其实生于另一天,01/02/2009也能通过所有验证规则。要说清每种检查能抓什么、不能抓什么。探索Computing concept lab
Classify concrete examples by the computing idea they demonstrate.
词汇表 训练英文 中文 拼音 Validation 验证 yàn zhèng check digit 校验位 jiào yàn wèi Verification 核对 hé duì parity check 奇偶校验 jī ǒu jiào yàn checksum 校验和 jiào yàn hé cyclic redundancy check 循环冗余校验 xún huán rǒng yú jiào yàn parity block check 奇偶块校验 jī ǒu kuài jiào yàn 6.2
考试技巧
- 把这三个概念分开:安全(保持数据安全)、隐私(谁可以看它)、完整性(保持它正确)。
- 把每种威胁(恶意软件、黑客入侵、网络钓鱼、拦截)与一种措施(防火墙、加密、身份验证、访问权限)匹配。
- 加密保护机密性,而不是完整性——用一个校验和、奇偶校验或校验位来保护完整性。
- 区分一个病毒、蠕虫和木马以及每个如何传播。
-
7
伦理与所有权
7.1
伦理与所有权
大纲
Candidates should be able to: Notes and guidance Show understanding of the need for and purpose of ethics as a computing professional Understand the importance of joining a professional ethical body including BCS (British Computer Society), IEEE (Institute of Electrical and Electronic Engineers) Show understanding of the need to act ethically and the impact of acting ethically or unethically for a given situation Show understanding of the need for copyright legislation Show understanding of the different types of software licencing and justify the use of a licence for a given situation Licences to include free Software Foundation, the Open Source Initiative, shareware and commercial software Show understanding of Artificial Intelligence (AI) Understand the impact of AI including social, economic and environmental issues Understand the applications of AI 来源:剑桥国际大纲
一个计算专业人员是这样的人:他的工作——软件、系统、网络、数据——影响其他人。因为工作是技术性的,其他人往往无法判断它是否做得好或做得诚实。所以这个职业遵循共享的伦理(ethics,良好行为的原则)。
为什么伦理重要
- 信任——用户和雇主信任专业人员会为他们的利益行事。没有那种信任,软件就失去可信度。
- 影响——软件运行医疗设备、银行、车辆。粗心或不诚实的工作会伤害人。
专业团体(BCS、ACM、IEEE)为其成员发布伦理准则。

闭路电视引发隐私顾虑——一个计算专业人员必须权衡的伦理问题之一 
被丢弃的电子设备(电子垃圾)是计算日益增长的环境代价 
软件开发以几种方式影响公众的福祉 典型的原则
- 公众利益优先——保护受影响者的安全和福利。
- 诚实和胜任——对你的技能诚实;不要声称你缺乏的专长。
- 保密性(confidentiality)——保护客户和雇主的私密信息。
- 避免利益冲突(conflicts of interest)——不要接受你的利益与客户的相冲突的工作。
- 保持你的技能与时俱进;尊重知识产权(intellectual property)和隐私(privacy);公平地对待同事。
合乎伦理地行事对不合伦理地行事
合乎伦理地行事保护用户、加强声誉、减少法律风险,并建立信任。不合伦理地行事(跳过测试、隐藏漏洞、滥用数据)会伤害真实用户、导致解雇或法律诉讼、损害声誉,并总体上侵蚀对技术的信任。
当你面对一个模棱两可的决定时:辨认谁的利益受影响、查阅伦理准则和法律、权衡后果、请教一位受信任的前辈,并选择把用户置于短期便利之上的选项。
例题。 你团队的新 AI 招聘工具把简历分类快十倍,但你注意到它拒绝了更多较年长的申请人。发布它会取悦你的经理,但它不公平地对待一个群体。合乎伦理的选择是把它扣住直到偏见被修正——公众利益和公平先于短期便利。
探索Risk and responsibility lab
Sort examples by the rule, risk or protection involved.
词汇表 训练英文 中文 拼音 ethics 伦理 lún lǐ confidentiality 保密性 bǎo mì xìng conflicts of interest 利益冲突 lì yì chōng tū intellectual property 知识产权 zhī shí chǎn quán privacy 隐私 yǐn sī 7.1
版权
版权(copyright)是一个原创作品的创作者控制它如何被复制、分发、修改和表演的法律权利。它自动适用(无需注册)于源代码、软件、文档、图像、音频和视频。
没有版权,任何人都可以自由复制软件,开发者就得不到报酬,而剽窃就是合法的。有了版权,开发者能从他们的工作中挣钱(鼓励更多的软件),用户知道谁制作了它,而再利用通过许可以开发者的条件发生。版权持续很长时间(常常是创作者死后 70 年)。一般的想法和算法不受版权覆盖,但可能受一个专利(patent)覆盖。

版权是自动的且长久的;一个专利必须申请,持续约 20 年 探索Risk and responsibility lab
Sort examples by the rule, risk or protection involved.
词汇表 训练英文 中文 拼音 copyright 版权 bǎn quán patent 专利 zhuān lì 7.1
软件许可
一个软件许可证(software licence)是一个以所有者的条件授予使用软件许可的合同;选择并应用一个叫作软件许可。
商业(专有)
- 商业软件被出售:你购买一个许可证;软件只在它的条件内使用。
- 不给出源代码(一个专有(proprietary)产品);你不能修改或再分发它。
- 例子:Microsoft Office、Adobe Photoshop、大多数游戏。
在开发者想要每个用户的收入并保持对代码的控制时使用。
开源
- 源代码是公开的;用户可以读、修改和再分发它(开源(open-source))。
- 宽松(permissive)许可证(MIT、BSD)允许几乎任何使用;著佐权(copyleft)许可证(GPL)要求修改后的版本以相同的许可证发布("相同方式共享")。
- 自由软件基金会(FSF)和开源促进会(OSI)推动并批准开源许可证。
- 例子:Linux、Python、Apache。
在开发者想要软件被广泛使用并由社区改进时使用。
免费软件和共享软件
- 免费软件(freeware)——免费,没有源代码,可以再分发但不能修改(Acrobat Reader、WhatsApp)。
- 共享软件(shareware)——试用期免费,然后你付费才能继续使用;没有源代码。
类型 成本 源代码 再分发 修改 商业 付费 否 否 否 开源 免费 是 是 常常可以,带条件 免费软件 免费 否 是 否 共享软件 免费试用,然后付费 否 有时 否 
从开发者的目标选择一个许可证 要论证一个许可证选择,把它与开发者的目标(收入、覆盖面、社区)、用户的需求(成本、定制)和用例联系起来。
词汇表 训练英文 中文 拼音 software licence 软件许可证 ruǎn jiàn xǔ kě zhèng proprietary 专有 zhuān yǒu open-source 开源 kāi yuán copyleft 著佐权 zhù zuǒ quán freeware 免费软件 miǎn fèi ruǎn jiàn shareware 共享软件 gòng xiǎng ruǎn jiàn 7.1
人工智能(AI)
人工智能(artificial intelligence)构建做过去认为需要人类智能的任务的系统——识别语音和图像、翻译、玩游戏、驾驶。
大多数现代 AI 用机器学习(machine learning)——通过从大量数据中学习模式而在一个任务上进步的算法,而不是被一步一步地编程。用有许多层的神经网络(neural networks)的深度学习(deep learning)是今天领先的方法。
日常例子
AI 任务分成两种——理解输入,和产生输出或决策。
理解输入:
- 语音识别(speech recognition)——口语词到文本(语音助手)。
- 图像识别(image recognition)——在图像中找出物体、面部或文本。
产生输出或决策:
- 机器翻译(machine translation)——语言之间的自动翻译。
- 推荐系统(recommendation systems)——建议产品、视频或音乐。
- 自动驾驶汽车(autonomous vehicles)和机器人。
一个常见的考试场景:一个程序用一个摄像头读一个标签、翻译它,并大声读它——用光学字符识别(optical character recognition)找出词、用机器翻译转换它们,用文本转语音(text-to-speech)转成音频。

一个常见的场景:OCR → 机器翻译 → 文本转语音大声读一个外语标签 好处
- 无障碍——语音/图像 AI 帮助有障碍的用户;翻译帮助非母语者。
- 生产力——自动化重复任务使人腾出手来做创造性工作。
- 决策支持——AI 在巨大的数据集中发现模式(医学诊断、欺诈检测)。
- 始终可用,并为每个用户个性化。
顾虑
- 偏见(bias)——训练数据中不公平的模式变成不公平的 AI 决策(招聘、放贷)。
- 岗位替代——AI 可能取代一些角色。
- 隐私——训练常常使用大量个人数据。
- 透明度——大模型是"黑盒",难以解释。
- 问责——当 AI 出错时,谁负责:开发者、用户,还是运营者?
- 滥用——深度伪造、错误信息、监视。

偏见如何进入 AI:有偏见的数据 → 一个有偏见的模型 → 不公平的决策 专业人员必须理解他们所构建的 AI 的局限、告知用户,并减少伤害。
探索Computing concept lab
Classify concrete examples by the computing idea they demonstrate.
词汇表 训练英文 中文 拼音 artificial intelligence 人工智能 rén gōng zhì néng machine learning 机器学习 jī qì xué xí deep learning 深度学习 shēn dù xué xí neural networks 神经网络 shén jīng wǎng luò speech recognition 语音识别 yǔ yīn shí bié image recognition 图像识别 tú xiàng shí bié machine translation 机器翻译 jī qì fān yì recommendation systems 推荐系统 tuī jiàn xì tǒng autonomous vehicles 自动驾驶汽车 zì dòng jià shǐ qì chē optical character recognition 光学字符识别 guāng xué zì fú shí bié text-to-speech 文本转语音 wén běn zhuǎn yǔ yīn bias 偏见 piān jiàn 7.1
考试技巧
- 对照一个职业行为准则(公众利益、胜任、诚实)而非个人观点来回答伦理问题。
- 区分版权(保护表达)和一个专利(保护一个发明)。
- 比较软件许可证:专有、开源、免费软件、共享软件和 FOSS。
-
8
数据库
8.1
数据库概念
大纲
Candidates should be able to: Notes and guidance Show understanding of the limitations of using a file-based approach for the storage and retrieval of data Describe the features of a relational database that address the limitations of a file-based approach Show understanding of and use the terminology associated with a relational database model Including entity, table, record, field, tuple, attribute, primary key, candidate key, secondary key, foreign key, relationship (one-to-many, one-to-one, many-to-many), referential integrity, indexing Use an entity-relationship (E-R) diagram to document a database design Show understanding of the normalisation process First Normal Form (1NF), Second Normal Form (2NF) and Third Normal Form (3NF) Explain why a given set of database tables are, or are not, in 3NF Produce a normalised database design for a description of a database, a given set of data, or a given set of tables 来源:剑桥国际大纲
在数据库之前,程序把数据存储在平面文件(flat files)中——通常每个程序一个文件。这对小数据没问题,但在规模上会崩溃。

基于文件的存储把数据保存在分开的文件中,像文件柜里的纸——难以搜索且容易重复 局限
- 数据冗余(data redundancy)——相同的数据(一个客户的地址)保存在几个文件中。
- 数据不一致(data inconsistency)——分别更新的冗余副本变得不同步。
- 数据依赖(data dependence)——程序绑定到文件格式;改变格式,每个程序都必须重写。
- 难以强制完整性(integrity)、难以安全共享、查询能力弱,以及每字段的安全性弱。

文件本身存储在硬盘驱动器等设备上 
基于文件的方法:每个程序保存它自己的文件 一个关系数据库(relational database)通过把数据存储在由一个所有程序都使用的软件(DBMS)管理的表中来修复这些。

数据库方法:一个 DBMS 为所有程序服务 词汇表 训练英文 中文 拼音 flat files 平面文件 píng miàn wén jiàn data redundancy 数据冗余 shù jù rǒng yú data inconsistency 数据不一致 shù jù bù yī zhì integrity 完整性 wán zhěng xìng relational database 关系数据库 guān xì shù jù kù DBMS 数据库管理系统 shù jù kù guǎn lǐ xì tǒng 8.1
关系模型 —— 术语
- 表(table,关系)——行和列的一个网格;每种实体(entity)一个表(例如
CUSTOMER)。 - 记录(record,行,也叫元组(tuple))——一行;实体的一个实例。
- 字段(field,列,也叫属性(attribute))——一列;关于每条记录的一条信息。
- 主键(primary key)——唯一标识每条记录的一个字段(或多个字段);从不为空或重复。
- 外键(foreign key)——一个值匹配另一个表主键的字段,把两者链接起来。
- 复合键(composite key)——由两个或更多字段一起构成的一个主键。
- 候选键(candidate key)——任何可以是主键的字段。
- 次键(secondary key)——一个为快速搜索而建立索引的非主字段。
- 索引(indexing)——在一个字段上建立一个索引,使查找和连接运行得更快。
- 参照完整性(referential integrity)——每个外键值必须匹配一个现有的主键(没有孤立记录)。
一个表用简写书写,主键加下划线、外键标注:
CUSTOMER(CustomerID, Name, Phone) ORDER(OrderID, CustomerID, OrderDate) -- CustomerID is FK → CUSTOMER
一个外键链接两个表:ORDER.CustomerID 匹配主键 CUSTOMER.CustomerID 探索Read a relational table with SELECT
A relational table is just rows (records) and columns (fields). WHERE keeps the rows that match a condition; SELECT then keeps only the columns you asked for.
词汇表 训练英文 中文 拼音 table 表 biǎo entity 实体 shí tǐ record 记录 jì lù field 字段 zì duàn primary key 主键 zhǔ jiàn foreign key 外键 wài jiàn composite key 复合键 fù hé jiàn candidate key 候选键 hòu xuǎn jiàn referential integrity 参照完整性 cān zhào wán zhěng xìng tuple 元组 yuán zǔ attribute 属性 shǔ xìng secondary key 次键 cì jiàn indexing 索引 suǒ yǐn 8.1
实体-关系(E-R)图
一个实体关系图(entity-relationship diagram)显示结构:每个实体是一个矩形,每个关系是一条线,在每端标注基数(cardinality):
- 一对一(1:1)。
- 一对多(one-to-many,1:M)——每个客户有许多订单;每个订单有一个客户。
- 多对多(many-to-many,M:N)——学生选许多课程,而课程有许多学生。

一个 E-R 图:一个班有许多学生 
一个关系基数的鸦爪符号 一个多对多关系不能直接存储。把它拆成两个一对多关系,通过一个容纳两个外键的连接表(link table):
ENROLMENT(StudentID, CourseID, EnrolmentDate)
一个连接表把一个多对多关系解决为两个一对多关系 词汇表 训练英文 中文 拼音 entity-relationship diagram 实体关系图 shí tǐ guān xì tú cardinality 基数 jī shù one-to-many 一对多 yī duì duō link table 连接表 lián jiē biǎo 8.1
规范化
规范化(normalisation)组织表以减少冗余和不一致,按顺序经过各范式(normal forms)。
- 第一范式(1NF)——每个字段容纳一个单一(原子(atomic))值,没有重复组,并有一个主键。
- 第二范式(2NF)——处于 1NF,并且每个非键字段依赖于整个主键(只对一个复合键有意义)。
- 第三范式(3NF)——处于 2NF,并且每个非键字段只依赖于主键,而不依赖于另一个非键字段(没有传递依赖(transitive dependency))。
一个 3NF 设计把每个事实存储一次,所以插入/更新/删除异常消失。权衡是更多的表和更多的连接。以 3NF 为目标。
要产生一个 3NF 设计:找出实体及其属性;为每个选择一个主键;拆分重复/非原子字段(1NF);拆分依赖于一个复合键一部分的字段(2NF);拆分传递地依赖于键的字段(3NF);为关系添加外键。

规范化通过把重复的数据拆到它自己的表中来去除冗余 例题。 表
ORDER(OrderID, CustomerID, CustomerName, ProductID, Quantity)的复合主键是(OrderID, ProductID)。把它规范化到 3NF。逐个用主键去检验每个非键字段。Quantity同时依赖OrderID和ProductID,这没问题。但CustomerID只依赖OrderID- 也就是复合主键的一部分。这是部分依赖,所以该表不满足 2NF。把它拆成ORDER_LINE(OrderID, ProductID, Quantity)和ORDER(OrderID, CustomerID, CustomerName)。再检验 3NF:在新的ORDER表中,CustomerName依赖于CustomerID,而后者不是主键 - 这是传递依赖。再拆一次:ORDER(OrderID, CustomerID)和CUSTOMER(CustomerID, CustomerName)。要点出破坏每种范式的那种依赖(部分依赖破坏 2NF,传递依赖破坏 3NF);写"它有重复数据"只是在描述症状,得不到分。词汇表 训练英文 中文 拼音 normalisation 规范化 guī fàn huà normal forms 范式 fàn shì atomic 原子 yuán zi transitive dependency 传递依赖 chuán dì yī lài 8.2
数据库管理系统(DBMS)
大纲
Candidates should be able to: Notes and guidance Show understanding of the features provided by a Database Management System (DBMS) that address the issues of a file based approach Including: • data management, including maintaining a data dictionary • data modelling • logical schema • data integrity • data security, including backup procedures and the use of access rights to individuals / groups of users Show understanding of how software tools found within a DBMS are used in practice Including the use and purpose of: • developer interface • query processor 来源:剑桥国际大纲
一个 DBMS(数据库管理系统)集中管理数据库。修复基于文件的局限的特性:
- 数据字典(data dictionary)——对每个表、字段、类型和键的描述;程序查询它而不是硬编码结构。
- 冗余/一致性控制——每个事实存储一次。
- 并发访问(concurrent access)控制——锁和事务让许多用户一次工作。
- 备份(backup)和恢复;安全和每用户权限。
- 完整性规则——键、唯一和范围约束,集中强制执行。
- 事务(transactions)——一组全部成功或全部失败的操作。
- 视图(views)——向每个用户显示"他们的"那一片数据的虚拟表。
- 数据管理(data management)和数据建模(data modelling)——控制数据如何存储,并把它的结构定义为一个逻辑模式(logical schema,逻辑设计,独立于物理存储)。
- 数据完整性(data integrity)和数据安全(data security)——集中强制正确性并控制访问。
- 一个查询处理器(query processor)运行查询;一个开发者接口(developer interface)给出构建应用程序的工具和 API。
它的工具包括一个数据字典编辑器、一个查询构建器、一个表单构建器、一个报表生成器、用户管理,以及一个 SQL 编辑器。
探索Database service lab
Watch how a DBMS turns a query into safe shared data access.
探索Database service lab
Watch how a DBMS turns a query into safe shared data access.
词汇表 训练英文 中文 拼音 data dictionary 数据字典 shù jù zì diǎn concurrent access 并发访问 bìng fā fǎng wèn backup 备份 bèi fèn transactions 事务 shì wù views 视图 shì tú SQL 结构化查询语言 jié gòu huà chá xún yǔ yán query 查询 chá xún data management 数据管理 shù jù guǎn lǐ data modelling 数据建模 shù jù jiàn mó logical schema 逻辑模式 luó jí mó shì data integrity 数据完整性 shù jù wán zhěng xìng data security 数据安全 shù jù ān quán query processor 查询处理器 chá xún chǔ lǐ qì developer interface 开发者接口 kāi fā zhě jiē kǒu 8.3
数据定义语言(DDL)与数据操纵语言(DML)
大纲
Candidates should be able to: Notes and guidance Show understanding that the DBMS carries out all creation/modification of the database structure using its Data Definition Language (DDL) Show understanding that the DBMS carries out all queries and maintenance of data using its DML Show understanding that the industry standard for both DDL and DML is Structured Query Language (SQL) Understand a given SQL statement Understand given SQL (DDL) statements and be able to write simple SQL (DDL) statements using a sub-set of statements Create a database (CREATE DATABASE) Create a table definition (CREATE TABLE), including the creation of attributes with appropriate data types: • CHARACTER • VARCHAR(n) • BOOLEAN • INTEGER • REAL • DATE • TIME change a table definition (ALTER TABLE) add a primary key to a table (PRIMARY KEY (field)) add a foreign key to a table (FOREIGN KEY (field) REFERENCES Table (Field)) Write an SQL script to query or modify data (DML) which are stored in (at most two) database tables Queries including SELECT... FROM, WHERE, ORDER BY, GROUP BY, INNER JOIN, SUM, COUNT, AVG Data maintenance including INSERT INTO, DELETE FROM, UPDATE 来源:剑桥国际大纲
SQL(结构化查询语言,Structured Query Language)有两半:

DDL 构建数据库结构;DML 处理数据 - 数据定义语言(Data Definition Language,DDL)——创建或改变结构(表、键、约束)。
- 数据操纵语言(Data Manipulation Language,DML)——处理数据(插入、更新、删除、查询(query))。
DDL 基础
CREATE TABLE CUSTOMER ( CustomerID INTEGER PRIMARY KEY, Name VARCHAR(50) NOT NULL, Phone VARCHAR(20) );添加一个外键:
CREATE TABLE ORDER ( OrderID INTEGER PRIMARY KEY, CustomerID INTEGER, OrderDate DATE, FOREIGN KEY (CustomerID) REFERENCES CUSTOMER(CustomerID) );修改和删除:
ALTER TABLE CUSTOMER ADD Email VARCHAR(100); DROP TABLE CUSTOMER;常见类型:
INTEGER、REAL、VARCHAR(n)、CHAR(n)(也叫CHARACTER(n))、DATE、TIME、BOOLEAN、DECIMAL(p, s)。DML 基础
用
SELECT查询:
一个 SELECT 查询只返回匹配它条件的行 SELECT Name, Phone FROM CUSTOMER WHERE City = 'London' ORDER BY Name ASC;SELECT列出字段,FROM命名表,WHERE过滤行,ORDER BY排序。一个连接(join)用一个外键关系组合两个表:
SELECT C.Name, O.OrderDate FROM CUSTOMER C INNER JOIN ORDER O ON C.CustomerID = O.CustomerID WHERE O.OrderDate >= '2024-01-01';聚合函数(aggregate functions,
COUNT、SUM、AVG、MIN、MAX)常与GROUP BY一起用:SELECT CustomerID, COUNT(*) AS NumOrders FROM ORDER GROUP BY CustomerID;插入、更新、删除:
INSERT INTO CUSTOMER (CustomerID, Name, Phone) VALUES (101, 'Ada Lovelace', '020-1234-5678'); UPDATE CUSTOMER SET Phone = '020-9999-0000' WHERE CustomerID = 101; DELETE FROM CUSTOMER WHERE CustomerID = 101;总是在
UPDATE和DELETE上加一个WHERE子句,否则改变会命中每一行。考试 SQL 的提示
- 使用题目中确切的表名和字段名。
- 用单引号引起字符串(
'Smith');不要引起数字。 - 比较:
=、<、>、<=、>=、<>。 LIKE 'A%'匹配任何以 A 开头的(%= 任何字符串,_= 一个字符);IN (1,2,3);BETWEEN 10 AND 20。- 用
AND/OR/NOT组合条件,并以一个分号结束每条语句。
探索Stitch two tables with INNER JOIN
A join matches rows where the foreign key equals the primary key — here Orders.CustomerID = Customer.CustomerID — and combines each matching pair into one wider row.
探索SELECT … WHERE
Step through a query: WHERE keeps the rows that match, then SELECT picks the columns you asked for.
词汇表 训练英文 中文 拼音 Data Definition Language 数据定义语言 shù jù dìng yì yǔ yán Data Manipulation Language 数据操纵语言 shù jù cāo zòng yǔ yán join 连接 lián jiē aggregate functions 聚合函数 jù hé hán shù 8.3
考试技巧
- 精确地定义术语:实体、属性、主键、外键,以及关系类型(1:1、1:多、多:多)。
- 在每个范式给出一个理由:1NF(没有重复组)、2NF(没有部分依赖)、3NF(没有非键依赖)。
- 解释一个 DBMS 提供什么(数据独立性、安全、完整性、并发访问)。
- 区分 DDL(定义结构)和 DML(查询和改变数据)。
-
9
算法设计与问题求解
9.1
计算思维技能
大纲
Candidates should be able to: Notes and guidance Show an understanding of abstraction Need for and benefits of using abstraction Describe the purpose of abstraction Produce an abstract model of a system by only including essential details Describe and use decomposition Break down problems into sub-problems leading to the concept of a program module (procedure / function) 来源:剑桥国际大纲
计算思维(computational thinking)是分析一个问题并设计一个计算机能运行的解决方案的一套心智工具。两个关键的是抽象和分解。

计算思维把一个大问题分成更小、更容易的部分——像解一个拼图 抽象
抽象(abstraction)意味着保留一个问题的本质特征并忽略无关的细节,给出一个更简单的模型。
例子:
- 一张铁路网络图保留车站和线路,但去掉地理。
- 面向对象编程中的一个类只保留系统需要的属性和方法。
- 一个函数把一段工作隐藏在一个名称后面。
任何真实问题的完整模型都太大而无法推理,所以抽象是必不可少的。

抽象保留本质(车站和线路)并去掉无关的细节(地理) 分解
分解(decomposition)意味着把一个大问题分成更小的子问题,每个更容易解决并一次处理一个。
- 找出任务的主要部分。
- 把每个分成更小的子任务。
- 继续直到每个都小到能直接设计。
- 解决小任务并把它们组合起来。
对于库存控制:"管理库存" → "记录销售"、"记录到货"、"生成报表" → ("记录销售")"查找产品"、"减少库存计数"、"保存交易"。分解使大问题可管理、让一个团队分担工作,并给出模块化的代码——每个模块成为一个过程(procedure)或函数。

把一个程序分解成模块和子模块 探索Solving a problem the computational way
Step through the four cornerstones in the order you'd use them — break the problem down, spot what repeats, strip it to essentials, then write the steps.
词汇表 训练英文 中文 拼音 computational thinking 计算思维 jì suàn sī wéi abstraction 抽象 chōu xiàng decomposition 分解 fēn jiě procedure 过程 guò chéng 9.2
算法
大纲
Candidates should be able to: Notes and guidance Show understanding that an algorithm is a solution to a problem expressed as a sequence of defined steps Use suitable identifier names for the representation of data used by a problem and represent these using an identifier table Write pseudocode that contains input, process and output Write pseudocode using the three basic constructs of sequence, selection and iteration (repetition) Document a simple algorithm using a structured English description, a flowchart or pseudocode Write pseudocode from: • a structured English description • a flowchart Draw a flowchart from: • a structured English description • pseudocode Describe and use the process of stepwise refinement to express an algorithm to a level of detail from which the task may be programmed Use logic statements to define parts of an algorithm solution 来源:剑桥国际大纲
冒泡排序,一趟接一趟 一个算法(algorithm)是表述为一系列已定义步骤的解决方案。每一步是无歧义的(unambiguous,一个意思)、确定性的(deterministic,相同输入 → 相同输出)、有限的(finite,步骤会结束),以及有效的(effective,每一步都能做)。一个算法说明做什么,与用来实现它的编程语言无关。
探索Selection: follow the IF / ELSE branches
Drag the score and watch which branch runs. Selection tests each condition in turn and takes the FIRST one that is true — that is how IF … ELSE IF … ELSE works.
词汇表 训练英文 中文 拼音 algorithm 算法 suàn fǎ unambiguous 无歧义 wú qí yì deterministic 确定性 què dìng xìng 9.2
标识符表
当你开始一个算法时,在一个标识符表(identifier table)中列出每一份数据——它的变量(variable)名、数据类型(data type)和描述:
变量名 数据类型 描述 CategorySTRING产品类别 SaleDateDATE商品售出的时间 ItemCostREAL商品的成本 InStockBOOLEAN若有库存则为 TRUE使用描述性的名称(
ItemCost,而不是x);常见类型是INTEGER、REAL、STRING、CHAR、BOOLEAN、DATE,加上数组。这个表迫使你在写代码之前命名每一份数据。
一个标识符表在你写代码之前命名每一份数据 词汇表 训练英文 中文 拼音 identifier table 标识符表 biāo shí fú biǎo variable 变量 biàn liàng data type 数据类型 shù jù lèi xíng Boolean 布尔 bù ěr 9.2
伪代码 —— 三种基本结构
伪代码(pseudocode)是一种描述算法的结构化、语言中立的方式。

任何算法的三个构件:顺序、选择和迭代 1. 顺序
步骤一个接一个地运行(顺序(sequence)):
INPUT Name INPUT Age OUTPUT "Hello", Name2. 选择
基于一个条件选择运行哪些步骤(选择(selection)):
IF Age >= 18 THEN OUTPUT "Adult" ELSE OUTPUT "Minor" ENDIF对于更多的选项,用
CASE OF ... ENDCASE。3. 迭代
重复一个块(迭代(iteration),一个循环(loop)):
FOR i ← 1 TO 10 OUTPUT i NEXT i一个 WHILE 循环在每一趟之前测试条件(可能运行零次);一个 REPEAT...UNTIL 循环在每一趟之后测试(总是至少运行一次)。
常见操作
- 赋值(assignment):
x ← 5(一个箭头;=用于比较)。 - 输入/输出:
INPUT variable、OUTPUT expression。 - 比较
=、<>、<、>、<=、>=;逻辑AND、OR、NOT。 - 算术
+ - * /,加上DIV(整数除法)和MOD(余数)。 - 字符串:
LENGTH、LEFT、RIGHT、MID,以及&用于拼接(concatenation,连接)。
输入 → 处理 → 输出
每个程序都遵循这个形状:
INPUT Length INPUT Width Area ← Length * Width OUTPUT "Area = ", Area先列出输入和输出使算法更清晰。

每个程序都遵循输入、处理、输出的形状 探索IF … ELSE selection
Change the value and watch which branch runs — how a program makes a decision.
词汇表 训练英文 中文 拼音 pseudocode 伪代码 wěi dài mǎ sequence 顺序 shùn xù selection 选择 xuǎn zé iteration 迭代 dié dài loop 循环 xún huán assignment 赋值 fù zhí concatenation 拼接 pīn jiē 9.2
三种表示法
同一个算法可以用三种方式书写。
- 结构化英语(structured English)——带缩进和固定关键字的自然语言;适合一个高层描述。
- 流程图(flowchart)——一个带标准形状的图:
形状 意义 圆角矩形 开始 / 停止 平行四边形 输入 / 输出 矩形 处理 菱形 判断 箭头 控制流 - 伪代码——上面的关键字记法;最接近代码。
你应当能够在任何一对之间转换:每个
IF是一个判断菱形,每个循环是一个回箭头,一个顺序是堆叠的矩形。
一个用标准形状求一列数字平均值的流程图 词汇表 训练英文 中文 拼音 structured English 结构化英语 jié gòu huà yīng yǔ flowchart 流程图 liú chéng tú 9.2
逐步求精
逐步求精(stepwise refinement)从一个高层大纲开始,展开每一步直到它小到能编码。对于 $n$ 个数字的平均值:
第 1 层:
Read in the numbers Compute the average Output the average第 2 层:
INPUT n total ← 0 FOR i ← 1 TO n INPUT value total ← total + value NEXT i average ← total / n OUTPUT average每次求精都保留之前的结构并添加细节。

逐步求精:把每个高层步骤展开成详细的伪代码 探索Stepwise refinement: outline to code
Step down the levels. You start with the whole task in one line and keep expanding each step into smaller ones — until every step is simple enough to code directly.
词汇表 训练英文 中文 拼音 stepwise refinement 逐步求精 zhú bù qiú jīng 9.2
逻辑语句
一个逻辑语句(logic statement)是一个控制分支的布尔(Boolean)条件,由比较(
x > 10)、连接词(AND、OR、NOT)和括号构成。把它用作IF、WHILE或REPEAT...UNTIL的条件:WHILE attempts < 3 AND NOT loggedIn DO INPUT password IF password = correctPassword THEN loggedIn ← TRUE ELSE attempts ← attempts + 1 ENDIF ENDWHILE优先级(precedence,从高到低):
NOT,然后AND,然后OR。不确定时用括号。常见错误:a = 1 OR 2是错的——写a = 1 OR a = 2。NOT a > 5意味着NOT (a > 5),即a <= 5。NOT (A AND B)与(NOT A) OR (NOT B)相同(德摩根定律(De Morgan's law))——对简化条件很方便。

优先级:NOT 先绑定到 loggedIn,然后 AND 组合两边 例题。 写出标识符表和伪代码:读入 10 个数并输出最大的那个。标识符表为每个变量写明数据类型和用途:
Count : INTEGER(循环计数器)、Num : REAL(刚读入的数)、Max : REAL(到目前为止的最大值)。Max ← -999999 FOR Count ← 1 TO 10 INPUT Num IF Num > Max THEN Max ← Num ENDIF NEXT Count OUTPUT Max承载分数的设计决定是
Max的初始化:它必须从一个比任何可能的输入都低的值开始 - 或者更稳妥地,把它设成第一个读入的数。若把它初始化为0,那么对一串负数,该算法会错误地返回 0;这个 bug 只有当你的测试数据里包含负数时,追踪才会把它暴露出来。词汇表 训练英文 中文 拼音 logic statement 逻辑语句 luó jí yǔ jù precedence 优先级 yōu xiān jí De Morgan's law 德摩根定律 dé mó gēn dìng lǜ 9.2
考试技巧
- 把一个算法定义为一个无歧义、有限、确定性的步骤序列,与语言无关。
- 正确地使用三种结构——顺序、选择、迭代——并保留一个带数据类型的标识符表。
- 通过分解和抽象把一个问题分解,然后逐步求精。
- 写实际能运行的伪代码:声明变量并遵循考试的伪代码风格。
-
10
数据类型与数据结构
10.1
数据类型与记录
大纲
Candidates should be able to: Notes and guidance Select and use appropriate data types for a problem solution including integer, real, char, string, Boolean, date (pseudocode will use the following data types: INTEGER, REAL, CHAR, STRING, BOOLEAN, DATE, ARRAY, FILE) Show understanding of the purpose of a record structure to hold a set of data of different data types under one identifier Write pseudocode to define a record structure Write pseudocode to read data from a record structure and save data to a record structure 来源:剑桥国际大纲
每个变量都需要一个数据类型(data type)——它容纳的值的种类和允许的操作:
INTEGER— 一个整数(42、-7)。用于计数、索引、ID。REAL— 一个带小数部分的数(3.14)。用于金额、测量。STRING— 引号中的字符("Hello")。用于文本。CHAR— 一个单一字符('A')。BOOLEAN—TRUE或FALSE。用于标志。DATE— 一个日历日期。
选择适合的最小而精确的类型:
INTEGER用于整数计数,BOOLEAN用于标志(而不是字符串"yes"/"no")。词汇表 训练英文 中文 拼音 data type 数据类型 shù jù lèi xíng 10.1
记录
一个记录(record,一个记录结构(record structure))在一个名称下容纳几个不同类型的字段——当几个值描述同一件事物时很有用。
TYPE TStockItem DECLARE ItemID : INTEGER DECLARE Category : STRING DECLARE ItemCost : REAL DECLARE InStock : BOOLEAN ENDTYPE这定义了类型
TStockItem;声明它的变量:DECLARE Item1 : TStockItem DECLARE Items : ARRAY[1:100] OF TStockItem用点记法访问每个字段(field):
Item1.Category ← "Fruit" OUTPUT Item1.Category, " costs ", Item1.ItemCost当值总是属于一起时(一个客户、一个库存商品)用一个记录;对无关的值用分开的变量。

一个记录在一个名称下容纳几个不同类型的字段 探索A record groups fields under one name
A record bundles related fields together. Each field is a named label you reach with dot notation — Item1.Category — not by a numeric index.
词汇表 训练英文 中文 拼音 record 记录 jì lù field 字段 zì duàn record structure 记录结构 jì lù jié gòu 10.2
数组
大纲
Candidates should be able to: Notes and guidance Use the technical terms associated with arrays Including index, upper bound and lower bound Select a suitable data structure (1D or 2D array) to use for a given task Write pseudocode for 1D and 2D arrays Write pseudocode to process array data Sort using a bubble sort Search using a linear search 来源:剑桥国际大纲
一个数组(array)是同一类型的项的一个有序集合,在一个名称下,用一个索引(index)访问。
- 元素(element)——数组中的一项。
- 边界(bounds)——最低和最高的有效索引。
- 维度(dimension)——1-D(一个列表)、2-D(一个表格),等等。
1-D arrays
DECLARE Names : ARRAY[1:5] OF STRING Names[3] ← "Cara" OUTPUT Names[3]用一个
FOR循环处理每个元素:FOR i ← 1 TO 5 OUTPUT Names[i] NEXT i
一个 1-D 数组(一个列表),带索引和边界 2-D arrays (2D array)
DECLARE Grid : ARRAY[1:3, 1:4] OF INTEGER Grid[2, 3] ← 99第一个索引是行,第二个是列。用嵌套循环访问每个单元。对一个单一序列用 1-D,对两个自然维度(一个网格,行 × 列)用 2-D。

一个 2-D 数组(一个表格),带行索引和列索引 Common operations
一个线性查找(linear search)检查每个元素直到找到:
FOR i ← 1 TO n IF A[i] = Target THEN OUTPUT "Found at ", i ENDIF NEXT i要求一个和、计数、最大值或最小值,设一个运行中的变量,然后扫过:
Max ← A[1] FOR i ← 2 TO n IF A[i] > Max THEN Max ← A[i] NEXT i一个冒泡排序(bubble sort)把一个数组排序:扫过它,比较每个相邻对,并交换任何顺序错误的;重复各趟直到某一趟不再有交换。

冒泡排序的一趟:相邻对被比较并交换,把最大值冒泡到末端 探索A 2-D array
Pick a row and column to read one element — how a grid of data is stored and indexed.
词汇表 训练英文 中文 拼音 index 索引 suǒ yǐn element 元素 yuán sù bounds 边界 biān jiè dimension 维度 wéi dù linear search 线性查找 xiàn xìng chá zhǎo bubble sort 冒泡排序 mào pào pái xù 10.3
文件
大纲
Candidates should be able to: Notes and guidance Show understanding of why files are needed Write pseudocode to handle text files that consist of one or more lines 来源:剑桥国际大纲
一个文件(file)是存储在辅助存储器(secondary storage)上的数据,在程序运行之间保留。RAM 中的变量在程序结束时消失,所以要永久保存数据(高分、记录、设置),程序写入一个文件。文件也让程序共享数据并从一个保存的状态重启。

RAM 中的变量在程序结束时消失;磁盘上的一个文件在运行之间持久保留 一个文本文件(text file)容纳一行或多行可读字符;程序逐行读写文本文件。使用前打开一个文件,用后关闭它:
OPENFILE "data.txt" FOR READ // or FOR WRITE, FOR APPEND WHILE NOT EOF("data.txt") DO READFILE "data.txt", LineString OUTPUT LineString ENDWHILE CLOSEFILE "data.txt"EOF在读取之前测试文件结束(end of file)。要写入:OPENFILE "log.txt" FOR WRITE FOR i ← 1 TO 100 WRITEFILE "log.txt", "Event " & i NEXT i CLOSEFILE "log.txt"总是关闭每个文件——否则缓冲的写入可能丢失,而且其他程序可能被锁在外面。
探索Handling a file: open → use → close
Step through the lifecycle every file follows. The two easy-to-forget parts are testing EOF while reading in a loop, and always closing at the end.
词汇表 训练英文 中文 拼音 file 文件 wén jiàn secondary storage 辅助存储器 fǔ zhù cún chǔ qì text file 文本文件 wén běn wén jiàn end of file 文件结束 wén jiàn jié shù 10.4
抽象数据类型(ADT)导论
大纲
Candidates should be able to: Notes and guidance Show understanding that an ADT is a collection of data and a set of operations on those data Show understanding that a stack, queue and linked list are examples of ADTs Describe the key features of a stack, queue and linked list and justify their use for a given situation Use a stack, queue and linked list to store data Candidates will not be required to write pseudocode for these structures, but they should be able to add, edit and delete data from these structures Describe how a queue, stack and linked list can be implemented using arrays 来源:剑桥国际大纲
链表:通过重新连接指针来插入 栈对队列:LIFO 和 FIFO 一个抽象数据类型(Abstract Data Type,ADT)是一组数据加上对它的操作,由它做什么定义,而不是它如何存储。用户只通过操作工作;实现被隐藏,所以它可以改变而不影响使用该 ADT 的代码。要知道三个:栈、队列、链表。
Stack
一个栈(stack)以 LIFO(后进先出,Last In, First Out)顺序工作。操作:入栈(push,加到顶部)、出栈(pop,从顶部移除)、peek(查看顶部),以及对空/满的测试。用途:撤销历史、函数调用返回地址、表达式解析、回溯。

push 和 pop 改变顶指针;底指针保持不动 
一摞书就是一个看得见的栈。你只能从顶部加书或取书,所以最后放上去的是第一个取下来的——这正是 LIFO(后进先出) Queue
一个队列(queue)以 FIFO(先进先出,First In, First Out)顺序工作。操作:入队(enqueue,加到后端)、出队(dequeue,从前端移除),以及对空/满的测试。用途:打印假脱机、调度、广度优先搜索、缓冲。

enqueue 在后端添加;dequeue 从前端移除 
一队人就是一个看得见的队列。你从后面加入,从前面被服务,所以等得最久的人最先被服务——这正是 FIFO(先进先出) Linked list
一个链表(linked list)把数据存储为一系列节点(nodes)。每个节点容纳一个值和一个指向下一个节点的指针(pointer);一个头指针标记起点,而最后一个节点的指针是一个哨兵(例如
NULL)。操作:插入、删除、搜索,以及遍历(traverse,按顺序访问每个节点)。它相对数组的优点是廉价的插入/删除(只需调整指针);它的缺点是慢的随机访问(你必须从头跟随指针)。
一个链表:每个节点指向下一个 探索A linked list: nodes joined by pointers
Each node stores a value and a pointer to the next node. Inserting or deleting just re-links pointers — no items shift along, unlike an array.
探索Stacks and queues
Push and pop. A stack is last-in-first-out; a queue is first-in-first-out — two key ADTs.
词汇表 训练英文 中文 拼音 abstract data type 抽象数据类型 chōu xiàng shù jù lèi xíng stack 栈 zhàn LIFO 后进先出 hòu jìn xiān chū push 入栈 rù zhàn pop 出栈 chū zhàn queue 队列 duì liè FIFO 先进先出 xiān jìn xiān chū enqueue 入队 rù duì dequeue 出队 chū duì linked list 链表 liàn biǎo node 节点 jié diǎn pointer 指针 zhǐ zhēn traverse 遍历 biàn lì 10.4
用数组实现抽象数据类型
Stack using an array
把项保存在
Stack[1:MaxSize]中,带一个整数Top(空时为 0)。Push(x):若Top = MaxSize则栈满(溢出(overflow));否则Top ← Top + 1;Stack[Top] ← x。Pop():若Top = 0则栈空(下溢(underflow));否则返回Stack[Top]并Top ← Top - 1。
Queue using a circular array
一个简单队列让
Front和Rear走出末端,浪费起始部分。修正是一个循环数组(circular array)——当一个指针到达MaxSize时它绕回到 1:Enqueue(x):检查满;否则Rear ← (Rear MOD MaxSize) + 1;Queue[Rear] ← x。Dequeue():检查空;否则返回Queue[Front]并Front ← (Front MOD MaxSize) + 1。
跟踪一个单独的计数以区分空和满。
例如,当
MaxSize = 6时:若Rear = 5,则(5 MOD 6) + 1 = 6,所以下一项放入单元 6;若Rear = 6,则(6 MOD 6) + 1 = 1,所以指针绕回到单元 1。
一个循环队列把指针绕回到数组的起点 Linked list using an array
用一个记录的数组,每个带一个
Next索引:TYPE TNode DECLARE Value : INTEGER DECLARE Next : INTEGER // index of the next node, or -1 for end ENDTYPE DECLARE Nodes : ARRAY[1:MaxSize] OF TNode DECLARE Head : INTEGER // index of first node, -1 if empty DECLARE FreeListHead : INTEGER // first available free node一个空闲列表(free list)把未使用的槽链在一起,正如数据列表把它用过的槽链在一起。要插入:从
FreeListHead取一个槽,设新节点的值和Next,并更新前一个节点的Next(或Head)。要删除:解开该节点的链接并把它的槽还给空闲列表。这给出一个链式结构的灵活性和一个数组的静态分配。
一个存储在数组中的链表:一个数据数组和一个指针数组 例题。 一个循环队列存放在大小为 5 的数组中(下标 0 到 4),此时
Front = 3、Rear = 3,存有一个元素。先加入两个元素,再移除两个。指针各在哪里?为什么要用循环队列?每次移动都用(指针 + 1) MOD 大小,所以指针会回绕。加入两次会移动Rear:$3 \rightarrow 4$,然后 $4 \rightarrow 0$(因为 $(4+1) \bmod 5 = 0$),所以Rear = 0,存有三个元素。移除两次同样地移动Front:$3 \rightarrow 4$,然后 $4 \rightarrow 0$,剩下Front = 0和一个元素。回绕正是它的意义所在:在线性数组队列中,指针一路走到末端,前面腾出的空间即使队列已空也被浪费掉。记住队列在 Front 端移除、在 Rear 端加入 - 而栈的两端共用一个指针。探索Implementing ADTs with arrays
FIFO
A queue is first-in-first-out — enqueue at the back, dequeue from the front.
词汇表 训练英文 中文 拼音 array 数组 shù zǔ overflow 溢出 yì chū underflow 下溢 xià yì circular array 循环数组 xún huán shù zǔ free list 空闲列表 kòng xián liè biǎo 10.4
考试技巧
- 选择正确的数据结构并为它辩护(一个记录用于混合字段,一个 2-D 数组用于网格)。
- 知道如何用一个数组和指针实现一个栈、队列和链表(top;front/rear;next)。
- 区分一个 ADT(它的行为)和它的实现(数组加指针)。
-
11
程序设计
11.1
编程基础
大纲
Candidates should be able to: Notes and guidance Implement and write pseudocode from a given design presented as either a program flowchart or structured English Write pseudocode statements for: • the declaration and initialisation of constants • the declaration of variables • the assignment of values to variables • expressions involving any of the arithmetic or logical operators input from the keyboard and output to the console Use built-in functions and library routines Any functions not given in the pseudocode guide will be provided String manipulation functions will always be given 来源:剑桥国际大纲

编程把一个设计变成写成代码的指令 
一个程序员写代码并随手测试它 From design to code
你应当能够把一个设计——一张流程图(flowchart,程序流程图)或结构化英语(structured English)——变成伪代码(pseudocode),然后变成一门真实的语言:
- 找出变量(variables)及其数据类型(data types)。
- 把输入/输出框变成
INPUT/OUTPUT。 - 把判断菱形变成
IF...ELSE...ENDIF(或CASE)。 - 把循环箭头变成
WHILE、REPEAT...UNTIL或FOR。 - 把处理框变成赋值或计算。
- 通过追踪一个小输入来检查。

每个流程图符号变成一个伪代码关键字 Constants and variables
一个常量(constant)容纳一个从不改变的值;一个变量容纳一个可能改变的值。用一个类型声明它们:

一个变量的值可以改变;一个常量保持固定 CONSTANT Pi ← 3.14159 DECLARE Radius : REAL DECLARE Area : REAL Radius ← 5 Area ← Pi * Radius * Radius对反复出现的固定值用常量(
Pi、MaxScore);它们使代码更清晰,并且易于在一处改变。Assignment and expressions
用
←表示赋值(assignment):Total ← Total + 1 Average ← Sum / Count表达式用运算符(operators):
- 算术
+ - * /,加上DIV(整数除法)和MOD(余数):7 DIV 2 = 3;7 MOD 2 = 1。 - 比较
=、<>、<、>、<=、>=。 - 逻辑
AND、OR、NOT。
优先级(precedence,从高到低):
NOT→* / DIV MOD→+ -→ 比较 →AND→OR。不确定时用括号。Input and output
OUTPUT "Enter your name:" INPUT Name OUTPUT "Hello, ", NameBuilt-in functions and library routines
许多任务有现成的库例程(library routines),所以你不必自己写它们:
- 字符串:
LENGTH(s)、LEFT(s, n)、RIGHT(s, n)、MID(s, start, len)、UCASE(s)、LCASE(s)。 - 数值:
INT(x)、ROUND(x)、ABS(x)、MOD(a, b)、RANDOM()。 - 转换:
STR(x)(数 → 字符串)、VAL(s)(字符串 → 数)。
使用题目参考列表里确切的名称。

常见的字符串例程作用于 s = "COMPUTER"(位置 1–8)探索A variable is a labelled box
Each assignment stores one value in a named box; reassigning the same name overwrites it. Step through the program and watch each box take its current value.
词汇表 训练英文 中文 拼音 flowchart 流程图 liú chéng tú structured English 结构化英语 jié gòu huà yīng yǔ pseudocode 伪代码 wěi dài mǎ variables 变量 biàn liàng data types 数据类型 shù jù lèi xíng constant 常量 cháng liàng assignment 赋值 fù zhí operators 运算符 yùn suàn fú precedence 优先级 yōu xiān jí library routines 库例程 kù lì chéng 11.2
程序结构
大纲
Candidates should be able to: Notes and guidance Use pseudocode to write: • an ‘IF’ statement including the ‘ELSE’ clause and nested IF statements • a ‘CASE’ structure • a ‘count-controlled’ loop: • a ‘post-condition’ loop • a ‘pre-condition’ loop Justify why one loop structure may be better suited to solve a problem than the others 来源:剑桥国际大纲
选择(selection)选择哪些步骤运行。
IF age >= 18 THEN OUTPUT "Adult" ELSE OUTPUT "Minor" ENDIF
一个 IF...ELSE 测试条件一次,然后恰好运行一个分支 对于多于两种情况,你可以用一个嵌套(nested)IF,但深度嵌套难以阅读——当把一个值对照几个选项测试时,一个
CASE更清爽:CASE OF Grade "A": OUTPUT "Excellent" "B": OUTPUT "Good" OTHERWISE: OUTPUT "Try again" ENDCASECambridge 的
CASE允许单个值、值列表(1, 2, 3:)和范围(1 TO 5:)。
一个 CASE 语句运行匹配该值的分支 探索Selection (IF / ELSE)
Change the input and see which branch runs — the essence of selection.
词汇表 训练英文 中文 拼音 selection 选择 xuǎn zé nested 嵌套 qiàn tào 11.2
迭代
迭代(iteration)重复一个块。三个循环在主体运行多少次上不同。
Count-controlled (FOR) loop
一个计数循环(count-controlled loop)——当你知道要重复多少次时用它:
FOR i ← 1 TO 10 OUTPUT i NEXT i一个
STEP可以改变计数(例如FOR i ← 10 TO 1 STEP -1)。最适合固定次数的重复或处理一个数组(array)的每个元素。Pre-condition (WHILE) loop
一个前测循环(pre-condition loop)在每一趟之前测试条件,所以它可能运行零次:
WHILE total < 100 DO INPUT n total ← total + n ENDWHILEPost-condition (REPEAT...UNTIL) loop
一个后测循环(post-condition loop)在每一趟之后测试条件,所以它总是至少运行一次:
REPEAT INPUT password UNTIL password = correctPasswordChoosing the right loop

三个循环在条件被测试的位置上不同——在主体之前(WHILE)、之后(REPEAT),或做设定的次数(FOR) - 事先知道计数 → FOR。
- 可能需要零趟 → WHILE。
- 总是至少一趟 → REPEAT...UNTIL。
用计数是否已知、以及主体是否必须至少运行一次来为你的选择辩护。一个典型的题目给出一个场景("要求密码直到正确,但总是至少要求一次")并问哪个循环合适。
探索Trace a loop, pass by pass
A trace table records each variable after every pass of the loop. Watch the counter i climb while the running total builds up — exactly what an exam trace question asks you to fill in.
探索Tracing a loop
Step through the loop and watch the variables change each pass — exactly what a trace table records.
词汇表 训练英文 中文 拼音 iteration 迭代 dié dài count-controlled loop 计数循环 jì shù xún huán array 数组 shù zǔ pre-condition loop 前测循环 qián cè xún huán post-condition loop 后测循环 hòu cè xún huán 11.3
结构化编程
大纲
Candidates should be able to: Notes and guidance Define and use a procedure Explain where in the construction of an algorithm it would be appropriate to use a procedure Use parameters A procedure may have none, one or more parameters A parameter can be passed by reference or by value Define and use a function Explain where in the construction of an algorithm it is appropriate to use a function A function is used in an expression, e.g. the return value replaces the call Use the terminology associated with procedures and functions including procedure/function header, procedure/function interface, parameter, argument, return value Write efficient pseudocode 来源:剑桥国际大纲
结构化编程(structured programming)从小的、有名字的子程序(subroutines)构建一个程序,每个有一件工作。
Procedure
一个过程(procedure)是一个有名字的块,它做一个动作;它可以取参数(parameters),但不返回一个值。
PROCEDURE Greet(name : STRING) OUTPUT "Hello, ", name ENDPROCEDURE CALL Greet("Ada")Function
一个函数(function)像一个过程,但它返回一个值,该值成为一个表达式的一部分。
FUNCTION Square(x : INTEGER) RETURNS INTEGER RETURN x * x ENDFUNCTION result ← Square(5) + 1 // result = 26当子程序执行一个动作时用一个过程;当它为调用者计算一个值时用一个函数。

一个过程做一个动作并不返回任何东西;一个函数返回一个你在表达式中使用的值 Parameters
一个参数(parameter)是一个子程序声明用来接收输入的变量;调用者提供的值是实参(arguments)。传递它们的两种方式:
- 传值(pass by value)——例程得到一个副本;它内部的改变不影响调用者。用于它只读取的输入。
- 传引用(pass by reference)——例程得到一个到调用者变量的引用;改变确实影响调用者。当它必须更新一个参数时用。

传值把值复制到一个新框;传引用让例程改变调用者自己的变量 PROCEDURE Swap(BYREF a : INTEGER, BYREF b : INTEGER) DECLARE temp : INTEGER temp ← a a ← b b ← temp ENDPROCEDURELocal vs global variables
一个局部变量(local variable)在一个子程序内部声明,只在它运行时存在。一个全局变量(global variable)在外部声明,处处可见。优先用局部变量和参数——大量使用全局变量使代码难以理解和测试。(一个名称可见的区域是它的作用域(scope)。)

一个全局变量处处可见;一个局部变量只在它自己的过程内部存在 When to use a subroutine
在以下情况用一个子程序:
- 同样的逻辑出现在不止一处——写它一次,调用它多次。
- 一个块有一个清晰、有名字的目的——名称记录它做什么。
- 程序复杂——把它分成部分(分解(decomposition))。
- 你想孤立地测试一个片段。
不要把它们做得那么小,以至于调用的代价超过里面的工作。
Terminology
- definition——
PROCEDURE ... ENDPROCEDURE(或函数)块。 - call——它被调用的地方。argument——一个被传入的值。parameter——接收它的变量。
- return value——一个函数传回什么。
- procedure/function header——给出名称和参数的第一行(
PROCEDURE Name(params)或FUNCTION Name(params) RETURNS type)。 - procedure/function interface / signature(签名)——名称 + 参数 + 返回类型:一个调用者要用它必须知道什么。
例题。 每个任务适合哪种循环?(a) 打印 12 的乘法表;(b) 不断读入数字,直到用户输入 0;(c) 反复要求输入密码,直到正确为止。判断的依据是循环体运行多少次,以及在何时检验条件。(a) 次数事先已知(12 次),所以用 FOR 循环。(b) 次数未知,而且第一个输入就可能已经是 0 - 所以条件必须在循环体之前检验:用 WHILE 循环,它可以运行零次或多次。(c) 次数未知,但你必须至少问一次之后才有东西可检验 - 所以条件在循环体之后检验:用 REPEAT...UNTIL,它运行一次或多次。决定性的问题是:循环体是否必须至少运行一次 - WHILE 可能运行零次,REPEAT 总是运行一次。
探索The call stack: push on call, pop on return
Calling a subroutine pushes a new frame on top; returning pops it and hands a value back to the caller. The call that is running is always the frame on top.
词汇表 训练英文 中文 拼音 structured programming 结构化编程 jié gòu huà biān chéng subroutines 子程序 zi chéng xù procedure 过程 guò chéng parameters 参数 cān shù function 函数 hán shù arguments 实参 shí cān pass by value 传值 chuán zhí pass by reference 传引用 chuán yǐn yòng local variable 局部变量 jú bù biàn liàng global variable 全局变量 quán jú biàn liàng scope 作用域 zuò yòng yù decomposition 分解 fēn jiě signature 签名 qiān míng 11.3
编写高效的伪代码
- 把不变量移出循环——若一个值(一个不变量(invariant))不随循环计数器改变,在循环之前计算它一次。
- 当答案被找到时尽早退出一个循环(一旦目标出现就停止一个线性查找(linear search))。
- 避免冗余的工作——存储一个结果并重用它,而不是重新计算。
- 选择正确的数据结构——当各项属于一起时,一个数组胜过许多分开的变量。
- 当把一个值对照许多选项测试时,用 CASE 替换深度嵌套的 IF。
- 注释意图,而不是机制(
// validate the postcode,而不是// loop 6 times)。 - 使用有意义的名称(
numberOfPupils,而不是n)并在使用前初始化变量。

把不变的工作移出循环,所以它运行一次 词汇表 训练英文 中文 拼音 invariant 不变量 bù biàn liàng linear search 线性查找 xiàn xìng chá zhǎo 11.3
考试技巧
- 区分一个过程(无返回值)和一个函数(返回一个值);知道传值对传引用。
- 选择正确的循环:当重复次数已知时用计数循环(FOR),否则用条件控制循环(WHILE/REPEAT)。
- 区分局部对全局变量和作用域;在可重用模块中优先用局部变量。
-
12
软件开发
12.1
程序开发生命周期
大纲
Candidates should be able to: Notes and guidance Show understanding of the purpose of a development life cycle Show understanding of the need for different development life cycles depending on the program being developed Including: waterfall, iterative, rapid application development (RAD) Describe the principles, benefits and drawbacks of each type of life cycle Show understanding of the analysis, design, coding, testing and maintenance stages in the program development life cycle 来源:剑桥国际大纲
一个开发生命周期(development life cycle)是从想法到完成、被维护的软件的一套阶段。它的存在是为了规划、管理和控制一个项目——按时、以好的质量构建正确的产品。

软件由遵循一个开发生命周期以保持协调的团队构建 一张流程图在生命周期的设计阶段规划一个程序的逻辑 Why a life cycle is needed
它管理复杂度(把一个大程序分成阶段)、协调团队、用里程碑跟踪进度、内建测试、为以后记录设计决策,并管理风险。
Why there are different ones
没有单一的生命周期适合每个项目,所以存在几种开发生命周期(development life cycles)。选择取决于规模和复杂度、开始时需求(requirements)有多清晰、预期有多少变化、风险级别、团队,以及截止日期。
Common models
- 瀑布模型(Waterfall)——一个线性序列(分析 → 设计 → 编码 → 测试 → 维护),每个阶段在下一个之前完成。清晰且文档完善;适合稳定的需求,但不擅长应对项目中途的变化,而且客户直到最后才看到任何能工作的东西。
- 迭代模型(iterative model)——重复的趟数,每趟产出一个被评审和精炼的部分版本。更早发现问题;适合需求随时间被发现的情况,但更难估算。
- 快速应用开发(Rapid Application Development,RAD)——大量使用一个原型(prototype)和用户反馈。非常快的首次交付;适合变化的需求,但依赖用户的可用性并适合较小的系统。
- 敏捷(Agile)——短迭代("冲刺")、持续的协作和测试。灵活且适应性强,但需要一个投入的客户和一个熟练的团队。

瀑布模型:每个阶段在下一个开始之前完成 
迭代模型:重复的趟数精炼程序 
快速应用开发:团队并行地在各部分上工作 The standard stages
- analysis(分析)——找出程序必须做什么;收集并记录需求。
- design(设计)——决定怎么做:数据结构、算法、模块、界面、文件布局。
- coding(编码,实现(implementation))——按照设计写源代码。
- testing(测试)——对照测试数据运行并修复漏洞。
- maintenance(维护)——发布后,保持它工作和有用。
探索The program development life cycle
Step through the stages every project passes through. Getting the requirements right in analysis matters most — a mistake caught in testing is far costlier to fix than one caught early.
探索Software process lab
Classify development examples by the stage or tool they belong to.
词汇表 训练英文 中文 拼音 development life cycle 开发生命周期 kāi fā shēng mìng zhōu qī requirements 需求 xū qiú waterfall 瀑布模型 pù bù mó xíng iterative model 迭代模型 dié dài mó xíng rapid application development 快速应用开发 kuài sù yìng yòng kāi fā prototype 原型 yuán xíng agile 敏捷 mǐn jié implementation 实现 shí xiàn maintenance 维护 wéi hù 12.2
程序设计
大纲
Candidates should be able to: Notes and guidance Use a structure chart to decompose a problem into sub-tasks and express the parameters passed between the various modules/procedures/functions which are part of the algorithm design Describe the purpose of a structure chart Construct a structure chart for a given problem Derive equivalent pseudocode from a structure chart Show understanding of the purpose of state-transition diagrams to document an algorithm 来源:剑桥国际大纲
Structure chart
一个结构图(structure chart)显示一个程序到模块(子程序(subroutines))的层次分解(hierarchical decomposition)以及它们之间传递的参数(parameters)。每个模块是一个矩形;线把调用者(上方)连到被调用者(下方);小箭头显示数据往下走、结果往上回。这个设计随后可被变成等价的伪代码(pseudocode)。
CalculatePay / | \ GetEmployee CalculateBonus CalculateTax Returns: Takes: sales Takes: gross employeeID Returns: bonus Returns: tax它是一个设计阶段的工具,你可以从它读出过程签名。

一张结构图:模块及它们之间传递的参数 State-transition diagram
一个状态转换图(state-transition diagram)显示一个系统可以处于的状态(states)以及在它们之间移动它的事件——适合自动售货机、交通灯、用户界面。状态转换图被用来记录一个算法或系统的行为。每个状态是一个圆;每个转换是一个用事件标注的箭头。
coin inserted item selected [Idle] ──────────────→ [Awaiting selection] ──────────→ [Dispensing]它使遗漏的转换容易被发现("如果在等待选择时投入第二枚硬币会怎样?")。

一个代码为 259 的门锁的状态转换图 探索Software process lab
Classify development examples by the stage or tool they belong to.
词汇表 训练英文 中文 拼音 structure chart 结构图 jié gòu tú decomposition 分解 fēn jiě subroutines 子程序 zi chéng xù parameters 参数 cān shù state-transition diagram 状态转换图 zhuàng tài zhuǎn huàn tú states 状态 zhuàng tài pseudocode 伪代码 wěi dài mǎ 12.3
程序测试与维护
大纲
Candidates should be able to: Notes and guidance Show understanding of ways of exposing and avoiding faults in programs Locate and identify the different types of errors • syntax errors • logic errors • run-time errors Correct identified errors Show understanding of the methods of testing available and select appropriate data for a given method Including dry run, walkthrough, white-box, black-box, integration, alpha, beta, acceptance, stub Show understanding of the need for a test strategy and test plan and their likely contents Choose appropriate test data for a test plan Including normal, abnormal and extreme/boundary Show understanding of the need for continuing maintenance of a system and the differences between each type of maintenance Including perfective, adaptive, corrective Analyse an existing program and make amendments to enhance functionality 来源:剑桥国际大纲
- syntax error(语法错误)——破坏语言的语法(遗漏括号、拼错关键字)。在翻译时被捕获;在修正之前程序不会运行。
- run-time error(运行时错误)——在运行时发生(除以零、文件未找到、数组索引越界)。程序崩溃或抛出一个异常;通过添加检查来修正。
- logic error(逻辑错误)——程序运行但给出错误的结果(用
+代替-、一个差一的循环、条件顺序错误)。最难找到;唯一的迹象是错误的输出,所以用仔细的测试和追踪。

每种错误何时出现:语法在翻译时,运行时在运行期间,逻辑在输出中 词汇表 训练英文 中文 拼音 syntax error 语法错误 yǔ fǎ cuò wù run-time error 运行时错误 yùn xíng shí cuò wù logic error 逻辑错误 luó jí cuò wù 12.3
测试方法
- dry run(手工跟踪)——在纸上追踪代码,在一个表格里写下每个变量的值。
- walkthrough(走查)——对代码的一次团队评审。
- white-box testing(白盒测试)——从代码的内部结构设计,覆盖每条语句、分支和循环。
- black-box testing(黑盒测试)——只从规格说明设计:喂入输入,检查输出。
- integration testing(集成测试)——组合模块并测试它们之间的接口。
- alpha testing(α测试)——由开发者/内部在发布前;beta testing(β测试)——由有限的一组真实用户在他们自己的环境中。
- acceptance testing(验收测试)——由客户,以决定产品是否适合用途。
- stub(桩)——一个还不存在的模块的占位符,以便结构可以自顶向下地被测试。

黑盒测试规格说明;白盒测试代码路径 词汇表 训练英文 中文 拼音 dry run 手工跟踪 shǒu gōng gēn zōng walkthrough 走查 zǒu chá white-box testing 白盒测试 bái hé cè shì black-box testing 黑盒测试 hēi hé cè shì integration testing 集成测试 jí chéng cè shì alpha testing α测试 α cè shì beta testing β测试 β cè shì acceptance testing 验收测试 yàn shōu cè shì stub 桩 zhuāng 12.3
测试策略与测试计划
一个测试策略(test strategy)是高层的方法——哪几种测试、谁做、何时,以及往前推进的标准。一个测试计划(test plan)是详细的测试清单——每个带输入数据、预期输出,以及一个记录实际输出的列。
Choosing test data
对每个字段或条件,包含三种:
- normal data(正常数据)——有效范围内的典型值(对于分数 0–100:
50、75)。 - abnormal data(异常数据)——应当被拒绝的值(
-10、200、"abc")。 - extreme data(极端数据)——仍被接受的最大和最小值(
0和100)。 - boundary data(边界数据)——在边缘的值,差一错误藏在那里(每个被接受的极端值和刚好在它外面被拒绝的值:
0/-1、100/101)。

一个 0–100 字段的测试数据:正常在里面,极端在边界,异常在外面 例题。 某字段接受 0 到 100 的考试分数。给出各类测试数据及其预期结果。正常数据:
50- 被接受,是范围内的典型值。异常数据:-10、200、"abc"- 全部被拒绝,因为超出范围或数据类型错误。极端数据:0和100- 仍然被接受的最大值和最小值。边界数据:跨在每个边缘两侧的成对值 - 被拒绝的-1配上被接受的0,以及被接受的100配上被拒绝的101。每个值都必须写上它的预期结果,否则这份测试计划什么也证明不了。极端数据和边界数据是最常被混淆的一对:极端值处在范围之内且被接受,而边界测试永远是边缘两侧的一对值 - 那里正是差一错误藏身的地方。词汇表 训练英文 中文 拼音 test strategy 测试策略 cè shì cè lüè test plan 测试计划 cè shì jì huà normal data 正常数据 zhèng cháng shù jù abnormal data 异常数据 yì cháng shù jù boundary data 边界数据 biān jiè shù jù extreme data 极端数据 jí duān shù jù 12.3
维护
一个程序生命期成本的大部分在维护中。三种:

三种维护:完善性、适应性和纠正性 - perfective maintenance(完善性维护)——即使它能工作,也改进性能或功能(一个更快的查询、一个新选项)。
- adaptive maintenance(适应性维护)——在一个变化的环境中保持它工作(一个新 OS、一个新 API、一个法律变更)。
- corrective maintenance(纠正性维护)——修复使用中发现的漏洞。
一个程序在它一生中可能需要全部三种。
词汇表 训练英文 中文 拼音 perfective maintenance 完善性维护 wán shàn xìng wéi hù adaptive maintenance 适应性维护 shì yìng xìng wéi hù corrective maintenance 纠正性维护 jiū zhèng xìng wéi hù 12.3
修改现有程序
当被要求添加一个功能或修复一个漏洞时:
- 阅读现有代码,直到你理解算法和数据流。
- 找出改动在哪里——哪个子程序、哪些行。
- 让改动尽可能小——不要重写能工作的代码。
- 更新相关部分——一个改动过的参数列表的每个调用者、使用一个改动过的数据结构的每个例程。
- 测试新行为和旧行为(回归测试(regression testing)——检查你没弄坏任何东西)。
- 记录改动。
清晰的注释、有意义的名称、分解的子程序和一张结构图使一个程序更容易被修改——这就是为什么设计工具即使在首次发布之后也重要。
词汇表 训练英文 中文 拼音 regression testing 回归测试 huí guī cè shì 12.3
考试技巧
- 比较开发模型(瀑布、迭代、RAD)并知道程序开发生命周期的各阶段。
- 区分语法、逻辑和运行时错误以及每个如何被发现。
- 选择三种测试数据——正常、边界和错误——并为陈述的范围给出每种的一个例子。
- 区分各类维护(纠正性、适应性、完善性)。
-
13
数据表示
13.1
用户自定义数据类型
大纲
Candidates should be able to: Notes and guidance Show understanding of why user-defined types are necessary Define and use non-composite types Including enumerated, pointer Define and use composite data types Including set, record and class/object Choose and design an appropriate user-defined data type for a given problem 来源:剑桥国际大纲
内建类型(
INTEGER、REAL、STRING、CHAR、BOOLEAN)覆盖最简单的情况。对于更丰富的问题,你可以定义用户定义类型(user-defined types),使代码更清晰、编译器更严格。Why they are needed
一个内建的
STRING让你在一个应当只容纳几个合法值之一的字段里存储乱七八糟的东西;一个用户定义类型可以限制它。真实的实体通常是不同类型的值的一个集合。而DECLARE Taxi : Vehicle比DECLARE Taxi : STRING更清晰(自我说明)。Non-composite types
Enumerated type
一个枚举类型(enumerated type)的值是一个命名常量的固定列表:
TYPE Vehicle = (M100, M230, T101, T102, T120, T150) DECLARE MyTaxi : Vehicle MyTaxi ← T102这些名称是新类型的值(内部存储为小整数);你不能赋任何列表之外的东西。用途:星期几、颜色、状态码。

一个枚举类型是一个命名值的固定列表 Pointer type
一个指针(pointer)容纳另一个变量的内存地址(或
NULL表示"没有目标")。指针构建动态结构(链表、树)并传递引用而不复制。TYPE PNode = ^TNode // pointer to a TNode DECLARE p : PNode p ← NEW TNode p^.Value ← 42 // dereference to reach the fields解引用(dereference,
p^)意味着访问它指向的变量。
一个指针容纳一个地址; p^解引用它以访问该节点的字段Composite types
一个复合类型(composite type,复合数据类型之一)把几个值组合在一个名称下。

一个集合是一个唯一值的无序集合 
一个记录把不同类型的字段组合在一个名称下 - record(记录,主题 10)——一个
TYPE ... ENDTYPE块中不同类型的字段。 - set(集合)——一个唯一值的无序集合,带操作:添加、移除、成员测试、并集、交集:
DECLARE Available : SET OF Colour Available ← {Red, Blue} IF Green IN Available THEN ...- class(类)/ object(对象)——OOP 复合类型,把数据字段(属性(attributes))与对它们的操作(方法(methods))结合。一个对象是一个类的一个实例:
CLASS Taxi PRIVATE Capacity : INTEGER PUBLIC FUNCTION GetCapacity() RETURNS INTEGER RETURN Capacity ENDFUNCTION ENDCLASSChoosing a type
对来自一个固定列表的值用枚举,为间接性用指针,为一组字段用记录,为一个无序的唯一集合用集合,而当你需要状态和行为在一起时用类。
探索Programming concept lab
Connect examples to the programming idea they show.
词汇表 训练英文 中文 拼音 user-defined type 用户定义类型 yòng hù dìng yì lèi xíng enumerated type 枚举类型 méi jǔ lèi xíng pointer 指针 zhǐ zhēn dereference 解引用 jiě yǐn yòng composite type 复合类型 fù hé lèi xíng record 记录 jì lù set 集合 jí hé class 类 lèi object 对象 duì xiàng attributes 属性 shǔ xìng methods 方法 fāng fǎ 13.2
文件组织与访问
大纲
Candidates should be able to: Notes and guidance Show understanding of the methods of file organisation and select an appropriate method of file organisation and file access for a given problem Including serial, sequential (using a key field), random (using a record key) Show understanding of methods of file access Including Sequential access for serial and sequential files Direct access for sequential and random files Show understanding of hashing algorithms Describe and use different hashing algorithms to read from and write data to a random/sequential file 来源:剑桥国际大纲
文件组织(file organisation)是数据如何布置;文件存取(file access)是程序如何访问一条记录。
- serial file(串行文件)——记录按添加的顺序,没有排序。存取只能是顺序的;追加很快;搜索很慢。用于日志和审计追踪。
- sequential file(顺序文件)——记录按一个键排序。搜索更快(你可以尽早停止或二分查找);插入很慢(记录必须移位)。用于批量更新的主文件。
- random (direct-access) file(随机文件)——记录在从键算出的位置(常用一个散列)。按键的直接存取非常快;按键顺序读取更难。用于大的查找表和客户账户。

串行文件:记录保持在它们被添加的顺序 
顺序文件:记录按一个键字段排序 
随机文件:记录坐在从键算出的位置 两种存取方法是顺序存取(sequential access,从头读到尾)和直接存取(direct access,直接跳到一个已知位置)。把结构匹配到主导操作:单键查找偏向随机;按序报表偏向顺序。
探索File access route
Follow a file from storage to program and back safely.
词汇表 训练英文 中文 拼音 file organisation 文件组织 wén jiàn zǔ zhī serial file 串行文件 chuàn xíng wén jiàn sequential file 顺序文件 shùn xù wén jiàn random (direct-access) file 随机文件 suí jī wén jiàn sequential access 顺序存取 shùn xù cún qǔ direct access 直接存取 zhí jiē cún qǔ 13.2
散列
一个散列函数(hash function,一个散列算法)取一个记录键并产生一个存储记录的地址(address)。一个好的散列函数快、确定性(deterministic),并把键均匀地铺开。
$N$ 个槽的常见散列算法:取模散列
address ← key MOD N;折叠(把键拆开、把各部分相加、MOD N);一个字符串散列(把字符码相加、MOD N)。一个冲突(collision)是当两个键散列到同一个地址时。解决它的三种方式:
策略 它如何工作 权衡 线性探测(linear probing) 用下一个空闲槽(绕回) 简单,但键聚集 链接法(chaining) 每个槽指向一个记录的链表(linked list) 无聚集,但用更多内存 再散列 应用第二个散列函数 铺开键,但更多工作 
解决一个散列冲突:线性探测用下一个空闲槽;链接法为每个槽保持一个链表 要搜索:散列键,读那个槽;若键匹配你就完成了,否则跟随解决策略直到一个匹配或一个空槽。要插入:散列键,写入那个槽或下一个空闲的。保持装填因子(load factor,记录 ÷ 槽)低于约 70% 以获得接近 O(1) 的查找。
探索A hash table
Watch each key get hashed to a bucket. A good hash spreads keys out so lookups stay fast.
词汇表 训练英文 中文 拼音 deterministic 确定性 què dìng xìng hash function 散列函数 sàn liè hán shù collision 冲突 chōng tū linear probing 线性探测 xiàn xìng tàn cè chaining 链接法 liàn jiē fǎ linked list 链表 liàn biǎo load factor 装填因子 zhuāng tián yīn zi 13.3
浮点数的表示与运算
大纲
Candidates should be able to: Notes and guidance Describe the format of binary floating-point real numbers Use two's complement form Understand of the effects of changing the allocation of bits to mantissa and exponent in a floating-point representation Convert binary floating-point real numbers into denary and vice versa Normalise floating-point numbers Understand the reasons for normalisation Show understanding of the consequences of a binary representation only being an approximation to the real number it represents (in certain cases) Understand how underflow and overflow can occur Show understanding that binary representations can give rise to rounding errors 来源:剑桥国际大纲
为了存储大小非常不同的实数,计算机用一个浮点(floating-point)格式——科学记数法的一个二进制形式,带两个字段:
- 一个尾数(mantissa)——有效数字。
- 一个指数(exponent)——要乘的 2 的幂。
两者都存储为补码(two's complement)整数。值是
$$\text{number} = \text{mantissa} \times 2^{\text{exponent}}.$$把尾数读作一个二进制分数——小数点后第一位值 $1/2$,下一位 $1/4$,然后 $1/8$,如此等等。所以
0.1010000是 $1/2 + 1/8 = 0.625$;带指数00000010(= 2)值是 $0.625 \times 2^{2} = 2.5$。
一个 8 位尾数和一个 8 位指数的位值 Converting
- 二进制 → 十进制:把尾数(若为负用补码规则)读作一个分数,把指数读作一个有符号整数,然后把尾数乘以 $2^{\text{exponent}}$。
- 十进制 → 二进制:把数写成一个二进制分数 × 一个 2 的幂,然后把尾数和指数存储为约定的格式。
例题。 一个数有尾数
10110000和指数00000011。求它的十进制值。指数
00000011是 $+3$。尾数以一个 1 开始,所以它是负的。在补码中读作1.0110000,符号位值 $-1$,分数位加上 $\tfrac{1}{4} + \tfrac{1}{8} = 0.375$,所以尾数是 $-1 + 0.375 = -0.625$。于是$$\text{number} = -0.625 \times 2^{3} = -5.0.$$例题。 在这个格式中存储 $+2.5$。
在二进制中 $2.5 = 10.1$。写成一个规格化的分数,$2.5 = 0.101 \times 2^{2}$。所以尾数是
01010000(符号位 0,然后.101)而指数是00000010($= 2$)。Normalisation
一个数在它的第一个有效位紧跟在二进制小数点之后时是规格化的(normalised,没有浪费的前导零)。这最大化精度,因为每个尾数位都携带信息。要规格化,把尾数左移并减小指数(或右移并增大它),直到第一个有效位就位;值不变。对负(补码)尾数,符号位(1)之后紧跟一个 0。

规格化:把尾数左移以去除前导零,把指数降低同样的量 Approximation and rounding errors
许多十进制实数不能在二进制中被精确存储——例如 $0.1_{10}$ 是循环二进制分数 $0.000110011\ldots_{2}$,它必须被截断。后果:
- 舍入误差(rounding errors)在许多操作上累积(
0.1 + 0.2不精确地是0.3)。 - 比较失败——测试
ABS(x - 0.3) < 1e-9而不是x = 0.3。 - 两个几乎相等的值相减会损失精度。
- 当指数用尽范围时,溢出(overflow,一个对指数范围太大的结果)和下溢(underflow,一个太小的结果,舍入为零)发生。
对于精确的需要(货币),用定点(fixed-point)或 BCD(二进码十进数)而不是浮点。
探索Build a floating-point number
Flip the mantissa and exponent bits to make a value, and check whether it is normalised.
探索Normalising a floating-point number
Step through normalisation. Shifting the mantissa to remove wasted leading zeros — and adjusting the exponent to match — keeps the value the same but spends every bit on precision.
词汇表 训练英文 中文 拼音 floating-point 浮点 fú diǎn mantissa 尾数 wěi shù exponent 指数 zhǐ shù two's complement 补码 bǔ mǎ normalised 规格化 guī gé huà rounding errors 舍入误差 shě rù wù chā fixed-point 定点 dìng diǎn BCD 二进码十进数 èr jìn mǎ shí jìn shù overflow 溢出 yì chū underflow 下溢 xià yì 13.3
考试技巧
- 对于浮点二进制 → 十进制,把尾数读作一个分数、把指数读作一个有符号整数,然后相乘;一个负尾数遵循补码规则。
- 通过移位直到小数点后第一位与符号位不同来规格化——这最大化精度。
- 解释舍入、溢出和下溢误差以及为什么 $0.1$ 不能被精确存储。
- 比较文件组织(串行、顺序、直接)以及散列如何快速找到一条记录。
- record(记录,主题 10)——一个
-
14
通信与互联网技术
14.1
协议
大纲
Candidates should be able to: Notes and guidance Show understanding of why a protocol is essential for communication between computers Show understanding of how protocol implementation can be viewed as a stack, where each layer has its own functionality Show understanding of the TCP/IP protocol suite Four Layers (Application, Transport, Internet, Link) Purpose and function of each layer Application when a message is sent from one host to another on the internet Show understanding of protocols (HTTP, FTP, POP3, IMAP, SMTP, BitTorrent) and their purposes BitTorrent protocol provides peer-to-peer file sharing 来源:剑桥国际大纲
一个协议(protocol)是设备如何通信的一套规则。两端都必须遵循同样的规则,否则一方的信号对另一方毫无意义。协议定义数据的格式(地址和有效载荷在哪里)、消息的顺序(谁先说话、何时确认)、每个消息的含义、定时(超时、重传),以及出错时做什么。没有一个约定的协议,通信就失败——像两个人说不同的语言而没有翻译。

一个协议是共享的规则:格式、顺序、定时和错误 词汇表 训练英文 中文 拼音 protocol 协议 xié yì 14.1
分层协议
联网是复杂的,所以它被拆成层(layers),每层有一件专注的工作,只与上面和下面的层对话。好处:模块化(modularity,替换一层——比如用 Wi-Fi 替换 Ethernet——而不碰其他层)、标准化(供应商互操作),以及抽象(abstraction,你忽略别处处理的细节)。互联网用 TCP/IP 协议栈(protocol suite,4 层)。
词汇表 训练英文 中文 拼音 layers 层 céng modularity 模块化 mó kuài huà abstraction 抽象 chōu xiàng protocol suite 协议栈 xié yì zhàn 14.1
TCP/IP 协议族
层 目的 例子 Application 用户程序做什么 HTTP, FTP, SMTP, IMAP Transport 进程之间端到端的传递 TCP, UDP Internet 在网络之间路由数据包 IP Link 在物理介质上发送比特 Ethernet, Wi-Fi 
TCP/IP 协议栈的四层 Application layer
应用层(application layer)给用户程序提供服务并定义它们说的协议(网络用 HTTP,电子邮件用 SMTP)。这是一个程序员最常工作的地方。
Transport layer
传输层(transport layer)在进程之间端到端地传递数据,进程由端口号(port numbers)标识。两个协议:

TCP 连接并按序传递;UDP 发了就忘 - TCP(传输控制协议)——面向连接(connection-oriented):建立一个连接、确保所有数据按序到达、重传丢失的数据包(packets)、控制流量。可靠但有开销。被 HTTP、HTTPS、SMTP、FTP 使用。
- UDP(用户数据报协议)——无连接(connectionless):发了就忘,没有确认或排序。开销低,无保证。用于流媒体、DNS 和游戏,那里速度胜过可靠性。
Internet layer
网络层(internet layer)用 IP 在主机之间携带数据包。每个数据包有一个源和目的 IP 地址(IP address),路由器(routers)把它往前转发。它不保证传递——那是 TCP 的工作。
一个家用路由器为你的家做这件工作:它读每个数据包的目的地址并把它送往互联网,再送回正确的设备。

一个家用 Wi-Fi 路由器:它在你的设备和互联网之间转发数据包 在路由器到达更广的互联网之前,一个调制解调器(modem)通过提供商的电缆或电话线把家连到互联网提供商。它的灯显示链路已连通并在线。

一个电缆调制解调器把一个家庭网络连到互联网提供商 Link layer
链路层(link layer)在一条物理链路(Ethernet、Wi-Fi)上发送比特。它加一个带 MAC 地址(MAC addresses)的帧头并处理介质访问(例如 Ethernet 上的 CSMA/CD(载波侦听多路访问))。

一个典型 Ethernet 帧的各部分 在一个有线局域网上,一个交换机(switch)把许多设备连在一起。每个设备用一根 Ethernet 电缆(一个 RJ45 插头)插入一个端口,而交换机用每个帧里的 MAC 地址把它只发到正确的端口。

一个网络交换机在一个局域网上连接许多有线设备 物理链路可以是一根铜线、一个无线电信号(Wi-Fi),或一根光纤(fibre-optic cable)。在一根光纤中,比特作为光的闪烁穿过非常细的玻璃丝行进,这很快并把数据带很远。

一根光纤:数据作为光穿过细玻璃丝行进 一个无线电链路可以到达远得多。一个卫星天线(satellite dish)向一颗卫星发送和接收无线电信号,把数据带到有线链路不易到达的地方。

一个卫星天线通过无线电在远距离上发送和接收数据 探索Tap the four layers of the TCP/IP model
Explore each layer. Data travels DOWN the stack as it's sent (each layer adds its header) and back UP as it's received — and any layer can be swapped without touching the others.
词汇表 训练英文 中文 拼音 application layer 应用层 yìng yòng céng transport layer 传输层 chuán shū céng port numbers 端口号 duān kǒu hào TCP 传输控制协议 chuán shū kòng zhì xié yì connection-oriented 面向连接 miàn xiàng lián jiē packets 数据包 shù jù bāo UDP 用户数据报协议 yòng hù shù jù bào xié yì connectionless 无连接 wú lián jiē internet layer 网络层 wǎng luò céng IP address IP地址 IP dì zhǐ routers 路由器 lù yóu qì modem 调制解调器 tiáo zhì jiě tiáo qì link layer 链路层 liàn lù céng MAC addresses MAC地址 MAC dì zhǐ CSMA/CD 载波侦听多路访问/冲突检测 zài bō zhēn tīng duō lù fǎng wèn chōng tū jiǎn cè switch 交换机 jiāo huàn jī fibre-optic 光纤 guāng xiān satellite dish 卫星天线 wèi xīng tiān xiàn FTP 文件传输协议 wén jiàn chuán shū xié yì 14.1
常见的应用层协议
- HTTP(超文本传输协议)——浏览器从服务器取网页(经 TCP,端口 80)。HTTPS 是 HTTP 经 TLS——加密,端口 443。
- FTP(文件传输协议)——在客户端和服务器之间传输文件。
- SMTP(简单邮件传输协议)——在客户端和服务器之间、以及服务器之间发送电子邮件。接收用 POP3 或 IMAP。
- POP3——下载电子邮件并通常从服务器删除它。IMAP——把电子邮件留在服务器上并跨设备同步,所以同一个收件箱处处出现。
- BitTorrent——一个对等网络(peer-to-peer)协议;一个文件被拆成从许多对等方并行下载的片,所以没有单一的服务器承担全部负载。

BitTorrent:一个 tracker 帮助对等方找到彼此,然后它们直接共享文件片 探索Network route lab
Follow data from a device through network hardware and protocols.
词汇表 训练英文 中文 拼音 HTTP 超文本传输协议 chāo wén běn chuán shū xié yì peer-to-peer 对等网络 duì děng wǎng luò 14.2
电路交换与分组交换
大纲
Candidates should be able to: Notes and guidance Show understanding of circuit switching Benefits, drawbacks and where it is applicable Show understanding of packet switching Benefits, drawbacks and where it is applicable Show understanding of the function of a router in packet switching Explain how packet switching is used to pass messages across a network, including the internet 来源:剑桥国际大纲
Circuit switching
在发送任何数据之前,在两端之间建立一条专用路径(电路交换(circuit switching)),为整个会话保留,然后释放。它给出保留的带宽(bandwidth)和按序传递,但在静默期间低效且建立慢。经典例子:传统电话网络。

电路交换:一条专用路径被端到端地保留 Packet switching
数据被拆成数据包,每个独立地发送(分组交换(packet switching))。每个数据包携带目的地址;路由器为每个数据包做决定,所以数据包可能走不同的路由并乱序到达,而目的地把它们重组。它高效(一条链路在许多会话间被多路复用(multiplexed))、健壮(绕过一个故障重新路由),但有可变的延迟(latency)和可能的丢失(TCP 处理可靠性)。被互联网使用。

分组交换:数据包独立地行进,可能走不同的路由 方面 电路交换 分组交换 路径 专用、保留 共享、每包 建立时间 慢 无 带宽使用 低效 高效 顺序 按序 可能乱序 健壮性 一个故障切断电路 绕过故障重新路由 适合 恒速流(语音) 突发流(网络、电子邮件) 现代网络因分组交换的高效和韧性而使用它。
Describing packet switching in a few sentences
一个好的考试答案:"消息被分成小数据包。每个数据包携带目的和源地址以及一个序列号。每个数据包独立地穿过网络行进,路由器为每个数据包选择下一跳。数据包可能走不同的路径并乱序到达。目的地用序列号重组消息,而丢失的数据包可以再次被请求。"
例题。 一通电话和一个大文件下载共用一个网络。各自适合哪种交换方式?为什么?电话需要平稳、低延迟的数据流,如果有片段迟到或乱序到达就会严重受影响 - 所以电路交换适合它:在整通电话期间建立一条专用路径,并为其保留带宽。文件下载并不在意时序或到达顺序,因为接收端会重新组装它,而且它能从任何恰好空闲的带宽中获益 - 所以分组交换适合它:文件被拆成独立传输的数据包,每个包带有源地址、目的地址和序号,路由器为每个包各自选择下一跳。要点出决定性的那条流量特性:电话要的是保留带宽和低延迟,下载要的是效率和容错。
探索A packet's journey across the internet
Step through packet switching. The message is split up, each packet finds its own way, and the destination puts them back together — which is why the internet is so efficient and hard to break.
词汇表 训练英文 中文 拼音 circuit switching 电路交换 diàn lù jiāo huàn bandwidth 带宽 dài kuān packet switching 分组交换 fēn zǔ jiāo huàn multiplexed 多路复用 duō lù fù yòng latency 延迟 yán chí 14.2
考试技巧
- 解释为什么用协议和层:每层有一件工作并能独立改变。
- 把常见协议放入 TCP/IP 栈(HTTP/FTP/SMTP 应用;TCP/UDP 传输;IP 网络)。
- 比较电路交换对分组交换(一条专用路径对独立的数据包),各带一个用途。
词汇表 训练英文 中文 拼音 SMTP 简单邮件传输协议 jiǎn dān yóu jiàn chuán shū xié yì -
15
硬件与虚拟机
15.1
处理器、并行处理与虚拟机
大纲
Candidates should be able to: Notes and guidance Show understanding of Reduced Instruction Set Computers (RISC) and Complex Instruction Set Computers (CISC) processors Differences between RISC and CISC Understand interrupt handling on CISC and RISC processors Show understanding of the importance/use of pipelining and registers in RISC processors Show understanding of the four basic computer architectures SISD, SIMD, MISD, MIMD Show understanding of the characteristics of massively parallel computers Show understanding of the concept of a virtual machine Give examples of the role of virtual machines Understand the benefits and limitations of virtual machines 来源:剑桥国际大纲
两种 CPU 设计风格。CPU 本身插入主板(motherboard),就是把处理器、内存和计算机的每个其他部件连在一起的主要板子。

CISC 有许多复杂的指令;RISC 有少数简单的指令 
一块主板把 CPU、内存和其他部件连在一起 CISC
一个 CISC(复杂指令集,Complex Instruction Set Computers)有许多、往往复杂的指令(一条可能做几次内存访问和操作)、变长,所以译码很繁复。它在硬件里每条指令做得更多。例子:Intel x86。
RISC
一个 RISC(精简指令集,Reduced Instruction Set Computers)有一小组简单的指令,每条做一个基本操作、全部定长(译码快)。只有 load 和 store 碰内存;其他一切都是寄存器(register)到寄存器。程序更长,但每条指令快而可预测,这适合流水线。例子:ARM、RISC-V。
特性 CISC RISC 指令集 许多 少数 指令长度 变长 定长 内存访问 许多指令 只有 load/store 流水线友好 更难 天然 每指令周期 变化 通常 1 权衡是每条指令做更多(CISC)对每条指令更快、更可预测(RISC)。现代 Intel 芯片在内部把 CISC 指令翻译成更简单的类 RISC 微操作。
词汇表 训练英文 中文 拼音 motherboard 主板 zhǔ bǎn CISC 复杂指令集 fù zá zhǐ lìng jí RISC 精简指令集 jīng jiǎn zhǐ lìng jí register 寄存器 jì cún qì 15.1
流水线
一个流水线(pipeline)以重叠的阶段处理指令,像一条装配线:取指 → 译码 → 执行(在 ALU(算术逻辑单元)中)→ 内存访问 → 写回。每个阶段同时处理一条不同的指令,所以一旦流水线满了,每周期完成一条指令。RISC 的定长、简单指令使每个阶段花同样的时间。一个流水线可能因一个冒险(hazard)而停顿——一个数据冒险(一条指令需要一个还没准备好的结果)或一个控制冒险(一个分支使下一个地址未知)。

流水线重叠六条指令的各阶段,所以每周期完成一条 RISC 芯片把数据保存在许多寄存器中,因为内存慢而寄存器快;编译器明智地把值分配到寄存器。
一个跑这么快的处理器放出很多热,所以一个散热器(heat-sink)和风扇坐在它顶上。金属鳍片散开热量,风扇把它吹走,使 CPU 保持足够凉以工作。

一个 CPU 散热器和风扇把热量从处理器带走 探索How pipelining fills up
Step through the clock cycles. Once the pipeline is full, a new instruction finishes every cycle — even though each one still takes several stages — because the stages of different instructions overlap.
词汇表 训练英文 中文 拼音 pipeline 流水线 liú shuǐ xiàn ALU 算术逻辑单元 suàn shù luó jí dān yuán hazard 冒险 mào xiǎn heat-sink 散热器 sàn rè qì 15.1
弗林分类法
弗林分类(Flynn's taxonomy)按指令流和数据流的数目给计算机分类:
- SISD——一条指令、一个数据流(一个传统的单核)。
- SIMD(单指令多数据)——一条指令一次作用于许多数据项(GPU、CPU 向量扩展)。对图像、视频、科学数组很好。
- MISD——对同样的数据做几个操作;罕见,大多是理论上的。
- MIMD(多指令多数据)——许多处理器对不同数据运行不同指令(多核 CPU、集群)。最通用。

SIMD:许多处理器对不同数据运行同一条指令 一个显卡(graphics card,带它的 GPU)是 SIMD 硬件的一个真实例子:它有数千个小核心,一次对许多像素或数字运行同一条指令,这就是为什么 GPU 对图像、视频和机器学习如此快。

一块显卡:它的 GPU 一次对许多数据项运行同一条指令(SIMD) 
MIMD:每个处理器对它自己的数据运行它自己的指令 词汇表 训练英文 中文 拼音 Flynn's taxonomy 弗林分类 fú lín fēn lèi SIMD 单指令多数据 dān zhǐ lìng duō shù jù MIMD 多指令多数据 duō zhǐ lìng duō shù jù graphics card 显卡 xiǎn kǎ 15.1
大规模并行计算机
一个大规模并行(massively parallel)系统在一个快速网络上使用数千个处理器,每个有它自己的内存(分布式内存(distributed memory)),通过消息交换数据。它是 MIMD,需要专门编写的软件(MPI、CUDA),并适合气候模拟、大型机器学习(machine learning)训练和天体物理学。最大的超级计算机(supercomputers)是大规模并行的。
这些处理器住在高高的服务器(server)机架里,往往填满整个房间(一个数据中心(data centre)),连在一起以便它们能同时处理一个大问题。

一个数据中心里一排排服务器,像用于大规模并行计算的那些 词汇表 训练英文 中文 拼音 massively parallel 大规模并行 dà guī mó bìng xíng distributed memory 分布式内存 fēn bù shì nèi cún machine learning 机器学习 jī qì xué xí supercomputers 超级计算机 chāo jí jì suàn jī server 服务器 fú wù qì data centre 数据中心 shù jù zhōng xīn 15.1
虚拟机
一个虚拟机(virtual machine,VM)是整台计算机的一个软件仿真——里面的软件看到一个 CPU、内存和磁盘,它们看起来真实,但由宿主软件管理。
- 一个系统 VM运行一个完整的 OS。一个虚拟机监控器(hypervisor)创建并管理 VM,每个引导它自己的客户 OS。用途:在一台机器上运行不同的 OS;服务器整合;沙箱(sandboxing,有风险的软件隔离运行);快照。
- 一个进程(语言)VM在可移植的字节码(bytecode)中运行一个程序——JVM(Java)、CLR(.NET)、CPython。好处:可移植性("一次编写,到处运行")、运行时安全检查,以及即时编译(just-in-time compilation)以获得接近本地的速度。代价是一个额外的层和需要安装该 VM。
探索Computing concept lab
Classify concrete examples by the computing idea they demonstrate.
词汇表 训练英文 中文 拼音 virtual machine 虚拟机 xū nǐ jī hypervisor 虚拟机监控器 xū nǐ jī jiān kòng qì sandboxing 沙箱 shā xiāng bytecode 字节码 zì jié mǎ just-in-time compilation 即时编译 jí shí biān yì 15.2
布尔代数与逻辑电路
大纲
Candidates should be able to: Notes and guidance Produce truth tables for logic circuits including half adders and full adders May include logic gates with more than two inputs Show understanding of a flip-flop (SR, JK) Draw a logic circuit and derive a truth table for a flip-flop Understand of the role of flip-flops as data storage elements Show understanding of Boolean algebra Understand De Morgan’s laws Perform Boolean algebra using De Morgan’s laws Simplify a logic circuit/expression using Boolean algebra Show understanding of Karnaugh maps (K-map) Understand of the benefits of using Karnaugh maps Solve logic problems using Karnaugh maps 来源:剑桥国际大纲
半加器:XOR + AND 把两个比特相加 布尔代数(Boolean algebra)简化布尔(Boolean)表达式,它们同样可以用真值表(truth tables)描述。符号:
+表示 OR,·表示 AND(常被省略),一个上划线表示 NOT。关键定律包括交换律、结合律和分配律(如同普通代数),加上:
- 同一律 $A + 0 = A$,$A \cdot 1 = A$;零律 $A + 1 = 1$,$A \cdot 0 = 0$。
- 幂等律 $A + A = A$;逆 $A + \overline{A} = 1$,$A \cdot \overline{A} = 0$。
- 德摩根定律(De Morgan's laws):$(A + B)' = A' \cdot B'$;$(A \cdot B)' = A' + B'$——对整体取反、交换 AND/OR、对每个操作数取反。
- 吸收律(absorption):$A + AB = A$。
简化减少项的数目,所以得到的逻辑电路有更少的门。例子:$Z = AB + A\overline{B} = A(B + \overline{B}) = A$。
探索Boolean algebra
A·B, A+B, Ā …
Boolean algebra is just these gates written as expressions — compare the truth tables.
探索Boolean truth tables
Pick an operator and the inputs to build its truth table — the algebra behind logic circuits.
词汇表 训练英文 中文 拼音 Boolean algebra 布尔代数 bù ěr dài shù Boolean 布尔 bù ěr De Morgan's laws 德摩根定律 dé mó gēn dìng lǜ absorption 吸收律 xī shōu lǜ half adder 半加器 bàn jiā qì truth table 真值表 zhēn zhí biǎo 15.2
卡诺图
一个卡诺图(Karnaugh map,K-map)通过把相邻的 1 分组来简化一个布尔表达式,这些 1 来自一个真值表。列和行用格雷码(Gray code)顺序(
00、01、11、10),所以相邻的单元在一个变量上不同。在每个输出为 1 的单元里放一个 1。找出 1 的矩形组,它们的边是 2 的幂(1、2、4、8),若能构成一个更大的组就绕过边缘。组越大,项越简单:一个 2 的组去掉一个变量,一个 4 的组去掉两个,如此等等——在组内改变的变量消失。把组的项 OR 在一起得到简化的表达式。用尽可能少、尽可能大的组覆盖每个 1。
例题。 $A$ 和 $B$ 的卡诺图在 $\overline{A}B$ 和 $AB$ 两格中为 1。化简它。这两个 1 是相邻的 - 它们同处 $B=1$ 那一列 - 所以把它们圈成一个大小为 2 的矩形。在这个圈内,$B$ 始终保持为 1,而 $A$ 从 0 变到 1,凡是在圈内发生变化的变量都会消失。所以这个圈只剩下 $X = B$。把它与直接从真值表读出的与或式 $\overline{A}B + AB$ 相比:同样的电路,少了两个门。两条规则完成了大部分工作 - 每个圈要尽可能大(圈 2 个去掉一个变量,圈 4 个去掉两个,圈 8 个去掉三个),并且要记住卡诺图的边缘是回绕的,所以最左列和最右列是相邻的。那个回绕正是大多数考生漏掉的圈法。
词汇表 训练英文 中文 拼音 Karnaugh map 卡诺图 kǎ nuò tú Gray code 格雷码 gé léi mǎ 15.2
半加器与全加器
一个半加器(half adder)把两个单比特 $A$ 和 $B$ 相加,给出一个和 $S$ 和一个进位(carry)$C$:
A B S C 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 所以 $S = A \text{ XOR } B$ 且 $C = A \text{ AND } B$。它忽略任何进位输入——因此叫"半"。

一个半加器,作为一个块和作为一个 XOR 门与一个 AND 门的电路 一个全加器(full adder)把三个比特($A$、$B$、进位输入)相加,给出一个和和一个进位输出:$S = A \text{ XOR } B \text{ XOR } C_{\text{in}}$。它可以从两个半加器加一个 OR 门构建。把全加器串起来(每个进位输出馈入下一个进位输入)构成一个多位的"行波进位"加法器。

一个全加器从两个半加器和一个 OR 门构建 探索The gates inside an adder
A half-adder's sum bit is an XOR gate and its carry is an AND gate — toggle A and B and watch the truth-table row light up.
词汇表 训练英文 中文 拼音 carry 进位 jìn wèi full adder 全加器 quán jiā qì 15.2
触发器
一个触发器(flip-flop)是一个双稳态(bistable)电路——两个稳定状态(0 和 1)——它记住它的状态。它存储一个比特,是寄存器和 SRAM 的基本元件。
SR flip-flop
一个 SR 触发器(SR flip-flop)有输入 S(置位)和 R(复位)以及输出 Q 和 $\overline{Q}$。
S=1,R=0把 Q 置为 1;S=0,R=1把它复位为 0;S=0,R=0保持;S=1,R=1是无效的。从两个交叉耦合的 NOR 门构建。JK flip-flop
一个 JK 触发器(JK flip-flop)通过把之前无效的
1,1输入用作一个翻转(toggle,输出翻转)来改进它。这使它成为构建计数器(counters,一串翻转的触发器)的理想选择。它通常是时钟控制的——输入只在一个时钟边沿起作用,使触发器保持同步。
一个 JK 触发器:它的符号和一个从 NAND 门的构建 触发器是寄存器(n 位 = n 个触发器)、计数器和 SRAM(静态RAM)单元的构件。
词汇表 训练英文 中文 拼音 flip-flop 触发器 chù fā qì bistable 双稳态 shuāng wěn tài SR flip-flop SR触发器 SR chù fā qì JK flip-flop JK触发器 JK chù fā qì toggle 翻转 fān zhuǎn counters 计数器 jì shù qì SRAM 静态RAM jìng tài RAM 15.2
考试技巧
- 比较 RISC 对 CISC(简单、快、统一的指令对复杂的指令)以及为什么 RISC 适合流水线。
- 用布尔代数 / 卡诺图简化逻辑——把 1 按 2 的幂分组。
- 解释一个半加器对全加器(全加器处理一个进位输入)以及一个触发器存储什么。
- 把一台机器放入弗林分类(SISD、SIMD、MISD、MIMD)。
-
16
系统软件
16.1
操作系统(OS)的功能
大纲
Candidates should be able to: Notes and guidance Show understanding of how an OS can maximise the use of resources Describe the ways in which the user interface hides the complexities of the hardware from the user Show understanding of process management The concept of multi-tasking and a process The process states: running, ready and blocked The need for scheduling and the function and benefits of different scheduling routines (including round robin, shortest job first, first come first served, shortest remaining time) How the kernel of the OS acts as an interrupt handler and how interrupt handling is used to manage low-level scheduling Show understanding of virtual memory, paging and segmentation for memory management The concepts of paging, virtual memory and segmentation The difference between paging and segmentation How pages can be replaced How disk thrashing can occur 来源:剑桥国际大纲
一台计算机有许多资源(CPU 时间、内存、磁盘、I/O)和许多程序争夺它们。OS 公平且高效地共享它们,使每个都被好好利用,系统保持响应:

OS 在程序之间共享 CPU、内存、磁盘和 I/O - 多任务(multi-tasking)——在进程之间快速切换 CPU,使几个看起来一次运行。
- 内存管理(memory management)——给每个进程它需要的内存;当 RAM 用尽时用磁盘分页(paging)。
- 假脱机(spooling)和缓冲——打印作业在磁盘上排队,所以 CPU 从不等打印机。
- 缓存(caching)——把最近用过的磁盘数据保存在高速缓存(cache)/ RAM 中。

处理器是 OS 在争夺的任务之间共享的一个关键资源 
OS 也管理内存(RAM),决定在它里面保留什么、把什么分页到磁盘 词汇表 训练英文 中文 拼音 multi-tasking 多任务 duō rèn wù paging 分页 fēn yè spooling 假脱机 jiǎ tuō jī cache 高速缓存 gāo sù huǎn cún 16.1
用户界面
用户界面把硬件隐藏在友好的抽象之后:用户看到窗口、菜单和文件夹,而不是地址或扇区。在一个图标上点一下,使 OS 在磁盘上找到程序、分配内存、加载它并启动它。一个 CLI(命令行)对专家强大且可脚本化;一个 GUI(图形)更容易学。大多数系统两者都提供。
16.1
进程管理
一个进程(process)是执行中的一个程序——它的代码、当前状态、内存和打开的文件。
Scheduling
调度器(scheduler)选择哪个就绪进程接下来运行,以及运行多久:
- 轮转(round robin)——每个进程得到一个固定的时间片(time slice),然后去到队列的后面。
- 先来先服务;最短作业优先;最短剩余时间(shortest remaining time,运行剩余工作最少的作业);优先级;多级反馈队列。
权衡是响应性对吞吐量对公平性。

四个进程的先来先服务调度 
轮转:每个进程依次得到一个固定的时间片,然后下一个运行(不像先来先服务) Process states
一个进程是新建(new)、就绪(ready,等待 CPU)、运行(running)、阻塞(blocked,等待 I/O 或一个锁),或终止(terminated)。当它的时间片结束时它从运行 → 就绪;当它请求 I/O 时它从运行 → 阻塞;当 I/O 完成时它从阻塞 → 就绪。

一个进程在新建、就绪、运行、阻塞和终止状态之间移动 Process control block and context switch
对每个进程,OS 保存一个进程控制块(process control block,PCB)——保存的程序计数器、寄存器、状态和内存信息。

一次上下文切换保存一个进程的状态并加载另一个的 - 一次上下文切换(context switch)挂起一个进程并启动另一个:它把状态保存进一个 PCB 并从另一个恢复它。这个小代价在每次切换时付出。
- 内核(kernel,OS 的核心)充当一个中断处理程序(interrupt handler)。当一个设备或定时器发起一个中断时,中断处理(interrupt handling)保存运行中的进程并运行正确的例程——这就是驱动底层调度的东西。
Inter-process communication
进程是隔离的,所以 OS 提供进程间通信(inter-process communication):管道(pipes,一个程序的输出馈入另一个的输入)、共享内存(shared memory,几个进程可以用的一个区域),以及消息传递。
探索The life of a process
Tap round the loop a process travels. It only runs when the scheduler picks it; needing I/O sends it to blocked, and finishing its time slice sends it back to ready — round and round until it's done.
词汇表 训练英文 中文 拼音 process 进程 jìn chéng scheduler 调度器 diào dù qì round robin 轮转 lún zhuàn time slice 时间片 shí jiān piàn blocked 阻塞 zǔ sè process control block 进程控制块 jìn chéng kòng zhì kuài context switch 上下文切换 shàng xià wén qiè huàn inter-process communication 进程间通信 jìn chéng jiān tōng xìn pipes 管道 guǎn dào shared memory 共享内存 gòng xiǎng nèi cún kernel 内核 nèi hé interrupt handler 中断处理程序 zhōng duàn chǔ lǐ chéng xù interrupt handling 中断处理 zhōng duàn chǔ lǐ 16.1
虚拟内存、分页与分段
每个进程得到它自己的虚拟地址空间(virtual address space)——OS 映射到物理内存的一个干净、连续的地址范围。这给每个进程一个简单的空间,保护进程彼此隔离,并让总内存超过物理 RAM。
在分页中,虚拟空间被拆成固定大小的页(pages),物理内存被拆成同样大小的页框(frames)。一个页表把每个页映射到一个页框。若一个被访问的页不在 RAM 中——一个缺页(page fault)——OS 从交换文件(swap file)把它读进一个页框,若 RAM 满了就逐出另一个页。频繁的缺页导致抖动(thrashing,磁盘抖动),那里 OS 把它的大部分时间花在交换页而不是做有用的工作。

分页把逻辑内存的每个页映射到物理内存的一个页框 在分段(segmentation)中,内存被拆成可变大小的逻辑段(代码、栈、堆),每个有它自己的权限。许多系统在段内使用分页。

分段用一个段映射表映射可变大小的段 探索What happens on a page fault
Step through a page fault. When the program touches a page that isn't in RAM, the OS quietly fetches it from disk and updates the page table — so the program sees more memory than physically exists.
词汇表 训练英文 中文 拼音 virtual address space 虚拟地址空间 xū nǐ dì zhǐ kōng jiān pages 页 yè frames 页框 yè kuāng page fault 缺页 quē yè swap file 交换文件 jiāo huàn wén jiàn thrashing 抖动 dǒu dòng segmentation 分段 fēn duàn 16.2
翻译软件
大纲
Candidates should be able to: Notes and guidance Show understanding of how an interpreter can execute programs without producing a translated version Show understanding of the various stages in the compilation of a program Including lexical analysis, syntax analysis, code generation and optimisation Show understanding of how the grammar of a language can be expressed using syntax diagrams or Backus-Naur Form (BNF) notation Show understanding of how Reverse Polish Notation (RPN) can be used to carry out the evaluation of expressions 来源:剑桥国际大纲
一个解释器(interpreter)同时翻译并运行源代码。对每条语句它读这行、做词法和语法分析、检查类型,然后执行该动作,并继续。错误被立即报告,它通常停止;不产生可执行文件。翻译每次运行都重做(更慢),但它给出快速的开发反馈并且是可移植的。
词汇表 训练英文 中文 拼音 interpreter 解释器 jiě shì qì 16.2
编译的各阶段
一个编译器(compiler)分阶段把源代码变成机器码(machine code):
- 词法分析(lexical analysis)——词法分析器把字符分组成词法单元(tokens,关键字、标识符、运算符、字面量),丢弃空白和注释。
- 语法分析(解析)(syntax analysis / parsing)——检查词法单元符合文法并构建一棵抽象语法树(abstract syntax tree)。一个遗漏的括号给出一个语法错误(syntax error)。
- 语义分析(semantic analysis)——检查程序说得通(变量已声明、类型匹配)。
- 代码生成(code generation)——遍历树并发出目标代码,选择寄存器和布局。
- 代码优化(code optimisation)——去除冗余的工作、折叠常量、为流水线重排。
输出是一个可执行文件。

编译的各阶段,从源代码到一个优化的可执行文件 探索The phases of compilation
Step through what a compiler does to your source. Each phase hands its output to the next — characters become tokens, tokens become a tree, the tree becomes optimised machine code.
词汇表 训练英文 中文 拼音 compiler 编译器 biān yì qì machine code 机器码 jī qì mǎ lexical analysis 词法分析 cí fǎ fēn xī tokens 词法单元 cí fǎ dān yuán syntax analysis (parsing) 语法分析 yǔ fǎ fēn xī abstract syntax tree 抽象语法树 chōu xiàng yǔ fǎ shù syntax error 语法错误 yǔ fǎ cuò wù semantic analysis 语义分析 yǔ yì fēn xī code generation 代码生成 dài mǎ shēng chéng code optimisation 代码优化 dài mǎ yōu huà 16.2
文法:BNF 与语法图
一个文法(grammar)说明哪些词法单元序列是有效的程序。
巴科斯-诺尔范式(Backus-Naur Form,BNF)是文本的。一个产生式(production rule)有这样的形式:
<symbol> ::= alternative1 | alternative2 | ...每个候选是一个终结符(terminal)符号(字面文本)和非终结符(non-terminal)符号(其他规则名)的序列:
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 <identifier> ::= <letter> | <identifier> <letter> | <identifier> <digit>递归的第三条规则表达"一个字母后跟任意数目的字母或数字"。一个
IF语句:<if-statement> ::= IF <condition> THEN <statement> ENDIF | IF <condition> THEN <statement> ELSE <statement> ENDIF一个语法图(syntax diagram,铁路图)以图形显示同样的东西:非终结符用方框、终结符用圆角框、有效路径用箭头、重复用循环。两种记法是等价的。解析器用文法来判定一个程序是否有效。

一个赋值语句的语法(铁路)图 词汇表 训练英文 中文 拼音 grammar 文法 wén fǎ Backus-Naur Form 巴科斯-诺尔范式 bā kē sī - nuò ěr fàn shì production rule 产生式 chǎn shēng shì terminal 终结符 zhōng jié fú non-terminal 非终结符 fēi zhōng jié fú syntax diagram 语法图 yǔ fǎ tú 16.2
逆波兰表示法(RPN)
在中缀(infix)记法中,运算符坐在它的操作数之间(
3 + 4 * 2),需要括号和优先级规则。在逆波兰表示法(Reverse Polish Notation,RPN,后缀(postfix))中,运算符跟在它的操作数之后(3 4 2 * +),不需要括号。Converting infix to RPN
用一个运算符栈(stack)。从左到右扫描:输出一个操作数;对一个运算符,先把任何更高或相等****优先级(precedence)的已入栈运算符弹到输出,然后把它压栈;把
(压栈;遇到)弹出到输出直到匹配的(。在最后,弹出所有运算符。例子:(3 + 4) * 2→3 4 + 2 *。Evaluating RPN
用一个操作数栈。从左到右扫描:把每个操作数压栈;遇到一个运算符,弹出顶上两个、应用它,并把结果压栈。求值
3 4 2 * +:词法单元 栈 33 43, 4 23, 4, 2 *3, 8 +11 结果:11。RPN 在求值时不需要括号并适合一个栈机器——这就是 JVM 和许多字节码(bytecode)解释器工作的方式。
例题。 把 $(A + B) \times (C - D)$ 转换成逆波兰式,然后计算 $(3 + 4) \times (5 - 2)$。用一个运算符栈从左向右扫描。压入
(;输出A;压入+;输出B;遇到)时弹出直到匹配的(,此时已输出A B +。压入×,第二个括号同样处理,得到C D -。最后弹出×。结果是:A B + C D - ×。要计算数值,则用一个操作数栈:压入 3,压入 4;+弹出两者并压入 7;压入 5,压入 2;-弹出两者并压入 3;×弹出 7 和 3 并压入 21。有两点能让这类题做得稳:转换过程中操作数保持原来的顺序(只有运算符在移动),而且每个运算符作用于栈中紧挨着它下面的两个值。探索Operator precedence — what RPN removes
In ordinary infix maths × and ÷ bind tighter than + and −, so you must apply rules in the right order. Reverse Polish Notation writes the operands first (3 4 2 × + 1 −), fixing the order so no precedence rules are needed.
词汇表 训练英文 中文 拼音 infix 中缀 zhōng zhuì Reverse Polish Notation 逆波兰表示法 nì bō lán biǎo shì fǎ postfix 后缀 hòu zhuì stack 栈 zhàn precedence 优先级 yōu xiān jí bytecode 字节码 zì jié mǎ 16.2
考试技巧
- 列出编译的各阶段(词法、语法和语义分析、代码生成、优化)以及每个做什么。
- 解释虚拟内存和分页(磁盘用作额外的 RAM)以及它的代价(磁盘抖动)。
- 用一个栈求值逆波兰表示法——不需要括号。
- 用 BNF 或一个语法图来测试一个字符串是否有效。
-
17
安全
17.1
加密、加密协议与数字证书
大纲
Candidates should be able to: Notes and guidance Show understanding of how encryption works Including the use of public key, private key, plain text, cipher text, encryption, symmetric key cryptography and asymmetric key cryptography How the keys can be used to send a private message from the public to an individual/organisation How the keys can be used to send a verified message to the public How data is encrypted and decrypted, using symmetric and asymmetric cryptography Purpose, benefits and drawbacks of quantum cryptography Show awareness of the Secure Socket Layer (SSL) / Transport Layer Security (TLS) Purpose of SSL/TLS Use of SSL/TLS in client-server communication Situations where the use of SSL/TLS would be appropriate Show understanding of digital certification How a digital certificate is acquired How a digital certificate is used to produce digital signatures 来源:剑桥国际大纲
加密(encryption)用一个依赖于密钥(key)的数学运算,把可读的明文(plaintext)变成不可读的密文(ciphertext)。只有有正确密钥的人才能逆转它——解密(decryption)——以取回明文。一个没有密钥就截获密文的攻击者只看到无意义的数据,因为尝试每一个可能的密钥会花太长的时间。一个较新的方法,量子密码学(quantum cryptography),用量子物理以一种揭示任何窃听者的方式共享一个密钥。

Enigma 机在第二次世界大战中加密消息——一个早期的机械密码设备 
加密用一个密钥打乱明文;解密逆转它 Symmetric encryption
对称加密(symmetric encryption,对称密钥密码学)对加密和解密都用同一个密钥,所以发送方和接收方必须都持有这个秘密密钥。它快,适合大批数据(整个磁盘、一个视频流)。它的问题是密钥分发(key distribution):你一开始怎么安全地共享密钥?非对称加密解决这个。

对称加密在两端用同一个秘密密钥 Asymmetric encryption (public-key)
非对称加密(asymmetric encryption,非对称密钥密码学)给每个用户一对相关的密钥:一个他们公布的公钥(public key),和一个他们保密的私钥(private key)。用公钥加密的数据只能用匹配的私钥解密,反之亦然。

每个用户有一个要共享的公钥和一个要保密的私钥 要给 Alice 发一个秘密消息:取她公布的公钥、用它加密,并发送。只有 Alice——持有匹配的私钥——能解密。不需要事先的密钥交换。权衡是它比对称慢得多,所以它不用于大数据。
一个私钥必须保密,所以它有时被保存在一个小的硬件安全密钥(hardware security key)上。你插入它或轻触它来证明你是谁,而这个秘密密钥从不离开设备。

一个硬件安全密钥存储一个秘密密钥来证明你是谁 Hybrid approach (used by almost every real system)
用非对称加密来交换一个新鲜的会话密钥(session key),然后对数据用那个对称密钥:
- 客户端制作一个随机会话密钥。
- 它用服务器的公钥加密会话密钥。
- 服务器用它的私钥解密它。
- 两端现在共享会话密钥,并对其余部分用快速的对称加密。
这就是 HTTPS 和 SSH 工作的方式。

混合方法:非对称密码学一次性共享一个会话密钥,然后快速的对称加密保护数据 Hashing (related, not encryption)
一个密码散列(cryptographic hash)函数取任何输入并给出一个固定大小的摘要(digest),使得同样的输入总是给出同样的摘要、找到两个有同样摘要的输入是不可行的,而输入中一个微小的改变会完全改变摘要。散列是单向的——你不能取回输入。它被用于存储密码检查、完整性(integrity)检查和数字签名。

一个密码散列给出一个固定的摘要;一个微小的输入改变会完全改变它,而它不能被逆转 探索Hashing and the avalanche effect
A hash is one-way: easy to compute, practically impossible to reverse. A tiny change in the input flips a large, unpredictable part of the output — the avalanche effect that makes hashes good for passwords.
探索The Caesar cipher
Shift each letter to encrypt the message. A simple cipher shows the idea of a key — and why a small key is easy to break.
词汇表 训练英文 中文 拼音 encryption 加密 jiā mì plaintext 明文 míng wén ciphertext 密文 mì wén decryption 解密 jiě mì symmetric encryption 对称加密 duì chèn jiā mì key distribution 密钥分发 mì yào fēn fā asymmetric encryption 非对称加密 fēi duì chèn jiā mì public key 公钥 gōng yào private key 私钥 sī yào hardware security key 硬件安全密钥 yìng jiàn ān quán mì yào session key 会话密钥 huì huà mì yào cryptographic hash 密码散列 mì mǎ sàn liè digest 摘要 zhāi yào integrity 完整性 wán zhěng xìng quantum cryptography 量子密码学 liàng zǐ mì mǎ xué 17.1
SSL / TLS
TLS(传输层安全,Transport Layer Security,安全套接层(Secure Socket Layer,SSL)的后继者)是一个为通过一个网络发送的数据提供加密和身份验证的协议。它加密传输中的数据、用一个证书认证服务器,并提供完整性(检测篡改)。
一次 TLS 握手的概要:
- 客户端连接并提议密码选项。
- 服务器挑一个并发送它的数字证书(带它的公钥)——颁发和验证这些证书是数字认证。
- 客户端检查该证书。
- 两端用非对称密码学交换一个新鲜的会话密钥(session key)。
- 所有后续流量用会话密钥用快速的对称加密。
结果是一个为更高层协议(HTTP、SMTP)加密、认证、完整性检查的隧道。它在任何发送敏感信息的地方都适用:HTTPS 网络浏览、网上银行和支付、安全电子邮件,以及 VPN。
探索The TLS handshake
Step through what happens before a padlock appears. The slow public-key crypto is used only to agree a shared key; the actual page then travels under fast symmetric encryption.
词汇表 训练英文 中文 拼音 TLS 传输层安全 chuán shū céng ān quán 17.1
数字证书
一个数字证书(digital certificate)把一个身份(一个域、一个组织)绑定到一个公钥,并由一个受信任的证书颁发机构(Certificate Authority,CA)签名。它包含主体(它标识谁)、主体的公钥、颁发者(CA)、一个有效期,以及 CA 对所有这些的签名。

一个证书颁发机构颁发一个把一个身份绑定到一个公钥的数字证书 要验证一个证书,客户端(它持有一个受信任的根 CA 列表):
- 检查过期日期。
- 检查主体名匹配 URL。
- 检查它由一个受信任的 CA 签名,用 CA 的公钥来验证签名。
- 沿证书链往上一直到一个受信任的根。
若任何一项失败,浏览器显示"你的连接不是私密的"警告。当它干净地验证时,客户端知道身份被一个受信任的 CA 审核过、公钥真的属于那个身份,而证书是当前的。
词汇表 训练英文 中文 拼音 digital certificate 数字证书 shù zì zhèng shū Certificate Authority 证书颁发机构 zhèng shū bān fā jī gòu 17.1
数字签名
一个数字签名(digital signature)证明谁签了一个消息以及它没有被改变。要签名:
- 计算消息的一个密码散列。
- 用发送方的私钥加密该散列——那就是签名。
- 发送消息和签名。
要验证:计算收到的消息的散列;用发送方的公钥解密签名以得到发送方的散列;比较。若它们匹配,消息被私钥的持有者签名(身份验证(authentication))且没有被改变(完整性)。一个签名不隐藏消息——要同时保密,就既加密又签名。

签名把消息散列并用私钥加密摘要;接收方用公钥检查它 Putting it together
一个到
https://www.bank.com的安全请求:服务器发送它的证书;客户端对照受信任的 CA 验证它;客户端用服务器的公钥来交换一个会话密钥;然后数据用那个密钥加密流动。加密阻止窃听者,证书证明服务器的身份,而完整性检查阻止一个中间人攻击(man-in-the-middle)篡改数据。例题。 Alice 给 Bob 发送一份合同。她希望 Bob 能确信这份合同来自她本人且未被篡改,并且希望别人都读不到它。她要用哪些密钥?方向如何?这是两件不同的事,需要两对不同的密钥。用于签名(身份验证与完整性):Alice 对合同做哈希,并用她自己的私钥加密这个哈希值;Bob 用 Alice 的公钥解密它,再与自己对该消息算出的哈希值比对。只有 Alice 持有她的私钥,所以只有她能生成它。用于机密性:Alice 用 Bob 的公钥加密合同本身,这样只有 Bob 的私钥才能打开它。有一条规则能把这四者理清:用自己的私钥签名,用接收方的公钥加密。只有签名本身并不能隐藏消息内容。
词汇表 训练英文 中文 拼音 digital signature 数字签名 shù zì qiān míng authentication 身份验证 shēn fèn yàn zhèng man-in-the-middle 中间人攻击 zhōng jiān rén gōng jī 17.1
考试技巧
- 区分对称加密(一个共享密钥,快)和非对称(一个公钥/私钥对)。
- 解释 TLS 握手以及为什么一个来自 CA 的数字证书证明身份。
- 解释一个数字签名:把消息散列,然后用私钥加密该散列——它证明完整性和来源。
-
18
人工智能(AI)
18.1
人工智能(AI)
大纲
Candidates should be able to: Notes and guidance Show understanding of how graphs can be used to aid Artificial Intelligence (AI) Purpose and structure of a graph Use A algorithm* and Dijkstra’s algorithm to perform searches on a graph Candidates will not be required to write algorithms to set up, access, or perform searches on graphs Show understanding of how artificial neural networks have helped with machine learning Show understanding of Deep Learning, Machine Learning and Reinforcement Learning and the reasons for using these methods. Understand machine learning categories, including supervised learning, unsupervised learning Show understanding of back propagation of errors and regression methods in machine learning 来源:剑桥国际大纲
人工智能(artificial intelligence,AI)构建做通常需要人类智能的任务的系统——识别语音和图像、翻译、玩游戏、驾驶、生成文本。大多数现代 AI 用机器学习(machine learning)——从数据中学习模式而不是被一步步编程的算法。在它之内,用有许多层的神经网络(neural networks)的深度学习(deep learning)自 2010 年代以来一直占主导。
一个人形机器人(humanoid robot)把这些能力中的许多放进一个身体:它用 AI 看脸、理解语音,并以逼真的方式移动它的脸和手臂。

一个人形机器人用 AI 像人一样看、听和回应 
深度学习是机器学习的一部分,机器学习是 AI 的一部分 探索AI learning type lab
Classify AI examples by the type of learning or concern involved.
词汇表 训练英文 中文 拼音 artificial intelligence 人工智能 rén gōng zhì néng deep learning 深度学习 shēn dù xué xí neural networks 神经网络 shén jīng wǎng luò humanoid robot 人形机器人 rén xíng jī qì rén 18.1
人工智能中的图
许多 AI 问题坐在一个图(graph)上——节点(nodes,状态、地点)由边(edges,移动、关系)连接。
- 寻路:道路构成一个图;最短路线是一个图搜索(Dijkstra 算法、A* 算法)。
- 玩游戏:每个棋盘位置是一个节点,每步是一条边;带 alpha-beta 剪枝的极小化极大(minimax)搜索博弈树。
- 状态空间搜索:一个规划问题是通过应用算子在状态之间移动以到达一个目标。
- 知识表示:一个语义网络(semantic network)以概念为节点、关系为边("狗 IS-A 动物");一个知识图谱(knowledge graph)为搜索引擎和助手存储关于世界的事实。

AI 问题常坐在一个图上;这里最短路径被高亮 导航图的标准工具包括广度优先搜索(breadth-first search)和深度优先搜索(depth-first search)。
词汇表 训练英文 中文 拼音 graph 图 tú nodes 节点 jié diǎn edges 边 biān minimax 极小化极大 jí xiǎo huà jí dà semantic network 语义网络 yǔ yì wǎng luò knowledge graph 知识图谱 zhī shí tú pǔ breadth-first search 广度优先搜索 guǎng dù yōu xiān sōu suǒ depth-first search 深度优先搜索 shēn dù yōu xiān sōu suǒ 18.1
人工神经网络(ANN)
一个 ANN 受大脑神经元的启发。一个人工神经元(artificial neuron):
- 取几个输入值,把每个乘以一个权重(weight),并把它们加起来,再加上一个偏置项(bias term)。
- 对这个和应用一个激活函数(activation function,一个非线性函数,如 ReLU)。
- 输出结果,它馈入更靠后的神经元。

一个单一的神经元:每个输入乘以它的权重、加上一个偏置求和,然后一个激活函数 神经元坐在层里:一个输入层、一个或多个隐藏层(hidden layers,在那里学到有用的内部模式),和一个输出层。有许多隐藏层时,它是一个深度神经网络(deep neural network),而训练它就是深度学习。

一个带一个输入层、两个隐藏层和一个输出层的神经网络 ANN 让模型直接从原始数据(像素、音频、文本)学习复杂模式,而不需要手工设计的特征——推动了图像识别(image recognition)、语音识别(speech recognition)、机器翻译(machine translation)和玩游戏的突破。它们在大量数据、含噪或非常复杂的输入,以及太难用显式规则捕获的模式上做得好。
探索Tap the parts of a neural network
Explore the layers. Data flows left to right: the input layer takes the features, the hidden layers learn patterns, and the output layer gives the answer — with every connection carrying a weight that training adjusts.
词汇表 训练英文 中文 拼音 artificial neuron 人工神经元 rén gōng shén jīng yuán weight 权重 quán zhòng bias term 偏置项 piān zhì xiàng activation function 激活函数 jī huó hán shù hidden layers 隐藏层 yǐn cáng céng deep neural network 深度神经网络 shēn dù shén jīng wǎng luò image recognition 图像识别 tú xiàng shí bié speech recognition 语音识别 yǔ yīn shí bié machine translation 机器翻译 jī qì fān yì 18.1
机器学习、深度学习与强化学习
Machine learning
总括术语——任何从数据中学习的算法。三种范式:
- 监督学习(supervised learning)——数据有标签(labels,图像被标为"猫"/"狗");算法学习输入 → 标签。用于分类(classification,一个类别)和回归。
- 无监督学习(unsupervised learning)——没有标签;算法找出结构,例如相似客户的一个聚类(cluster)。
- 强化学习(下面)。
当显式规则不切实际时用 ML(垃圾邮件过滤器、推荐、欺诈检测)。

监督学习:一个模型在带标签的数据上训练,然后识别新数据 Deep learning
ML 的一个子集,用深度神经网络。较低的层学习简单模式(边缘、音素),较高的层把它们组合成抽象概念。它需要大量数据和大量计算(GPU);对于小数据集,更简单的 ML 方法往往做得更好。
Reinforcement learning
在强化学习(reinforcement learning)中,一个智能体(agent)在一个环境中行动;每个动作改变状态并返回一个奖励(reward)。智能体通过试错(trial and error,一开始没有标签)学习一个随时间最大化总奖励的策略(policy,一个策略)。用于序贯决策问题——游戏、机器人控制、自动驾驶。

强化学习:智能体行动,环境返回一个新状态和一个奖励,而智能体从中学习 一辆自动驾驶汽车(self-driving car)是一个真实的例子。激光雷达(lidar)和摄像头传感器(车顶上旋转的单元)建立道路的一个实时图像,而一个学到的策略决定如何安全地转向、加速和刹车。

一辆自动驾驶汽车用摄像头和激光雷达传感器看它周围的道路 
一条生产线上的工业机器人臂:强化学习能教一个机器人控制它的移动 词汇表 训练英文 中文 拼音 machine learning 机器学习 jī qì xué xí supervised learning 监督学习 jiān dū xué xí labels 标签 biāo qiān classification 分类 fēn lèi unsupervised learning 无监督学习 wú jiān dū xué xí cluster 聚类 jù lèi reinforcement learning 强化学习 qiáng huà xué xí agent 智能体 zhì néng tǐ reward 奖励 jiǎng lì policy 策略 cè lüè self-driving car 自动驾驶汽车 zì dòng jià shǐ qì chē lidar 激光雷达 jī guāng léi dá 18.1
训练神经网络:反向传播
训练调整权重,使输出匹配目标。标准方法是带梯度下降(gradient descent)的反向传播(backpropagation,误差的反向传播)。对每个训练样例:
- 前向传播(forward pass)——把输入馈送到输出。
- 计算误差,用一个损失函数(loss function,一个表示输出有多错的单一数字)。
- 反向传播(backward pass)——把误差向后传播,用链式法则找出每个权重的梯度(它对误差贡献了多少)。
- 更新权重,走一小步(由学习率(learning rate)设定)以减少误差。
在许多样例和许多趟(训练轮次(epochs))上重复,直到误差停止缩小。名字"反向"来自第 3 步:误差从输出向后流向输入,所以每个权重的梯度在一趟中被找到。训练之后,一个新输入只需要一次前向传播就能得到一个预测。

训练调整权重以到达最小误差 词汇表 训练英文 中文 拼音 backpropagation 反向传播 fǎn xiàng chuán bō gradient descent 梯度下降 tī dù xià jiàng loss function 损失函数 sǔn shī hán shù learning rate 学习率 xué xí lǜ epochs 训练轮次 xùn liàn lún cì 18.1
回归
一些任务预测一个数(一个房价、明天的温度)——回归(regression),与分类(一个类别)相对。
线性回归(linear regression)拟合一条直线(或超平面):
$$y = m_{1} x_{1} + m_{2} x_{2} + \ldots + m_{n} x_{n} + c.$$选择系数以最小化误差平方和,对照训练数据。当关系看起来大致线性且你想要一个可解释的模型时用它。对于弯曲的数据,用多项式、决策树或神经网络的回归方法——同样的思想:定义一个模型、定义一个损失,并调整参数以最小化它。回归和分类都是监督的;选择取决于答案是一个数还是一个类别。

线性回归拟合使总误差平方(虚线间隙)尽可能小的那条线 探索Fitting a regression line
Drag the controls. Linear regression draws the straight line that makes the squared distances to the data points as small as possible — then it predicts a number for any new input.
词汇表 训练英文 中文 拼音 regression 回归 huí guī linear regression 线性回归 xiàn xìng huí guī 18.1
人工智能在真实场景中的应用
许多考试场景用同样的模式——一个在带标签的数据上训练的深度学习模型,常常几个组合成一个流水线:
- 在一个自动商店的客户识别:系统在带标签的人脸图像上训练;一个摄像头捕获一张脸;图像识别提取一个表示;它对照注册的客户被匹配;最接近的匹配识别该人。
- 从图像读文本:图像识别找到文本区域;光学字符识别(optical character recognition)提取字符;机器翻译转换它们;文本转语音(text-to-speech)大声读它们。
- 收银台商品检测:在带标签的产品图像上训练的物体检测 AI,看到哪些商品进入一个购物篮并向账户收费。
当一个用户与系统交互时,模型是快的——它只做前向传播推理;智能在训练期间学到的模式中。
例题。 对每个任务,说明它需要回归还是分类,以及人工神经网络的输出层会是什么样:(a) 预测明天的气温;(b) 判断一封邮件是否为垃圾邮件。要问的是被预测的是哪一类东西。(a) 气温是连续标度上的一个数值,所以这是回归,输出层是持有该数值的单个神经元。(b) 垃圾邮件与非垃圾邮件是一个类别,所以这是分类,输出给出每个类别的概率。两者都是有监督学习:各自都需要带标签的样本来训练,训练通过反向传播调整权重以减小误差。决定性的问题很简单,就是数值还是类别 - 而不是这个任务感觉有多难。
词汇表 训练英文 中文 拼音 optical character recognition 光学字符识别 guāng xué zì fú shí bié text-to-speech 文本转语音 wén běn zhuǎn yǔ yīn 18.1
考试技巧
- 区分机器学习、深度学习和强化学习,各带一个例子。
- 描述一个 ANN(输入、隐藏和输出层;加权连接)以及反向传播如何调整权重以削减误差。
- 区分监督对无监督学习;回归预测一个连续值。
-
19
计算思维与问题求解
19.1
算法
大纲
Candidates should be able to: Notes and guidance Show understanding of linear search and binary search methods Write an algorithm to implement a linear search Write an algorithm to implement a binary search The conditions necessary for the use of a binary search How the performance of a binary search varies according to the number of data items Show understanding of insertion sort and bubble sort methods Write an algorithm to implement an insertion sort Write an algorithm to implement a bubble sort Performance of a sorting routine may depend on the initial order of the data and the number of data items Show understanding of and use Abstract Data Types (ADT) Write algorithms to find an item in each of the following: linked list, binary tree Write algorithms to insert an item into each of the following: stack, queue, linked list, binary tree Write algorithms to delete an item from each of the following: stack, queue, linked list Show understanding that a graph is an example of an ADT. Describe the key features of a graph and justify its use for a given situation. Candidates will not be required to write code for a graph structure Show how it is possible for ADTs to be implemented from another ADT Describe the following ADTs and demonstrate how they can be implemented from appropriate built-in types or other ADTs: stack, queue, linked list, dictionary, binary tree Show understanding that different algorithms which perform the same task can be compared by using criteria (e.g. time taken to complete the task and memory used) Including use of Big O notation to specify time and space complexity 来源:剑桥国际大纲
大 O:算法如何伸缩 插入排序:把每张牌滑入位置 冒泡排序,一趟接一趟 二分查找:折半并征服 一个搜索(search)在一个集合(常常是一个数组(array))中找一个目标值并返回它的位置,或"未找到"。

搜索一个已排序的列表,像一本电话簿,比逐条检查每个条目快得多 Linear search
一个线性查找(linear search)从头走到尾,把每个元素与目标比较:
FOR i ← 1 TO n IF A[i] = target THEN RETURN i NEXT i RETURN -1 // not found不需要准备,所以它在任何列表上都能用。最坏情况 O($n$)(目标在末端或不存在);最好情况 1 次比较。在未排序的数据或小列表上用它。(返回的
-1是一个哨兵值——一个表示"未找到"的不可能位置;调用者测试IF result = -1。)
线性查找依次检查每个字母——找到 W 需要 23 次比较 Binary search
一个二分查找(binary search)需要数据已排序。看中间元素;若它是目标,完成;若目标更小,搜索左半,否则右半——每次把范围折半:
low ← 1 high ← n WHILE low <= high DO mid ← (low + high) DIV 2 IF A[mid] = target THEN RETURN mid IF A[mid] < target THEN low ← mid + 1 ELSE high ← mid - 1 ENDIF ENDWHILE RETURN -1最坏情况 O($\log_{2} n$)——对一百万项,约 20 次比较。在大的已排序数组上比线性查找快得多,但你必须先排序(一个一次性的 O($n \log n$) 代价),若你搜索许多次就值得。

二分查找每步把范围折半(low / mid / high)——找到 W 只需 3 次比较 探索Linear vs binary search
Search for a value. Binary search halves the list each step (only on sorted data); linear search checks one by one.
词汇表 训练英文 中文 拼音 array 数组 shù zǔ linear search 线性查找 xiàn xìng chá zhǎo binary search 二分查找 èr fēn chá zhǎo 19.1
排序算法
Bubble sort
一个冒泡排序(bubble sort)反复走过数组,交换顺序错误的相邻对,所以最大的每趟"冒泡"到末端:
FOR pass ← 1 TO n - 1 swapped ← FALSE FOR i ← 1 TO n - pass IF A[i] > A[i + 1] THEN temp ← A[i] A[i] ← A[i + 1] A[i + 1] ← temp swapped ← TRUE ENDIF NEXT i IF swapped = FALSE THEN EXIT FOR // already sorted NEXT pass最好情况 O($n$)(已排序,带早退);平均/最坏 O($n^{2}$)。简单但对大的 $n$ 慢。
Insertion sort
一个插入排序(insertion sort)从左边构建一个已排序的前缀,通过把较大的向右移把每个新元素插入位置:
FOR i ← 2 TO n key ← A[i] j ← i - 1 WHILE j >= 1 AND A[j] > key DO A[j + 1] ← A[j] j ← j - 1 ENDWHILE A[j + 1] ← key NEXT i最好情况 O($n$)(已排序);最坏 O($n^{2}$)。适合小或近乎已排序的数组。它原地(in place)排序并且是稳定的(stable,保持相等元素的顺序)。
Tracing a sort
一个常见的任务是显示每一次外趟之后的数组。对
[D, T, H, R]用插入排序:趟 1(key T)无变化;趟 2(key H)→[D, H, T, R];趟 3(key R)→[D, H, R, T]。
[D, T, H, R]的一个插入排序,一趟接一趟把每个 key 移入它的位置探索Watch a sort run
Step through a sort and watch the bars settle into order — how a sorting algorithm works pass by pass.
词汇表 训练英文 中文 拼音 bubble sort 冒泡排序 mào pào pái xù insertion sort 插入排序 chā rù pái xù in place 原地 yuán dì stable 稳定 wěn dìng 19.1
算法中的抽象数据类型
主题 10 的抽象数据类型(ADT)出现在许多算法内部:一个栈(stack)驱动深度优先遍历和撤销;一个队列(queue)驱动广度优先遍历和打印排序;一个链表(linked list)让数据增长和收缩。
ADT 可以从其他 ADT 构建,而不只是从数组:一个队列从两个栈;一个栈从一个链表(push = 在头部前置一个节点(node));一个队列从一个带头和尾指针(pointers)的链表;一棵二叉树(binary tree)从带两个孩子指针的节点;一个字典(dictionary)存储键→值对(常在一个哈希表上)。这样分层分离关注点——使用该 ADT 的算法不必知道它如何构建。

一棵二叉树:每个节点最多有两个孩子节点 
一棵二叉树的三种深度优先遍历:前序、中序(已排序顺序)和后序 词汇表 训练英文 中文 拼音 stack 栈 zhàn queue 队列 duì liè linked list 链表 liàn biǎo node 节点 jié diǎn pointers 指针 zhǐ zhēn binary tree 二叉树 èr chā shù dictionary 字典 zì diǎn 19.1
比较算法
Time complexity
时间复杂度(time complexity)是运行时间如何随输入大小 $n$ 增长,写成大O表示法(Big-O notation,主导项):O(1) 常数、O($\log n$) 二分查找、O($n$) 线性查找、O($n \log n$) 好的排序、O($n^{2}$) 冒泡/插入排序。较小的阶在规模上更好,即使另一个算法对小 $n$ 更快。
具体地说:要排序一百万项,一个 $O(n \log n)$ 排序在不到一秒内完成,而一个 $O(n^{2})$ 排序可能花几分钟。
例题。 一个已排序的列表容纳 $1000$ 项。每个搜索在最坏情况下需要多少次比较?
一个线性查找一次检查一项,所以它可能需要多达 $1000$ 次比较——这是 $O(n)$。一个二分查找每步把列表折半,所以它最多需要 $\lceil \log_2 1000 \rceil = 10$ 次比较——这是 $O(\log n)$。把列表翻倍到 $2000$ 项只给二分查找加一次比较,但给线性查找加多达另外 $1000$ 次——这就是为什么增长的阶,而不是原始速度,决定规模上的赢家。

常见的增长阶如何比较:较小的阶在规模上取胜 
排序时间如何随元素数目 $n$ 增长:$O(n^2)$ 排序爬升离开一个 $O(n\log n)$ 排序 Space complexity
空间复杂度(space complexity)是需要的额外内存。冒泡和插入排序用 O(1) 额外(原地);归并排序用 O($n$);递归用与它的深度成正比的栈内存。常常有一个时间–内存权衡。
Other criteria
简单性(更容易编码和维护)、稳定性,以及自适应性(在近乎已排序的数据上更快)。正确的算法取决于数据和约束。
探索How running time grows with n
Slide n upward and compare the curves: O(1) and O(log n) stay almost flat, O(n) rises steadily, O(n²) explodes. This is why Big-O — not a stopwatch — is how we compare algorithms on large inputs.
探索Big-O growth
Change the input size n and compare how fast each algorithm's work grows — the idea behind time complexity.
词汇表 训练英文 中文 拼音 time complexity 时间复杂度 shí jiān fù zá dù Big-O notation 大O表示法 dà O biǎo shì fǎ space complexity 空间复杂度 kōng jiān fù zá dù 19.2
递归
大纲
Candidates should be able to: Notes and guidance Show understanding of recursion Essential features of recursion How recursion is expressed in a programming language Write and trace recursive algorithms When the use of recursion is beneficial Show awareness of what a compiler has to do to translate recursive programming code Use of stacks and unwinding 来源:剑桥国际大纲
递归:调用栈盘绕起来又展开 递归算法用递归(recursion):例程用同一问题的一个更小的版本调用它自己,直到一个基本情形(base case)结束这条链。它有两部分:基本情形(小到能直接解决——没有它递归永不停止)和递归情形(recursive case,减小输入并调用它自己)。
阶乘(factorial):
FUNCTION Factorial(n : INTEGER) RETURNS INTEGER IF n = 0 OR n = 1 THEN RETURN 1 ELSE RETURN n * Factorial(n - 1) ENDIF ENDFUNCTION递归对自相似的问题是自然的:树、分治(divide-and-conquer,二分查找、归并排序)和嵌套数据。当它不合适时,一个循环通常更清爽。
Tracing a recursive call
对
Factorial(4):调用往下走到Factorial(1)=1,然后展开往上乘回来:2*1=2、3*2=6、4*6=24。最终结果24。在一个栈上跟踪每个待处理的调用。
递归用调用栈:调用把帧往下压到基本情形,然后返回向上展开 Risks
- 若错过基本情形则无限递归——用一个栈溢出(stack overflow)崩溃。
- 深度递归的高内存使用。
- 若它重复工作则慢(朴素的斐波那契是指数的——用一个循环或记忆化(memoisation))。
探索Recursion unwinds from the leaves up
Step through fib(4) in the order the calls actually finish: the leaves (base cases) resolve first, then each parent combines its children. Notice fib(2) is computed twice — that repeated work is why naive recursion is slow.
词汇表 训练英文 中文 拼音 recursion 递归 dì guī base case 基本情形 jī běn qíng xíng recursive case 递归情形 dì guī qíng xíng factorial 阶乘 jiē chéng divide-and-conquer 分治 fēn zhì stack overflow 栈溢出 zhàn yì chū memoisation 记忆化 jì yì huà 19.2
编译器如何处理递归代码
递归需要每个调用有它自己的副本,包括它的参数(parameters)和局部变量(local variables)。编译器把这些保存在调用栈(call stack)上。对每个调用它压入一个栈帧(stack frame),容纳参数、局部变量和返回地址(return address,在调用者中在哪里恢复)。当函数返回时,返回值被交回、帧被弹出,而控制在返回地址恢复。
因为每个调用有它自己的帧,递归调用不会践踏彼此的变量。栈对深度递归可能变得很大,这就是为什么非常深的递归可能使它溢出。这是用于普通(非递归)调用的同一个调用-返回机制——没有特殊的"递归机制"。
词汇表 训练英文 中文 拼音 parameters 参数 cān shù local variables 局部变量 jú bù biàn liàng call stack 调用栈 diào yòng zhàn stack frame 栈帧 zhàn zhēn return address 返回地址 fǎn huí dì zhǐ 19.2
考试技巧
- 把每个算法匹配到它的大O:线性查找 $O(n)$、二分查找 $O(\log n)$、冒泡/插入 $O(n^2)$、好的排序 $O(n \log n)$。
- 二分查找需要一个已排序的列表并每步把搜索空间折半。
- 一个递归例程需要一个基本情形和一个对它自己的调用;解释深度递归如何使调用栈溢出。
- 当被要求时用一个表格追踪一个排序或搜索,显示每一趟。
-
20
进阶程序设计
20.1
编程范式
大纲
Candidates should be able to: Notes and guidance Understanding what is meant by a programming paradigm Show understanding of the characteristics of a number of programming paradigms: • Low-level Low-level Programming: • understanding of and ability to write low-level code that uses various addressing modes: immediate, direct, indirect, indexed and relative • Imperative (Procedural) Imperative (Procedural) programming: • Assumed knowledge and understanding of Structural Programming (see details in AS content section 11.3) • understanding of and ability to write imperative (procedural) programming code that uses variables, constructs, procedures and functions. See details in AS content • Object Oriented Object-Oriented Programming (OOP): • understanding of the terminology associated with OOP (including objects, properties/attributes, methods, classes, inheritance, polymorphism, containment (aggregation), encapsulation, getters, setters, instances) • understanding of how to solve a problem by designing appropriate classes • understanding of and ability to write code that demonstrates the use of OOP • Declarative Declarative programming: • understanding of and ability to solve a problem by writing appropriate facts and rules based on supplied information • understanding of and ability to write code that can satisfy a goal using facts and rules 来源:剑桥国际大纲
一个编程范式(programming paradigm)是一种编程风格——一种构造程序的方式,有它自己的思想和语言特性。本考纲里有四个编程范式。

四个范式:低级、命令式、面向对象和声明式 Low-level programming
贴近硬件地用机器码(machine code)或汇编语言(assembly language)编程,那里每条指令映射到 CPU 运行的东西。它给出对寄存器(registers)和内存地址(memory addresses)的直接访问,用不同的寻址方式(addressing modes,立即、直接、间接、变址和相对)。它非常快而紧凑,但特定于架构、繁琐,且难以维护。这是低级(low-level)编程,用于设备驱动、固件和引导加载程序。
Imperative (procedural) programming
在命令式编程(imperative programming)中,程序员写一个改变程序状态的命令序列——赋值、条件、循环、函数调用。变量(variables)容纳状态;语句改变它;代码被组织成过程和函数(也叫结构化编程)。这是主题 9 和 11 的风格(Python、C)。当算法有清晰的顺序步骤时很强。
Object-oriented programming (OOP)
在面向对象编程(object-oriented programming)中,程序从对象(objects)构建——把数据(属性(attributes))和操作(方法(methods))结合的单元。对象是类(classes)的实例(instances)。四大支柱:
- 封装(encapsulation)——一个对象的数据被隐藏在它的方法之后;外部代码只用公共方法,而不直接用数据。这保护对象并让它的内部改变而不弄坏调用者。例如,一个
BankAccount隐藏它的balance;你只通过deposit()和withdraw()改变它,它们能强制执行一条规则如"永不低于零"。 - 继承(inheritance)——一个子类(subclass)特化一个父类(superclass),继承它的属性和方法并添加或重写(overriding)它们。为"是一个"("一个 Manager 是一个 Employee")建模。
- 多态(polymorphism)——不同的对象对同一个方法调用做出不同的响应;调用者不必知道确切的类型。每个
Shape有Area(),而一个Circle和一个Rectangle各以它们自己的方式实现它。 - 抽象(abstraction)——显示一个简单的接口并隐藏实现。
其他术语:
- 一个构造函数(constructor)是一个在对象被创建时运行的特殊方法,用来设置它的属性。
- getter 和 setter 通过方法读写一个对象的属性(它的性质)。
- 聚合(aggregation)和包含(containment)从其他对象构建一个对象(一个"有一个"关系)。
OOP 用于大型系统、GUI、模拟和游戏。

多态:同一个方法调用运行每个对象自己的代码 
一个 Shape 的类图:私有属性和公共方法 
继承:partTime 和 fullTime 是 employee 的子类 
封装:一个对象的数据是私有的,只通过它的公共方法访问 Declarative programming
在声明式编程(declarative programming)中,你说要计算什么,而不是怎么——运行时算出步骤。两种:
- 函数式编程(functional programming)——从纯函数(pure functions,无副作用(side effects);同样的输入总是给出同样的输出)组合而成。例子:Haskell、Lisp。
- 逻辑编程(logic programming)——陈述事实和规则;引擎通过推理回答一个目标(goal,查询)。例子:Prolog。
一个熟悉的声明式例子是 SQL(结构化查询语言):
SELECT * FROM Customer WHERE Country = 'UK'说你想要什么,而不是怎么走过记录。Comparing paradigms
范式 强项 典型语言 低级 最大控制、速度 assembly 命令式 直接、直观 C, Python 面向对象 模块化、为实体建模 Java, C#, Python 函数式 清晰、无副作用 Haskell, F# 逻辑 推理、规则 Prolog 数据库 数据查询 SQL 现代语言常常混合范式——Python 支持过程式、OOP 和函数式全部。正确的那个取决于问题。
探索Programming concept lab
Connect examples to the programming idea they show.
词汇表 训练英文 中文 拼音 programming paradigm 编程范式 biān chéng fàn shì machine code 机器码 jī qì mǎ assembly language 汇编语言 huì biān yǔ yán registers 寄存器 jì cún qì memory addresses 内存地址 nèi cún dì zhǐ low-level 低级 dī jí imperative programming 命令式编程 mìng lìng shì biān chéng variables 变量 biàn liàng object-oriented programming 面向对象编程 miàn xiàng duì xiàng biān chéng objects 对象 duì xiàng attributes 属性 shǔ xìng methods 方法 fāng fǎ instances 实例 shí lì classes 类 lèi encapsulation 封装 fēng zhuāng inheritance 继承 jì chéng subclass 子类 zi lèi superclass 父类 fù lèi overriding 重写 zhòng xiě polymorphism 多态 duō tài abstraction 抽象 chōu xiàng constructor 构造函数 gòu zào hán shù declarative programming 声明式编程 shēng míng shì biān chéng functional programming 函数式编程 hán shù shì biān chéng pure functions 纯函数 chún hán shù side effects 副作用 fù zuò yòng logic programming 逻辑编程 luó jí biān chéng SQL 结构化查询语言 jié gòu huà chá xún yǔ yán addressing modes 寻址方式 xún zhǐ fāng shì aggregation 聚合 jù hé containment 包含 bāo hán 20.2
文件处理与异常处理
大纲
Candidates should be able to: Notes and guidance Write code to perform file-processing operations Open (in read, write, append mode) and close a file Read a record from a file and write a record to a file Perform file-processing operations on serial, sequential, random files Show understanding of an exception and the importance of exception handling Know when it is appropriate to use exception handling Write program code to use exception handling 来源:剑桥国际大纲
这扩展主题 10 的文件(file)处理,处理串行、顺序和随机(直接存取)文件。伪代码操作:
OPENFILE name FOR READ | WRITE | APPEND(READ 打开一个现有文件,WRITE 创建/覆盖,APPEND 加到末端);READFILE name, line;WRITEFILE name, value;CLOSEFILE name;以及EOF(name),它在末端为 TRUE。读整个文件:
OPENFILE "names.txt" FOR READ WHILE NOT EOF("names.txt") DO READFILE "names.txt", thisName OUTPUT thisName ENDWHILE CLOSEFILE "names.txt"搜索一个文件(找到时停止):
found ← FALSE OPENFILE "people.txt" FOR READ WHILE NOT EOF("people.txt") AND NOT found DO READFILE "people.txt", line IF line = target THEN found ← TRUE ENDWHILE CLOSEFILE "people.txt"Updating a file in place
大多数语言不能原地编辑一个文本文件。而是:打开原始文件为 READ、一个临时文件为 WRITE;对每行,若它应当改变就写新版本,否则写原始;关闭两者;然后用临时文件替换原始文件。同样的模式处理删除行(跳过它们)和插入行。

原地更新一个文件:读原始、把改动写到一个临时文件,然后替换原始 Pitfalls
忘记关闭一个文件(数据可能丢失);本想 APPEND 却打开为 WRITE(覆盖一切);读过
EOF;硬编码的路径——一个像/Users/Admin/data.txt的路径在另一台机器上失效,所以用一个相对常量如DataFile = "./data/scores.txt"。探索File access route
Follow a file from storage to program and back safely.
词汇表 训练英文 中文 拼音 file 文件 wén jiàn 20.2
异常处理
一个异常(exception)是执行期间的一个错误或意外情况——除以零、文件未找到、网络失败、一个数组(array)索引越界。异常处理(exception handling)让一个程序检测它并优雅地响应,而不是崩溃。
它重要是因为真实的程序面对无法事先预防的错误(文件被移动、网络中断、坏输入);没有它,每个操作都需要它自己的
IF检查;而且它把正常流程与错误处理分开,所以主路径读起来干净。例如,一个文件可能在你的程序检查它存在和实际打开它之间被另一个用户删除——你无法预防那个,只能在它发生时处理失败。Pattern
TRY OPENFILE "data.txt" FOR READ READFILE "data.txt", line OUTPUT line CLOSEFILE "data.txt" EXCEPT FileNotFound OUTPUT "Sorry, the file does not exist." EXCEPT ReadError OUTPUT "Sorry, error reading the file." ENDTRYTRY块容纳可能失败的代码;第一个匹配的EXCEPT块运行。真实的语言也有一个包罗一切的EXCEPT和一个FINALLY块,它无论异常是否发生都运行——对清理(关闭文件)有用。
异常流程:一个异常跳到匹配的 EXCEPT;FINALLY 总是在程序继续之前运行 Raising an exception
一个检测到错误的子程序能抛出(raise)一个异常,以便调用者处理它:
PROCEDURE Divide(a : INTEGER, b : INTEGER) RETURNS INTEGER IF b = 0 THEN RAISE DivideByZero ENDIF RETURN a DIV b ENDPROCEDUREWhere to handle exceptions
若响应简单(一个消息、一次重试)就在贴近错误处处理它们,或若只有外层代码知道怎么做就在调用栈(call stack)更高处(一个顶层 GUI 循环记录错误并显示一个友好的对话框)。不要静默地吞掉异常——至少记录它们,否则调试变得不可能。
常见异常:
FileNotFound、IOError、DivisionByZero、IndexOutOfRange、InvalidArgument、NullReference、OutOfMemory。把每个可能失败的操作包在一个带正确EXCEPT处理程序的TRY中,给出一个优雅降级而不是崩溃的程序。例题。 一个会员文本文件需要修改某位会员的电话号码。为什么程序不能直接覆盖那一行?正确的模式是什么?文本文件中各行的长度不同,而文件中并没有空隙来吸收长度差:更长的新内容会侵入下一条记录,更短的则会把旧行的尾巴留在那里。所以正确的模式是:以读方式打开原文件,以写方式打开一个临时文件,逐行读取,对需要修改的那一行写入新版本,其余各行则写入原来的内容,关闭两个文件,然后用临时文件替换原文件。删除(跳过该行)和插入(多写一行)也是同样的套路。注意每一行都要被写出,而不是只写改动的那一行 - 只写新记录、把文件其余部分弄丢,是经典的失误。
探索How exception handling flows
Step through what happens when code fails. The exception jumps out of the normal flow to a handler, FINALLY cleans up either way, and the program carries on instead of crashing.
词汇表 训练英文 中文 拼音 array 数组 shù zǔ exception 异常 yì cháng exception handling 异常处理 yì cháng chǔ lǐ raise 抛出 pāo chū call stack 调用栈 diào yòng zhàn 20.2
考试技巧
- 区分各范式(过程式、面向对象、声明式、低级)以及每个何时适合一个问题。
- 对于 OOP,用一个短例子定义类、对象、继承、封装和多态。
- 解释异常处理(try/catch)以及为什么它胜过让程序崩溃。
- 封装(encapsulation)——一个对象的数据被隐藏在它的方法之后;外部代码只用公共方法,而不直接用数据。这保护对象并让它的内部改变而不弄坏调用者。例如,一个