![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算机速成课
文章平均质量分 84
链接:https://www.bilibili.com/video/BV1EW411u7th
sysucjf
这个作者很懒,什么都没留下…
展开
-
三十三、加密
本集重点多层防御加密&解密凯撒加密替换加密移位加密列移位加密德国Enigma加密机1977年“数据加密标准”2001年“高级加密标准”密钥交换用颜色来举例“单向函数”和“密钥加密”的原理迪菲——赫尔曼密钥交换非对称加密非对称加密算法多层防御加密&解密凯撒加密替换加密移位加密列移位加密德国Enigma加密机1977年“数据加密标准”2001年“高级加密标准”密钥交换用颜色来举例“单向函数”和“密钥加密”的原理迪菲——赫尔曼密钥交换非对称加密非对称加密算法...原创 2021-11-08 17:39:13 · 3577 阅读 · 0 评论 -
三十二、黑客&攻击
本集重点社会工程学钓鱼假托木马上集讲了计算机安全的基础知识,包括各种原则和技术。本集主要讲黑客的相关知识,讨论一些入侵原理并给你一个大概概念。社会工程学黑客入侵的最常见方式不是通过技术,而是通过欺骗别人。这就叫做社会工程学(social engineering),就是一个人被欺骗以泄露自己的信息或者让另外的人配置电脑系统使之变得易于攻击。钓鱼最常见的攻击叫做网络钓鱼(phishing),例如银行发邮件叫你点击邮件里的链接并登陆账号,然后你会进入一个像官网的网站——而实际上是一个假的网站。当你输入原创 2021-11-04 09:55:18 · 8292 阅读 · 0 评论 -
三十一、计算机安全
本集重点保密性,完整性,可用性威胁模型身份验证的三种方式访问控制Bell LaPadula model隔离与沙盒保密性,完整性,可用性过去3集我们讲了计算机如何互连。让我们能够顺势跨全球沟通。威胁模型身份验证的三种方式访问控制Bell LaPadula model隔离与沙盒...原创 2021-10-29 09:19:48 · 3017 阅读 · 0 评论 -
三十、万维网
本集重点超链接URL-统一资源定位器前两集深入讨论了电线、信号、交换机、数据包、路由器以及协议,它们共同组成了互联网。接下来我们再往上抽象一层,讨论万维网(world wide web)。万维网和互联网(Internet)不是一回事。万维网在互联网之上运行,互联网之上还有Skype,Minecraft,Instagram等应用。互联网是传递数的管道,各种程序都会用,其中传输最多数据的程序就是万维网,分布在全球数百万个服务器上。我们可以用“浏览器”来访问万维网。这集我们会深入讲解万维网。超链接万维网的原创 2021-10-25 17:46:53 · 306 阅读 · 0 评论 -
二十五、个人计算机革命
注意:本集以历史故事为主计算机到1970年代初时,各个组件的成本下降,个人计算机变得可以负担。这个转变中最有影响力的是单芯片CPU的出现。继承电路的进步也提供了低成本的固态存储器(solid-state memory) ,可以用计算机的RAM和ROM。将整台计算机做到一张电路板上成为可能。那时候也有便宜可靠的存储介质(storage)——比如磁带和软盘以及低成本的显示器。在1970s将上述4种原料混在一起就可以得到一个微型计算机(microcomputer),这是第一个低成本的、一个人专用的计算机。Al原创 2021-10-22 08:39:04 · 227 阅读 · 0 评论 -
二十四、冷战和消费主义
二战结束后,美苏冷战,美国政府往科学和工程学投入大量资金。计算机在战时(曼哈顿计划和破解纳粹通讯加密)已经证明了自身的价值,政府投入大量资源,各种项目也得以开展(ENIAC,EDVAC,Atlas,Whirlwind)。1950s事情开始发生变化,Univac1是第一台取得商业成功的电脑。不像ENIAC或Atlas,Univac1不是一台机器而是一种型号,一共有40台。计算机与以前的机器不一样,以前的机器增强人类的物理能力:卡车能带更多东西、自动织布机更快等等。而计算机增强的是人类智力。范内瓦·布什于19原创 2021-10-21 11:59:48 · 174 阅读 · 0 评论 -
二十三、屏幕&2D图形显示
下图是一个早期的图形计算机PDP-1,可以看到计算机、打字机和屏幕是分离的。当时的文本任务和图形任务是分开的,因为早期的屏幕无法显示清晰的文字,而用于跟踪程序的运行情况,比如寄存器的值。屏幕更多用于存储一些没必要打印的临时值。最早的显示技术是使用阴极射线管(Cathode Ray Tubes,CRT),原理是把电子发射到有磷光体涂层的屏幕上,电子撞击涂层时会发光几分之一秒。电子的路径可以使用磁场控制,屏幕内使用板子或线圈把电子引导到想要的位置。既然可以这样控制,就有两种方法绘制图形:引导电子束描原创 2021-10-21 11:47:35 · 286 阅读 · 0 评论 -
二十二、命令行界面
我们可以使用“输入输出设备(input & output devices)”让我们和计算机交互,它们在人类和机器间提供了界面,如今有整个学科专门研究这个,叫“人机交互”。早期机械计算设备用齿轮、旋钮和开关等机械结构来输入输出,这些就是交互界面。早期电子计算机(ENIAC)则使用一大堆机械面板和线来操作。输入的程序运行完毕想拿出数据时,一般是打印在纸上。到1950s,机械输入完全消失,打孔纸卡和磁带取而代之,但是输出仍然是打印到纸上,还有大量指示灯在运行中提供实时反馈。1950s前输入的概念很原始,原创 2021-10-21 11:00:21 · 1596 阅读 · 0 评论 -
二十一、压缩
压缩可以把数据占用的空间压得更小,用更少的bits表示数据。我们用上集的4像素*4像素图片作为例子。图像存成一长串的连续字节数据,由元数据+像素值组成,今天忽略元数据。每个像素的颜色有三原色的组合(红绿蓝)混合而成,每个颜色用一个字节存,数字范围0-255。这个图像有16个像素,每个像素3个字节,共48字节。压缩这48个字节的一种方法时减少重复信息,最简单的方法就叫做“游程编码”(run-length encoding),适合于经常出现相同值的文件。具体方法就是从多个连续的、相同的像素值中保留一个,然原创 2021-10-21 10:52:42 · 1013 阅读 · 0 评论 -
二十、文件系统
文件(file)是一整块有关系的数据。文件格式(file format)是一种存文件数据的模式,一个文件存储一般有现成标注,如jpeg和mp3。最简单的文件格式是文本文件(text files,txt),存储的是文字。就像所有其它文件,文本文件实际上只是一长串二进制数。解码这一长串二进制数的关键就是ASCii编码。另一个更加复杂的例子是波形(Wave)文件,也叫做WAV,存储音频数据。为了读取wav文件,我们需要一些信息,比如码率(bit rate)以及它是单声道还是立体声,这些信息属于数据的数据,叫做“元原创 2021-10-21 10:28:57 · 348 阅读 · 0 评论 -
十九、内存&存储介质
之前我们已经讲过内存,内存在断电之后存储的内容就会消失,所以内存叫**“易失性”存储器**(volatile memory)。存储器(Storage)和内存不同,写入存储器的数据——例如硬盘——数据会一尺存储着,断电也不会丢失,除非其被覆盖或者被删除。存储器是“非易失性”的,以前是易失性的存储速度快、非易失性的存储速度慢,现在这二者之间的差距逐渐缩小。最早的存储介质是打孔纸卡以及打孔纸带,纸卡不耗电且便宜耐用,但是读取慢而且只能写入一次(write-once)——因为打的孔无法轻易不上。对于存储临时值,原创 2021-10-21 09:11:42 · 711 阅读 · 0 评论 -
十八、操作系统
1940、1950年,一个计算机每次只能运行一个程序,程序员在打孔纸卡上写程序,然后拿到一个计算机房间交给操作员。计算机空下来时,程序员放入程序,计算机运行程序、输出结果、停机。以前计算机慢,这种手动做法可以接受,运行一个程序需要几天乃至几周。但是计算机越来越快,指数级增长,放程序的时间比程序运行时间还长。我们需要一种方式让计算机自动运作,因此“操作系统(Operating System,OS)”诞生了。“操作系统”其实也是程序,但它有操作硬件的特殊权限,可以运行和管理其它程序。操作系统一般是计算机开启的原创 2021-10-20 14:37:40 · 92 阅读 · 0 评论 -
十七、集成电路和摩尔定律
过去6集我们聊了软件,从早期编程方式到现代软件工程。在大概50年里,软件从纸带打孔变成面向对象编程语言、在集成开发环境中写程序。但是如果没有硬件的大幅度进步,软件是不可能做到这些的。为了体会硬件性能的爆炸式增长,我们要回到电子计算机的诞生年代。1940s-1960s这段时间里,计算机都由独立部件组成,这些组件叫做“分立元件(discrete components)”,然后不同组件再用线连在一起(分立元件:只有一个电路元件的组件,可以是被动的——例如电阻、电容、电感或主动的——晶体管或真空管)。举例,ENI原创 2021-10-20 11:34:35 · 659 阅读 · 0 评论 -
十六、软件工程
对于程序员来讲,一个排序函数可能只需要十多行代码,不需要特殊的专门工具就可以完成,你甚至可以使用记事本完成。但是对于一个大的项目——比如微软的office,大约会有4000万行代码,这是一个程序员所不能独立完成的。为了写大型程序,程序员用各种工具和方法,这些工具和方法论构成了今天的“软件工程”学科。把大项目分解成小函数,可以让多人同时工作。程序员不用关心整个项目、关心自己的函数就好了。如果你的任务是写排序算法,你只需要确保高效和正确就可以了。然而把代码打包成函数是依旧不够的,如果只是这样,微软office原创 2021-10-20 11:16:48 · 142 阅读 · 0 评论 -
十五、阿兰图灵
图灵1912年出生于伦敦,数学、科学能力惊人。他对计算机科学的建树始于1935年,当时他还是剑桥国王学院的硕士生。他开始解决德国数学家大卫·希尔伯特提出的问题——“可判定性问题(decision problem)”。是否存在一种算法,能够输入一个以形式逻辑(formal logic)书写的语句,输出准确的“是”与“否”的答案?如果这样的算法存在,可以回答比如“是否有一个数大于所有数”——答案为“否”。我们主要关注的是这样的一个算法是否存在。Alonzo Church在1935年首先提出解决方法,他开发了一种原创 2021-10-20 11:07:27 · 1348 阅读 · 0 评论 -
十四、数据结构
上集讲了一些经典算法——给数组排序、找到图的最短路径。但是上集没有讲算法处理的数据存在内存里的格式是什么。我们希望数据是结构化的,方便读取。因此计算机科学家发明了“数据结构”。上集已经介绍了一种基本的数据结构——数组(Array),也叫列表(list)或者向量(Vector)。数组的值一个个连续存在内存里,一个数组变量里面可以存储多个值。为了能够获取数组中的某个值,我们要指定一个下标(index)。大多数编程语言里,数组下标都从0开始,用方括号[]代表访问数组。如果想相加数组J的第一个和第三个元素,我们可以原创 2021-10-20 10:56:53 · 126 阅读 · 0 评论 -
十三、算法入门
什么叫做算法?算法就是解决问题的具体步骤。即使两个代码的运行结果一致,其中一个代码的算法可能会更好。一般来说所需执行的步骤(语句)越少越好,但是我们有时候也会关心其他因素,比如占用的内存等等。“算法”一词来自波斯博识者阿尔·花拉子密,1000多年前的代数之父之一。如何想出高效算法,是早在计算机出现前就有的问题,由此诞生了专门研究计算的领域,然后发展成一门现代学科——计算机科学。记载最多的算法之一就是“排序”。排序拥有大量的算法,包括“冒泡排序”“意面排序”等等。我们先讲选择排序。第一次排序,先遍历数组的所原创 2021-10-20 09:58:56 · 149 阅读 · 0 评论 -
十二、编程原理——语句和函数
上集讲到用机器码写程序时,大量底层的细节给编程带来了阻碍。为了能够脱离底层细节并且编写更复杂的程序,人们开发了各种各样的高级编程语言,让程序员专心解决问题而不用考虑硬件细节。今天我们讨论大多数编程语言都有的基本元素。就像口语一样,编程语言有“语句(statement)”。语句表达单个完整思想,比如,“我想要茶”或者“在下雨”。规定句子结构的一系列规则叫做“语法(syntax)”,每个编程预压都有相应的语法。a=5是一个编程语言语句,意思是创建一个叫a的变量并把数字5放在里面,这种将一个值赋给一个变量的语句原创 2021-10-20 09:19:45 · 413 阅读 · 0 评论 -
十一、编程语言发展史
之前我们将重点放在硬件——组成计算机的物理组件,比如电、电路、寄存机、RAM、ALU、CPU,但是在硬件层面编程非常麻烦(打孔纸卡、插线板、面板编程)。所以程序员想要使用一种更加通用的方式进行编程,一种“更软的”媒介——软件。第8集我们讲了一个简单的程序,在内存地址0存放了00101110。前4位是操作码OPCODE,表示LOAD_A指令;1110是内存地址14,所以这8位编码的意思是“读取内存地址14,放入寄存器A”。这8位二进制编码就是计算机可以处理的编码,也是处理器的“母语”,是二进制只能理解的内容原创 2021-10-20 09:16:40 · 263 阅读 · 0 评论 -
十、早期的编程方式
前几集的重点是一个计算机是怎么工作的:怎么从内存中读写数据、执行操作(把两个数字加在一起)。以及如何完成一系列指令的执行,也就是计算机程序。但是我们还没有讲怎么把程序放入计算机当中。在第7,8集中讲了如何执行一个已经存入了RAM中的程序——我们在每一个指令循环里从连续的地址中以此取得指令、解码然后执行。但是实际上程序需要加载进入内存当中,这就是计算机科学所涵盖的知识了。给机器编程的需求早在计算机出现之前就有了。如果只需要织一块大红布,工人只需要将布放入织布机中;而如果是需要织带有图案的布,就需要人工手动调原创 2021-10-20 09:10:19 · 573 阅读 · 0 评论 -
二十九、互联网
本集重点IP——互联网协议UDP——用户数据报协议校验和TCP——传输控制协议DNS——域名系统OSI——开放式系统互联通信参考模型上集提到,你的计算机和一个巨大的分布式网络连接在一起。这个网络就叫做互联网。互联网由无数互联设备构成,而且日益增多。计算机为了获取这个视频,首先要连接到局域网(Local Area Network,LAN)。你家WiFi路由器连着的所有设备,组成了局域网。局域网再连接到广域网(wide area network,WAN)。WAN的路由器一般属于你的互联网服务提供商(Inte原创 2021-10-19 20:33:01 · 119 阅读 · 0 评论 -
九、高级CPU设计
早期的CPU一秒只有一赫兹,到了现如今的CPU几亿甚至几兆赫兹的量级。早起计算机的提速方式:减少晶体管的切换时间,但是这种提速方法会遇到瓶颈。之后厂商不断发明更加高新的技术提升计算机的运行速度、并且让计算机能够执行更加复杂的运算。以前的CPU设计除法的时候,是单纯地让被除数累减除数直到结果为0或者负数是停下。现在的CPU专门设计了除法的模块加入进ALU中,让ALU变得更大更复杂。复杂度与速度之间的制衡是一个长久的命题,现代CPU中大大部分操作如加密文档、解码压缩视频、图形操作都有专门的模块处理,这些行为原创 2021-10-18 09:35:33 · 186 阅读 · 0 评论 -
七、中央处理器
今天我们讲处理器。我们之前实现了一个ALU,可以接受二进制数字并执行计算;然后我们根据寄存器实现了一个内存,能够在不同地址存储数字。然后我们就可以使用ALU以及RAM建造CPU了。CPU负责执行程序。程序由一个个操作组成,这些操作叫做指令(Instruction),因为他们指示计算机去做什么。我们以微体系架构的视角来关注CPU的组成结构,也就是说,我们不会专注与具体怎么连接每一位每一位的一根根线,而是关注于每个模块之间数据怎么通信,功能怎么关联的问题。我们先获得一个RAM,假设它只有16个位置,每个位置原创 2021-10-22 08:43:42 · 104 阅读 · 0 评论 -
二十八、计算机网络
本集重点局域网媒体访问控制地址载波侦听多路访问指数退避冲突域电路交换报文交换分组交换局域网第一个计算机网络出现在1950-1960年代,通常在公司或研究室内部使用。计算机网络的第一个好处是便利,比把纸卡或者磁带送到另一栋楼里更加快速可靠,这个网络叫做球鞋网络(sneakernet)。第二个好处是能共享物理资源,比起每台电脑配置一台打印机,所有电脑可以共享一台联网的打印机。早期网络也会共享存储空间,因为每台电脑都配存储器太贵了。计算机近距离构成的小型网络叫做局域网(local area network,原创 2021-10-16 16:09:29 · 357 阅读 · 0 评论 -
五、算术逻辑单元
上节课我们学习了如何用二进制表示和存储数字,但是真正的目标是计算与有意义地处理数字。计算机的算术逻辑单元(ALU)用于实现计算机的算术操作,ALU被称作计算机的数学大脑。ALU是计算机里负责运算的组件,基本上其他所有部件都用到了他。Intel 74181是第一个封装到芯片中的ALU。本节课将尝试制造一个简单的ALU电路,实现和74181一样的功能。然后我们在余下的几集中将使用它制造出一台计算机。ALU有着2个单元:1个算术单元和1个逻辑单元。ALU负责计算机的所有运算,包括加减乘除以及自增等等。我们尝试使原创 2021-10-14 19:00:47 · 942 阅读 · 0 评论 -
四、二进制
本节课主要解决如何用两个数值表示所有数字的问题——二进制。想用二进制表示更大的数字,就需要增加数位——就像十进制那样。十进制是基于10的表示法,意思是每一个数位上都乘以10的相应阶乘然后相加,就可以得到这个数的值了:二进制也是一样,二进制是基于2的表示法,也就是要求每一个数位都要乘以2的相应阶乘然后相加:二进制的相加运算类似于十进制,这里1+1=10,因此需要进一位。更高的数位也按照这个原则相加进位。只要相加结果是10或者11,那么就需要进位。二进制中的一个数位就是一个bit,8bit可以表示原创 2021-10-14 15:33:17 · 153 阅读 · 0 评论 -
二十七、3D图形
上集提到的图形界面都是2D的,但是我们生活的世界是3D的。本集主要讲3D图像以及如何渲染3D图形到2D屏幕上。24集中说过可以写一个函数从A到B画一条线。通过控制A和B的(X,Y)坐标,可以控制一条线。在3D图像中,点的坐标不再是两点,而是三点,X,Y,Z。当然,2D的电脑屏幕上不可能有XYZ立体坐标轴。所以又图形算法负责把3D坐标“拍平”显示到2D屏幕上,这叫做3D投影(3D Projection)。所有的点从3D转成2D后,就可以用画2D线段的函数来连接这些点,叫做“线框渲染”。想象用筷子做一个原创 2021-10-16 11:40:43 · 214 阅读 · 0 评论 -
六、寄存器与内存
上集我们讲了ALU,他因为可以进行ALU中的A和L而得名。我们运算的结果如何存储起来呢?我们又如何使用这些存储的数字进行连续操作呢?这就需要内存了。我们先介绍随机存取存储器(RAM,radom access memory),他在有电的情况下才能存储。另外一种存储方式叫做持久存储(persistent memory),即使电源关闭时也不会丢失。本节课尝试制造出能够存储1个bit的电路,然后我们将扩大规模制造出大规模内存电路,最后我们再将其与ALU结合做出CPU。我们之前所说的电路都是单向电路——电流只沿一原创 2021-10-15 14:59:14 · 1914 阅读 · 0 评论 -
二十六、图形用户界面
1984年苹果发布的Macintosh是普通人可以买到的第一台带图形用户界面的计算机。在那个命令行计算机为主的时代里,这是一个革命性的产品。图形用户界面是一个“选择并点击”(point & click)的界面,计算机更直观了。早期的交互式图形程序,如Sketchpad和太空战争都是1962年制作的。但这些都是一次性项目,不是整合良好的体验。现代图形界面的先驱可以说是道格拉斯·恩格尔巴特,他阅读了万尼瓦尔·布什的Memex文章并获得了启发。在1962年的一份开创性报告中汇集了各种想法,他认为人类面临原创 2021-10-14 18:39:37 · 912 阅读 · 0 评论 -
三、布尔逻辑和逻辑门
本节课不必关注底层细节,主要将精力放在如何构建复杂系统上。机电计算机时代,使用齿轮运算,十进制;电子计算机时代,使用晶体管的开关状态运算,二进制,可以用于表示“真”和“假”两个值。晶体管不仅仅可以用开关表示两个值,还可以用通过的电流大小表示更多值,曾经有三进制和五进制的电脑,但是状态越多越难区分信号,而且区分的信号之间电流的变化范围比较紧密,一旦有外界的电磁干扰就会导致记录的数值出错,所以比较安全的方式就是采用二进制,并且将两个数值的电流阈值分开一些,减少电磁干扰影响。另外一个使用二进制的理由是数学中有原创 2021-10-14 14:45:09 · 501 阅读 · 0 评论 -
二、电子计算机
20世纪时,随着人口爆炸式增长、贸易量骤增以及工程科学的复杂度大幅度上升,需要运行处理的数据量也迅速增长,因此我们需要更加自动化、更强的计算能力,因此一开始的计算机都是房间大小的,维护更难且费用更高。哈佛马克一号是最大的机电计算机之一,制造于1944年,由IBM制造,用于为曼哈顿工程跑模拟。该计算机的大脑由机械继电器组成,如图所示,控制电路的线圈通电流过电流,产生电磁场,并吸引金属臂闭合,使工作电路通电。继电器就像水龙头一样,只不过控制的不是水流而是电流。继电器的问题在于没有机械臂的开关自带质量,因此开原创 2021-10-14 14:07:06 · 187 阅读 · 0 评论 -
一、计算机早期历史
算盘发明于美索不达米亚的公元前2500年,它属于一种手动计算器,可以加减数字、以及类似硬盘一样存储计算状态。算盘的发明原因是社会的规模已经远远超过个人心算能力了。算盘的样式如下:...原创 2021-10-14 10:55:55 · 459 阅读 · 0 评论