计算的机器。
最新的超级计算机排行(第55版)出炉,日本的 Fugaku 排名世界第一,该计算机是 ARM 架构的。第二位和第三位是美国的计算机,第四位和第五位是中国的计算机。
Why
What
浏览器体验 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 库取得巨大成功的主要原因。
关于外行如何聊计算机“算法”的清单
“算法”,计算机用的。很多人对这个词,感觉只能仰望。
这份清单就是告诉你,一个外行应该怎么聊“算法”。
首先,放下对“算法”这个词的厌恶。你必须明白,厌恶很多时候只是对陌生事物的恐惧。花点时间了解一下,比如读一下这个清单,即使不懂算法,也不至于被内行鄙视,或者忽悠。
算法,是计算机完成一件事的逻辑和步骤
。一个在5楼的人,和在1楼的你同时按下电梯按钮,面前的三座电梯怎么分配任务,这就是算法。真实的算法当然更复杂,是包括了商业意义的一整套应用。比如,你使用豆瓣电影搜索《摔跤吧,爸爸》,豆瓣就会告诉你”喜欢这部电影的人也喜欢”,而推荐的电影排第一的是《当幸福来敲门》,这个推荐结果就是算法运行的结果。
商家之所以要用算法,是因为他们很懒。面对那么多用户,也不得不懒。比如,一位孕妇忽然收到大型超市寄来的母婴产品优惠券,那超市是怎么知道顾客怀孕的呢?一般过程是这样的:邀请顾客办理会员卡,并长期记录顾客的消费行为。如果“算法”发现你买了无香的润肤露,它就很八卦地猜疑你怀孕了,如果再有点什么其他蛛丝马迹,它就试着给你寄母婴产品的优惠券了。整个过程,其实和你推测一个同事有外遇没啥区别。
对算法而言,最重要的是提出一个有意义的问题。算法工程师面对一堆数字,其实也是干着急。关键是清楚什么答案需要计算?为什么要计算?计算出结果如何应用? 你看,文科生对算法也很有用。
一个问题的解决会有不同的算法。计算时间越短,使用资源越少,就是聪明的算法。算法工程师,比的就是这个。
算法的差异,实际上是思想的差异。曾经做过一个实验,用算法来代替交警判断交通违规行为。一种算法强调“严格遵守法律条文”,另一种则要求“准确反映法律意图”,也就是只要不是特别危险的驾驶行为,就睁只眼闭只眼。结果,一段时间后,第一种算法开出了500张罚单,而后一种算法只开出1张罚单。你猜,哪种更合情理?哪种更像是人类警察干出来的事?
算法后面也有价值观。比如,经常在各种购物网站看到的 “猜你喜欢”字样。背后的算法,一种原则是“你不知道这个,但我们猜你会喜欢”,另一个原则是“你买了这个?那我给你更多”。背后的价值观,前者是良师诤友,后者是奸臣损友。
算法听起来很高级,但你必须明白:它的优点是诚实高效,弱点是不明事理。所以,不要质疑算法的最终结果,要质疑其工作原理。例如,当算法表明,根据留言分析,近1个月用户使用产品的负面情绪指数上升了。你首先应该搞清楚:它用的是什么方法?这个方法的有效性如何?用户留言说“我又没有抢到沙发”,这样的抱怨多了,是好事还是坏事?就像面对孩子回家汇报情况,不能听风就是雨。
不要跟起重机掰手腕,同理,也不要跟算法比计算。在能计算的事情上,要对算法有敬畏之心。在不能算的事情上,也不要轻视算法。因为总有高人,能找到了你觉得不能计算,但他认为可以计算的地方,那他就赢了。
不要纠缠“算法永远不可能代替人类”之类的口号,那没有意义。有意义的是,想一想算法会不会代替你手上现在的工作。如果答案是“会”,赶紧学习,或者赶紧转行。
对算法的所有质疑,都应该落实到改进算法,而不是放弃算法。你不了解算法,就只能被算法玩弄。如果想不被玩弄,你只能用算法对抗算法。
关于算法,如果你想了解更多,推荐阅读《算法时代》,上面的很多思想都来自这本书。
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,这一天献给吴军老师
- 今天,是10月24号,1024,“
程序员日
”。得到App把这一天献给吴军老师。
这两天,吴军老师在他的课程《谷歌方法论》里面正好谈到“计算机怎么思考的”这个问题。
- 你可能会说,计算机我会用就行了,我管它怎么思考呢?
我举个例子,像美团、饿了么这种外卖平台,有几十万送餐员。如果用人类的方法,对他们进行分类、编组、训练,不可能短短几年时间就建立起这么大一支队伍,建立起来也管理不了。
- 所以,只能用计算机的算法。而这些大公司的总部呢?其实也没有能力下命令,他们也要自觉地接受计算机的管理。
所以你看,人类的思维方法,在这么复杂的系统里,没有用的呀,你必须接受计算机的思维方式。
- 今晚八点,在得到App的直播间,吴军老师会做一场直播,告诉你“
为什么一定要学计算机思维
”。欢迎你到时收看。
桌面的 Git 客户端。
一个用 Node.js 实现的 JVM,实现的非常简洁清晰,方便学习。(@douchuan 投稿)
人们的经验是,对于10行代码的脚本,Perl 语言是完美的。但如果你有500行脚本代码和几千行的库,那么需要大量的纪律才能使 Perl 代码可维护。
而在 Python 语言中,即使没有那么多的纪律,代码仍然具有相当的可读性和可维护性。
– Guido van Rossum,Python 语言创始人
SQLite 测试代码的行数,是软件本身的662倍。
– 《如何测试 SQLite》
Resource
1、BBC 的音效库
英国广播公司 BBC 的音效库,包含16000多种可以下载的音效,比如停车的声音、机床的声音、鸟叫的声音等等。
Sci-Hub 提供免费的科学论文下载,由于版权问题,它必须经常更换域名。该网站告诉你,现在可以通过哪个域名访问到 Sci-Hub。
该仓库收集 BitTorrent 下载所需要的公共的 tracker 服务器网址。
Git 操作往往会遇到各种问题,比如,如何把未暂存的内容移动到一个新分支,或者删除的分支如何恢复。这个仓库就收集这类问题的操作方法,有中文翻译。(@ifrontend-xyz 投稿)
5、redditix
Reddit 是美国最大的在线论坛,有许多子板块。这个第三方网站是 Reddit 的在线浏览器,自动抓取并显示某个版的所有最新图片。
6、皎然影音乐
一个中文网站,收集电影音乐资源。由于刚刚开站,资源还不多。
暗物质开发者
天文学中,暗物质是一种未知的物质,据说宇宙的大部分是暗物质。它既不发光也不反射光,因此望远镜不能直接看到。
你看不到暗物质,但我们很确定它在那里。我们知道它,但无法看到它。它永远不会露面。
有些开发者不是我们经常遇到的那种开发者,就像暗物质一样,可以称之为暗物质开发者。他们不会大量阅读网上的文章,也从不写文章,不去讨论区发言,也不发推文,很少在大型会议上露面。
他们依然在使用老旧的技术,解决各种问题。比如,在小公司的办公室里使用着 ASP,或者在墨西哥写着 VB6,或者在大型芯片制造商内部编写 PHP 日历应用程序。
他们使用众所周知的、经过充分测试并且易于理解的成熟产品。他们不追逐最新的测试版,也不太感兴趣,他们只是让软件可以工作。
暗物质开发者永远不会阅读这篇文章。
rms.sexy
该网站专门收集理查德·斯托曼使用笔记本电脑的照片。
Ventoy
一个制作可启动U盘的开源工具。
Reference
- 妙趣横生的算法
- 图解设计模式
- 算法新解
- 编码
- 图解密码技术
- 深入理解计算机系统(原书第2版)
- 计算机程序的构造和解释
- 代码大全(第2版)
- 程序员的自我修养
- 计算的本质
- 计算机是怎样跑起来的
- 程序是怎样跑起来的
- 码农翻身
- 计算机组成(第 6 版)
- Python-100-Days
- Python 语法笔记
- 汇编语言入门教程
- 小白和老妈聊计算机组成原理
- 走出软件作坊
- 王俊:生命本身就是一个程序
- CPU 基本知识
- CPU 原理导论
- 操作系统导论
- 联想 BIOS 模拟器
- 爱丽丝和鲍勃:密码学最著名的两个人
- 如何杀死一个进程和所有子进程
- 罗胖精选 | 区块链的正面与侧面
- apt 与 apt-get 的区别
- 图片 CDN 简介
- CS Rankings
- No CS Degree
- GIF cities
- 年轻人对IT一无所知?
- 深入理解计算机系统
- 2020年最佳 Linux 桌面发行版
- 一口气搞懂「文件系统」,就靠这 25 张图了
- “遇事不决,量子力学”:到底什么是量子计算?都有哪些机遇?