构建工具Doc
参考 文档 https://webpack.docschina.org demo https://github.com/ruanyf/webpack-demos 构建一般做哪些事情? 代码转换:将 TypeScript 编译成 JavaScript、将 SCSS 编译成 CSS 等。 文件优化:压缩 JavaScript、CSS、HTML 代码,压缩合并图片等。 代码分割:提取多个页面的公共代码, …
VueDoc
模板语法 Mustache 语法不能作用在 HTML attribute 上,遇到这种情况应该使用 v-bind 指令 来给 attribute 赋值一个变量。 v-model v-bind:key data 以 $data 的形式存储在组件实例中。为方便起见,该对象的任何顶级 property 也会直接通过组件实例暴露出来 有三种写法,都是定义函数,而不是属性。 name 属性 props 方法 …
前端的节流和防抖
工作中排查数据问题发现了前端按钮可能会触发两次点击的情况,这个问题除了要在后端做幂等以外,正好最近我也在做一些前端的工作,也就专门研究了下前端的解决方案。本来要解决的是防抖问题,但是查了些资料发现一般都是防抖和节流一起,它们解决方案相似但又不完全相同,下面就分别介绍下方便对比使用。 防抖(debounce) 问题描述 防抖很容易理解,有时如果鼠标连按,那么在很短的时间内就会触发两次点击,从而触发了 …
操作系统的设备管理
计算机除了 CPU、内存、硬盘,还需要各种设备才能实现对计算机的操作。本文讨论计算机是如何管理设备的输入输出的。 设备控制器 设备控制器接收 CPU 发来的命令,去控制 I/O 设备工作,使 CPU 从繁杂缓慢的设备控制事务中解放出来。当 CPU 要操作 I/O 设备时,首先要启动这个设备,一方面将启动命令发送给设备控制器,另一方面通过地址线将 I/O 设备的地址发给设备控制器,设备控制器对收到的 …
操作系统的文件系统
文件是操作系统进行存储时使用最多的抽象之一,在 Linux 中,一切皆文件。本文以 Linux 为例,介绍下文件系统中的基础概念。 数据结构 每个文件实质上是一个有名字的字符序列,序列的内容为 文件数据 (file data),而序列的长度、序列的修改时间等描述文件数据的属性等其他信息称为 文件元数据 (file metadata)。 块(block) 通常来说,文件系统将文件数据保存在存储设备中 …
“结点”还是“节点”?
“结点” 还是 “节点” ? 刷题时,总会遇到“节点”和“结点”的词汇混用,非常困惑,查了一下,一般认为: 节点是一个实体,它具有处理的能力,比如网络上的一台计算机。 结点是一个交叉点、一个标记,算法中的点一般都称为结点,数据集合中的每一个数据元素都用中间标有元素值的方框来表示,我们称它为结点。 所以我们在看《算法导论》的时候,大部分是结点。在讨论服务架构的时候,一般就是节点了,英文里好像都是“n …
实现限流的几种方案
限流是服务在高并发的情况下,通过限制处理请求的速率,以达到保证服务不过载的目的,实现高可用和稳定性的目标。限流的方案一般有计数法、滑动窗口、漏桶、令牌桶几种,其中各有各的特点,通常需要根据场景采用不同的方案。 计数法 相对于滑动窗口,计数法也叫固定窗口。就是说接口在固定时间内的访问次数不能超过多少个,在实现的时候,假设限流为每分钟 100 个请求,设置一个开始时间 start 和计数器 count …
Go 程序是怎样跑起来的?R
Go 程序是怎么跑起来的?面对问题我第一反应是,Go 是静态编译型语言,和 C 语言一样,就是编译、链接那一套,尤其是最近对着 Go 的一些资料看感觉又学习了一遍编译原理。编译原理的内容本身就很深,本文仅以我暂时理解到的视角进行总结,参考资料列在了最下面。 编译器总览 典型的编译器(Compiler)如 LLVM 分为编译器前端、优化器和编译器后端。其中,前端专注于词法分析、解析语法和语义分析,然 …
Go 语言的垃圾回收机制概览
之前已经看过了 常见的垃圾回收算法 ,有了一定的基础,现在再来了解下 Go 语言的垃圾回收机制。 三色抽象 Go 语言如今已经演变成增量式的垃圾回收策略,即不是一口气运行 GC,而是和 Mutator 交替运行的,因此不会长时间妨碍到 Mutator 的运行。Go 语言增量式回收是基于“标记-清除”算法的一种优化思路,具体的实现是三色标记法。 简单来说,三色标记算法将程序中的对象分成白色、黑色和灰 …
Go 语言的内存管理机制概览
程序中的数据和变量在运行时会被分配到程序所在的虚拟内存中,内存空间包含两个重要的区域:堆(heap)和栈(stack),函数调用的参数、返回值以及局部变量大都会被分配到栈上,这部分内存由编译器进行管理。 用户程序(Mutator)通过内存分配器(Allocator)在堆上申请的内存,垃圾回收器(Collector)负责回收堆上的内存空间。可以说内存分配器和垃圾回收器共同管理着 Go 语言的堆内存。 …