My Javascript modularity notes
# # Javascript 模块化笔记
# # 简介
模块化就是将一个复杂的程序安装一定的规则封装成若干个模块,并组合在一起
模块的内部数据相对而言是私有的,只是向外暴露一些方法与外部其他模块通信
没有模块化之前,常常一个 JS 文件中会有很多功能的代码,不容易维护;使用其他第三方插件,也经常会有依赖的问题
现在常用的 Javascript 模块化规范有四种: CommonJS 、 AMD 、 CMD 、 ES6 module 。
AMD 、 CMD 现在已经很少使用了 node.js 环境下一般使用 CommonJS 规范,如要使用 ES6 module ,需要配置 babel 浏览器端一般都是使用 ES6 module ,为了兼容低版本浏览器,一般会配置 babel
模块化的优势:
代码分离成一个个小的模块,方便维护代码,按需加载
用到什么功能就引入对应的模块,提高代码的复用性
降低代码耦合度
# # 全局 Function
这种模式是将不同的功能封装成不同的全局函数
不同的功能模块写在不同的文件中,主模块或者 html 文件引入
module1.js ...
Distributed services
# 分布式
# 一、分布式锁
在单机场景下,可以使用语言的内置锁来实现进程同步。但是在分布式场景下,需要同步的进程可能位于不同的节点上,那么就需要使用分布式锁。
阻塞锁通常使用互斥量来实现:
互斥量为 0 表示有其它进程在使用锁,此时处于锁定状态;
互斥量为 1 表示未锁定状态。
1 和 0 可以用一个整型值表示,也可以用某个数据是否存在表示。
# 数据库的唯一索引
获得锁时向表中插入一条记录,释放锁时删除这条记录。唯一索引可以保证该记录只被插入一次,那么就可以用这个记录是否存在来判断是否处于锁定状态。
存在以下几个问题:
锁没有失效时间,解锁失败的话其它进程无法再获得该锁;
只能是非阻塞锁,插入失败直接就报错了,无法重试;
不可重入,已经获得锁的进程也必须重新获取锁。
# Redis 的 SETNX 指令
使用 SETNX(set if not exist)指令插入一个键值对,如果 Key 已经存在,那么会返回 False,否则插入成功并返回 True。
SETNX 指令和数据库的唯一索引类似,保证了只存在一个 Key 的键值对,那么可以用一个 Key 的键值对是否存在来判断 ...
Regular Expressions
# 正则表达式
# 1.1. 基本语法
通过一张图表来对正则表达式的基本进行一个回顾
single char
quantifiers (数量)
position (位置)
\d 匹配数字
* 0 个或者更多
^ 一行的开头
\w 匹配 word (数字、字母)
+ 1 个或更多,至少 1 个
$ 一行的结尾
\W 匹配非 word (数字、字母)
? 0 个或 1 个,一个 Optional
\b 单词 "结界"(word bounds)
\s 匹配 white space (包括空格、tab 等)
{min,max} 出现次数在一个范围内
\S 匹配非 white space (包括空格、tab 等)
{n} 匹配出现 n 次的
. 匹配任何,任何的字符
# 1.1.1. single char
假设你有一段字符如下:
\w
将匹配所有 word,当然,() - 等字符除外
\w\w\w
发现匹配的有’ The se are som e pho ne number s …’ 注意正则表达式是匹配一 ...
My Vue2 notes
# Vue 简介
# Vue 的特点
采用组件化模式,提高代码复用率,且让代码更好维护
)
声明式编码,让编码人员无需直接操作 DOM,提高开发效率
)
使用虚拟 DOM + 优秀的 Diff 算法,尽量复用 DOM 节点
依靠着一个 diff 算法来看你虚拟 DOM 的改变,然后对真实 DOM 进行改变就行了
# 搭建 Vue 开发环境
# 直接用 script 引入
CDN
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
像这种 Vue,JQuery 引入进来的都是个构造函数对象,这个对象有原型 (上面有着给我们之后实例化这个 Vue 对象的共享方法)
这个构造函数也有属性等.
最好使用 Vue Devtools
# Vue 核心
# Hello
想让 Vue 工作,就必须创建一个 Vue 实例,且要传入一个配置对象
root 容器里 ...
Redis Notes
# Redis
# 1、什么是 Redis
Redis 本质上是一个 Key-Value 类型的内存数据库,很像 memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。因为是纯内存操作,Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快的 Key-Value DB。 Redis 的出色之处不仅仅是性能,Redis 最大的魅力是支持保存多种数据结构,此外单个 value 的最大限制是 1GB,不像 memcached 只能保存 1MB 的数据,因此 Redis 可以用来实现很多有用的功能,比方说用他的 List 来做 FIFO 双向链表,实现一个轻量级的高性 能消息队列服务,用他的 Set 可以做高性能的 tag 系统等等。另外 Redis 也可以对存入的 Key-Value 设置 expire 时间,因此也可以被当作一 个功能加强版的 memcached 来用。 Redis 的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此 Redis 适合的场景主要局限在较小数据量 ...
Javascript Questions
# 1. What’s the output?
function sayHi() {
console.log(name);
console.log(age);
var name = 'Lydia';
let age = 21;
}
sayHi();
A: Lydia and undefined
B: Lydia and ReferenceError
C: ReferenceError and 21
D: undefined and ReferenceError
Answer
# Answer: D
Within the function, we first declare the name variable with the var keyword. This means that the variable gets hoisted (memory space is set up during the creation phase) with the default value of undefined , u ...
Systems Design basics
# 系统设计基础
系统设计基础
一、性能
二、伸缩性
三、扩展性
四、可用性
五、安全性
参考资料
# 一、性能
# 性能指标
# 1. 响应时间
指某个请求从发出到接收到响应消耗的时间。
在对响应时间进行测试时,通常采用重复请求的方式,然后计算平均响应时间。
# 2. 吞吐量
指系统在单位时间内可以处理的请求数量,通常使用每秒的请求数来衡量。
# 3. 并发用户数
指系统能同时处理的并发用户请求数量。
在没有并发存在的系统中,请求被顺序执行,此时响应时间为吞吐量的倒数。例如系统支持的吞吐量为 100 req/s,那么平均响应时间应该为 0.01s。
目前的大型系统都支持多线程来处理并发请求,多线程能够提高吞吐量以及缩短响应时间,主要有两个原因:
多 CPU
IO 等待时间
使用 IO 多路复用等方式,系统在等待一个 IO 操作完成的这段时间内不需要被阻塞,可以去处理其它请求。通过将这个等待时间利用起来,使得 CPU 利用率大大提高。
并发用户数不是越高越好,因为如果并发用户数太高,系统来不及处理这么多的请求,会使得过多的请求需要等待,那么响应时间就会大大提高。
...
SQL notes
# 一、基础
模式定义了数据如何存储、存储什么样的数据以及数据如何分解等信息,数据库和表都有模式。
主键的值不允许修改,也不允许复用(不能将已经删除的主键值赋给新数据行的主键)。
SQL(Structured Query Language),标准 SQL 由 ANSI 标准委员会管理,从而称为 ANSI SQL。各个 DBMS 都有自己的实现,如 PL/SQL、Transact-SQL 等。
SQL 语句不区分大小写,但是数据库表名、列名和值是否区分依赖于具体的 DBMS 以及配置。
SQL 支持以下三种注释:
# 注释
SELECT *
FROM mytable; -- 注释
/* 注释1
注释2 */
数据库创建与使用:
CREATE DATABASE test;
USE test;
# 二、创建表
CREATE TABLE mytable (
# int 类型,不为空,自增
id INT NOT NULL AUTO_INCREMENT,
# int 类型,不可为空,默认值为 1,不为空
col1 INT NOT NULL DEFAULT 1,
# 变长字 ...
SQL vs mongodb commands
# SQL 到 Mongo 的对应表
这个列表是 PHP 版本的 » SQL to Mongo 对应表(在 MongoDB 官方手册中有更加通用的版本)。
SQL 查询语句
Mongo 查询语句
CREATE TABLE USERS (a Number, b Number)
隐式的创建,或 MongoDB::createCollection().
INSERT INTO USERS VALUES(1,1)
$db->users->insert(array(“a” => 1, “b” => 1));
SELECT a,b FROM users
$db->users->find(array(), array(“a” => 1, “b” => 1));
SELECT * FROM users WHERE age=33
$db->users->find(array(“age” => 33));
SELECT a,b FROM users WHERE age=33
$db->users-> ...
SQL commands
# SQL 语法
SQL 语法
一、基础
二、创建表
三、修改表
四、插入
五、更新
六、删除
七、查询
DISTINCT
LIMIT
八、排序
九、过滤
十、通配符
十一、计算字段
十二、函数
汇总
文本处理
日期和时间处理
数值处理
十三、分组
十四、子查询
十五、连接
内连接
自连接
自然连接
外连接
十六、组合查询
十七、视图
十八、存储过程
十九、游标
二十、触发器
二十一、事务管理
二十二、字符集
二十三、权限管理
参考资料
# 一、基础
模式定义了数据如何存储、存储什么样的数据以及数据如何分解等信息,数据库和表都有模式。
主键的值不允许修改,也不允许复用(不能将已经删除的主键值赋给新数据行的主键)。
SQL(Structured Query Language),标准 SQL 由 ANSI 标准委员会管理,从而称为 ANSI SQL。各个 DBMS 都有自己的实现,如 PL/SQL、Transact-SQL 等。
SQL 语句不区分大小写,但是数据库表名、列名和值是否区分依赖于具体的 DBMS 以及配置。
SQL 支持以下三种注释:
## ...