计算机组成原理——第四章
第四章 存储器4.1 概述一、存储器分类
按存储介质分类
半导体存储器 (TTL、MOS)
磁表面存储器 (磁头、载磁体)
磁芯存储器 (硬磁材料、环状元件)
光盘存储器 (激光、磁光材料)
按照存取方式分类
存取时间与物理地址无关(随机访问)
随机存储器(RAM):在程序执行过程中可读可写
只读存储器(ROM):在程序执行过程中只读
存取时间与物理地址有关(串行访问)
顺序存取存储器:磁带
直接存取存储器:磁盘
按在计算机中的作用分类
按照在计算机中的作用进行分类,存储器可以分为主存储器和辅存储器。其中主存储器可以分为随机存储器(RAM)和只读存储器(ROM)。一般用户到数据和程序是存储在RAM中,一些系统参数则保存在ROM中。RAM还可以进一步的分类:分为静态RAM和动态RAM。ROM还可以进一步分为:MROM(掩模只读存储器)、PROM(可编程的只读存储器)、EPROM(电可编程只读存储器)、EEPROM(带电可擦可编程只读存储器)。
辅助存储器和主存储器之间还可以放上一层flash memory,常用的U盘就是flash memory来做的,是半导体存 ...
计算机组成原理——第三章
第三章 系统总线3.1 总线的基本概念
为什么要使用总线
面向总线的结构主要有以下优点:
简化了系统结构,便于系统设计制造;
大大减少了连线数目,便于布线,减小体积,提高系统的可靠性;
便于接口设计,所有与总线连接的设备均采用类似的接口;
便于系统的扩充、更新与灵活配置,易于实现系统的模块化;
便于设备的软件设计,所有接口的软件就是对不同的口地址进行操作;
便于故障诊断和维修,同时也降低了成本。
什么是总线
总线是连接各个部件的信息传输线,是各个部件共享的传输介质。
总线上信息的传送
串行:串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别使用于计算机与计算机、计算机与外设之间的远距离通信。
并行:并行通信时数据的各个位同时传送,可以字或字节为单位并行进行。并行通信速度快,但用的通信线多、成本高,故不宜进行远距离通信。计算机或plc各种内部总线就是以并行方式传送数据的。另外,在PLC(可编程逻辑控制单元)底板上,各种模块之间通过底板总线交换数据也以并行方式进行。
Q: 串行通信和并行 ...
彻底搞懂HTTPS的加密机制
彻底搞懂HTTPS的加密机制
本文转载自知乎彻底搞懂HTTPS的加密机制。作者说的很清晰,故转载到博客。对作者表示感谢!
HTTPS(SSL/TLS)的加密机制虽然是个前后端开发都应了解的基本问题,但是网上的很多HTTPS的相关文章也总会忽略一些内容,我学习它的时候也费了挺大功夫。
对称加密、非对称加密、数字签名、数字证书等等,在学习过程中,除了了解“它是什么”,你是否想过“为什么是它”?我认为了解了后者才真正理解了HTTPS的加密机制。
本文以问题的形式逐渐展开,一步步解开HTTPS的面纱,希望能够帮助你彻底搞懂HTTPS。特别是对于了解过HTTPS却在有些地方卡壳的人,希望本文能帮助你理清思路。
为什么需要加密?因为http的内容是明文传输的,明文数据会经过中间代理服务器、路由器、wifi热点、通信服务运营商等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了,并且劫持者还可以篡改传输的信息且不被双方发觉,这就是中间人攻击。所以我们才需要对信息进行加密。最直接的加密方式就是对称加密。
什么是对称加密?就是一个密钥,它可以对一段内容加密,加密后只能用它才能解密看到原本 ...
题目:经典的FOO.getName问题
题目:经典的FOO.getName问题代码如下:
123456789101112131415161718function Foo() { getName = function () { console.log(1); } return this;}Foo.getName = function () { console.log(2);}Foo.prototype.getName = function () { console.log(3);}var getName = function () { console.log(4);}function getName() { console.log(5);}
问题是: 下面的代码输出什么?
1234567Foo.getName();getName();Foo().getName();getName();new Foo.getName();new Foo().getName();new new Foo().g ...
计算机组成原理——第二章
第二章 计算机的发展及应用2.1 计算机发展史
一、计算机的产生和发展
世界第一台电子计算机ENIAC(1946年)
值得记住的机器:IBM System / 360
二、微型计算机的出现和发展
微处理器芯片1971年 intel公司
存储器芯片 1970年
三、软件技术的兴起和发展
各种语言
机器语言 面向机器
汇编语言 面向机器
高级语言 面向问题
系统软件
软件发展的特点
2.2 计算机的应用
一、科学计算和数据处理
二、工业控制和实时控制
三、网络技术
电子商务
网络教育
敏捷制造
四、虚拟现实
五、办公自动化和管理信息系统
六、CAD(计算机辅助技术)/CAM(计算机辅助制造)/CIMS(计算机/现代集成制造系统)
七、多媒体技术
八、人工智能
2.3 计算机展望 芯片集成度的提高收一下三方面的限制:
芯片集成度受物理极限的制约
按几何级数递增的制作成本
芯片的功耗、散热、线延迟
计算机组成原理——第一章
第一章 计算机系统概论
计算机组成原理第一章随堂笔记
采用自顶向下的方式,层层细化。
课程内容组织分为四篇:
第一:概论;
第二:计算机系统的硬件结构
第三篇:CPU
第四篇:CU
1.1 计算机系统简介计算机系统由软件和硬件两部分组成。软件可以划分为系统软件和应用软件两种。
计算机系统结构是指 程序员所见到的计算机系统的属性,概念性的结构与功能特性。(指令系统、数据类型、寻址技术、I/O机理)。比如 有无乘法指令
计算机组成主要是 实现计算机体系结构所体现的属性。(具体指令的实现)。比如 如何实现乘法指令
1.2 计算机的基本组成 一、冯诺依曼计算机特点
有5大组成部分:运算器(ALU)、控制器(CU)、存储器、输入设备、输出设备。
指令和数据以同等的地位存于存储器,可以按地址寻访
指令和数据用二进制表示
指令由操作码和地址码组成(操作码指明指令具体要做什么操作,地址码指明要操作的数在内存中的地址。)
存储程序,程序存储在存储器中(核心特征)
以运算器为中心
冯诺依曼计算机硬件框图
存在的问题:以运算器为中心,运算器的性能成为这个系统的瓶颈;其次层次 ...
题目:变量提升/匿名函数this指向
题目:变量提升/匿名函数this指向题目1代码如下:
1234567891011var x = 1, y = 0, z = 0;var add = function (x) { x = x + 1; return x;}y = add(x);function add(x) { return x = x + 3;}z = add(x);console.log(x, y, z);
请问输出的x,y,z的值分别为多少?为什么?
由于函数提升优于变量提升,导致加3的add函数声明被下面加1的add函数表达式覆盖。也就有了下面的代码:
123456789101112131415function add(x) { return x = x + 3;}var x, y, z;var add;x = 1;y = 0;z = 0;add = function (x) { x = x + 1; return x;}y = add(x);z = add(x);console.log(x, y, z);
接着 y = add(x) ...
堆排序&优先级队列
二叉堆本文主要参考二叉堆详解实现优先级队列。对其作者labuladong表示感谢。
说到二叉堆就不得不提到二叉树,在二叉树中有一种特殊的树叫做完全二叉树,而堆就是一种完全二叉树。因此,堆可以用数组来表示。因为完全二叉树的节点之间存在如下关系:
某个节点(其索引为k)的父节点的索引为(k / 2),其左孩子节点索引为2 k,右孩子节点为2 k + 1。正是因为这种关系,才可以用数组来表示堆。
如下图
注:数组的第一个索引 0 空着不用。因为数组索引是数组,为了方便区分,将字符作为数组元素。
可以看到,把arr[1]作为整棵树的根的话,每个节点的父节点和左右孩子节点的索引都可以通过简单的运算得到。
二叉堆还分为最大堆(大顶堆)和最小堆(小顶堆)。最大堆的性质是:每个节点都大于等于它的两个子节点。类似的,最小堆的性质是:每个节点都小于等于它的子节点。
堆主要应用有两个, 首先是一种排序方法「堆排序」, 第二是一种很有用的数据结构「优先级队列」。
堆排序在说堆排序之前,先要知道怎么建堆。常见的方式有两种:
插入式建堆:每次插入一个节点,实现一个大顶堆(或小顶堆)
自下而上式堆化 ...
回溯算法
回溯算法及题目
题号
题目
Tag
39
组合总和
数组、回溯算法
40
组合总和II
数组、回溯算法
46
全排列
数组、回溯算法
51
N皇后
数组、回溯算法
墙裂推荐这篇文章:回溯算法解题套路框架
下面内容大多参考上面这篇文章,对其作者labuladong表示感谢。
回溯算法的框架解决一个回溯问题,实际上就是一个决策树的遍历过程。 只需要思考3个问题:
路径:也就是已经做出的选择
选择列表:也就是当前可以做的选择
结束条件:也就是到达决策树底层,无法再做选择的条件。
在后面的题目中会对这个三个词语再进行解释。
代码方面,回溯算法的框架:
12345678910111213let res = [];function backtrack(路径, 选择列表) { if(满足结束条件) { res.add(路径); return; } //for循环 for (let 选择 in 选择列表) { 做选择 backtrack(路径, 选择列表) 撤销选择 }}
其核心就是for循环里 ...
less内置函数
Less内置函数Logical Functions
if
Examples:
12345@some: foo;div { margin: if((2>1), 0, 3px); color: if((iscolor(@some)), @some, black);}
Result:
1234div { margin: 0; color: black;}
布尔表达式也是支持的:
123if(not (true), foo, bar);if((true) and (2 > 1), foo, bar);if((false) or (isstring("boo!")), foo, bar);
boolean
Example:
1234567@bg: black;@bg-light: boolean(luma(@bg) > 50%);div { background: @bg; color: if(@bg-light, black, white);}
Result:
1234div ...