计算机科学(二)

一、屏幕与图形

1. 压缩

  • 游程编码 Run-Length Encoding:出现连续相同值时,使用额外字节统计次数,并使用统一格式表示不同
  • 无损压缩 Lossless compression:没有损失任何数据的压缩
  • 霍夫曼树 Huffman Tree
  • 字典编码 Dictionary Coders
  • 感知编码 Perceptual coding :删掉人类无法感知的数据的有损压缩方法,叫做“感知编码”,如音频文件,人类听不到超声波,所以可以舍去,MP3就是音频的一种压缩形式
  • 有损压缩 : 如JPEG 损失了部分像素点的信息
  • 时间冗余Temperal redundancy:一个视频由很多图片构成,其中很多图片的背景一样,这就构成了时间冗余,很多视频编码格式,只存变化的部分。进阶的视频压缩模式会找到帧与帧的相似性,然后打补丁,MPEG-4 是视频压缩的常见标准。

2. 人机交互 (Human-Computer Interaction)发展史

  • 早期输出数据是打印到纸上,而输入是用纸卡/纸带一次性把程序和数据都给进去
  • QWERTY 打字机的发展
  • 1950年代,电传打字机 Teletype machine:用于发电报,使两人可以远距离沟通
  • 1970年代末,屏幕成为标配,使用命令行界面

3. 图形显示发展

  • 早期是PDP-1 计算机:键盘和显示器分开,屏幕用于显示临时值
  • 阴极射线管Cathode Ray Tube (CRT)进行矢量扫描 Vector Scanning和光栅扫描 Raster Scanning
  • 液晶显示器 Liquid Crystal Displays (LCD),像素 (Pixel):随着显示技术的发展,出现了LCD,LCD 也用光栅扫描。在屏幕上显示的清晰的点,叫"像素"
  • 字符生成器 Character generator:相比于像素,为了减少内存,人们更喜欢使用字符,计算机需要额外硬件,来从内存读取字符,转换成光栅图形,这样才能显示到屏幕上个硬件叫 "字符生成器",基本算是第一代显卡。它内部有一小块只读存储器,简称 ROM,存着每个字符的图形,叫"点阵图案"
  • 屏幕缓冲区 Screen buffer:为了显示,"字符生成器" 会访问内存中一块特殊区域 这块区域专为图形保留,叫 屏幕缓冲区,程序想显示文字时,修改这块区域里的值就行
  • 矢量命令画图:所有东西都由线组成,矢量指令可以画出线,把许多矢量指令存在硬盘上,就能画出很多由线组成的复杂图形。
  • Sketchpad, 光笔 (Light pen),位图显示和画矩形
    • Sketchpad ,一个交互式图形界面,用途是计算机辅助设计 (CAD)。
    • 光笔,就是一个有线连着电脑的触控笔,有了它们,用户可以画出很完美的线条并进行缩放等操作
    • 位图显示,内存中的位对应着屏幕上显示的像素。想画更复杂的图形,如画矩形,我们需要四个值,起点的x y坐标,高度和宽度。

4. 冷战和消费主义

  • 早期靠政府资金,让技术发展到足够商用,然后消费者购买商用产品继续推动产品发展
  • 冷战导致美国往计算机领域投入大量资源,范内瓦·布什 预见了计算机的潜力,提出假想机器 Memex,帮助建立 国家科学基金会,给科学研究提供资金
  • 1950 年代消费者开始买晶体管设备,收音机大卖
  • 日本取得晶体管授权后,索尼做了晶体管收音机,为日本半导体行业崛起埋下种子
  • 苏联 1961 年把宇航员加加林送上太空,导致美国提出登月,NASA 预算大大增加,用集成电路来制作登月计算机
  • 美国造超级计算机进一步推进集成电路
  • 美国半导体行业一开始靠政府高利润合同活着,忽略消费者市场,1970年代冷战渐消,行业开始衰败,很多公司倒闭,英特尔转型处理器 

5. 个人计算机革命

  • 1970年代初成本下降,个人计算机变得可行
    • RAM:random-access memory 随机访问存储器
    • ROM:read-only memory 只读存储器
    •  Altair 8800 第一台取得商业成功的个人计算机
  • 比尔·盖茨 和 保罗·艾伦写 BASIC 解释器,解释器和编译器类似,区别是解释器运行时转换,而编译器提前转换
  • 乔布斯提议卖组装好的计算机,Apple-I 诞生,贵,没有在市场上流行
  • 1977年出现3款开箱即用计算机:"Apple-II","TRS-80 Model I","Commodore PET 2001"
  • IBM 意识到个人计算机市场,IBM PC 发布,采用开放架构,兼容的机器都叫 IBM Compatible (IBM 兼容),因为用户多,软硬件开发人员更愿意花精力在这个平台,因为软硬件多,用户也更乐意买 "IBM 兼容" 的计算机
  • 苹果选封闭架构,一切都自己来,只有苹果在非 "IBM 兼容" 下保持了足够市场份额

6. 图形用户界面 (GUI)历史

GUI是“事件驱动编程”,代码可以在任意时间执行以响应事件,而不像传统代码一样自上而下

 

  • 图形界面先驱:道格拉斯·恩格尔巴特(Douglas Engelbart)——设想计算机成为未来知识性员工应对问题的工具,并发明了鼠标
  • 1970年成立 帕洛阿尔托研究中心(Palo Alto Research Center)
  • 1973年完成 Xerox Alto(施乐奥托) 计算机——创立了桌面,窗口等计算机概念
  • 1981年的 Xerox Star system(施乐之星系统)创建了文档概念
  • 所见即所得 WYSIWYG——施乐打印出来的东西和计算机上一样,并发明了剪切 复制 黏贴等计算机概念
  • 史蒂夫·乔布斯去施乐参观,1983年推出 Apple Lisa
  • 1984年推出 Macintosh 成功
  • 1985年推出 Windows 1.0,之后出到 3.1
  • 1995年推出 Windows 95 提供新的图形界面,并有Mac没有的新功能,如多任务和受保护内存
  • 1995年微软做失败的 Microsoft Bob——类似于房子的设计

7. 3D 图形

  • 线框渲染 Wireframe Rendering:有图形算法 负责把3D坐标"拍平"显示到2D屏幕上,这叫3D投影(包括正交投影和透视投影),所有的点都从3D转成2D后,就可以用画2D线段的函数来连接这些点,这叫线框渲染
  • 网格 Mesh:如果我们需要画比立方体复杂的图形,三角形比线段更好,在3D图形学中我们叫三角形"多边形"(Polygons),一堆多边形的集合叫 网格,网格越密,表面越光滑,细节越多
  • 扫描线渲染 Scanline Rendering——填充图形的经典算法,填充的速度叫做填充速率

  • 抗锯齿——边缘羽化,如果像素在多边形内部,就直接涂颜色,如果多边形划过像素,颜色就浅一些
  • 遮挡 Occlusion:用排序算法,从远到近排列,然后从远到近渲染,这叫画家算法,按顺序依次填色
  • 深度缓冲 Z Buffering:Z-buffering 算法会记录场景中每个像素和摄像机的距离,在内存里存一个数字矩阵,首先,每个像素的距离被初始化为"无限大",然后 Z-buffering 从列表里第一个多边形开始处理,也就是A,它和扫描线算法逻辑相同,但不是给像素填充颜色,而是把多边形的距离和 Z-Buffer 里的距离进行对比,它总是记录更低的值,因为没对多边形排序,所以后处理的多边形并不总会覆盖前面的。
  • 背面剔除 Back Face Culling:由于游戏角色的头部或地面,只能看到朝外的一面,所以为了节省处理时间,会忽略多边形背面,这很好,但有个bug是 如果进入模型内部往外看,头部和地面会消失
  • 表面法线 Surface Normal:在3D图形上任取一小个区域,它面对的方向叫“表面法线”
  • 平面着色 Flat Shading:基本的照明算法,缺点是使多边形边界明显,看上去不光滑
  • 高洛德着色 Gouraud shading, 冯氏着色 Phong Shading等不只用一种颜色上色
  • 纹理映射 Texture Mapping:纹理有多种算法来达到花哨效果

    

 

 

  • 图形处理单元 GPU, Graphics Processing Unit:方便并行处理多个图形,并把图形分成一个个小块来处理

二、计算机网络

1.计算机网络

  • 局域网 Local Area Networks - LAN:计算机近距离构成的小型网络,叫局域网(LAN),以太网是经典的局域网
  • 媒体访问控制地址 Media Access Control address - MAC:用于确认局域网和WiFi传输的对象
  • 载波侦听多路访问 Carrier Sense Multiple Access - CSMA:多台电脑共享一个传输媒介,叫做载波侦听多路访问,共享媒介又称载体,如WiFi的载体是空气,以太网的载体是电线。载体传输数据的速度叫带宽,
  • 指数退避 Exponential Backoff:当多台计算机同时想要传输数据时,就会发生冲突,当计算机检测到冲突 就会在重传之前等待一小段时间,,这一段时间包括固定时间+随机时间,再次堵塞时固定时间将会指数级增加,这叫做指数退避。
  • 冲突域 Collision Domain:载体和其中的设备总称为“冲突域”,为了避免冲突,可以用交换器
  • 电路交换 Circuit Switching:缺点:不灵活且数量昂贵
  • 报文交换 Message Switching:报文的具体格式简称IP,每一个电脑都会有一个IP地址,可以用不同路由,通信更可靠也更能容错。但是当报文比较大的时候,会堵塞线路。解决方法是 将大报文分成很多小块,叫"数据包",来进行运输,这叫“分组交换”。路由器会平衡与其他路由器之间的负载 以确保传输可以快速可靠,这叫"阻塞控制"
  • "跳数"(hop count):消息沿着路由跳转的次数,看到哪条线路的跳数很高,说明出了故障,这叫跳数限制。

2. 互联网

  • 电脑连接互联网的过程:你所用的电脑首先要连接到局域网,家里WiFi路由器连着的所有设备,组成了局域网,局域网再连到广域网(WAN),广域网的路由器一般属于你的互联网服务提供商(ISP),再连更大的WAN,往复几次,最后连到互联网主干
  • IP - 互联网协议 - Internet Protocol:IP负责把数据包送到正确的计算机
  • UDP - 用户数据报协议 - User Datagram Protocol:UDP负责把数据包传送到正确的程序,有端口号(哪个程序),校验和(数据是否损坏),没有数据修复和重发的机制,也无法预知数据包是否到达

  

  • 校验和 - Checksum:UDP校验和只有16位,超过这个数,弃高位。
  • TCP - 传输控制协议 - Transmission Control Protocol:如果要控制所有数据必须到达,就用传输控制协议
    •  控制发送的文件按顺序到达
    • 要求接收方确认无误后发送确认码(ACK),确认码的成功率和来回时间可以用来推测网络的拥堵程度,TCP可以根据这个调整传输率。由于这个特点,TCP对时间要求高的程序不适用
    • 可以批量发送,进行数据修复和重发
  • DNS - 域名系统 - Domain Name System:计算机访问网站时需要两样,IP地址和端口号,但记数字很难,所以互联网通过域名系统把域名和IP地址一一对应。域名系统是树状结构

  • OSI 模型
    • 物理层:线路里的电信号以及无线网络的无线信号,设备
    • 数据链路层:转换成数字信号,主要有媒体访问控制地址MAC,碰撞检测,指数退避等操作
    • 网络层: 负责报文交换和路由
    • 传输层: 计算机点对点的交流数据,UDP,.TCP, 进行数据检测和修复
    • 会话层:创建计算机点对点的连接
    • 表示层:
    • 应用程序层:

 

 

3. 万维网

  • 超链接:Hyperlinks,点超链接可以去到另一个页面,文字超链接又叫超文本
  • 状态码: 访问网页的状态
  • URL: 网址,统一资源定位器 - Uniform Resource Locator
  • HTTP - 超文本传输协议 - HyperText Transfer Protocol

 

  • HTML - 超文本标记语言 - HyperText Markup Language

  • 万维网发展史
    • 第一个浏览器和服务器是 Tim Berners-Lee 花了 2 个月在 CERN 写的
    • 1991年万维网就此诞生
    • Jerry 和 David 的万维网指南 后来改名成 Yahoo
    • 搜索引擎 JumpStation:(包括爬虫 索引 用法)
    • 搜索引擎 Google:改进排序方法,按照链接指向的多少来排序
    • 网络中立性: 每个数据包优先级相同

4. 网络安全

  • 计算机安全:计算机为了安全,要实现三性
    • 保密性:只有有权限的人,才能读取计算机系统和数据
    • 完整性:只有有权限的人,才能使用和修改系统和数据
    • 可用性:有权限的人,可以随时访问计算机系统和数据
  • Threat Model 威胁模型:为了实现这三个目标,安全专家会从 \N 抽象层面想象"敌人"可能是谁,这叫"威胁模型分析",模型会对攻击者有个大致描述:能力如何,目标可能是什么,可能用什么手段,攻击手段又叫"攻击矢量","威胁模型分析"让你能为特定情境做准备,不被可能的攻击手段数量所淹没
  • 身份验证 (Authentication) 的三种方式:
    • What you know, 你知道什么, 用户名和密码
    • What you have, 你有什么,钥匙凭证
    • What you are, 你是什么,  虹膜识别,人脸识别
  • 访问控制 Access Control:Bell LaPadula model 不能向上读取,不能向下写入
  • 安全内核:安全内核应该有一组尽可能少的操作系统软件,和尽量少的代码
  • 独立安全检查和质量验证是最有效的验证手段
  • 隔离 Isolation, 沙盒 Sandbox:优秀的开发人员,应该计划当程序被攻破后,如何限制损害,控制损害的最大程度,并且不让它危害到计算机上其他东西,这叫"隔离"。
  • 要实现隔离,我们可以"沙盒"程序,这好比把生气的小孩放在沙箱里,他们只能摧毁自己的沙堡,不会影响到其他孩子,方法是给每个程序独有的内存块,其他程序不能动。一台计算机可以运行多个虚拟机,如果一个程序出错,最糟糕的情况是它自己崩溃,或者搞坏它处于的虚拟机

5. 黑客与攻击

  • 社会工程学 Social Engineering:欺骗别人获得信息,或让人安装易于攻击的系统,如钓鱼 Phishing、假托 Pretexting、木马 Trojan Horses、NAND镜像 NAND Mirroring:来避免输错密码后等待
  • 漏洞利用 Exploit:如缓冲区溢出 Buffer Overflow,解决方案:边界检查 Bounds Checking和金丝雀,留出一些不用的空间,当空间变少时,说明有攻击者乱来
  • 代码注入 Code Injection:把代码注入到程序中,造成混乱
  • 零日漏洞 Zero Day Vulnerability:当软件制造者不知道软件有新漏洞被发现了,这个漏洞被称为“零日漏洞”
  • 计算机蠕虫 Worms:如果有足够多的电脑有漏洞,让恶意程序可以在电脑间互相传播,这种恶意程序叫做蠕虫
  • 僵尸网络 Botnet:如果黑客掌握足够多电脑,那他们可以组成“僵尸网络”

6. 加密

  • 加密: 凯撒加密 Caesar cipher,一种替换加密 Substitution cipher,把字母替换成其他字母;移位加密 Permutation cipher,行列倒置的加密如列移位加密 Columnar transposition cipher
  • 1977年"数据加密标准" - Data Encryption Standard (DES)
  • 2001年"高级加密标准" - Advanced Encryption Standard (AES)
  • 迪菲-赫尔曼密钥交换 - Diffie-Hellman Key Exchange,用模幂计算来得到秘钥
  • 对称解密:方用一样的秘钥加密和解密信息,叫对称解密。
  • 非对称加密 - Asymmetric encryption,人们用公钥加密信息,只有有私钥的人能解密,或者反过来。最有名的非对称加密算法是RSA

三、 人工智能

1. 机器学习

  • 让计算机从数据中学习并做出预测和决定
  • 监督学习:分类和回归
  • 非监督学习:聚类,高维可视化等
  • 用于分类的值是特征 Feature, 特征值+种类叫做标记数据 Labeled data
  • 决策树,决策边界,混淆边界,最大化正确分类和最小化错误分类
  • 支持向量机 Support Vector Machines:本质上是用任意线段来切分决策空间,不一定是直线
  • 人工神经网络 Artificial Neural Network:神经元,激活函数,输入,输出,权重,反向传播
  • 深度学习 Deep learning:有很多的隐藏层
  • 强化学习 Reinforcement Learning:学习什么管用,什么不管用,自己发现成功的策略,这叫强化学习

2.  计算机视觉

  • 让计算机理解图像和视频
  • 颜色跟踪算法——跟踪一个像素
  • 检测垂直边缘的算法,物体的边缘有多个色素,不适合颜色跟踪算法。要识别边缘,可以判断其两边像素的颜色差异程度;
  • 核/过滤器 kernel or filter——实现某种检测的算法的数学符号
  • 卷积 convolution:把核应用于像素块
  • Prewitt 算子 Prewitt Operators:水平和垂直边缘增强的核
  • 维奥拉·琼斯 人脸检测 Viola-Jones Face Detection
  • 卷积神经网络 Convolutional Neural Networks:用一层层不同的核来识别复杂场景,用脸来举例,先识别边缘,然后形状,器官...直至某一层把所有特征堆积在一起,识别出脸之后,可以进一步用其他算法定位面部标志,如眼睛和眉毛具体位置,从而判断心情等信息

 3. 自然语言处理 NLP

  • 过程:通过词性 Parts of speech和短语结构规则 Phrase structure rules构建分析树 Parse tree,并结合语言模型 Language Model来实现语音识别 Speech recognition
  • 实现原理:快速傅立叶变换 Fast Fourier Transform,把波形转换成频率 音素 Phonemes,构成单词的声音片段

 4. 机器人控制

  • 负反馈回路 negative feedback loop
  • 比例-积分-导数控制器 Proportional–Integral–Derivative controller PID 控制器,通过控制三个值,比例值——实际值和理想值差多少,积分值——一段时间误差的总和,前两者用来修正错误:导数值(微分值)——期望值和实际值之间的变化率,用来避免未来的错误,这也叫预期控制,来控制进程。
posted @ 2023-02-09 15:47  forever_fate  阅读(208)  评论(0)    收藏  举报