存储器的层次结构及Cache
计算机系统中的存储器主要分以下几个结构:
寄存器
Cache(高速缓存)
内存(主存/运行内存)
外存(辅存)
由上到下组成存储容量:外存 > 内存 > Cache > 寄存器读写速度:寄存器 > Cache > 内存 > 外存
寄存器(CPU)
存在于 CPU 中,一般只能通过汇编语言进行操作,负责与 Cache 相关的读写操作
Cache(高速缓存)
CPU 和内存之间的中间存储器,目的是为了解决 CPU 和内存之间速度与容量不匹配问题。
对于开发者来说,它是不可操作的,属于透明状态
SRAM相联存储器,特点是按内容存取,原理是把数据或者数据某一部分作为关键字,按顺序写入信息,读取时并行将该关键字与存储器的每一个单元进行比较,找出存储器内所有与该关键字相同的数据集。
更适合做数据的检索和更新
设置多级高速缓存 Cache可以提高访问的命中率,从而提高主存访问的效率
多级 cache 一般分为一级cache、二级cache、三级cache
CPU 在访问主存时,会按顺序去优先访问一级 cache、二级 cache、三 ...
如何理解RESTful API
RESTful API 的定义?
在 URL 中使用名词? http://xxx.com/users?
使用 HTTP Methods 表示动作? GET、POST、DELETE、PUT?
制定 HTTP Code 表明响应状态? 200、302、400、500?
很多情况下,我们基本都是根据 URL 中所使用的名词、HTTP 不同的请求方式及 HTTP 的状态码来决定一个 API 是否符合 RESTful 的规范
如果一个 API 的 URL 中使用特定名词(例user,search,product)、特定的 HTTP 请求方式(GET=>表示获取指定内容、POST=>提交一份表单、DELETE=>删除相关内容)和指定的 HTTP 状态码(200=>请求成功、302=>资源复用、400=>客户端异常、500=>服务端异常),诸如此类,我们就说明该 API 是一个标准的RESTful API。确实是这样吗?
REST 代表了什么?
REST => (R ...
箭头函数存在的意义
记录下对箭头函数的理解
箭头函数是在 ES6 中添加的,它的存在是为了解决普通函数遗留下来的一些问题(函数的二义性)
与普通函数相比,箭头函数主要解决(丰富)了以下内容:this指向// 普通函数中,this 的值取决于函数如何被调用(global、词法作用域、块级作用域)// 在非严格模式下,当一个函数的this访问为undefined或null时,会触发this替换机制,将该this替换为globalThis(window)function fn() { console.log(this.name);}const obj = { name: "xiaoming" };obj.fn = fn;obj.fn(); // 输出 'xiaoming',this指向被访问对象obj// this 的值总是根据调用函数的方式而改变,即使函数是在创建对象时定义的const obj1 = { name: "obj1", getThis() { return this ...
TypeScript基础
TypeScript 的基础概要
简介:
TypeScript 由微软开发,是基于 JavaScript 的一个扩展语言,它包含了 JavaScript 的所有内容,所以它被称为 JavaScript 的超集。
TypeScript 增加了静态类型检测、接口、泛型等诸多现代化开发特性,更适合大型项目的开发。
TypeScript 不能直接运行在浏览器中,它需要经过编译后转为JavaScript才能在浏览器中运行。
由于方便书写,下文中的一系列TypeScript我将都简称为TS。
为何需要:
JavaScript 的出现
由 JavaScript 最初的浏览器脚本语言为引,在后续的发展中,JavaScript 能做的事情越来越多,截至今日亦可以开发全栈项目。
随着 JavaScript 的流行和使用,不同项目也随着应用场景的开发堆叠越来越多的 JavaScript 代码,这使得不同的开发人员在此基础上开发维护显得异常艰难。
JavaScript 的困扰
不清楚的数据类型
const str = "a";str(); // 类型错误,显示str不是一个 ...