Crash Course Computer Science
刘皓铭

4. 二进制

位,bit,即为二进制的一位, 位储存的信息大小为 。字节,byte​, 字节为 位。

IEEE 754 标准,用来存储浮点数。如 写成 为有效位数, 为指数。对于 位浮点数(float 型浮点数), 位表示正负, 位存储指数, 位存储有效位数。

5. 算术逻辑单元

算术逻辑单元(ALU),含有算术单元和逻辑单元。

算法单元:两个半加器(可以输入两个 )组成全加器(可以输入三个 ,两个数字相加以及进位情况), 个全加器可制作 位加法器。当 位加法器中最后一个全加器产生进位时,就是发生溢出(overflow)了。现代计算机使用超前进位加法器。

6. 寄存器 & 内存

随机存取存储器(RAM),持久存储。

AND-OR 锁存器(存储一位信息),八个组成一个 位寄存器。用矩阵来实现更高位的寄存器,有列地址和行地址。多路复用器用来找到对应的地址(寻址)。

SRAM(静态随机存取存储器)。

寄存器:很小的一块内存,能存一个值。

RAM:一大块内存,能在不同地址存大量数字。

7. 中央处理器(CPU)

CPU 负责执行程序,程序由指令组成。数学指令:CPU 用 ALU 进行数学运算。内存指令:CPU 和内存通信,进行读值或写值。

寄存器用来临时存数据和操作数据。

CPU 状态:取指令,解码,执行。

9. 高级CPU设计

给 CPU 加一点 RAM,叫缓存(cache)。

缓存命中(cache hit):想要的数据已经在缓存。

缓存未命中(cache miss):想要的数据不在缓存。

脏位(dirty bit):同步一般发生在当缓存满了而 CPU 又要缓存时。在清理缓存腾出空间之前,会先检查”脏位“,如果是”脏“的,在加载新内容之前,会把数据写回 RAM。

脏位的意义:修改数据时,为提高速度,会直接在缓存修改,而 RAM 未修改。

指令流水线:并行处理,但要先弄清数据依赖性,必要时停止流水线。高端 CPU 会动态排序有依赖关系的指令,最小化流水线的停工时间,这叫做”乱序执行“。条件跳转会产生”岔路口“,高端 CPU 会猜那条路可能性大一些,然后提前把指令放进流水线,这叫做”推测执行“。

多核处理器:同时运行多个指令流。

11. 编程语言发展史

二进制是处理器的“母语”,这叫“机器语言”或“机器码”。

汇编器读取用“汇编语言”写的程序,然后转成“机器码”。

高级编程语言:程序员只需创建代表内存地址的抽象,叫“变量”。

16. 软件工程

把函数打包成层级,把相关代码都放在一起,打包成对象(objects)。把函数打包成对象的思想叫“面向对象编程”。

程序编程接口,简称 API,帮助不同程序员合作。API 控制哪些函数和数据让外部访问,哪些仅供内部(设定 public 或 private)。

集成开发环境,简称 IDE。

源代码管理,也叫“版本控制”,比如 GIT,SVN。

测试可以统称“质量保证测试”,检查 QA。

17. 集成电路&摩尔定律

集成电路(IC),封装一定数量的常用电子元件,把分立元件封装成一个独立单元。

印刷电路板,简称 PCB。

光刻,用光把复杂图案印到材料上,比如半导体。

18. 操作系统

操作系统,简称 OS,充当软件和硬件之间的媒介。更具体地说,操作系统提供 API 来抽象硬件,叫“设备驱动程序”。

虚拟内存,操作系统会自动处理虚拟内存和物理内存之间的映射(物理内存地址不连续,但虚拟内存地址连续)。 这种机制使程序的内存大小可以灵活增减,叫“动态内存分配”。对程序来说,内存看起来是连续的。这为操作系统同时运行多个程序提供了极大的灵活性。

给程序分配专用的内存范围的另一个好处:程序出错后,只能捣乱自己的内存,不会影响到其它程序,这叫“内存保护”。

分时操作系统,每个用户只能用一小部分处理器,内存等。

19. 内存&储存介质

存储器,如硬盘,具有非易失性。

20. 文件系统

数据的数据,叫“元数据”(meta data),提供信息来正确读取数据,存在文件开头,在实际数据前面,因此也叫文件头(Header)。

文件系统移动文件时,不用移动任何数据块,只需改两个目录文件,一个文件里删一条记录,另一个文件里加一条记录。

21. 压缩

游程编码(Run-Length Encoding),适合经常出现相同值的文件,压缩连续相同值。

DFTBA,字典编码,紧凑代码,用霍夫曼树为出现频率高的数据分配长度短的代码(编号)。

游程编码和字典编码实现了“无损压缩”,没有丢失任何数据。

如果录音乐,超声波数据都可以扔掉。人对人声敏感,对低音不敏感,所以有损音频压缩利用这一点,用不同精度编码不同频段。这种删掉人类无法感知的数据的方法,叫“感知编码”(perceptual coding)。

27. 3D 图形

3D 投影,把 3D 坐标“拍平”显示到 2D 屏幕上。3D 转 2D 后用画 2D 线段的函数来连接点,这叫“线框渲染”。

填充图形的经典算法叫扫描线渲染。

抗锯齿,如果像素在多边形内部,就直接涂颜色,如果多边形划过像素,颜色就浅一些。

实现遮挡,排序后从远到近渲染,这叫画家算法。还有一种方法叫深度缓冲,不用排序,对每个像素取距离的最小值,从而得到最前面的多边形。但距离相同时无法处理,不可预测哪个画在上面,导致出现 Z-fighting 效果。

背面剔除,忽略多边形背面。

明暗处理,多边形面对的方向叫“表面法线”,根据方向来进行平面着色。还有更多算法,如高落德着色和冯氏着色。

纹理映射,查询纹理,从相应区域取平均颜色,并填充多边形。

GPU,图形处理单元,在显卡上,周围有专用的 RAM。

28. 计算机网络

计算机近距离构成的小型网络,叫局域网,简称 LAN。

为了知道数据传递方向,以太网需要每台计算机有唯一的媒体访问控制地址,简称 MAC 地址。

多台电脑共享一个传输媒介,这种方法叫“载波侦听多路访问”,简称“CSMA”。很多计算机同时侦听载体,所以叫“侦听”和“多路访问”。载体传输数据的速度叫“带宽”。

指数退避,发生冲突后等 1 秒。若仍冲突,等 2 秒。若仍冲突,等 4 秒……

我们需要减少同一载体中设备的数量,载体和其中的设备总称“冲突域”。为了减少冲突,可以用交换机将一个冲突域拆成两个冲突域。

大型网络中,从一个地点到另一个地点通常有多条路线。消息沿着路由跳转的次数,叫“跳数”(hop count)。

29. 互联网

WIFI 路由器连着的所有设备,组成了局域网,局域网再连到广域网(WAN),WAN 的路由器一般属于“互联网服务提供商”,简称 ISP。

传输的数据会被拆成多个小数据包(packet)。数据包想在互联网上传输,要符合“互联网协议”的标准,简称 IP。为解决数据包传给哪个程序,还需更多协议,其中最简单最常见的叫“用户数据报协议”,简称 UDP。IP 负责把数据包送到正确的计算机,UDP 负责把数据包送到正确的程序。

如果“所有数据必须到达”,就用“传输控制协议”,简称 TCP。1. TCP 数据包有序号。2. TCP 要求接收方的电脑收到数据包并且“校验和”检查无误后(数据没有损坏),给发送方发一个确认码(ACK),代表收到了。

当计算机访问一个网站时,需要 IP 地址和端口号。域名系统(DNS)负责把域名和 IP 地址一一对应。

30. 万维网

为了使网页能相互连接,每个网页需要一个唯一的地址,这个地址叫“统一资源定位器”,简称 URL。

超文本传输协议(HTTP)。

超文本标记语言(HTML)。

网络中立性,应该平等对待所有数据包。

31. 计算机安全

计算机安全是保护系统和数据的保密性,完整性和可用性。

“保密性”是只有有权限的人才能读取计算机系统和数据。“完整性”是只有有权限的人才能使用和修改系统和数据。“可用性”是有权限的人应该随时可以访问系统和数据。

拒绝服务攻击(DDOS)就是黑客发大量的假请求到服务器,让网站很慢或者挂掉。这就是攻击“可用性”。

为了保护这三方面,安全专家会从抽象层面想象“敌人”可能是谁,这叫“威胁模型分析”。

隔离,计划当程序被攻破后,如何限制损害,控制损害的最大程度,并且不让它危害到计算机上其他东西。可以用“沙盒”程序实现隔离,给每个程序独有的内存块,其他程序不能动。

32. 黑客&攻击

“社会工程学”,欺骗别人让人泄密信息。最常见的攻击是网络钓鱼。

远程攻击一般需要攻击者利用系统漏洞来获得某些能力或访问权限,这叫“漏洞利用”。一种常见的漏洞利用叫“缓冲区溢出”。“缓冲区”是一种概称,指预留的一块内存空间。可以利用缓冲区溢出来修改内存。

为了防止缓冲区溢出被利用,最简单的方法是复制之前先检查长度,防止内存被修改,这叫“边界检查”。程序也会随机存放变量在内存中的位置,导致黑客更容易让程序崩溃,而不是获得访问权限。

程序也可以在缓冲区后,留一些不用的空间,然后跟踪里面的值,看是否发生变化。如果发生了变化,说明有攻击者在乱来,这些不用的内存空间叫“金丝雀”。

代码注入,最常用于攻击用数据库的网站。用“结构化查询语言”(SQL),一种流行的数据库 API。

33. 加密

把明文转成密文叫“加密”,把密文恢复回明文叫“解密”。

密钥交换,是一种不发送密钥,但依然让两台计算机在密钥上达成共识的算法。“迪菲-赫尔曼密钥交换”(Diffie-Hellman),有公开的基数和模数,双方分别选一个指数 ,分别将 发给对方,共享密钥为 。双方用一样的密钥加密和解密消息,这叫“对称加密“。

非对称加密,有两个不同的密钥,人们用公钥加密消息,只有有私钥的人能解密。知道公钥只能加密,但不能解密,这是”不对称“的。目前最流行的”非对称加密“技术是 RSA。

34. 机器学习&人工智能

机器学习算法让计算机可以从数据中学习,然后自行做出预测和决定。

分类,区分两个事物,做分类的算法叫“分类器”。很多算法会减少复杂性,把数据简化成“特征”,“特征”是用来帮助“分类”的值。为了训练“分类器”做出好的预测,我们需要“训练数据”。

把决策空间切成几个盒子的简单方法,可以用“决策树”来表示。

人工神经网络,人造神经元可以接受多个输入,然后整合并发出一个信号,被放成一层层,形成神经元网络,因此得名神经网络。一个输入层,一个输出层和多个隐藏层,因此得名“深度学习”。

“弱 AI”或“窄 AI”,只能做特定任务。真正通用的,像人一样聪明的 AI,叫“强 AI”。

学习什么管用,什么不管用,自己发现成功的策略,这叫“强化学习”。

35. 计算机视觉

卷积神经网络,用一堆神经元处理图像数据,每个都会输出一个新图像 。

36. 自然语言处理

人类语言叫“自然语言”。自然语言处理,简称 NLP。

分析树,用规则来讲句子划分为块,同时标明了句子的结构。

语音识别,如今准确度最高的语音识别系统,用深度神经网络。

波形转换为谱图,用快速傅里叶变换(FFT)实现波形到频率的转换。构成单词的声音片段叫“音素”。

语音合成,让计算机输出语音。把一段文字,分解成多个声音,然后播放这些声音。

37. 机器人

机器人是由计算机控制,可以自动执行一系列动作的机器。

比例-积分-微分控制器,简称 PID 控制器。比例值,实际值和理想值差多少。积分值,一段时间内误差的总和。导数值,期望值与实际值之间的变化率。三个值有不同权重,然后用来控制系统。

 评论