0%

Computer

计算的机器。

最新的超级计算机排行(第55版)出炉,日本的 Fugaku 排名世界第一,该计算机是 ARM 架构的。第二位和第三位是美国的计算机,第四位和第五位是中国的计算机。

Why


波音747飞机仍然使用3.5英寸软盘,进行数据库更新。

What

DistroTest

浏览器体验 Linux 和 Unix 操作系统,可以在线试用 200 多种 Linux 和 Unix 发行版,无需本地安装。只要打开网站,选择 Linux/Unix 发行版,然后开始试用!

计算机组成原理总结及思维导图

浮点数原理(英文)

本文较为通俗地解释,什么是浮点数,为什么这么设计。

Motherboard DB

电脑主板的数据库。

计算机系统的设计原则

这个网页收集了100多条计算机系统的设计原则,分成12个大类,下面是其中三条。

尽可能将错误从运行时转移到编译时。
头文件的内容,至少要用于两个源文件。
复杂性成倍增长,百万行的代码库会包含许多状态,它的复杂性是人类无法掌控的。

openEuler

华为发布自家的 Linux 发行版 openEuler,基于 CentOS。这是早先的华为 EulerOS 系统的开源版。根据介绍,主要特点是 ARM64 的完美支持和极高的安全性。

Elementary OS

一个基于 Ubuntu 的 Linux 发行版,目标用户是不懂计算机的人,用户界面高度模仿 MacOS。

穿越计算机的迷雾

大话计算机

大话处理器

计算机是如何启动的?

作者: 阮一峰
日期: 2013年2月16日

从打开电源到开始操作,计算机的启动是一个非常复杂的过程。

我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示…… 这几天,我查了一些资料,试图搞懂它。下面就是我整理的笔记。

零、boot的含义

先问一个问题,”启动”用英语怎么说?

回答是boot。可是,boot原来的意思是靴子,”启动”与靴子有什么关系呢? 原来,这里的boot是bootstrap(鞋带)的缩写,它来自一句谚语:

  “pull oneself up by one’s bootstraps”

字面意思是”拽着鞋带把自己拉起来”,这当然是不可能的事情。最早的时候,工程师们用它来比喻,计算机启动是一个很矛盾的过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序!

早期真的是这样,必须想尽各种办法,把一小段程序装进内存,然后计算机才能正常运行。所以,工程师们把这个过程叫做”拉鞋带”,久而久之就简称为boot了。

计算机的整个启动过程分成四个阶段。

一、第一阶段:BIOS

上个世纪70年代初,”只读内存”(read-only memory,缩写为ROM)发明,开机程序被刷入ROM芯片,计算机通电后,第一件事就是读取它。

这块芯片里的程序叫做”基本輸出輸入系統”(Basic Input/Output System),简称为BIOS。

1.1 硬件自检

BIOS程序首先检查,计算机硬件能否满足运行的基本条件,这叫做”硬件自检”(Power-On Self-Test),缩写为POST。

如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止。如果没有问题,屏幕就会显示出CPU、内存、硬盘等信息。

1.2 启动顺序

硬件自检完成后,BIOS把控制权转交给下一阶段的启动程序。

这时,BIOS需要知道,”下一阶段的启动程序”具体存放在哪一个设备。也就是说,BIOS需要有一个外部储存设备的排序,排在前面的设备就是优先转交控制权的设备。这种排序叫做”启动顺序”(Boot Sequence)。

打开BIOS的操作界面,里面有一项就是”设定启动顺序”。

二、第二阶段:主引导记录

BIOS按照”启动顺序”,把控制权转交给排在第一位的储存设备。

这时,计算机读取该设备的第一个扇区,也就是读取最前面的512个字节。如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给”启动顺序”中的下一个设备。

这最前面的512个字节,就叫做”主引导记录”(Master boot record,缩写为MBR)。

2.1 主引导记录的结构

“主引导记录”只有512个字节,放不了太多东西。它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统。

主引导记录由三个部分组成:

  (1) 第1-446字节:调用操作系统的机器码。
  (2) 第447-510字节:分区表(Partition table)。
  (3) 第511-512字节:主引导记录签名(0x55和0xAA)。

其中,第二部分”分区表”的作用,是将硬盘分成若干个区。

2.2 分区表

硬盘分区有很多好处。考虑到每个区可以安装不同的操作系统,"主引导记录"因此必须知道将控制权转交给哪个区。

分区表的长度只有64个字节,里面又分成四项,每项16个字节。所以,一个硬盘最多只能分四个一级分区,又叫做"主分区"。

每个主分区的16个字节,由6个部分组成:

  (1) 第1个字节:如果为0x80,就表示该主分区是激活分区,控制权要转交给这个分区。四个主分区里面只能有一个是激活的。
  (2) 第2-4个字节:主分区第一个扇区的物理位置(柱面、磁头、扇区号等等)。
  (3) 第5个字节:主分区类型。
  (4) 第6-8个字节:主分区最后一个扇区的物理位置。
  (5) 第9-12字节:该主分区第一个扇区的逻辑地址。
  (6) 第13-16字节:主分区的扇区总数。

最后的四个字节(”主分区的扇区总数”),决定了这个主分区的长度。也就是说,一个主分区的扇区总数最多不超过2的32次方。

如果每个扇区为512个字节,就意味着单个分区最大不超过2TB。再考虑到扇区的逻辑地址也是32位,所以单个硬盘可利用的空间最大也不超过2TB。如果想使用更大的硬盘,只有2个方法:一是提高每个扇区的字节数,二是增加扇区总数。

三、第三阶段:硬盘启动

这时,计算机的控制权就要转交给硬盘的某个分区了,这里又分成三种情况。

3.1 情况A:卷引导记录

上一节提到,四个主分区里面,只有一个是激活的。计算机会读取激活分区的第一个扇区,叫做”卷引导记录”(Volume boot record,缩写为VBR)。

“卷引导记录”的主要作用是,告诉计算机,操作系统在这个分区里的位置。然后,计算机就会加载操作系统了。

3.2 情况B:扩展分区和逻辑分区

随着硬盘越来越大,四个主分区已经不够了,需要更多的分区。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成”扩展分区”(Extended partition)。

所谓”扩展分区”,就是指这个区里面又分成多个区。这种分区里面的分区,就叫做"逻辑分区"(logical partition)。

计算机先读取扩展分区的第一个扇区,叫做”扩展引导记录”(Extended boot record,缩写为EBR)。它里面也包含一张64字节的分区表,但是最多只有两项(也就是两个逻辑分区)。

计算机接着读取第二个逻辑分区的第一个扇区,再从里面的分区表中找到第三个逻辑分区的位置,以此类推,直到某个逻辑分区的分区表只包含它自身为止(即只有一个分区项)。因此,扩展分区可以包含无数个逻辑分区。

但是,似乎很少通过这种方式启动操作系统。如果操作系统确实安装在扩展分区,一般采用下一种方式启动。

3.3 情况C:启动管理器

在这种情况下,计算机读取”主引导记录”前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的”启动管理器”(boot loader),由用户选择启动哪一个操作系统。

Linux环境中,目前最流行的启动管理器是Grub。

四、第四阶段:操作系统

控制权转交给操作系统后,操作系统的内核首先被载入内存。

以Linux系统为例,先载入/boot目录下面的kernel。内核加载成功后,第一个运行的程序是/sbin/init。它根据配置文件(Debian系统是/etc/initab)产生init进程。这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代。

然后,init线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login程序,跳出登录界面,等待用户输入用户名和密码。

至此,全部启动过程完成。

四位计算机的原理及其实现

作者: 阮一峰
日期: 2011年3月12日

你是否想过,计算机为什么会加减乘除?或者更直接一点,计算机的原理到底是什么?

Waitingforfriday有一篇详细的教程,讲解了如何自己动手,制作一台四位计算机。从中可以看到,二进制、数理逻辑、电子学怎样融合在一起,构成了现代计算机的基础。

一、什么是二进制?

首先,从最简单的讲起。

计算机内部采用二进制,每一个数位只有两种可能”0”和”1”,运算规则是”逢二进一”。举例来说,有两个位A和B,它们相加的结果只可能有四种。

这张表就叫做”真值表”(truth table),其中的sum表示”和位”,carry表示”进位”。如果A和B都是0,和就是0,因此”和位”和”进位”都是0;如果A和B有一个为1,另一个为0,和就是1,不需要进位;如果A和B都是1,和就是10,因此”和位”为0,”进位”为1。

二、逻辑门(Logic Gate)

布尔运算(Boolean operation)的规则,可以套用在二进制加法上。布尔运算有三个基本运算符:AND,OR,NOT,又称”与门”、”或门”、”非门”,合称”逻辑门”。它们的运算规则是:

  AND:如果( A=1 AND B=1 ),则输出结果为1。
  OR:如果( A=1 OR B=1 ),则输出结果为1。
  NOT:如果( A=1 ),则输出结果为0。

两个输入(A和B)都为1,AND(与门)就输出1;只要有任意一个输入(A或B)为1,OR(或门)就输出1;NOT(非门)的作用,则是输出一个输入值的相反值。它们的图形表示如下:

三、真值表的逻辑门表示

现在把"真值表"的运算规则,改写为逻辑门的形式。

先看sum(和位),我们需要的是这样一种逻辑:当两个输入不相同时,输出为1,因此运算符应该是OR;当两个输入相同时,输出为0,这可以用两组AND和NOT的组合实现。最后的逻辑组合图如下:

再看carry(进位)。它比较简单,两个输入A和B都为1就输出1,否则就输出0,因此用一个AND运算符就行了。

现在把sum和carry组合起来,就能得到整张真值表了。这被称为”半加器”(half-adder),因为它只考虑了单独两个位的相加,没有考虑可能还存在低位进上来的位。

四、扩展的真值表和全加器

如果把低位进上来的位,当做第三个输入(input),也就是说,除了两个输入值A和B以外,还存在一个输入(input)的carry,那么问题就变成了如何在三个输入的情况下,得到输出(output)的sum(和位)和carry(进位)。

这时,真值表被扩展成下面的形式:

如果你理解了半加器的设计思路,就不难把它扩展到新的真值表,这就是”全加器”(full-adder)了。

五、全加器的串联

多个全加器串联起来,就能进行二进制的多位运算了。

先把全加器简写成方块形式,注明三个输入(A、B、Cin)和两个输出(S和Cout)。

然后,将四个全加器串联起来,就得到了四位加法器的逻辑图。

六、逻辑门的晶体管实现

下一步,就是用晶体管做出逻辑门的电路。

先看NOT。晶体管的基极(Base)作为输入,集电极(collector)作为输出,发射极(emitter)接地。当输入为1(高电平),电流流向发射极,因此输出为0;当输入为0(低电平),电流从集电极流出,因此输出为1。

接着是AND。这需要两个晶体管,只有当两个基极的输入都为1(高电平),电流才会流向输出端,得到1。

最后是OR。这也需要两个晶体管,只要两个基极中有一个为1(高电平),电流就会流向输出端,得到1。

七、全加器的电路

将三种逻辑门的晶体管实现,代入全加器的设计图,就可以画出电路图了。

(点击看大图

按照电路图,用晶体管和电路板组装出全加器的集成电路。

左边的三根黄线,分别代表三个输入A、B、Cin;右边的两根绿线,分别代表输出S和Cout。

八、制作计算机

将四块全加器的电路串联起来,就是一台货真价实的四位晶体管计算机了,可以计算0000~1111之间的加法。

电路板的下方有两组各四个开关,标注着”A”和”B”,代表两个输入数。从上图可以看到,A组开关是”上下上上”,代表1011(11);B组开关是”上下下下”,代表1000(8)。它们的相加结果用五个LED灯表示,上图中是”亮暗暗亮亮”,代表10011(19),正是1011与1000的和。

九、结论

虽然这个四位计算机非常简陋,但是从中不难体会到现代计算机的原理。

完成上面的四位加法,需要用到88个晶体管。虽然当代处理器包含的晶体管数以亿计,但是本质上都是上面这样简单电路的累加。

进程与线程的一个简单解释

作者: 阮一峰
日期: 2013年4月24日

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。

最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。

1.

计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。

2.

假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任务。

3.

进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。

4.

一个车间里,可以有很多工人。他们协同完成一个任务。

5.

线程就好比车间里的工人。一个进程可以包括多个线程。

6.

车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。这象征一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。

7.

可是,每间房间的大小不同,有些房间最多只能容纳一个人,比如厕所。里面有人的时候,其他人就不能进去了。这代表一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。

8.

一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。这就叫”互斥锁”(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域。

9.

还有些房间,可以同时容纳n个人,比如厨房。也就是说,如果人数大于n,多出来的人只能在外面等着。这好比某些内存区域,只能供给固定数目的线程使用。

10.

这时的解决方法,就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。这种做法叫做”信号量”(Semaphore),用来保证多个线程不会互相冲突。

不难看出,mutex是semaphore的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。

11.

操作系统的设计,因此可以归结为三点:

(1)以多进程形式,允许多个任务同时运行;
(2)以多线程形式,允许单个任务分成不同的部分运行;
(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。

树莓派 GPIO 介绍(英文)

树莓派的功能扩展,往往都要通过板载的通用输入/输出模块 GPIO。本文介绍 GPIO 的基本知识。

How

面向对象编程的问题是,每个对象都有自己的状态,开发程序时,必须记住当前所有对象的状态。

为了让我们的生活更轻松,最好只有一小部分代码库处理状态,其他代码都是无状态和纯的。实际上,这就是前端的 Redux 库取得巨大成功的主要原因。

《面向对象编程:一万亿美元的错误》

关于外行如何聊计算机“算法”的清单

“算法”,计算机用的。很多人对这个词,感觉只能仰望。

这份清单就是告诉你,一个外行应该怎么聊“算法”。

  1. 首先,放下对“算法”这个词的厌恶。你必须明白,厌恶很多时候只是对陌生事物的恐惧。花点时间了解一下,比如读一下这个清单,即使不懂算法,也不至于被内行鄙视,或者忽悠。

  2. 算法,是计算机完成一件事的逻辑和步骤。一个在5楼的人,和在1楼的你同时按下电梯按钮,面前的三座电梯怎么分配任务,这就是算法。

  3. 真实的算法当然更复杂,是包括了商业意义的一整套应用。比如,你使用豆瓣电影搜索《摔跤吧,爸爸》,豆瓣就会告诉你”喜欢这部电影的人也喜欢”,而推荐的电影排第一的是《当幸福来敲门》,这个推荐结果就是算法运行的结果。

  4. 商家之所以要用算法,是因为他们很懒。面对那么多用户,也不得不懒。比如,一位孕妇忽然收到大型超市寄来的母婴产品优惠券,那超市是怎么知道顾客怀孕的呢?一般过程是这样的:邀请顾客办理会员卡,并长期记录顾客的消费行为。如果“算法”发现你买了无香的润肤露,它就很八卦地猜疑你怀孕了,如果再有点什么其他蛛丝马迹,它就试着给你寄母婴产品的优惠券了。整个过程,其实和你推测一个同事有外遇没啥区别。

  5. 对算法而言,最重要的是提出一个有意义的问题。算法工程师面对一堆数字,其实也是干着急。关键是清楚什么答案需要计算?为什么要计算?计算出结果如何应用? 你看,文科生对算法也很有用。

  6. 一个问题的解决会有不同的算法。计算时间越短,使用资源越少,就是聪明的算法。算法工程师,比的就是这个。

  7. 算法的差异,实际上是思想的差异。曾经做过一个实验,用算法来代替交警判断交通违规行为。一种算法强调“严格遵守法律条文”,另一种则要求“准确反映法律意图”,也就是只要不是特别危险的驾驶行为,就睁只眼闭只眼。结果,一段时间后,第一种算法开出了500张罚单,而后一种算法只开出1张罚单。你猜,哪种更合情理?哪种更像是人类警察干出来的事?

  8. 算法后面也有价值观。比如,经常在各种购物网站看到的 “猜你喜欢”字样。背后的算法,一种原则是“你不知道这个,但我们猜你会喜欢”,另一个原则是“你买了这个?那我给你更多”。背后的价值观,前者是良师诤友,后者是奸臣损友。

  9. 算法听起来很高级,但你必须明白:它的优点是诚实高效,弱点是不明事理。所以,不要质疑算法的最终结果,要质疑其工作原理。例如,当算法表明,根据留言分析,近1个月用户使用产品的负面情绪指数上升了。你首先应该搞清楚:它用的是什么方法?这个方法的有效性如何?用户留言说“我又没有抢到沙发”,这样的抱怨多了,是好事还是坏事?就像面对孩子回家汇报情况,不能听风就是雨。

  10. 不要跟起重机掰手腕,同理,也不要跟算法比计算。在能计算的事情上,要对算法有敬畏之心。在不能算的事情上,也不要轻视算法。因为总有高人,能找到了你觉得不能计算,但他认为可以计算的地方,那他就赢了。

  11. 不要纠缠“算法永远不可能代替人类”之类的口号,那没有意义。有意义的是,想一想算法会不会代替你手上现在的工作。如果答案是“会”,赶紧学习,或者赶紧转行。

  12. 对算法的所有质疑,都应该落实到改进算法,而不是放弃算法。你不了解算法,就只能被算法玩弄。如果想不被玩弄,你只能用算法对抗算法。

  13. 关于算法,如果你想了解更多,推荐阅读《算法时代》,上面的很多思想都来自这本书。

Experience

算法的责任

香港富豪李建勤(上图)购买了一家基金公司的对冲基金,授权最多可以动用25亿美元。该基金完全使用人工智能算法进行投资,宣传的业绩是2016年12月至2017年10月的共计210个交易日中,回报率高达15.54%,买卖信号的准确度达到69.05%。

李建勤买了以后,结果却是亏损巨大,最多的一天亏了2000万美元。他非常不满,控告该基金公司的销售人员夸大了算法能力,欺骗他上当。但是,基金公司反驳,算法无法保证百分之百获利。

这是全世界第一起由于算法而引发的诉讼。它带来的问题就是,算法事故的责任由谁承担?可以想象,无人驾驶以后普及了,交通事故的赔偿一定会成大问题,肯定都会落到汽车公司的身上。

漫话:如何给女朋友解释什么是Git和GitHub


GitHub是通过Git进行版本控制的软件源代码托管服务,并且,GitHub还引入了一些社交属性。号称是世界上最大的程序员(同性)交友网站。

Thanos - 灭霸命令

Thanos.sh是一个开源的个灭霸命令,可随机删除电脑上一半文件。

地址:https://github.com/hotvulcan/Thanos.sh

Raspberry Pi 4

树莓派第四代发布了,性能比第三代强了好几倍,已经赶上 PC 了,四个 USB 口,千兆网口,蓝牙5.0,双 4K 显示器支持,4Kp60 视频硬解码,价格从35美元到55美元。它的性能已经可以支持一个中型网站了。以后可能只要随身带一个树莓派就行了,干完活就跟云端同步一下。

罗胖60秒:1024,这一天献给吴军老师

  1. 今天,是10月24号,1024,“程序员日”。得到App把这一天献给吴军老师。

这两天,吴军老师在他的课程《谷歌方法论》里面正好谈到“计算机怎么思考的”这个问题。

  1. 你可能会说,计算机我会用就行了,我管它怎么思考呢?

我举个例子,像美团、饿了么这种外卖平台,有几十万送餐员。如果用人类的方法,对他们进行分类、编组、训练,不可能短短几年时间就建立起这么大一支队伍,建立起来也管理不了。

  1. 所以,只能用计算机的算法。而这些大公司的总部呢?其实也没有能力下命令,他们也要自觉地接受计算机的管理。

所以你看,人类的思维方法,在这么复杂的系统里,没有用的呀,你必须接受计算机的思维方式。

  1. 今晚八点,在得到App的直播间,吴军老师会做一场直播,告诉你“为什么一定要学计算机思维”。欢迎你到时收看。

fork

桌面的 Git 客户端。

node-jvm

一个用 Node.js 实现的 JVM,实现的非常简洁清晰,方便学习。(@douchuan 投稿)

人们的经验是,对于10行代码的脚本,Perl 语言是完美的。但如果你有500行脚本代码和几千行的库,那么需要大量的纪律才能使 Perl 代码可维护。
而在 Python 语言中,即使没有那么多的纪律,代码仍然具有相当的可读性和可维护性。
Guido van Rossum,Python 语言创始人

SQLite 测试代码的行数,是软件本身的662倍。
– 《如何测试 SQLite

Resource

1、BBC 的音效库

英国广播公司 BBC 的音效库,包含16000多种可以下载的音效,比如停车的声音、机床的声音、鸟叫的声音等等。

2、where is Sci-Hub

Sci-Hub 提供免费的科学论文下载,由于版权问题,它必须经常更换域名。该网站告诉你,现在可以通过哪个域名访问到 Sci-Hub。

3、trackerslist

该仓库收集 BitTorrent 下载所需要的公共的 tracker 服务器网址。

4、git-flight-rules

Git 操作往往会遇到各种问题,比如,如何把未暂存的内容移动到一个新分支,或者删除的分支如何恢复。这个仓库就收集这类问题的操作方法,有中文翻译。(@ifrontend-xyz 投稿)

5、redditix

Reddit 是美国最大的在线论坛,有许多子板块。这个第三方网站是 Reddit 的在线浏览器,自动抓取并显示某个版的所有最新图片。

6、皎然影音乐

一个中文网站,收集电影音乐资源。由于刚刚开站,资源还不多。

暗物质开发者

天文学中,暗物质是一种未知的物质,据说宇宙的大部分是暗物质。它既不发光也不反射光,因此望远镜不能直接看到。

你看不到暗物质,但我们很确定它在那里。我们知道它,但无法看到它。它永远不会露面。

有些开发者不是我们经常遇到的那种开发者,就像暗物质一样,可以称之为暗物质开发者。他们不会大量阅读网上的文章,也从不写文章,不去讨论区发言,也不发推文,很少在大型会议上露面。

他们依然在使用老旧的技术,解决各种问题。比如,在小公司的办公室里使用着 ASP,或者在墨西哥写着 VB6,或者在大型芯片制造商内部编写 PHP 日历应用程序。

他们使用众所周知的、经过充分测试并且易于理解的成熟产品。他们不追逐最新的测试版,也不太感兴趣,他们只是让软件可以工作。

暗物质开发者永远不会阅读这篇文章。

rms.sexy

该网站专门收集理查德·斯托曼使用笔记本电脑的照片。

Ventoy


一个制作可启动U盘的开源工具。

Reference

  1. 妙趣横生的算法
  2. 图解设计模式
  3. 算法新解
  4. 编码
  5. 图解密码技术
  6. 深入理解计算机系统(原书第2版)
  7. 计算机程序的构造和解释
  8. 代码大全(第2版)
  9. 程序员的自我修养
  10. 计算的本质
  11. 计算机是怎样跑起来的
  12. 程序是怎样跑起来的
  13. 码农翻身
  14. 计算机组成(第 6 版)
  15. Python-100-Days
  16. Python 语法笔记
  17. 汇编语言入门教程
  18. 小白和老妈聊计算机组成原理
  19. 走出软件作坊
  20. 王俊:生命本身就是一个程序
  21. CPU 基本知识
  22. CPU 原理导论
  23. 操作系统导论
  24. 联想 BIOS 模拟器
  25. 爱丽丝和鲍勃:密码学最著名的两个人
  26. 如何杀死一个进程和所有子进程
  27. 罗胖精选 | 区块链的正面与侧面
  28. apt 与 apt-get 的区别
  29. 图片 CDN 简介
  30. CS Rankings
  31. No CS Degree
  32. GIF cities
  33. 年轻人对IT一无所知?
  34. 深入理解计算机系统
  35. 2020年最佳 Linux 桌面发行版
  36. 一口气搞懂「文件系统」,就靠这 25 张图了
  37. “遇事不决,量子力学”:到底什么是量子计算?都有哪些机遇?

欢迎关注我的其它发布渠道