My Blogs
JVM 内存模型(JMM) 三大特性
Published 2021年10月19日 21:59 by james
特性
原子性
原子性:指一个操作是不可中断的,即使是多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰
比如,对于一个静态全局变量int i,两个线程同时对它赋值,线程A 给他赋值 1,线程 B 给它赋值为 -1,。那么不管这两个线程以何种方式,何种步调工作,i的值要么是1,要么是-1,线程A和线程B之间是没有干扰的。这就是原子性的一个特点,不可被中断。
原子性表示一步操作执行过程中不允许其他操作的出现,直到该操作的完成。
在多线程环境下,原子性表现在,当前线程执行字节码的过程中不允许切换到其他线程,去执行其他的字节码。
在JMM抽象模型中定义了8中原子操作。
- a.
lock(锁定): 作用于主内存中的变量,将某个变量标识为某个线程的独占状态。 - b. `unlock(解锁): 作用于主内存中的变量,将某个变量从某个线程的独占状态释放出来,可以被其他线程锁定。
- c.
read(读取): 将主存中的变量从主存中读取到线程的工作内存中,供load操作使用。 - d.
load(载入): 作用于线程工作内存,将read从主存读取的变量,保存到工作内存的变量副本。 - e. …
一致性相关概念
Published 2021年10月05日 18:00 by james
TL;DR
- 强一致性
- [ ] 弱一致性
- [x] 最终一致性
- 单调写一致性
- 单调读一致性
- [ ] 因果一致性
- [ ] 读你所写一致性
- 会话一致性
- [ ] 读你所写一致性
- [x] 最终一致性
一致性模型分类1
由于异常的存在,分布式存储系统设计时往往会将数据冗余存储多份,每一份称为一个副本(replica/copy)。这样,当某一个节点出现故障时,可以从其他副本上读到数据。可以这么认为,副本是分布式存储系统容错技术的唯一手段。由于多个副本的存在,如何保证副本之间的一致性是整个分布式系统的理论核心。
场景说明
我们以具体实例来说明各种一致性的具体含义。首先,定义以下场景及术语。
这个场景包含三个组成部分:
- 存储系统: 存储系统可以理解为一个黑盒子,它为我们提供了可用性和持久性的保证。
- 客户端A: …
OAuth相关概念
Published 2021年01月26日 03:41 by james
OAuth2.0 授权方式
OAuth2.0 的授权简单理解其实就是获取令牌(token)的过程,OAuth 协议定义了四种获得令牌的授权方式(authorization grant )如下:
- 授权码(authorization-code)
- 隐藏式(implicit)
- 密码式(password)
- 客户端凭证(client credentials)
但值得注意的是,不管我们使用哪一种授权方式,在三方应用申请令牌之前,都必须在系统中去申请身份唯一标识:客户端 ID(client ID)和 客户端密钥(client secret)。这样做可以保证 token 不被恶意使用。
下面我们会分析每种授权方式的原理,在进入正题前,先了解 OAuth2.0 授权过程中几个重要的参数:
- response_type:code 表示要求返回授权码,
- token 表示直接返回令牌
- client_id:客户端身份标识
- client_secret:客户端密钥
- redirect_uri:重定向地址
- scope:表示授权的范围,read只读权限,all读写权限 …
企业级数据库设计十个原则
Published 2020年10月15日 10:00 by james
3个基础原则
- 结构清晰: 表名、字段命名没有歧义,能一眼看懂
- 唯一职责: 一表一用,领域定义清晰,不存储无关信息,相关数据在一张表中
- 主键原则: 设计不带物理意义的主键;有唯一约束,确保幂等
4个扩展性原则
影响系统的性能和容量
- 长短分离: 可以扩展,长文本独立存储;有合适的容量设计
- 冷热分离: 当前数据与历史数据分离
- 索引完备: 有合适索引方便查询
- 不使用关联查询: 不使用一切的SQL Join操作,不做2个表或者更多表的关联查询
3个完备性原则
- 完整性: 保证数据的准确性和完整性,重要的内容都有记录
- 可追溯: 可追溯创建时间,修改时间,可以逻辑删除
- 一致性原则: 数据之间保持一致,尽可能避免同样的数据存储在不同表中
⏰
数学分析笔记
Published 2017年11月01日 23:00 by james
$\ln x$ 导数的推导
$$ \frac{d}{dx}\ln x = \lim_{h \to 0} \frac{\ln(x + h) - \ln(x)}{h} = \lim_{h \to 0} \frac{\ln\left(\frac{x + h}{x}\right)}{h} = \lim_{h \to 0} \frac{\ln\left(1 + \frac{h}{x}\right)}{h} $$ …