看 Crash Course 得到的一部分知识。讲的真好,翻译的也真好。
集成电路IC
每两年左右,随着材料和制造技术的发展,同样大小的空间,IC能塞进两倍数量的晶体管。这就是 摩尔定律
操作系统
- 操作系统可以运行多个程序,但是当我们切换程序的时候我们不希望丢失数据,所以每个程序有指定的内存区。
- 但有的程序在使用过程中需要更多地内存,所以就会向操作系统提出申请分配更多地内存。如果同意,就会分配另外的内存,但是由于程序都有指定的内存区,所以新分配内存和之前指定的内存就不是连续的。为了解决这个问题,出现了虚拟内存, 虚拟内存和真实内存是映射关系,虽然程序的实际内存是不连续的,但是虚拟内存是连续的,从 0 到 xxxx
- 由于程序有不同的内存,所以可以内存保护。不同的程序无法访问其他程序的内存。早期的
windows
由于缺乏内存保护,有时候程序的不当使用会导致系统崩溃,从而引发蓝屏
文件系统
文件的本质是一段二进制,通常在前面的几位是文件头,描述了文件的大小,描述了如图片文件的行列数(什么时候换行)…
- 为了方便扩展文件大小,硬盘上分为一个个存储块,每个文件占用一个或多个存储块,文件占用的存储块随着文件顺序排列,当文件变大的时候分配新的未使用的存储快
- 为了记录文件所对应存储快,文件同层下会有一个目录文件,记录了当前目录下所有文件的相关信息:创建时间、修改时间、是否是目录、所在的存储块…
windows
删除文件的时候其实只是删除了目录文件下对该文件的记录,让我们无法看到,而没有在在硬盘上的删除该文件。所以我们可以通过有些工具恢复删除的文件windows
上同一块存储上移动文件特别快,原因是因为只需要在原来目录下的目录文件中删除该文件信息,然后再目标目录下的目录文件中添加该文件信息即可。而不是在存储结构上真实的移动windows
在多次进行文件的删除、修改、迁移之后,会使得很多文件在存储上占用的存储块都是不连续的。而 碎片整理 就是从新让文件在存储上顺序排列的过程(SSD
不需要 碎片整理 )
压缩
图片颜色用 红绿蓝 三种颜色合成表示,每个颜色都是 1 个字节, 所以一个 16px 的图片 占用的内存是 16 * 3 = 48 字节。我们可以用以下方法实现减少内存。
无损压缩
- 游程编码(Run-Length Encoding),常用于出现很多重复值的文件。比如一个图片颜色是 “黄黄黄绿绿绿…” 这种格式,可以改为 “3黄3绿…” 这种格式的代码,保持格式一致。就减少了很少内存。这是 无损压缩
- 用一种更紧凑的方式表示数据。我们需要一个字典,存储 “代码” 和 “数据” 的关系。这次图片不按像素分,而是按照块分,将每种块换算成不同的代码。根据块出现在文件中的频率,用 “霍夫曼树” 进行排练。这也是一种 无损压缩。
- 定义 :
- 首先,列出所有块和出现频率,每轮选取两个最低频率的块,组成一个树
- 然后,将上一步的树和其他的块排列,选取两个频率最低的块,组成树
- …
- 最后的整个树就叫做 “霍夫曼树”
- 实例 :
- 一个文件分为: YY(黄黄)、WY(白黄)、BY(黑黄)、BB(黑黑)
- 按 “霍夫曼树” 排列为
- 将每个块翻译为代码,且由于在树中的位置不同,这些代码是不会重复的,结果最后为:。48 字节的图片转换为了 14 位 的 10110000111100 , 在前面加上字典,就完成了整个压缩,结果是 30 字节。
- 定义 :
几乎所有的无损压缩格式都由上面两个方法组合起来使用,比如: GIF , PNG , PDF , ZIP
有损压缩
丢掉人类无法识别的数据,这种删除人类无法感知的数据的方法叫做 “感知编码” ,比如:
- 声音有损压缩,去除超声波,以主要精度表示人声,次要精度表示低声波。如 skype 打电话,网速慢的时候压缩会去除更多数据,所以 skype 打电话像机器人。没有压缩的音频格式有
WAV 、 FLAC
, 压缩的有MP3
等,占用内存小了 10 倍 - 图片有损压缩, 如
JPEG
, 删除人类无法感知的。 - 视频压缩:视频本质是一长串图片,但是视频每一帧之间的差别是很小的。很多视频格式只存帧之间变化的部分。
NPEG-4
是常见标准,可以比原图片小 20 - 200 倍。
屏幕显示
- 阴极射线管 (
CRT
):把电子发射到 有磷光体涂层的屏幕了,当电子撞击涂层时,会发光几分之一秒。电子可以用磁场控制。所以可以用两种方法绘制- 引到电子束描绘出形状,叫做 “尺量扫描”
- 按固定路径,一行行扫描,从上到下,从左往右,不断重复。只在特定的点打开电子束,叫做 “光栅扫描”
- 位图显示,内存中的位对应屏幕上的像素。
3D 图形
线框渲染
把 3D 坐标拍平到 2D屏幕上,叫 线框渲染, 常用方法有:
- 正交投影: 立方体的各个边,在投影中互相平行
- 透视投射: 在真实的 3D 世界中,平行线段会在远处收敛于一点。如图:
填充图形
3D 图形除了线框渲染,还需要填充
简单的 3D 图形可以用矩形用作最小组成单元。对于复杂的 3D 投射,一般使用三角形用作最小组成单元。因为 3 个点可以确定唯一的一个面。
下面是几种填充算法:
- 扫描线算法
- 先读三角形的3个点, 找最大和最小的 Y 值,只在这两点间工作。如图
- 然后从上往下,每次一行,计算每一行与三角形相交的2个点。因为是三角形,如果相交一条边,必然相交另一条边
- 一直到扫到底部完成,结果如图
算法缺点:
- 扫描线算法:
- 边缘锯齿
缺点解决方案:
- 减轻锯齿:
- 抗锯齿: 字体和图标常用。通过判断三角形切过像素的程度,来调整颜色,具体做法如下:
- 如果像素在三角形内部,就直接涂颜色
- 如果三角形划过像素,颜色就浅一些,达到一种边缘羽化的效果,结果如图:
- 抗锯齿: 字体和图标常用。通过判断三角形切过像素的程度,来调整颜色,具体做法如下:
实际渲染过程
由于图形重叠形成遮挡,所以渲染过程有这么几种:
- 画家算法渲染: 用排序算法将远处的先渲染,然后根据距离再渲染近的。因为画家也是先画背景,再画近的,所以叫 画家算法 。
- 深度缓冲(Z-buffering)渲染:不用排序,所以比前面的算法快。具体步骤:
- 算法会记录每个像素距离屏幕的位置,在内存中存有一个数字矩阵,每个元素总是记录距离屏幕的最小值。
- 矩阵中每个元素的初始值是无限大,然后类似于扫描线算法进行扫描三角形,总是记录更低的值。假如A三角形距离屏幕为20,由于 20 < “无限大” ,所以记录为20。依次记录完所有的三角形,由于记录的总是最小值,所以跟渲染三角形的顺序没有关系。 如图:
计算机网络
基础概念与过程
- 指数退避:一个局域网中的不同计算机使用同一载体传输数据时,相互堵塞,各个计算机会等待随机时间后重新发送,如果还堵塞,等待时间指数增长,再次发送,直到网络从新疏通。
- 交换机: 为了使得同一载体中的计算机少一点,用交换机将同一个局域网分割成两个更小的局域网。互联网就是这样组成的。
- 路由: 从一台计算机到另外一台计算机路径一般要好几条,从途中也会经过很多点,可以根据实际情况(比如有条不能用了)选择不同的路由到达目的地,使得通信更可靠,更能容错。一些机构,如军队会购买专有网络连接到数据中心。
- 跳数:消息沿着路由跳转的次数,跳数会记录在消息中,如果哪条消息跳数很高,就说明路由出现了错误。可以用 traceroute 查看跳转的次数
- 数据包: 从一台计算机发送信息到另外一台计算机的数据我们称之为报文,但报文可能会很大,所以一个报文没传递完时会占用其中一条路,导致后面的报文阻塞。解决方法是将报文拆分为很小的数据包传递
一些协议
IP
(internet protocol): 网络上定位计算机,将数据发给指定的计算机。定义了报文的格式。UDP
: 计算机接收到数据后,通过端口号发给应用程序。典型特征:“端口号”、“校验和”。数据丢失没有修复措施TCP
: 优化后的UDP
,也具有 “端口号”、“校验和” , 同时还具有 “数据包有序性”、“数据包接受后发送确认码” … so,TCP
可以处理乱序和丢失数据包,没有接收到确认码就重发,并根据网络情况调整同时发送数据包的个数,即传输 速率
其他
DNS
(domain name system) :值得一提的是,它存储的是树状结构OSI
七层协议:- 物理层: 线路里的电信号、无线网络里的无线信号
- 数据链路层: 负责操控 “物理层” 。 有: MAC 地址、碰撞检测、指数退避(如:一个局域网中的不同计算机使用同一载体传输数据时,相互堵塞,各个计算机会等待随机时间后重新发送,如果还堵塞,等待时间指数增长,再次发送,直到网络从新疏通。)
- 网络层: 负责报文交换和路由
- 传输层: UDP/TCP
- 会话层: 用 UDP/TCP 创建连接,传递信息,然后关闭连接,这个过程就是会话。 查询 DNS 或看网页时 就会发生这一套流程。
- 表示层:
- 应用层:
- 反向链接:连接到该网页的链接。用来判断网页质量,如果反向链接多,说明质量高。搜索引擎刚出现时有人通过在网页里添加各种关键字(但无实际内容)来欺骗搜索引擎,后面 google 优化算法,通过反向链接来推荐网页