
计算机科学
五道口纳什
wx公众号/B站:五道口纳什
展开
-
计算机设计思想 —— 代理(proxy)
1. 面向对象的代理代理类封装了目标类,调用者通过调用代理类(代理类操纵目标类),实现对目标类的间接调用;2. 服务器代理服务器:Proxy server3. 网络私有地址的主机访问外网时,便是通过本局域的代理主机(代理主机当然可以轻易访问外网)原创 2017-09-09 22:56:02 · 1103 阅读 · 0 评论 -
计算机设计思想 —— 分层模型
勿在浮沙筑高台。分层模型中,不同的层次意味着不同的抽象级别;0. 计算机系统的各个抽象层 操作系统和硬件之间的称为硬件抽象层(Hardware Abstraction Layer,HAL)每个层次都向上一层次呈现一个抽象,一个更高级别的抽象; 每一层都只需知道下层抽象的接口,而不需要了解其内部运行机制;操作系统看到的硬件是一个硬件抽象层,而不需要了解硬件的布线或者电气特性等;这样,以层原创 2017-07-27 15:31:55 · 4870 阅读 · 0 评论 -
编码格式(UTF-8 与 ANSI)各种编码解码(encode、decode)
1. café分别在 utf-8 和 cp1252下的编码形式How to fix: “UnicodeDecodeError: ‘ascii’ codec can’t decode byte” >> 'é'.encode('cp1252')b'\xe9'>> 'é'.encode('utf-8')b'\xc3\xa9'# 通过何种形式的编码(encode),便继续通过该形式解码(deco原创 2017-08-13 17:58:59 · 12674 阅读 · 0 评论 -
计算机编程思想 —— 缓存
1. 流式读取比如网络 io(net io)URL url = new URL("http://www.baidu.com");InputStream inStream = url.openStream();byte[] buffer = new byte[1024];ByteArrayOutputStream outStream = new ByteArrayOutputStream();原创 2017-10-01 23:36:15 · 787 阅读 · 0 评论 -
计算机科学界名言
Donald Knuth We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. premature:adj. 早产的;不成熟的;比预期早的;原创 2017-04-14 10:22:02 · 2262 阅读 · 0 评论 -
字面量(literal)与 C 语言复合字面量(compound literals)
在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)(字面量是相对变量常量等定义的,无论是常量还是变量,其值在某一时刻总是确定的,只是变量可以反复赋值、刷新等,然而在运行时,编译期,总是有值的) 。几乎所有计算机编程语言都具有对基本值的字面量表示,诸如:整数、浮点数以及字符串;而有很多也对布尔类型和字符类型的值也支持字面量表示;还有一些甚至对枚举类型的元素原创 2017-10-04 13:12:32 · 2795 阅读 · 0 评论 -
整数运算、浮点运算与溢出
1. 一个示例sizeof(int) == 4 的机器上,也即 32 位机器,使用 int 型变量存储 200*300*400*500 会得到 -884901888。这显然违犯了整数运算的特性,计算一组正数的乘积不应该产生一个负数结果。另一方面,整数在计算机中的运算满足数学上对整数运算的许多性质。乘法的结合和交换律,下面的任何一个 C 表达式,都会得到 -884901888 同样的负数,数值溢出结果原创 2017-11-01 21:47:08 · 3925 阅读 · 0 评论 -
计算机设计思想 —— 总线
PCI:就是计算机中硬件连接的总线;主板与外设之间:通过I/O总线与主板相连 1. 总线与交通对于计算机这种由多个组成部分构成的复杂系统,想要通过一一相连的方式实现彼此间的通信的话,既不现实也浪费资源。对于全国的交通运输,我们只需先建两条干线,就像“京九线”和“京广线”这样贯穿南北的大动脉,然后其他城市通过支路连接到干线上即可。模拟干路支路的交通设计思路,而非采用一一相连的方式,在计算机或通信上原创 2017-11-05 18:20:08 · 1634 阅读 · 0 评论 -
计算机设计思想 —— 类比、建模与隐喻(同构)
一切有意义的事物皆有历史,有迹可循。—— 《真探》将知识首先简单划分为已知和未知两个互斥的类别,然而已知和未知之间并非完全地泾渭分明,井水不犯河水。重要的科学发现常常来自 analogy(类比),也即把你不太理解的东西和一些你较为理解,且二者之间存在相似性的东西作比较,由此可对那些你不太理解的东西产生深刻的理解。这种隐喻的方法,也叫“建模”(modeling)。1. 应用实例蛇咬着自己的尾巴,=原创 2017-12-07 22:55:34 · 1440 阅读 · 0 评论 -
计算机设计思想 —— 解耦(分离)与内聚
分离、解耦是模块化的基础。概念、功能上的辨异,又是实现分离、解耦的法门。模块间通信:接口; 模块间绝非各自为营,独立作战;1. 配置代码与业务逻辑(领域代码)Spring 框架下,使用 JavaConfig 进行显式装配的时候,要注意: JavaConfig 与其他的(普通的) Java 代码是不同的,在概念上,它与应用程序中的业务逻辑和领域代码是不同的; JavaConfig 是配置代码原创 2017-09-05 23:30:57 · 3813 阅读 · 1 评论 -
计算机设计思想 —— 虚拟化
物理地址,虚拟地址; 物理地址:如果你的计算机用的是 Intel 的 Pentium 4 的处理器,它是 32 位机器,即计算机地址线有 32 条,物理空间就有 4GB;如果你的计算机只安装了 512MB,其实物理地址的真正有效部分为 0x00000000 ~ 0x1FFFFFFF虚拟地址空间,是指虚拟的,人们想象出来的地址空间,其实它并不存在,每个进程都有自己独立的地址空间,而且每个进程只能访原创 2017-12-07 23:22:47 · 839 阅读 · 0 评论 -
编程理论 —— 计算图框架
当前大部分的深度学习框架(tensorflow、theano、mxnet)都要求能否构建计算图,以及编译计算图来自动求导;1. 命令式编程与符号式编程命令式编程,程序中可能会存在 for或 if 形式的控制流,即循环迭代的次数和 if 分支的执行都取决于入参,不同的输入会使得程序的执行不同。对于计算图框架来说,这就对应于动态图,即图的结构(不只是结果)会随着输入的变化而发生变化;r原创 2018-01-14 19:18:05 · 1297 阅读 · 0 评论 -
魔数,常见魔数
java 文件编译为 .class 字节码(byte code),字节码文件的前 4 位为魔数(起到标识说明作用),magicNumber = 0xCAFEBABE;1. 可执行文件几乎所有的可执行文件格式最开始的几个字节都是魔数:a.out:最开始的两个字节为 0x01,0x07;PE/COEF 文件最开始的两个字节为:0x4d, 0x5a,即 ASCII 码 MZELF 文原创 2017-12-16 22:37:04 · 6547 阅读 · 0 评论 -
计算机科学 —— 时间戳(timestamp)
时间戳的一个重要属性即是:唯一性,以起到唯一标识的作用;1. linux 命令行$ date +%s15062227452. Python 时间戳内置 time 库>> time.time()1506223285.6214163>> int(time.time())15062233453. 时间戳:下一个千年虫?在 32 位系统中,time_t 是长度为 32位的,unsigned原创 2017-09-24 11:34:32 · 3899 阅读 · 0 评论 -
IEEE 754——计算机中浮点数的表示方法
计算机中是如何存储和表达数字的?对于整数,情况比较简单,直接按照数学中的进制转换方法处理即可,即连续除以2取余(比如十进制的10转化为二进制形式,11除以2得5 余1,5除以2得2 余1,2除以2得1 余0,1除以2得0 余1,10111011 即是最终的二进制形式)。这并不是难点,真正的难点在于小数(即浮点数)是如何转换为二进制码的。当然,从数学的角度来讲,十进制的小数可以转换为二进制小数(整数部原创 2016-02-14 11:24:03 · 7981 阅读 · 2 评论 -
使用 C++ bitset 操纵浮点数类型(float、double)
#include <bitset>bitset 类是将数据转换为二进制位(遵循 IEEE 754 的存储和表示方法,关于 IEEE 754 更多更全的使用方法和原理请见 IEEE 754——计算机中浮点数的表示方法 )。如下:#include <bitset>#include <limits>std::cout << std::bitset<std::numeric_limits<unsigned原创 2016-02-14 16:39:45 · 3306 阅读 · 1 评论 -
大端模式与小端模式
小端机(Little-Endian)/大端机(Big-Endian)Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。Intel X86 平台一般为小端机举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:大端模式:低地址 —————–> 高地址 0原创 2016-02-21 10:36:55 · 1191 阅读 · 0 评论 -
计算机史话 —— 回车和换行 与 文本文件和二进制文件
回车:carriage return 换行:line feed在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打 10 个字符。但是它有一个问题,就是打完一行换行的时候,要用去 0.2 秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一原创 2016-05-29 12:37:25 · 1075 阅读 · 0 评论 -
补码:统一加减运算
对于二进制补码而言:(X+Y)补=X补+Y补(X−Y)补=X补+(−Y)补\begin{split}&(X+Y)_补=X_补+Y_补\\&(X-Y)_补=X_补+(-Y)_补\end{split}原创 2016-06-23 22:23:31 · 1906 阅读 · 1 评论 -
概率论 —— 分析计算机系统和网络的可靠性和通用性
计算机工程师需要有效的技术来分析计算机系统;网络工程师也需要适当的方法来分析网络协议、路由算法和拥塞现象;计算机系统和网络都有可能发生故障,因此有必要分析它们的可靠性和可用性。用于分析的理论基础就是概率论。原创 2016-09-17 10:36:44 · 3300 阅读 · 0 评论 -
ASCII 码表
ASCII:American Standard Code for Information Interchange,美国标准信息交换代码,是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。数字:0-9,30-39(48-57)空格:20(32),tab:9(9)ASCII 码的长度为 7 位,也即是定长的,Unicode 为16位,也是定长的 ...原创 2016-02-22 10:33:38 · 1512 阅读 · 0 评论 -
位操作(一)—— 截断(保留低位,保留高位)
低位:k least significant bits;高位:k most significant bits;1. 截断保留低位def _int32(x): return int(0xFFFFFFFF & x)原创 2016-11-21 12:18:46 · 4494 阅读 · 0 评论 -
32位与64位、单精度(single-precision)与双精度(double-precision)
What’s the difference between a single precision and double precision floating point operation?0. 64-bits CPU如果说一个 CPU 是 64 位机,通常意味着,其具有 64 位的通用寄存器(general purpose register)以及内存地址空间的大小(memory address s原创 2016-11-22 22:13:04 · 15758 阅读 · 0 评论 -
C-order/Fortran-order(Row-/Column-major order)
1. row-major / column-major order无论是行序优先还是列序优先,其实在计算机计算中,指的都是在线性空间(linear storage,如 RAM,也即连续内存存储 contiguous in ,memory)存储多维数组(multidimensional arrays)的方式。 数据的分布方式(data layout)对于在不同编程语言间正确地传递多维数组是十分关原创 2017-02-18 10:10:13 · 2531 阅读 · 0 评论 -
+0 ≠ -0:多出一个数的补码
计算机的二进制系统如何表示0,以有符号位(signed)的 8 位二进制表示:0000,0000⇒+01000,0000⇒−00000, 0000\quad \Rightarrow +0\\1000, 0000\quad \Rightarrow -0 计算机不会凭白浪费掉这样的一个扩大自己表示能力的机会的,将 −0=1000,0000B-0=1000,0000_B 指定为 −128-128,原创 2016-02-20 11:50:52 · 1329 阅读 · 0 评论 -
日期和时间的格式化定义(ISO C89)
格式化定义本质上控制的是占位。日期%Y:4位数的年份;%y:2位数的年份;%m:2位数的月份(1-12)%d:2位数的日(01-31)时间%H:24小时制(0-23)%I:12小时制(01-12)%M:2位数的分(00-59)%S:2位数的秒(00-61) 秒 60 和秒 61 用于润秒;%w:用整数表示星期几(0:星期日,6)%U:每年的第几周(00-53) 星期一被认为是一原创 2017-04-13 23:01:20 · 1276 阅读 · 0 评论 -
计算机存储计量单位
二进制形式:2102^{10},1 KiB(kibibyte)2202^{20},1 MiB(mebibyte)2302^{30},1 GiB(gibibyte)2402^{40},1 TiB(tebibyte)2502^{50},1 PiB(pebibyte)2602^{60},1 EiB(exbibyte)2702^{70},1 ZiB(zebibyte)2802^{80},1原创 2017-04-26 18:20:55 · 1370 阅读 · 0 评论 -
计算机是如何启动的?
计算机是如何启动的?从按下电源键到响起 Windows 7启动的声音,计算机的启动经历了非常复杂的过程。 零、 boot 的含义先问一个问题,”启动”用英语怎么说? 回答是boot。可是,boot原来的意思是靴子,”启动”与靴子有什么关系呢? 原来,这里的boot是bootstrap(鞋带)的缩写,它来自一句谚语: “pull oneself up by one’s bootstraps转载 2016-01-29 09:11:45 · 989 阅读 · 0 评论