跳到主要内容
学科

A-Level 计算机科学

剑桥国际 A-Level 计算机科学(9618)由两部分组成,感觉像两门不同的学科。理论部分从信息表示 与通信,一直讲到硬件、处理器基础、系统软件、安全、数据库与伦理。实践部分是算法设计、数据 结构、编程与软件开发,A2 阶段还加入递归、面向对象编程与更复杂的数据结构。

理论卷的评分比大多数学生预期的要"字面"得多。存在一套标准术语——寄存器名称、寻址方式、 范式、validation 与 verification 的确切区别——用自己的话改述通常一分不得。请按考纲原文 记忆定义,而不是按自己的理解。

编程卷奖励的是手写代码的能力:在纸上写到你在脑中就能"编译"通过。历年真题共四个卷种。本站 笔记按考纲主题逐页编写,算法同时给出伪代码与 Python;本站 /code 的每节课都可在浏览器中 直接运行,你可以立刻验证想法,而不是假设它能work。

A-Level 计算机科学历年真题

训练全部词汇
  • 1

    信息表示

    讲义 词汇表
    1.1

    数据表示

    大纲
    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 kilomebi and megagibi and gigatebi 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

    来源:剑桥国际大纲

    二进制计数: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 11102 2 E22E

    十六进制 → 二进制:把每个十六进制数位换成它的 4 位模式。十六进制 → 十进制:把每个数位乘以它的位值。22E $= 2 \times 256 + 2 \times 16 + 14 = 558$

    例题。 把十进制 200 转换成 8 位二进制,然后转换成十六进制。

    $200 = 128 + 64 + 8$,所以二进制是 11001000。分成半字节,1100 1000 $= 12$$8$,即 $\text{C}$$8$,所以十六进制是 C8

    200 的一张二进制位值图:列 128、64、32、16、8、4、2、1 装着位 1,1,0,0,1,0,0,0;两个 4 位半字节 1100 和 1000 变成十六进制数位 C 和 8,所以 200 = 11001000 = 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$)。

    一条从 -128(10000000)到 +127(01111111)的 8 位补码数轴;符号位为 1 的数是负的、符号位为 0 的数是正的,-1 = 11111111 就在 0 = 00000000 下面
    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 这样的分数转换成二进制时的舍入误差。

    一个单数位的七段 LED 显示器元件,显示它的七个分开的条
    一个七段显示器显示一个十进制数位,常由 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 表:字符 A 是码 65 = 01000001,a 是 97 = 01100001,数字 0 是 48 = 00110000,空格是 32 = 00100000
    每个字符被存储为一个数字——几个 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,随着像素变得更大更少而更有块状感
    同一图像以三种分辨率存储,从高(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 乘 8 的黑白网格显示字母 F,每行的二进制模式和它较短的行程码列在旁边
    一个 $8\times8$ 黑白网格中字母 F 的行程编码

    有损方法

    • 图像(JPEG):丢弃眼睛几乎看不见的精细细节和颜色差异。
    • 声音(MP3、AAC):丢弃我们听得不太清楚的音调,以及被较响声音掩盖的安静声音。
    • 视频结合空间(spatial)压缩(在每一帧内,像 JPEG)与时间(temporal)压缩(大多数帧只存储与前一帧的差异)。
    一棵把压缩分类成无损(RLE、字典/ZIP/PNG、霍夫曼)和有损(JPEG 图像、MP3/AAC 声音、视频)的树,每个分支下有例子
    压缩方法:无损对有损,以及常见的例子
    探索

    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 连接在一起。

    几个 LAN 站点分布在一个大区域上,各通过一个中央运营商 WAN 云连接,两个遥远站点之间有一条直接的租用线路
    一个广域网把大区域上的许多系统连接起来
    词汇表 训练
    英文 中文 拼音
    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。
    • 布线——短距离用双绞线;较长、较快的用光纤。
    白色背景上一个 5 端口的千兆以太网交换机,前面有五个编号的 RJ-45 端口和一个电源灯
    一个网络交换机:每个设备的电缆插入它的一个端口
    白色背景上一根黑色的以太网跳线,每端有一个 RJ-45 插头,显示金色的金属触点和锁定夹
    一根双绞线以太网电缆上的一个 RJ-45 插头
    一个寻址到计算机 C 的帧到达一个交换机,交换机只把它从 C 的端口转发出去,让通往 A、B 和 D 的电缆不用
    一个交换机只把每个帧发送到它目标所对应的端口
    词汇表 训练
    英文 中文 拼音
    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 连到一个交换机,交换机通过一个路由器连到互联网和另一个 LAN 或 WAN
    一个路由器把一个 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):

    1. 载波侦听——发送前先听;如果电缆繁忙就等待。
    2. 多路访问——许多设备共享介质。
    3. 冲突检测——发送时持续听;一次碰撞就是一次冲突。
    4. 发生冲突时,两者都停止,发送一个短暂的"干扰"信号,然后等待一个随机退避时间再重试。

    现代交换式以太网使用全双工(full-duplex)点对点链路,所以冲突不再发生。

    CSMA/CD 过程的一张流程图:组装帧、检查线路空闲、发送、检测冲突、发送干扰信号、退避并重试直到一个最大次数
    用于处理共享介质上冲突的 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)。

    实时流作为一个短流水线工作:

    1. 捕捉并采样源(一个摄像机或麦克风)。
    2. 编码它,用压缩(compression)缩小数据。
    3. 作为数据包在网络上发送它。
    4. 接收方缓冲一点,然后实时播放它——丢弃任何迟到的数据包,因为一个直播流不能等它。

    这里用有损(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 位是网络)给出。子网划分改善管理、减少广播流量,并改善安全。

    六个部门子网,各有它自己的 /24 网络 ID,全都通过一个中央路由器连接,该路由器也到达互联网
    把一个网络分成子网,每个部门一个网络 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:httphttps 等。
    • domain name 域名:一个可读的服务器地址。
    • path:那台服务器上的资源。

    域名系统(Domain Name System,DNS,也叫域名服务)是一组分布式服务器,它把域名变成 IP 地址。当你输入一个 URL 时,浏览器向一个 DNS 解析器询问 IP,解析器查询 DNS 服务器(根 → 顶级 → 权威)直到找到它;然后浏览器连到那个 IP 并请求路径。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 盘)。
    白色背景上一个全尺寸的白色无线 QWERTY 计算机键盘
    一个键盘:用于输入文本和命令的常见输入设备
    白色背景上一个现代无线计算机鼠标,有两个按钮和一个滚轮
    一个鼠标:一个指点输入设备
    白色背景上一个平板扫描仪,扫描后一张照片从前面出来
    一个平板扫描仪:把一张纸页变成一个数字图像的输入设备
    一个圆形底座上一个银色的平面屏幕计算机显示器,屏幕是暗的
    一个显示器:显示屏幕图像的常见输出设备
    探索

    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 打印机,带玻璃前面板,里面正在打印一个部件
    一台 FDM 3D 打印机通过熔化塑料丝逐层构建一个物体

    麦克风和扬声器

    一个麦克风(microphone)把声音变成一个电信号(一个膜片振动,改变电容器(capacitor)的电荷或线圈位置);信号被一个模数转换器(analogue-to-digital converter,ADC)数字化。一个扬声器做相反的——一个变化的信号驱动一个磁场中的线圈,移动一个纸盆来发声。

    白色背景上一个黑色的 USB 桌面麦克风立在它的底座上
    一个麦克风把声音变成一个电信号
    一个麦克风的剖面:声波撞击一个连到围绕一个永磁体的线圈的膜片,给出一个输出电流
    一个麦克风的内部:声音使膜片和线圈振动以产生一个电流
    一个扬声器的剖面:一个围绕铁芯、靠近永磁体的线圈中的电流移动一个纸盆以产生声波
    一个扬声器的内部:线圈中一个变化的电流移动纸盆来发声

    磁性硬盘(HDD)

    一个硬盘(hard disk)把数据存储在涂有磁性材料的旋转盘片上。每个盘片有分成扇区(sectors)的磁道(tracks)。一个读写头(read/write head)浮在其上方,磁化微小区域(写)或感应它们(读)。每吉字节便宜,但比 SSD 慢,并有运动部件。

    一个打开的 3.5 英寸硬盘驱动器:一个闪亮的圆形盘片,执行臂和读写头停在它上方
    一个打开的硬盘:执行臂载着读写头越过一个盘片
    一个硬盘盘片画成同心磁道圆,一条磁道被突出显示,分成扇区
    一个硬盘盘片上的磁道和扇区

    固态(闪存)存储器

    一个固态硬盘(solid-state drive)把数据作为电荷存储在晶体管(transistors)中,没有运动部件。随机访问比 HDD 快、更耐用、功耗更低,但每吉字节更贵;每个单元在许多次写入后会磨损。

    白色背景上一个固态硬盘打开的电路板:左边一个大的黑色闪存芯片、一个较小的控制器芯片、许多微小的元件,以及底边一个扁平的 SATA 连接器——没有盘片或运动部件
    一个 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 是非易失性且只读的
    RAM 是易失性且读/写的;ROM 是非易失性且只读的

    ROM 启动系统;然后 RAM 容纳活动的工作。

    一个 RAM 模块(DIMM):一根电路板条,存储芯片上有一个黑色的散热片,一个金边连接器插入主板上的一个插槽
    一个 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)——用传感器数据通过执行器来决定并行动,通常在一个反馈回路中(一个开关锅炉的恒温器)。
    流程图:传感器通过一个 ADC 把信号发送给处理器,处理器要么为监控报告一个警告,要么在一个反馈回路中向执行器发送信号进行控制
    监控报告数据;一个控制系统通过一个反馈回路行动

    传感器和执行器

    一个传感器(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、AND、OR、NAND、NOR 和 XOR 门的电路符号,在一个二乘三的网格中
    六个逻辑门的符号

    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 门。

    一个逻辑电路:输入 A 和 B 上一个 AND 门、输入 C 上一个 NOT 门,两者馈入一个给出输出 X 的 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 widthclock speedcache 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 的主要部件

    所有这些部件都位于一个小芯片内。本节后面的图显示它们如何连接;下面的照片显示实物。

    白色背景上一个 Intel CPU 芯片的底面,一个扁平的方块,覆盖着数百个小金色触点垫的网格,它们压到主板插座上
    一个现代 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 的框图,显示 PC、MAR、MDR、CIR、ACC、状态寄存器、控制单元、ALU 和系统时钟,由地址、数据和控制总线连到主存储器和输入/输出
    冯·诺依曼 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、存储器和输入/输出各接入系统总线内的地址总线(单向)、数据总线和控制总线
    连接 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
    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),每条机器指令运行一次。

    取指

    1. PC 的地址被复制到 MAR。
    2. PC 被递增以指向下一条指令。
    3. 一个信号经控制总线传送。
    4. 存储器把指令放到数据总线上。
    5. 它被复制到 MDR,然后到 CIR。
    取指的寄存器传送按顺序:1 PC 的地址去 MAR;2 MAR 把地址发给存储器;3 指令返回到 MDR;4 MDR 把它复制到 CIR;同时 PC 被递增
    一次取指中的寄存器传送:PC → MAR → 存储器 → MDR → CIR,PC 被递增

    译码

    CU 译码 CIR 中的指令——什么运算,以及哪些操作数或地址。

    执行

    CU 执行它:算术/逻辑去 ALU(结果到 ACC);一个加载/存储在存储器和一个寄存器之间移动数据;一个分支改变 PC。然后周期重复。

    从 START 开始的取指-执行周期流程图:取指阶段(PC 到 MAR、递增 PC、读信号、存储器到数据总线到 MDR 到 CIR)、译码阶段、执行阶段,然后一个循环回到 START 的中断检查
    取指-执行周期,每次都有一个中断检查
    探索

    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 能处理一个紧急事件(一次按键、一个数据包到达、一个硬件故障、除以零、操作系统计时器)。

    处理一个:

    1. 完成当前指令。
    2. 保存状态(PC 和寄存器)。
    3. 中断服务程序(interrupt service routine,ISR)的地址加载到 PC 并运行它。
    4. ISR 处理事件。
    5. 恢复保存的状态并继续。

    中断让系统及时响应,而 CPU 不用不断检查设备,并且这是操作系统多任务的方式。

    中断处理流程图:运行中的程序被中断,CPU 完成当前指令、在栈上保存它的状态(PC 和寄存器)、运行中断服务程序、恢复状态并继续
    一个中断如何嵌入取指-执行周期
    词汇表 训练
    英文 中文 拼音
    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)是一种可读的形式,每条机器指令一条指令,用像 LDDADDJMP 这样的助记符(mnemonics)书写。一个汇编器(assembler)把它翻译成机器码。

    一个汇编器把汇编助记符翻译成机器码位模式
    一个汇编器把助记符变成机器码位模式

    两遍汇编器

    一个两遍汇编器读源两次:

    • 第一遍构建一个符号表(symbol table):每当一个标签(label,如 LOOP:)出现时,记录它的地址;还不生成代码。
    • 第二遍生成代码:翻译每条指令,当一条引用一个标签(如 JMP LOOP)时,在符号表中查找它的地址。

    两遍处理前向引用(forward references,一个跳到后面定义的标签的跳转)。

    示例指令集

    剑桥用一个小的通用集:数据移动(LDDLDMLDILDXSTOMOV)、算术(ADDSUBINCDEC)、逻辑/位(ANDORXORLSLLSR)、比较和分支(CMPJMPJPEJPN)、I/O(INOUT),以及 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 起的一个偏移量给出——用于跳转。)

    四种寻址方式到达它们的操作数。立即:LDM #10 直接给出 10。直接:LDD 200 读存储单元 200(=42)。间接:LDI 200 读单元 200(=250)再读单元 250(=99)。变址:LDX 100 且变址寄存器 5 读单元 105(=7)
    每种寻址方式如何到达它的操作数——立即、直接、间接和变址

    例题。 内存中:地址 200 存放 250,地址 250 存放 99,地址 105 存放 7。变址寄存器中是 5。分别执行 LDM #200LDD 200LDI 200LDX 100 之后,累加器中各是什么?跟着每种寻址方式要找多远来看。LDM #200立即寻址 - 操作数就是指令中写的那个数,所以累加器中是 200LDD 200直接寻址 - 去地址 200 取出其中的内容:250LDI 200间接寻址 - 地址 200 中存的是 250,那是另一个地址,所以继续去地址 250:99LDX 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 #100010110(22)。

    一个算术右移保留符号位,使一个负的有符号数保持为负。一个循环移位(cyclic shift,旋转)把从一端掉出的位从另一端送回,所以没有位丢失。

    三个 8 位移位:LSL #1 把 00001011 变成 00010110(乘 2,一个 0 从右边进入);LSR #1 把它变成 00000101(整数除以 2,一个 0 从左边进入);ASR #1 把 10110100 变成 11011010,复制符号位
    逻辑左($\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 掩码,然后检查结果是否非零。
    字节 01001000 上的位掩码:用 OR 00000100 置位 2 得到 01001100;用 AND 10111111 清位 6 得到 00001000;用 XOR 00001000 翻转位 3 得到 01000000
    用 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)在运行时被加载(可执行文件更小、被许多程序共享、一次更新惠及所有)。
    一个静态库在编译时被复制到可执行文件中,构成一个更大的独立程序;一个动态库文件(.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 源被一次性编译成平台无关的字节码(.class),Windows、macOS 或 Linux 上的一个 JVM 随即解释它或 JIT 编译它成本地代码
    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 把代码编辑器、一个运行按钮和一个调试器聚集进一个程序
    一个 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

    来自网络和互联网的威胁

    威胁分成三组。

    一个中间人攻击者坐在 Alice 和 Bob 之间,读取或更改消息
    一个中间人攻击者坐在双方之间

    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)——指纹、面部、虹膜);组合起来最强。
    • 备份——保留副本(一些异地),使丢失或损坏可恢复。
    • 物理安全——上锁的服务器机房、电缆锁。
    对称加密用一个共享密钥来加密和解密消息;非对称加密用接收方的公钥加密、用他们的私钥解密
    对称用一个共享密钥;非对称用一个公钥加密、一个私钥解密
    一个灰色的 RSA SecurID 钥匙扣安全令牌,LCD 屏幕显示一个六位数的码
    一个安全令牌显示一个变化的码用于双因素认证("你有的东西")
    一个带光学传感器垫的小 USB 指纹读取器
    一个指纹读取器检查"你是的东西"——一个人的特征,而不是一个密码
    探索

    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)更进一步,还能定位错误。把字节排成一个网格:给每个字节一个奇偶位,然后计算一个额外的奇偶字节,它的各位是上方字节的奇偶。一个翻转的单一位现在会使一行和一列都不通过——它们的交叉点精确指出哪一位改变了,所以它甚至能被纠正。

    同样的七个数据位显示两次:一个 0 校验位给出四个 1 用于偶校验,一个 1 校验位给出五个 1 用于奇校验
    校验位被设置以使 1 的数目为偶或奇
    发送方计算一个校验和并把它与数据块一起发送;接收方重新计算校验和并比较,加上一个字节和模 256 计算的例子
    为一个数据块算出一个校验和

    核对只证明到达的与发送的相符——不证明数据是正确的,也不能抵御蓄意篡改。验证问"这说得通吗?";核对问"这被正确地复制了吗?"——两者都用。

    并排:验证问"这数据说得通吗?"并在存储前检查范围、类型和格式等规则(抓住无意义的数据);核对问"这被正确地复制了吗?"并用双重输入、奇偶校验和校验和(抓住复制错误)
    验证检查数据说得通;核对检查它被无变化地复制

    例题。 一位用户把出生日期输成 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)覆盖。

    版权是自动的、无需注册,持续到创作者死后约 70 年,覆盖代码、图像和文档;一个专利必须申请,持续约 20 年,覆盖发明和算法
    版权是自动的且长久的;一个专利必须申请,持续约 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 找出词,然后去机器翻译,然后去文本转语音转成音频
    一个常见的场景: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 容纳表设计、验证规则、访问权限和数据,一个单一的共享数据库,被工资单和销售应用程序两者使用
    数据库方法:一个 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
    
    两个由一个外键链接的表:CUSTOMER 表有主键 CustomerID;ORDER 表有它自己的主键 OrderID 加一个 CustomerID 外键,它的值匹配 CUSTOMER 中的一个 CustomerID
    一个外键链接两个表: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 图,一个 STUDENT 实体和一个 CLASS 实体由一条关系线连接,学生端是鸦爪的"多"、课程端是一条"一"的横杠
    一个 E-R 图:一个班有许多学生
    "一"、"多"、"有且仅一"、"零或一"、"一或多"和"零或多"的鸦爪线端符号
    一个关系基数的鸦爪符号

    一个多对多关系不能直接存储。把它拆成两个一对多关系,通过一个容纳两个外键的连接表(link table):

    ENROLMENT(StudentID, CourseID, EnrolmentDate)
    
    STUDENT 和 COURSE 之间的一个多对多关系,存储为通过一个容纳 StudentID 和 CourseID 的 ENROLMENT 连接表的两个一对多关系
    一个连接表把一个多对多关系解决为两个一对多关系
    词汇表 训练
    英文 中文 拼音
    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 表和 CUSTOMER 表,所以每个事实被存储一次
    规范化通过把重复的数据拆到它自己的表中来去除冗余

    例题。ORDER(OrderID, CustomerID, CustomerName, ProductID, Quantity) 的复合主键是 (OrderID, ProductID)。把它规范化到 3NF。逐个用主键去检验每个非键字段。Quantity 同时依赖 OrderIDProductID,这没问题。但 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 dictionarydata modellinglogical schemadata integritydata 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 interfacequery 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)有两半:

    SQL 分成 DDL(构建结构)和 DML(处理数据)
    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;
    

    常见类型:INTEGERREALVARCHAR(n)CHAR(n)(也叫 CHARACTER(n))、DATETIMEBOOLEANDECIMAL(p, s)

    DML 基础

    SELECT 查询:

    一个 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,COUNTSUMAVGMINMAX)常与 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;
    

    总是在 UPDATEDELETE 上加一个 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)意味着把一个大问题分成更小的子问题,每个更容易解决并一次处理一个。

    1. 找出任务的主要部分。
    2. 把每个分成更小的子任务。
    3. 继续直到每个都小到能直接设计。
    4. 解决小任务并把它们组合起来。

    对于库存控制:"管理库存" → "记录销售"、"记录到货"、"生成报表" → ("记录销售")"查找产品"、"减少库存计数"、"保存交易"。分解使大问题可管理、让一个团队分担工作,并给出模块化的代码——每个模块成为一个过程(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)和描述:

    变量名 数据类型 描述
    Category STRING 产品类别
    SaleDate DATE 商品售出的时间
    ItemCost REAL 商品的成本
    InStock BOOLEAN 若有库存则为 TRUE

    使用描述性的名称(ItemCost,而不是 x);常见类型是 INTEGERREALSTRINGCHARBOOLEANDATE,加上数组。这个表迫使你在写代码之前命名每一份数据。

    一个标识符表,列出每个变量及其名称、数据类型和描述,例如 ItemCost 作为一个 REAL 表示商品的成本
    一个标识符表在你写代码之前命名每一份数据
    词汇表 训练
    英文 中文 拼音
    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)是一种描述算法的结构化、语言中立的方式。

    三种基本结构作为小流程图:顺序运行步骤 A 然后 B 然后 C;选择测试一个条件并做 X 或 Y;迭代在一个条件成立时重复一个主体,循环回去
    任何算法的三个构件:顺序、选择和迭代

    1. 顺序

    步骤一个接一个地运行(顺序(sequence)):

    INPUT Name
    INPUT Age
    OUTPUT "Hello", Name
    

    2. 选择

    基于一个条件选择运行哪些步骤(选择(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 variableOUTPUT expression
    • 比较 =<><><=>=;逻辑 ANDORNOT
    • 算术 + - * /,加上 DIV(整数除法)和 MOD(余数)。
    • 字符串:LENGTHLEFTRIGHTMID,以及 & 用于拼接(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 是一个判断菱形,每个循环是一个回箭头,一个顺序是堆叠的矩形。

    一个求数字平均值的流程图:圆角的开始和停止终止符、输入/输出平行四边形、处理矩形,以及一个"count < n?"判断菱形,它的"是"分支循环回去读下一个值
    一个用标准形状求一列数字平均值的流程图
    词汇表 训练
    英文 中文 拼音
    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
    

    每次求精都保留之前的结构并添加细节。

    逐步求精:一个第 1 层大纲(读入数字、计算平均值、输出平均值)被展开成带输入循环和除法的第 2 层详细伪代码
    逐步求精:把每个高层步骤展开成详细的伪代码
    探索

    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)、连接词(ANDORNOT)和括号构成。把它用作 IFWHILEREPEAT...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))——对简化条件很方便。
    "attempts < 3 AND NOT loggedIn" 的一棵分析树:NOT 先应用于 loggedIn,然后 AND 把它与 attempts < 3 连接
    优先级: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')。
    • BOOLEANTRUEFALSE。用于标志。
    • 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
    

    当值总是属于一起时(一个客户、一个库存商品)用一个记录;对无关的值用分开的变量。

    一个 TStockItem 记录被画成一个名称下四个字段的堆叠——ItemID(INTEGER)、Category(STRING)、ItemCost(REAL)、InStock(BOOLEAN)——用点记法如 Item1.Category 访问
    一个记录在一个名称下容纳几个不同类型的字段
    探索

    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
    
    一行名为 myList 的带索引单元,索引从 0 到 8,标出下界(第一个索引)和上界(最后一个索引)
    一个 1-D 数组(一个列表),带索引和边界

    2-D arrays (2D array)

    DECLARE Grid : ARRAY[1:3, 1:4] OF INTEGER
    Grid[2, 3] ← 99
    

    第一个索引是行,第二个是列。用嵌套循环访问每个单元。对一个单一序列用 1-D,对两个自然维度(一个网格,行 × 列)用 2-D

    一个 3 乘 4 的网格,带行索引和列索引;第 2 行第 3 列的单元被高亮
    一个 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)把一个数组排序:扫过它,比较每个相邻对,并交换任何顺序错误的;重复各趟直到某一趟不再有交换。

    对 5、2、8、1 的一趟冒泡排序:比较 5 和 2 并交换得到 2、5、8、1;比较 5 和 8(已经有序);比较 8 和 1 并交换得到 2、5、1、8,所以最大值 8 到达末端
    冒泡排序的一趟:相邻对被比较并交换,把最大值冒泡到末端
    探索

    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 中的变量在程序结束时丢失,但磁盘上的一个文件在运行之间保留,所以程序保存到它并从它加载
    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(查看顶部),以及对空/满的测试。用途:撤销历史、函数调用返回地址、表达式解析、回溯。

    一个存储在数组中的栈以三个状态显示;Top 指针在一次 push 后上移、在一次 pop 后下移,而栈的底保持固定
    push 和 pop 改变顶指针;底指针保持不动
    一摞高高的书,一本平放在另一本上面
    一摞书就是一个看得见的栈。你只能从顶部加书或取书,所以最后放上去的是第一个取下来的——这正是 LIFO(后进先出)

    Queue

    一个队列(queue)以 FIFO(先进先出,First In, First Out)顺序工作。操作:入队(enqueue,加到后端)、出队(dequeue,从前端移除),以及对空/满的测试。用途:打印假脱机、调度、广度优先搜索、缓冲。

    一个存储在数组中的线性队列以三个状态显示;enqueue 推进 Rear 指针,dequeue 推进 Front 指针,留下起始单元空着并被浪费
    enqueue 在后端添加;dequeue 从前端移除
    一条很长的人龙,一个接一个地等着,沿着一堵墙延伸到远处
    一队人就是一个看得见的队列。你从后面加入,从前面被服务,所以等得最久的人最先被服务——这正是 FIFO(先进先出)

    Linked list

    一个链表(linked list)把数据存储为一系列节点(nodes)。每个节点容纳一个值和一个指向下一个节点的指针(pointer);一个头指针标记起点,而最后一个节点的指针是一个哨兵(例如 NULL)。操作:插入、删除、搜索,以及遍历(traverse,按顺序访问每个节点)。它相对数组的优点是廉价的插入/删除(只需调整指针);它的缺点是慢的随机访问(你必须从头跟随指针)。

    一行四个节点,每个容纳一个值和一个 next 指针字段;一个头指针指向第一个节点,最后一个节点的指针是 NULL
    一个链表:每个节点指向下一个
    探索

    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

    一个简单队列让 FrontRear 走出末端,浪费起始部分。修正是一个循环数组(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。

    一个存储在数组中的循环队列;填充的单元越过最后一个单元绕回到起点,一条曲线箭头显示指针从最后一个索引绕回到单元 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)。要删除:解开该节点的链接并把它的槽还给空闲列表。这给出一个链式结构的灵活性和一个数组的静态分配。

    一个 Value 数组和一个平行的 Next 数组实现一个链表;一个 Head 指针链起用过的节点,一个 FreeListHead 指针链起空闲的槽,每个都以 Next = -1 结束
    一个存储在数组中的链表:一个数据数组和一个指针数组

    例题。 一个循环队列存放在大小为 5 的数组中(下标 0 到 4),此时 Front = 3Rear = 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),然后变成一门真实的语言:

    1. 找出变量(variables)及其数据类型(data types)。
    2. 把输入/输出框变成 INPUT / OUTPUT
    3. 把判断菱形变成 IF...ELSE...ENDIF(或 CASE)。
    4. 把循环箭头变成 WHILEREPEAT...UNTILFOR
    5. 把处理框变成赋值或计算。
    6. 通过追踪一个小输入来检查。
    一个从流程图符号到伪代码的映射:一个输入/输出平行四边形变成 INPUT 或 OUTPUT,一个判断菱形变成 IF...THEN 或 CASE,一个处理框变成一个赋值 x = expression,而一个循环箭头变成 WHILE、FOR 或 REPEAT
    每个流程图符号变成一个伪代码关键字

    Constants and variables

    一个常量(constant)容纳一个从不改变的值;一个变量容纳一个可能改变的值。用一个类型声明它们:

    一个变量的值可以改变;一个常量保持固定
    一个变量的值可以改变;一个常量保持固定
    CONSTANT Pi ← 3.14159
    DECLARE Radius : REAL
    DECLARE Area : REAL
    
    Radius ← 5
    Area ← Pi * Radius * Radius
    

    对反复出现的固定值用常量(PiMaxScore);它们使代码更清晰,并且易于在一处改变。

    Assignment and expressions

    表示赋值(assignment):

    Total ← Total + 1
    Average ← Sum / Count
    

    表达式用运算符(operators):

    • 算术 + - * /,加上 DIV(整数除法)和 MOD(余数):7 DIV 2 = 3;7 MOD 2 = 1
    • 比较 =<><><=>=
    • 逻辑 ANDORNOT

    优先级(precedence,从高到低):NOT* / DIV MOD+ - → 比较 → ANDOR。不确定时用括号。

    Input and output

    OUTPUT "Enter your name:"
    INPUT Name
    OUTPUT "Hello, ", Name
    

    Built-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)(字符串 → 数)。

    使用题目参考列表里确切的名称。

    字符串 COMPUTER 显示为八个带编号的字符框(位置 1 到 8),带算出的结果:LENGTH(s) = 8、LEFT(s, 3) = COM、MID(s, 4, 3) = PUT、RIGHT(s, 2) = ER,以及 UCASE/LCASE 改变字母的大小写
    常见的字符串例程作用于 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
    
    一张流程图:从开始,一个判断菱形测试 age >= 18;TRUE 分支输出 Adult,FALSE 分支输出 Minor,两者在末端汇合
    一个 IF...ELSE 测试条件一次,然后恰好运行一个分支

    对于多于两种情况,你可以用一个嵌套(nested)IF,但深度嵌套难以阅读——当把一个值对照几个选项测试时,一个 CASE 更清爽:

    CASE OF Grade
        "A": OUTPUT "Excellent"
        "B": OUTPUT "Good"
        OTHERWISE: OUTPUT "Try again"
    ENDCASE
    

    Cambridge 的 CASE 允许单个值、值列表(1, 2, 3:)和范围(1 TO 5:)。

    一个 CASE OF Grade 语句的流程图:该值被依次对照每个卫式(一个单值、一个值列表,然后一个范围)测试;第一个匹配的分支运行它的语句,否则 OTHERWISE 分支运行,而所有分支在 ENDCASE 汇合
    一个 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
    ENDWHILE
    

    Post-condition (REPEAT...UNTIL) loop

    一个后测循环(post-condition loop)在每一趟之后测试条件,所以它总是至少运行一次:

    REPEAT
        INPUT password
    UNTIL password = correctPassword
    

    Choosing the right loop

    三个流程图列。FOR:一个计数框(i = 1 到 N)然后一个主体框,循环回去,做设定次数的趟数。WHILE:一个测试菱形在一个主体框之上,所以条件在主体之前被检查,循环可能运行零次。REPEAT:一个主体框在一个测试菱形之上,所以条件在主体之后被检查,循环至少运行一次
    三个循环在条件被测试的位置上不同——在主体之前(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
    

    当子程序执行一个动作时用一个过程;当它为调用者计算一个值时用一个函数

    两个面板。过程:调用 Greet(Ada) 做一个动作并打印 Hello, Ada,不返回值。函数:设 y = Square(5) 计算 5 乘 5 = 25,返回 25,所以 y 随即容纳 25
    一个过程做一个动作并不返回任何东西;一个函数返回一个你在表达式中使用的值

    Parameters

    一个参数(parameter)是一个子程序声明用来接收输入的变量;调用者提供的值是实参(arguments)。传递它们的两种方式:

    • 传值(pass by value)——例程得到一个副本;它内部的改变不影响调用者。用于它只读取的输入。
    • 传引用(pass by reference)——例程得到一个到调用者变量的引用;改变确实影响调用者。当它必须更新一个参数时用。
    两个内存框图。传值:调用者的变量 x = 5 被复制到一个单独的参数框 a = 5,所以改变 a 使 x 保持为 5。传引用:参数 a 是一个指向调用者自己的 x 框的箭头,所以改变 a 也改变 x
    传值把值复制到一个新框;传引用让例程改变调用者自己的变量
    PROCEDURE Swap(BYREF a : INTEGER, BYREF b : INTEGER)
        DECLARE temp : INTEGER
        temp ← a
        a ← b
        b ← temp
    ENDPROCEDURE
    

    Local vs global variables

    一个局部变量(local variable)在一个子程序内部声明,只在它运行时存在。一个全局变量(global variable)在外部声明,处处可见。优先用局部变量和参数——大量使用全局变量使代码难以理解和测试。(一个名称可见的区域是它的作用域(scope)。)

    一个大的外框标注为全局作用域,容纳全局变量 Total,处处可见,而一个较小的内框标注为 PROCEDURE Calc、局部作用域,容纳局部变量 temp,它只在 Calc 运行时存在
    一个全局变量处处可见;一个局部变量只在它自己的过程内部存在

    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
    

    它是一个设计阶段的工具,你可以从它读出过程签名。

    一张结构图,顶部是 Convert temperature,下方是 INPUT、Convert to Celsius 和 OUTPUT 模块,连线上带 temperature 参数
    一张结构图:模块及它们之间传递的参数

    State-transition diagram

    一个状态转换图(state-transition diagram)显示一个系统可以处于的状态(states)以及在它们之间移动它的事件——适合自动售货机、交通灯、用户界面。状态转换图被用来记录一个算法或系统的行为。每个状态是一个圆;每个转换是一个用事件标注的箭头。

       coin inserted               item selected
    [Idle] ──────────────→ [Awaiting selection] ──────────→ [Dispensing]
    

    它使遗漏的转换容易被发现("如果在等待选择时投入第二枚硬币会怎样?")。

    一张状态图:Locked 到 Waiting for second digit 到 Waiting for third digit 到 Unlocked,带正确数位和错误数位的转换
    一个代码为 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 errorslogic errorsrun-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:5075)。
    • abnormal data(异常数据)——应当被拒绝的值(-10200"abc")。
    • extreme data(极端数据)——仍被接受的最大和最小值(0100)。
    • boundary data(边界数据)——在边缘的值,差一错误藏在那里(每个被接受的极端值和刚好在它外面被拒绝的值:0/-1100/101)。
    一个分数字段 0 到 100 的数轴:正常值 50 和 75 在里面,极端值 0 和 100 在被接受的边界,而异常值 -1、101、-10 和 200 在外面被拒绝
    一个 0–100 字段的测试数据:正常在里面,极端在边界,异常在外面

    例题。 某字段接受 0 到 100 的考试分数。给出各类测试数据及其预期结果。正常数据:50 - 被接受,是范围内的典型值。异常数据:-10200"abc" - 全部被拒绝,因为超出范围或数据类型错误。极端数据:0100 - 仍然被接受的最大值和最小值。边界数据:跨在每个边缘两侧的成对值 - 被拒绝的 -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

    修改现有程序

    当被要求添加一个功能或修复一个漏洞时:

    1. 阅读现有代码,直到你理解算法和数据流。
    2. 找出改动在哪里——哪个子程序、哪些行。
    3. 让改动尽可能小——不要重写能工作的代码。
    4. 更新相关部分——一个改动过的参数列表的每个调用者、使用一个改动过的数据结构的每个例程。
    5. 测试新行为旧行为(回归测试(regression testing)——检查你没弄坏任何东西)。
    6. 记录改动。

    清晰的注释、有意义的名称、分解的子程序和一张结构图使一个程序更容易被修改——这就是为什么设计工具即使在首次发布之后也重要。

    词汇表 训练
    英文 中文 拼音
    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

    来源:剑桥国际大纲

    内建类型(INTEGERREALSTRINGCHARBOOLEAN)覆盖最简单的情况。对于更丰富的问题,你可以定义用户定义类型(user-defined types),使代码更清晰、编译器更严格。

    Why they are needed

    一个内建的 STRING 让你在一个应当只容纳几个合法值之一的字段里存储乱七八糟的东西;一个用户定义类型可以限制它。真实的实体通常是不同类型的值的一个集合。而 DECLARE Taxi : VehicleDECLARE Taxi : STRING 更清晰(自我说明)。

    Non-composite types

    Enumerated type

    一个枚举类型(enumerated type)的值是一个命名常量的固定列表:

    TYPE Vehicle = (M100, M230, T101, T102, T120, T150)
    DECLARE MyTaxi : Vehicle
    MyTaxi ← T102
    

    这些名称是新类型的值(内部存储为小整数);你不能赋任何列表之外的东西。用途:星期几、颜色、状态码。

    一个枚举类型 Vehicle,带固定的命名值 M100、M230、T101、T102、T120 和 T150;这个类型的一个变量只能容纳它们之一
    一个枚举类型是一个命名值的固定列表

    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 容纳一个地址并指向一个容纳 Value = 42 和一个 Next 字段的 TNode;p^ 解引用以访问该节点的字段,如 p^.Value
    一个指针容纳一个地址;p^ 解引用它以访问该节点的字段

    Composite types

    一个复合类型(composite type,复合数据类型之一)把几个值组合在一个名称下。

    一个集合:一个无序的集合,其中每个值都是唯一的
    一个集合是一个唯一值的无序集合
    一个记录 Student,带字段 Name、Age、Grade 和 Enrolled,每个是不同的类型
    一个记录把不同类型的字段组合在一个名称下
    • 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
    ENDCLASS
    

    Choosing 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) 无聚集,但用更多内存
    再散列 应用第二个散列函数 铺开键,但更多工作
    解决一个冲突,键 A 和 B 都散列到槽 2。线性探测把 B 放入下一个空闲槽(3);链接法保持槽 2 指向一个先 A 后 B 的链表
    解决一个散列冲突:线性探测用下一个空闲槽;链接法为每个槽保持一个链表

    要搜索:散列键,读那个槽;若键匹配你就完成了,否则跟随解决策略直到一个匹配或一个空槽。要插入:散列键,写入那个槽或下一个空闲的。保持装填因子(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 位补码指数,从 -128 到 1
    一个 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。

    规格化 0.0011010,指数 4:把尾数左移两位并把指数减 2,得到 0.1101000,指数 2——同样的值,没有浪费的前导零
    规格化:把尾数左移以去除前导零,把指数降低同样的量

    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$ 不能被精确存储。
    • 比较文件组织(串行、顺序、直接)以及散列如何快速找到一条记录。
  • 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
    一个四行的栈:Application、Transport、Internet、Link,发送沿左侧往下、接收沿右侧往上,每层上有示例协议
    TCP/IP 协议栈的四层

    Application layer

    应用层(application layer)给用户程序提供服务并定义它们说的协议(网络用 HTTP,电子邮件用 SMTP)。这是一个程序员最常工作的地方。

    Transport layer

    传输层(transport layer)在进程之间端到端地传递数据,进程由端口号(port numbers)标识。两个协议:

    TCP 建立一个连接并按序传递所有数据;UDP 发了就忘
    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 路由器,带四根竖直的天线和前面一排状态灯
    一个家用 Wi-Fi 路由器:它在你的设备和互联网之间转发数据包

    在路由器到达更广的互联网之前,一个调制解调器(modem)通过提供商的电缆或电话线把家连到互联网提供商。它的灯显示链路已连通并在线。

    一个高的黑色电缆调制解调器,竖立在一个朴素的背景上,前面一列状态灯
    一个电缆调制解调器把一个家庭网络连到互联网提供商

    Link layer

    链路层(link layer)在一条物理链路(Ethernet、Wi-Fi)上发送比特。它加一个带 MAC 地址(MAC addresses)的帧头并处理介质访问(例如 Ethernet 上的 CSMA/CD(载波侦听多路访问))。

    一个 Ethernet 帧拆成前导码、帧起始、Ethernet 数据和帧间隙,数据部分展开成目的和源 MAC 地址、类型/长度、有效载荷消息和帧校验序列,每个带以字节计的大小
    一个典型 Ethernet 帧的各部分

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

    一个小的黑色 8 端口千兆 Ethernet 交换机,在一个朴素的背景上,前面一排带编号的 RJ45 端口,每个带一个状态灯
    一个网络交换机在一个局域网上连接许多有线设备

    物理链路可以是一根铜线、一个无线电信号(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)协议;一个文件被拆成从许多对等方并行下载的片,所以没有单一的服务器承担全部负载。
    一个 tracker 在中央,对等方围绕它——种子、吸血者和新对等方——交换文件片,带一个图例
    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)和按序传递,但在静默期间低效且建立慢。经典例子:传统电话网络。

    设备 A 和设备 B 之间的一个路由器网状结构,一条路径被高亮并为整个通话端到端地保留
    电路交换:一条专用路径被端到端地保留

    Packet switching

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

    同样的路由器网状结构,数据包显示为带编号的彩色方块,从计算机 A 到计算机 B 走不同的路由,然后在 B 按序重组
    分组交换:数据包独立地行进,可能走不同的路由
    方面 电路交换 分组交换
    路径 专用、保留 共享、每包
    建立时间
    带宽使用 低效 高效
    顺序 按序 可能乱序
    健壮性 一个故障切断电路 绕过故障重新路由
    适合 恒速流(语音) 突发流(网络、电子邮件)

    现代网络因分组交换的高效和韧性而使用它。

    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 有少数简单的定长指令
    CISC 有许多复杂的指令;RISC 有少数简单的指令
    一块白色背景上的计算机主板,中间显示方形的 CPU 插槽、长条的内存插槽、几个扩展插槽和沿一条边的一排排 I/O 端口
    一块主板把 CPU、内存和其他部件连在一起

    CISC

    一个 CISC(复杂指令集,Complex Instruction Set Computers)有许多、往往复杂的指令(一条可能做几次内存访问和操作)、变长,所以译码很繁复。它在硬件里每条指令做得更多。例子:Intel x86。

    RISC

    一个 RISC(精简指令集,Reduced Instruction Set Computers)有一小组简单的指令,每条做一个基本操作、全部定长(译码快)。只有 loadstore 碰内存;其他一切都是寄存器(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)而停顿——一个数据冒险(一条指令需要一个还没准备好的结果)或一个控制冒险(一个分支使下一个地址未知)。

    五个流水线阶段 IF、ID、EX、MEM、WB 跨十个时钟周期的一张甘特图,六条指令 A 到 F 每条晚移一个周期,所以它们对角地重叠
    流水线重叠六条指令的各阶段,所以每周期完成一条

    RISC 芯片把数据保存在许多寄存器中,因为内存慢而寄存器快;编译器明智地把值分配到寄存器。

    一个跑这么快的处理器放出很多热,所以一个散热器(heat-sink)和风扇坐在它顶上。金属鳍片散开热量,风扇把它吹走,使 CPU 保持足够凉以工作。

    一个塔式 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 上方的大散热风扇和插入主板的金色边缘连接器
    一块显卡:它的 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)顺序(00011110),所以相邻的单元在一个变量上不同。

    在每个输出为 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$。它忽略任何进位输入——因此叫"半"。

    一个半加器块,带输入 A 和 B、输出 sum 和 carry,旁边是它的电路,A 和 B 馈入一个 XOR 门给出和、一个 AND 门给出进位
    一个半加器,作为一个块和作为一个 XOR 门与一个 AND 门的电路

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

    两个半加器用一个 OR 门串起来以把 A、B 和一个进位输入相加:第一个半加器取 A 和 B,第二个加进位输入,而 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 触发器块符号,带 J、K 和时钟输入以及输出 Q 和 Q-bar,旁边是它从四个交叉耦合的 NAND 门的构建,Q 和 Q-bar 输出反馈到输入门
    一个 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 时间、内存、磁盘和输入/输出
    OS 在程序之间共享 CPU、内存、磁盘和 I/O
    • 多任务(multi-tasking)——在进程之间快速切换 CPU,使几个看起来一次运行。
    • 内存管理(memory management)——给每个进程它需要的内存;当 RAM 用尽时用磁盘分页(paging)。
    • 假脱机(spooling)和缓冲——打印作业在磁盘上排队,所以 CPU 从不等打印机。
    • 缓存(caching)——把最近用过的磁盘数据保存在高速缓存(cache)/ RAM 中。
    一个处理器和它的散热器
    处理器是 OS 在争夺的任务之间共享的一个关键资源
    内存模块(RAM)
    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,运行剩余工作最少的作业);优先级;多级反馈队列。

    权衡是响应性对吞吐量对公平性。

    一个甘特时间线,显示 P1 然后 P2、P3、P4 从时间 0 到 39 一个接一个地运行,带一个图例给出每个进程的 CPU 突发时间
    四个进程的先来先服务调度
    轮转调度显示为一个时间线:P1、P2、P3 各依次得到一个固定的时间片,然后循环重复,在它们之间共享 CPU
    轮转:每个进程依次得到一个固定的时间片,然后下一个运行(不像先来先服务)

    Process states

    一个进程是新建(new)、就绪(ready,等待 CPU)、运行(running)、阻塞(blocked,等待 I/O 或一个锁),或终止(terminated)。当它的时间片结束时它从运行 → 就绪;当它请求 I/O 时它从运行 → 阻塞;当 I/O 完成时它从阻塞 → 就绪。

    一个状态图:新建到就绪(准入)、就绪到运行(调度器分派)、运行到就绪(中断或超时)、运行到阻塞(请求 I/O)、阻塞回到就绪(I/O 完成)、运行到终止(退出)
    一个进程在新建、就绪、运行、阻塞和终止状态之间移动

    Process control block and context switch

    对每个进程,OS 保存一个进程控制块(process control block,PCB)——保存的程序计数器、寄存器、状态和内存信息。

    一次上下文切换保存进程 A 的状态(它的 PCB)并加载进程 B 的
    一次上下文切换保存一个进程的状态并加载另一个的
    • 一次上下文切换(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
    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):

    1. 词法分析(lexical analysis)——词法分析器把字符分组成词法单元(tokens,关键字、标识符、运算符、字面量),丢弃空白和注释。
    2. 语法分析(解析)(syntax analysis / parsing)——检查词法单元符合文法并构建一棵抽象语法树(abstract syntax tree)。一个遗漏的括号给出一个语法错误(syntax error)。
    3. 语义分析(semantic analysis)——检查程序说得通(变量已声明、类型匹配)。
    4. 代码生成(code generation)——遍历树并发出目标代码,选择寄存器和布局。
    5. 代码优化(code optimisation)——去除冗余的工作、折叠常量、为流水线重排。

    输出是一个可执行文件。

    编译的各阶段:源代码经过词法分析(词法单元)、语法分析(AST)、语义分析(检查)、代码生成和优化以产生一个可执行文件
    编译的各阶段,从源代码到一个优化的可执行文件
    探索

    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) * 23 4 + 2 *

    Evaluating RPN

    用一个操作数栈。从左到右扫描:把每个操作数压栈;遇到一个运算符,弹出顶上两个、应用它,并把结果压栈。求值 3 4 2 * +:

    词法单元
    3 3
    4 3, 4
    2 3, 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 密码机
    Enigma 机在第二次世界大战中加密消息——一个早期的机械密码设备
    明文经过一个带加密密钥的加密算法变成密文,穿过互联网,然后一个带解密密钥的解密算法变回明文
    加密用一个密钥打乱明文;解密逆转它

    Symmetric encryption

    对称加密(symmetric encryption,对称密钥密码学)对加密和解密都用同一个密钥,所以发送方和接收方必须都持有这个秘密密钥。它,适合大批数据(整个磁盘、一个视频流)。它的问题是密钥分发(key distribution):你一开始怎么安全地共享密钥?非对称加密解决这个。

    对称加密在两端用同一个密钥,它必须被秘密地共享
    对称加密在两端用同一个秘密密钥

    Asymmetric encryption (public-key)

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

    Tom 和 Meera 各有一个要共享的公钥和一个保密的私钥;Meera 把她的公钥发给 Tom
    每个用户有一个要共享的公钥和一个要保密的私钥

    要给 Alice 发一个秘密消息:取她公布的公钥、用它加密,并发送。只有 Alice——持有匹配的私钥——能解密。不需要事先的密钥交换。权衡是它比对称慢得多,所以它不用于大数据。

    一个私钥必须保密,所以它有时被保存在一个小的硬件安全密钥(hardware security key)上。你插入它或轻触它来证明你是谁,而这个秘密密钥从不离开设备。

    一个白色背景上的黑色硬件安全密钥,中间一个圆形的金色触摸传感器,一端一个金色的 USB 连接器
    一个硬件安全密钥存储一个秘密密钥来证明你是谁

    Hybrid approach (used by almost every real system)

    用非对称加密来交换一个新鲜的会话密钥(session key),然后对数据用那个对称密钥:

    1. 客户端制作一个随机会话密钥。
    2. 它用服务器的公钥加密会话密钥。
    3. 服务器用它的私钥解密它。
    4. 两端现在共享会话密钥,并对其余部分用快速的对称加密。

    这就是 HTTPS 和 SSH 工作的方式。

    客户端用服务器的公钥加密一个会话密钥并发送它;只有服务器的私钥能打开它;然后两端用共享的会话密钥用快速的对称加密
    混合方法:非对称密码学一次性共享一个会话密钥,然后快速的对称加密保护数据

    Hashing (related, not encryption)

    一个密码散列(cryptographic hash)函数取任何输入并给出一个固定大小的摘要(digest),使得同样的输入总是给出同样的摘要、找到两个有同样摘要的输入是不可行的,而输入中一个微小的改变会完全改变摘要。散列是单向的——你不能取回输入。它被用于存储密码检查、完整性(integrity)检查和数字签名。

    一个密码散列把输入 hello 映射到一个摘要,把改了一个字母的输入 hellp 映射到一个完全不同的摘要;散列不能被逆转
    一个密码散列给出一个固定的摘要;一个微小的输入改变会完全改变它,而它不能被逆转
    探索

    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 握手的概要:

    1. 客户端连接并提议密码选项。
    2. 服务器挑一个并发送它的数字证书(带它的公钥)——颁发和验证这些证书是数字认证
    3. 客户端检查该证书。
    4. 两端用非对称密码学交换一个新鲜的会话密钥(session key)。
    5. 所有后续流量用会话密钥用快速的对称加密。

    结果是一个为更高层协议(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 标识、用户 id、数字签名和其他信息
    一个证书颁发机构颁发一个把一个身份绑定到一个公钥的数字证书

    要验证一个证书,客户端(它持有一个受信任的根 CA 列表):

    1. 检查过期日期。
    2. 检查主体名匹配 URL。
    3. 检查它由一个受信任的 CA 签名,用 CA 的公钥来验证签名。
    4. 沿证书链往上一直到一个受信任的根。

    若任何一项失败,浏览器显示"你的连接不是私密的"警告。当它干净地验证时,客户端知道身份被一个受信任的 CA 审核过、公钥真的属于那个身份,而证书是当前的。

    词汇表 训练
    英文 中文 拼音
    digital certificate 数字证书 shù zì zhèng shū
    Certificate Authority 证书颁发机构 zhèng shū bān fā jī gòu
    17.1

    数字签名

    一个数字签名(digital signature)证明谁签了一个消息以及它没有被改变。要签名:

    1. 计算消息的一个密码散列。
    2. 用发送方的私钥加密该散列——那就是签名。
    3. 发送消息和签名。

    要验证:计算收到的消息的散列;用发送方的公钥解密签名以得到发送方的散列;比较。若它们匹配,消息被私钥的持有者签名(身份验证(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)为搜索引擎和助手存储关于世界的事实。
    节点 A 到 G 的一个加权图;从 A 经 B 和 E 到 G 的最短路径用橙色高亮
    AI 问题常坐在一个图上;这里最短路径被高亮

    导航图的标准工具包括广度优先搜索(breadth-first search)和深度优先搜索(depth-first search)。

    词汇表 训练
    英文 中文 拼音
    graph
    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)和摄像头传感器(车顶上旋转的单元)建立道路的一个实时图像,而一个学到的策略决定如何安全地转向、加速和刹车。

    一辆白色的 Waymo 自动驾驶汽车在一条城市街道上,车顶上一个旋转的激光雷达传感器单元,前角有额外的摄像头
    一辆自动驾驶汽车用摄像头和激光雷达传感器看它周围的道路
    几只橙色的工业机器人臂在一条工厂生产线上焊接一个沿线移动的车身
    一条生产线上的工业机器人臂:强化学习能教一个机器人控制它的移动
    词汇表 训练
    英文 中文 拼音
    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,误差的反向传播)。对每个训练样例:

    1. 前向传播(forward pass)——把输入馈送到输出。
    2. 计算误差,用一个损失函数(loss function,一个表示输出有多错的单一数字)。
    3. 反向传播(backward pass)——把误差向后传播,用链式法则找出每个权重的梯度(它对误差贡献了多少)。
    4. 更新权重,走一小步(由学习率(learning rate)设定)以减少误差。

    在许多样例和许多趟(训练轮次(epochs))上重复,直到误差停止缩小。名字"反向"来自第 3 步:误差从输出向后流向输入,所以每个权重的梯度在一趟中被找到。训练之后,一个新输入只需要一次前向传播就能得到一个预测。

    一条误差平方对权重的 U 形曲线,一步步向下移向最小误差
    训练调整权重以到达最小误差
    词汇表 训练
    英文 中文 拼音
    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。)

    一行字母单元 A 到 Z;单元 A 到 V 被着色为已检查,W 被高亮为匹配,W 下方一个指针
    线性查找依次检查每个字母——找到 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 到 high 范围每步折半,中间字母 M、然后 T、然后 W 与 W 比较
    二分查找每步把范围折半(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 落入
    [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 的算法不必知道它如何构建。

    一棵二叉树,根 27,一个 19、16、21 和 17 的左子树,和一个 36、42、89 和 55 的右子树,根、左右指针,和一个叶节点被标注
    一棵二叉树:每个节点最多有两个孩子节点
    一棵二叉搜索树,根 4(左子树 2 之上 1 和 3,右子树 6 之上 5 和 7);前序访问 4 2 1 3 6 5 7,中序 1 2 3 4 5 6 7(已排序),后序 1 3 2 5 7 6 4
    一棵二叉树的三种深度优先遍历:前序、中序(已排序顺序)和后序
    词汇表 训练
    英文 中文 拼音
    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(1) 和 O(log n) 几乎保持平坦,O(n) 温和上升,O(n log n) 更陡,而 O(n 平方) 最快地爬升离开
    常见的增长阶如何比较:较小的阶在规模上取胜
    一张运行时间对元素数目 n 的线图:冒泡排序和插入排序陡峭上升为 O(n 平方),而快速排序保持低位为 O(n log n)
    排序时间如何随元素数目 $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=23*2=64*6=24。最终结果 24。在一个栈上跟踪每个待处理的调用。

    Factorial(4) 的调用栈:每个调用把一个帧往下压到基本情形 Factorial(1)=1,然后栈展开,返回 2 = 2 乘 1、6 = 3 乘 2 和 24 = 4 乘 6
    递归用调用栈:调用把帧往下压到基本情形,然后返回向上展开

    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)——不同的对象对同一个方法调用做出不同的响应;调用者不必知道确切的类型。每个 ShapeArea(),而一个 Circle 和一个 Rectangle 各以它们自己的方式实现它。
    • 抽象(abstraction)——显示一个简单的接口并隐藏实现。

    其他术语:

    • 一个构造函数(constructor)是一个在对象被创建时运行的特殊方法,用来设置它的属性。
    • gettersetter 通过方法读写一个对象的属性(它的性质)。
    • 聚合(aggregation)和包含(containment)从其他对象构建一个对象(一个"有一个"关系)。

    OOP 用于大型系统、GUI、模拟和游戏。

    同一个调用 shape.Area() 为每个对象运行不同的代码:一个 Circle 计算 pi r 平方,一个 Rectangle 计算宽乘高
    多态:同一个方法调用运行每个对象自己的代码
    一个 Shape 的 UML 类图:一个三部分的框,带类名、私有属性(Name、Area、Perimeter,用减号标注)和公共方法(SetShape、calculateArea、calculatePerimeter,用加号标注)
    一个 Shape 的类图:私有属性和公共方法
    一个 UML 继承图:employee 父类在顶部,partTime 和 fullTime 子类在下面,每个用一个空心三角泛化箭头连到父类并添加它自己的属性和方法
    继承:partTime 和 fullTime 是 employee 的子类
    一个 BankAccount 对象,带一个只通过公共方法 deposit() 和 withdraw() 访问的私有 balance;外部代码不能直接碰数据
    封装:一个对象的数据是私有的,只通过它的公共方法访问

    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."
    ENDTRY
    

    TRY 块容纳可能失败的代码;第一个匹配的 EXCEPT 块运行。真实的语言也有一个包罗一切的 EXCEPT 和一个 FINALLY 块,它无论异常是否发生都运行——对清理(关闭文件)有用。

    异常流程:若 TRY 块引发一个异常,控制跳到匹配的 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
    ENDPROCEDURE
    

    Where to handle exceptions

    若响应简单(一个消息、一次重试)就在贴近错误处处理它们,或若只有外层代码知道怎么做就在调用栈(call stack)更高处(一个顶层 GUI 循环记录错误并显示一个友好的对话框)。不要静默地吞掉异常——至少记录它们,否则调试变得不可能。

    常见异常:FileNotFoundIOErrorDivisionByZeroIndexOutOfRangeInvalidArgumentNullReferenceOutOfMemory。把每个可能失败的操作包在一个带正确 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)以及为什么它胜过让程序崩溃。

登录或创建账号

IGCSE, A-Level & AP