Crash Course Computer Science(31-40)

P31 计算机安全

并不是所有人都在互联网和万维网上规规矩矩,计算机安全即是保护计算机的保密性、完整性和可用性。保密性 是指只有有权限的人才能读取计算机系统和数据,黑客盗取信用卡即是破坏保密性,完整性 是指只有有权限的人才能使用和修改系统和数据,黑客盗取邮箱密码冒充你就是破坏完整性,可用性 是指有权限的人应该随时可以访问系统和数据,拒绝服务攻击(DDOS) 是黑客发送大量虚假请求让网站崩溃,这破坏了可用性。

很多安全问题都可以归纳为2个问题:你是谁,你可以访问什么。为了区分谁是谁,我们用 身份认证(Authorization),常见的身份认证是用户名和密码,或密钥和令牌,以及生物识别(指纹、刷脸),这几种方式各有优缺点。认证之后,我们还需要对用户进行 访问控制,也叫 鉴权(Authentication),不同的用户在系统中拥有不同的权限,通常用权限控制列表来实现,常见的权限有读、写、执行,有一种权限控制原则叫 no read up、no write down。

即便做了最严谨的安全措施,还是不可避免地有被攻破的可能性。从另一角度出发,开发者应该用最少的代码、最少的权限实现功能,以防潜在的漏洞,除此之外,操作系统还会对程序进行隔离,程序只能访问操作系统分配给它的内存块,无法访问其他内存,一台计算机可以运行多个虚拟机,虚拟机之间也是互相隔离的。这样能一定程度防范安全攻击。

阅读更多

Crash Course Computer Science(21-30)

P21 压缩

前面提到,位图文件存储的是RGB数据,有时候一张图片很大,而我们想更快地把它发给朋友,这时候就需要用到 压缩(compression),一种简单的压缩方法是游程编码,例如连续7个像素点都是黄色,与其用7个一样的RGB数据,不如在前面加个7代表7个,再接1个RGB数据即可。这种压缩方法适合经常出现相同值的文件,并且可以轻易地复原,叫做 无损压缩。1950年代,麻省理工学院学生哈夫曼发明了一种高效编码方式,叫做 哈夫曼树(Huffman Tree),将出现频率高的块用短编码,频率低的用长编码,用树结构和字典来映射。

可以看到,上面两种方法的思路分别是消除冗余和用更紧凑的表示方法。几乎所有的无损压缩都用了这两种方法,如 gif、png、pdf、zip

然而,并不是所有的数据都需要无损。像音频文件,有些超声波部分完全可以抛弃,因为人类听不到,图像和视频也是,有时候我们并不追求超清画质,只要能看到图片是什么就够了。这时候太过细致的细节会被模糊化处理,这就是 有损压缩 。著名的例子是 mp3 和 jpeg 。

阅读更多

Crash Course Computer Science(11-20)

P11 编程语言发展史

一条计算机指令,00101110,前四位是操作码,表示 LOAD_A(把值从内存复制到寄存器A),后四位是内存地址14,简写为 LOAD_A 14,意思是,读内存地址14,复制到寄存器A。计算机只认识二进制数,用二进制指令编写的程序称为 机器语言。早期人们编程的方式,是先在纸上写英文版的程序,再根据操作码表制作成二进制码的纸带,丢到计算机去处理。像这样,对计算机程序进行高层次的描述称为 伪代码

与其用机器码编写程序,为什么我们不直接写 LOAD_A 14 来表示 00101110,而中间翻译的部分交给机器去做呢?于是程序员发明了一种能将像 LOAD_A 14 这样的文字指令翻译成 00101110 这样的二进制指令的程序,叫做 汇编器(assembler)。用像 LOAD_A 14 这样的文字指令编写的程序,叫做 汇编语言

1940-1950年代,一名美国海军军官,也是哈佛1号计算机的设计者 Hopper,她想到能否把一条自然语句翻译成多条汇编指令或机器指令,于是设计了一种机器叫做 编译器(compiler),专门把高级语言转换成低级语言。在高级语言里,我们用 变量 来抽象内存地址和值,程序员不必了解底层细节,从此,编程开始变得简单起来。

Hopper 一开始发明了一种 A-0 高级语言,但没有流行开来,反倒是1957年IBM发明的 FORTRAN 主宰了早期的计算机编程,但只能运行在IBM的机器上,再后来出现了所有机器都可运行的 COBLE,再后来出现了我们熟悉的C、C++、Objective-C、Python、Java、Golang等高级语言。

FORTRAN 项目总监 John Backus:

我做的大部分工作是因为懒,我不喜欢写程序,所以我写这门语言,让编程更容易。

阅读更多

Crash Course Computer Science(1-10)

在 B站 发现了一门好课《Crash Course Computer Science》(计算机科学速成课),虽然讲“速成”有点急功近利的意思,但这门课从计算机的历史开始讲起,几乎涵盖了从布尔逻辑到二进制、从硬件到软件、从编译原理到操作系统、从计算机网络到信息安全等等计算机科学的知识,作为一种科普,扩充知识面还是相当不错的。

P1 计算机的早期历史

计算机起源于人们计算的需求,最早被发明的是算盘,用来计算大数字,后来又出现了很多变种应用于各行各业,比如星盘让船可以在海上计算纬度,计算尺帮助计算乘除法,各种时钟用于计算日出、潮汐、天体位置等。而 Computer 一词,最初是指以计算为职业的人,后来才慢慢代指机器,其中以 1694 年发明的“步进计算器”最出名,它通过转动齿轮,带动数字加减过程的进位。1822年,Charles Babbage 提出了一种“差分机”,用于解决同一个公式下不同参数的计算,但这个项目最终失败了。在研究差分机期间,Charles Babbage 还构想了一种“分析机”可以做不同的运算,由于这个思想太超前,所以同样没有建成。但是分析机的思想奠定了 计算机可以自动完成一系列操作 这个基础。英国数学家 Ada 根据分析机的理念,设计了假想的程序,所以 Ada 被认为是世界上第一个程序员。

1880年,美国人口快速增长,人口普查局找到 Herman Hollerith 制造一款打孔卡片制表机,用传统机械来计数,用电动结构连接其他组件,大大提升了统计的数据。企业开始意识到计算的价值,之后 Hollerith 成立了制表机器公司,在1924年跟其他机械公司合并后,成为 国际商业机器公司(International Business Machines),即 IBM

步进计算器发明者 Gottfried Leibniz:

让优秀的人浪费时间算数简直是侮辱尊严,农民用机器能算得一样准。

阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×