Yuhang Peng

到底要不要学编程?

最近看到很多网红、大 V 都在劝各位当爸妈的不要再让自己的小孩学习编程了,理由也很直接,就是现在 AI 发展的如火如荼,将来的编程工作大概率会被 AI 取代,学习编程没有任何的意义。站在风口浪尖的 NVIDIA CEO 也说,我们的工作就是让大家不用再去学习编程,不用再去学习诸如 C++,Java 一类的编程语言。 我想说上面这些人要不就是有自己的利益取向,要不就是不懂编程。我们不能根据 ...

初识网络编程

概述 这篇文章是对 CSAPP 第十一章的总结。这里有两个重点,一个是网络,另一个是编程,我们需要了解计算机网络的大致结构,这有助于我们理解类似 TCP/IP 这样的核心协议,除此之外,socket 接口是网络编程绕不开的,除了知道这些接口函数的功能之外,我们更需要理解其背后的思想和设计理念,因为这些东西才是本质的,清楚了解了它们,我们才能知其然也知其所以然。 网络 客户端服务器编程模...

计算机的 I/O

什么是 I/O 前面的文章主要是讲解了 CPU、高速缓存、内存这样的计算机部件,它们是计算机的核心且不可或缺的组件。但我们知道,这并不是计算机的全部,作为终端用户的我们也并不直接跟这些东西接触,我们直接接触的像是显示屏、USB 接口、键盘、鼠标、音箱或是麦克风,这些东西又是如何与计算机交互的呢?这就不得不说 I/O 了。 I/O 中的 I 代表的是输入(Input),O 代表的是输出(O...

虚拟内存

虚拟内存是什么 我们之前在介绍 CSAPP 第六章——存储器结构 时,提到过内存(主存)是由 DRAM 缓存构成,上接 CPU 内部高速缓存,下接硬盘,具体可以参考下图: 可能从上图中很难发觉内存的重要性,根据数据来看,DRAM 缓存会比 CPU 内部的 SRAM 缓存慢 10 倍,但是比硬盘要快 100000 倍,也就是说如果 CPU 频繁地在内存中获取不到数据,会对整个计算机的性...

设计模式:建造者模式

场景再现 在之前的文章中我们提到过 工厂模式,这个模式把对象创建的任务交由子类,降低了代码重复和耦合。工厂(方法)模式的核心是 factoryMethod,这个方法里封装了对象的定义以及生成,客户端完全不需要知道这里面的复杂过程,只需要向 factoryMethod 中传入参数即可。但是我们知道,对象的创建有时没有这么简单,很多时候客户端需要定制化对象,而仅仅通过一个 factoryMet...

有价值的事

生活中的 “琐事” 生活当中有很多的事情我们不愿意去做,但是很多时候又不得不做,比如说运动、打扫家务、整理物品以及和家人相处。在大多数人看来它们都是 “琐事”,并且都会觉得这些事情没有价值。因为在当前的主流价值观下,这些事情并不能给我们带来可观的财富,貌似也不能提高我们的认知,我们一度认为花时间在这些 “琐事” 上就是浪费时间,因此我们选择了敷衍,有时甚至选择了忽视和逃避。每次到了要做这些...

进程与异常控制流

导言 这篇文章是对 CSAPP 第八章的总结。提到异常,我们第一反应是程序中的异常处理机制,比如 try...catch,但是我们今天要讲的内容其实会更加的底层。计算机系统异常控制远比 try...catch 要复杂的多,异常的处理需要软硬件的配合才能实现,我们在前面的 文章 中提到了硬件方面的异常控制,硬件通常只是捕获异常状态,处理则需要交由操作系统,这也是我们今天要主要学习的内容。 ...

链接:程序是如何被加载的

什么是链接 如果你不经常接触计算机底层的知识,链接这个概念可能对你比较陌生,但是可以这么说,只要有程序运行,就会有链接发生。链接会有很多的表现形式,今天我们主要是以 C 这种编译型语言为基础来看看链接。 我们都知道,当我们写好了一段 C 程序,想要执行,我们先需要编译,编译是将 C 源码转化为可执行的二进制文件,编译在我们的认知里就是运行类似下面这条指令: >$ gcc hell...

设计模式:状态模式

场景再现 假设有一款游戏,在这个游戏中,玩家要通过操纵角色来完成任务,而角色有着各种各样的状态,在不同状态下,玩家的操作方式会有所不同,假设每个角色有下面这几个状态: standing(静止) walking(走) running(跑) jumping(跳跃) 在不同的状态下,角色的 UI 显示也会有所不同,角色在不同状态下都可以施展不同技能,另外,只有在静止的状态...

存储器层次结构

前言 存储,一直是计算机领域的一个核心问题,计算机有着各种各样的存储单元,比如说前面我们介绍的寄存器,内存,还有家喻户晓的磁盘、固态硬盘等等,这些存储单元都有着怎样的性质呢?另外,它们是如何在一起协同工作的呢?这是这篇文章要讨论的重点。 存储技术 随机访问存储器(RAM) 随机访问存储器(Random Access Memory)分成两种,静态的(Static Random Acce...