DongYuanxin's Blog

理解SQL事务隔离等级以及各种读写异常

背景 目前,主流 db 都支持事务。但事务保证完全 ACID 是有代价的。 所以有时候会为了性能,在某些场景种,弱化事务的 ACID。这是通过设置不同的隔离级别来实现的。 不同的隔离级别能解决不同的读写异常场景,要了解这些读写异常场景,才能根据情况选择合适的隔离级别。 数据隔离等级 快照隔离 快照隔离的一个事务读到的数据都来自于数据库某同一个时刻的状态(“快照”得名于此),然后所...

SQL下的乐观锁和悲观锁

乐观锁 乐观锁认为一般情况下数据不会造成冲突(所以叫“乐观”),所以在数据进行提交更新时才会对数据的冲突与否进行检测。 它本身是种程序设计思想,通过一种标识来决定数据是否可以操作。 现在普遍的做法是给数据加一个版本号或者时间戳的方式来实现乐观锁操作过程。例如新增一个 version 字段,更新的时候: UPDATE ... SET version=version+1 WHERE ve...

TypeScript 装饰器

认识装饰器 首先装饰器只能用在class上,不能用在func上。包括类、类方法、类属性、类方法的参数、类装饰器。 然后装饰器执行的时机,在定义类的时候执行的。如果对于一个class的func,多个装饰器,那么执行顺序是靠近方法的优先执行。 类装饰器 类装饰器的入参是类的构造函数。有2种常见用法。 用法1:当返回新的构造函数时,可以重载类的构造函数 type ClassConstr...

JavaScript的垃圾回收算法(GC)

前言 JS 中的垃圾回收算法有两个版本: 引用计数 标记清除 在 c 语言中,内存的申请、使用和释放(内存生命周期)每一步都是开发者控制;在自动 gc 的语言中,例如 js 中,开发者只感知内存的使用。 引用计数算法 简单说:如果对象被其它对象引用,那么就不能被垃圾回收。 原理:每个对象有个属性值,来标识它被引用的次数。为 0 的时候,可以垃圾回收。 例如: le...

一致性Hash算法原理和应用

一致哈希是一种特殊的哈希算法。在使用一致哈希算法后,哈希表槽位数(大小)的改变平均只需要对 K/n 个关键字重新映射,其中 K 是关键字的数量,n 是槽位数量。然而在传统的哈希表中,添加或删除一个槽位的几乎需要对所有关键字进行重新映射。 — 维基百科 应用场景 多用于分布式 Web 服务中。每个服务代表哈希环的一个节点,当此节点发生改变时候,例如挂掉,只有部分缓存会重新计算分布,而不是...

单点登录SSO: Signgle Sign On

场景 同一公司多个系统,每个系统都需要实现一遍登录校验功能。维护成本、同步成本和开发成本均高。 用户使用系统,也需要多次登录。 SSO(单点登录)就是为了解决多个系统登录授权的问题。它分为单点登录和单点注销。 介绍 单点登录:用户在子系统 a 登录后,在子系统 b、c 均不用重复登录。 单点注销:用户在子系统 a 注销/过期后,在子系统 b、c 均注销/过期。 整体设计 SS...