基础教程
硬件
从早期计算机开始到现在,计算机始终采用冯•诺依曼结构。在这个结构中,有三个基本原则:采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备)。
机箱中的主要设备有CPU、内存(包括RAM和ROM)、显卡、声卡、外存(如硬盘)等,这些设备都连接在主板上,并由电源供应器供电。它们连接输入和输出设备以和用户交互。
这里我们需要说明关于内存和外存、RAM和ROM的区别,澄清一个误区。
内存,即内存储器,是相对外存而言的,容量较小,存取速度较快。RAM(Random Access Memory)是用于存储临时数据的,内存条就属于RAM。它可读可写,但是断电后数据就会丢失。ROM(Read Only Memory)通常用于存储主板和其他设备的固件,它只可读不可写,一旦写好就不可能改变。断电后数据不会丢失。
外存,即外存储器,它用来存储大量数据,容量较大,存取速度较慢。它可读也可写,断电后数据依然存在。机械硬盘就属于外存。
平时我们和别人说“内存”的时候(尤其是那些内存外存分不清的人和你聊天),经常容易引起混淆。我们平时交流的时候,提到“内存”的时候,应该指代RAM而不是外存(虽然仅仅指代RAM不太严谨),或者可以用“运存”指代RAM;用“存储”或“外存”指代硬盘,或手机那种64GB/128GB的“内部存储”。咱学过计算机,要显得专业一点(?)
然后我们给外存简单分类。常见的外存有硬盘、软盘和U盘。硬盘分为机械硬盘(HDD)和固态硬盘(SSD)。机械硬盘使用盘片和磁头实现读写,速度相对固态硬盘较慢,但寿命较长;而固态硬盘使用闪存介质,速度快,但寿命短。U盘也使用闪存介质,不过速度没那么快。
不过有一点特殊的:闪存虽然被分类为外存,但是它在物理层面上也属于ROM。而且,闪存虽然属于ROM,但是它是可以读写的,这就和ROM的“Read Only”矛盾了。CDROM光盘被分类为外存,但是它也是一种ROM。这些知识比较混乱,我们就简单了解一下,如果把你弄乱了,那就当这段不存在吧。总之要记住:那个容量小点的内存条是RAM,容量大点的硬盘是ROM,自己要弄清楚,也要尽量让别人弄清楚。
编程语言
编程语言分为低级语言和高级语言。
低级语言可以直接操作硬件,它的语言不需要翻译就能直接被执行。最常见的低级语言是汇编语言,在现在依然有自己的重要地位,它是每一台计算机的基础语言。在不同型号的设备中,汇编语言有不同的指令集,所以汇编语言和其他低级语言的程序是不能移植的。
高级语言就不同,它可以在任何一台设备上移植。它们需要被翻译成机器语言,所以效率相对机器语言较低。高级语言中分为编译型语言和解释型语言。编译型语言(如C/C++)的程序写完后,会由特殊的程序——编译器——编译为二进制文件,之后才能运行。而解释型语言(如Python)的程序会保留源码的状态,在运行的时候由特殊程序——解释器——即时解释运行。因此,解释型语言的运行效率低于编译型语言。运行编译型语言程序时,目标设备不需要编译器;但是运行解释型语言程序时,需要目标设备安装解释器。解释型语言建立在编译型语言的基础上,所以操作系统和解释器都是用编译型语言写的。
值得一提的是,HTML不是编程语言,而是标记语言。它是由一系列标记形成的,只能由特定程序渲染,不像编程语言一样能执行。并不是所有写代码的都是编程语言。
软件
软件可以分为操作系统软件和应用软件;也可以分为自由(开源)软件和专有(闭源)软件,其中专有软件可分为免费的专有软件和付费的专有软件。
绝大部分自由软件是完全永久免费的,而且源代码公开。它们通常是社区维护,基本不会有侵害用户权利的行为,所以可以放心使用,但是因为很多软件是个人编写,所以有时候也会有功能单一、使用不方便的问题,而且部分作者审美极烂。而专有软件的源代码是不公开的,常常会有侵犯用户权利的行为,如窃取隐私信息、弹窗广告(贪玩一刀999的蓝月)等问题,在免费的专有软件中尤其明显。
开源不是无条件的,它有开源协议。如著名的GPL协议要求修改后发布的程序必须用相同的授权方式(就是用相同的协议)。而有些比较宽松的许可证(协议),如MIT,只要求署名。(具体可以看这里)
操作系统是能直接和计算机的硬件交互的软件,而其他软件需要在特定的操作系统上运行。目前使用最多的操作系统有Windows、Mac和Linux。Windows和Mac分别是由Microsoft和Apple开发的操作系统,而Linux,永远滴神,是由Linus Benedict Torvalds开发的开源操作系统内核和 FSF 组织及相关社区开发的 GNU 程序包组成的,如今已经有了众多分支(如Ubuntu/Linux Mint/Deepin/Debian属于deb系, Manjaro/Archlinux 属于Arch系。),由于其稳定的特性,常常用于服务器。 安卓操作系统也基于Linux。
浏览器是能够下载网络内容,并渲染html和css文本、运行javascript脚本的程序。如今常用的浏览器内核有Trident(IE使用)、Webkit(Safari使用)、Gecko(Firefox使用)和Blink(Chrome/Chromium使用)。绝大多数国产浏览器是在Chromium上套壳产生的,而且使用旧版本内核,都是垃圾,所以全部不建议使用(不接受反驳)。IE由于过于老旧,被Microsoft放弃,也不建议使用。Chrome的云服务被河蟹,无法使用,不爽。我们建议使用的浏览器有Firefox和Edge。
关于杀毒软件的选择,见互联网与网络安全篇。
关于文本编辑器的选择,见文件篇。
互联网与网络安全
当你连接一个网站时,你的计算机在互联网上经历了许多的过程。
首先你的数据被传输到路由器,经过调制解调器(光猫)变成光信号,送到ISP(服务商)那里,如有必要,ISP会将信息传输给其他的ISP,最后到达服务器。这是硬件层面的基本过程,实际还更复杂一些。
众所周知,每个服务器都有一个IP地址。而且访问网站时一定要知道服务器的IP——因为那才是服务器的“地址”。当你输入域名(比如 <www.baidu.com> )或者带域名的网址(比如 <cn.bing.com/dict> )访问网站的时候,你的计算机怎么知道域名对应的IP地址的?在互联网上有一种特殊的服务器,叫DNS服务器。它们没有域名(不然这过程就是套娃了),因此都选择便于记忆的IP,如8.8.8.8。当你要通过域名连接网站的时候,如果你的计算机不知道域名对应的IP是什么,就会向DNS服务器发起请求。DNS服务器无所不知(也许吧),它会返回你需要的IP地址。然后你的计算机再使用IP访问网站。当访问过一次之后,近期再次访问时会直接从本地获取DNS缓存(就是存在本地的DNS信息),不需要从DNS服务器获取数据,速度就更快。另外,系统中还会有一个文件(hosts),允许你自己设置IP和域名的对应关系。所以,配置好hosts文件后,你可以让自己在浏览器里输入<pornhub.com>以访问Bilibili(?)
在这里要说一下域名和IP。域名是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识。<tieba.baidu.com> ,<www.luogu.com.cn> ,<github.com> 都是域名。从后面往前数,第几个就叫几级域名,比如 <github.com> 中,github
就是二级域名,com
就是顶级域名(或称一级域名)。而IP分为IPv4和IPv6,它们是两套不同的标准,IPv6的出现是为了解决IPv4地址用完的问题而出现的。IPv4 地址形如 xxx.xxx.xxx.xxx
在IPv4地址中,任何一位都必须是0~255的数字。IPv6则是8组16进制数组成的,如 ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
。前导0可以压缩,如 FF01:0:0:0:0:0:0:1101
也是合法的 IPv6。在域名或者IP后面加上斜杠,后面写一些路径,就是网址。<yjzx-site.github.io/events> 就是一个网址。
成功找到服务器后,需要获取数据。这时候需要有网络协议的帮助。网络协议是为计算机网络中进行数据交换而建立的规则,它规定了数据的结构和一系列状态。常见的协议有TCP(传输控制协议)、UDP(用户数据包协议),而HTTP(超文本传输协议)是建立在TCP基础上的协议,HTTPS是HTTP的加强版。我们最常见的“404”,其实就是HTTP表示网页或文件未找到的状态码。
对于个人计算机,常见的入侵有病毒、蠕虫,它们通过网络传播,毁坏计算机系统和数据、降低运行性能;还有特洛伊木马,诱导计算机用户下载并实施破坏,相信各位都清楚。另外的一种方式是间谍软件件(叠词词恶心心),潜伏在计算机中,将用户的账号或文件上传到服务器。
个人计算机连接网络时,也有可能遭到截断。如果有软件在你的计算机中做内鬼,或者有人在网络链路中劫持数据,你访问的网站就可能被重定向,输入的密码可能被窃取。网站使用http协议传输网页的时候,浏览器并不知道返回的IP是否是正确的;但是使用https时,由于使用了非对称加密的安全证书,浏览器就可以知道是否安全。
而对于服务器来说,还有其他的攻击方式。一种是取得服务器的控制权(也就是黑进去),获取或破坏公司数据(因为费这样的力气去侵入家用计算机实在不值得,所以他们也只会对服务器干这事)。另外是DOS(拒绝计算机)/DDOS(分布式拒绝计算机),就是向服务器发送大量数据,使其无力回应,这样其他人就无法访问网站。
对于个人计算机而言,安装杀毒软件自然是不必说的选择。但是我们认为360腾讯管家金山毒霸通通都是垃圾。Windows自带的杀毒软件Windows Defender就是不错的选择,当然也可以用火绒,这两个都是安静的杀毒软件,虽然功能可能没有那么完备(其实就是那些软件里乱七八糟的功能一点用都没有),而且火绒查杀率相对较低,但是对个人使用完全足够(其实有人甚至不用杀毒软件,电脑一点事没有)。另外,当一波船新的病毒席卷网络,Windows用户忧心忡忡的时候,其实Linux用户都在吃瓜。
服务器自然就是加强防护之类的,尤其要加强Linux服务器的超级用户密码。对付DDOS攻击,可以使用拒绝某个IP段的IP访问的方式,来减轻压力。服务器也应该尽可能使用https协议。
文件
文件可以分为文本文件和二进制文件。文本文件中除了存储文件有效字符信息(包括能用Unicode码字符表示的回车、换行等信息)外,不能存储其他任何信息。通过一种叫文本编辑器的程序,可以打开查看文本文件。二进制文件则是包含数据或程序指令的文件。二进制文件需要通过特定程序打开查看(如图片/视频),或者它本身就是可执行程序。
文件有编码。它规定了某个数据对应的是哪一个字符。常见的英文编码有ASCII(美国信息交换标准代码),常见的中文编码有GB2312。比如说,字符a的ASCII是97。当计算机读到一个97的时候,就会查询编码,知道这代表字符a,然后传输给其他程序;或者是看到这是a之后,获取a的字体信息,展示到屏幕上。这时候就有个问题了:对于同一个信息,计算机可能根据这一套标准,认为它是“屁”字,也有可能根据另一套标准,认为这是“夘”字。更不幸的是,每种语言的电脑(尤其是windows系统的)都有自己的想法(注:这并不是智械危机),所以印度人给你发的文本,你打开可能就是乱码。而编码里最伟大的尝试便是Unicode。它立志将世界上所有语言的文字全部编码,这样只要所有人都用Unicode编码,就不会出现乱码问题了。因此Unicode也被称为万国码。制作网页、程序最常用的编码就是UTF-8,它是Unicode的一种。
查看/编辑文本文件通常需要文本编辑器。我们认为Windows自带的记事本是最差的文本编辑器,使用它很可能会出现换行错误和编码问题,影响阅读;它编辑的文件因为换行错误,很有可能会引起读取这个文件的程序运行不正常。(这里不得不骂一句Windows NT)我们建议使用的文本编辑器是VScode。强烈不推荐任何国产的文本编辑器。