Raft一致性算法

最近在看一些基础的分布式理论的书,整理一下相关的问题,做了一些详细的整理,方便之后梳理和查阅。 一致性问题 在分布式系统中,一致性问题(consensus problem)是指对于一组服务器,给定一组操作,我们需要一个协议使得最后它们的结果达成一致。 CAP理论对于分布式系统的论述,如果不想牺牲一致性,我们就只能放弃可用性,所以,数据一致性模型主要有以下几种:强一致性、弱一致性和最终一致性等,在本 … 继续阅读

CAP理论

这是分布式理论的理论基石。 CAP理论概述 一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。 定义 Consistency 一致性 一致性指“all nodes see the same data at the same time”,即所有节点在同一时间的数据完全一致。 一致性是 … 继续阅读

Spring的编程式事务

常用的是通过注解方式来使用,但是时候需要编程式,在代码块里面管理事务,以便实现一些定制化的逻辑,故总结。 编程式事务管理 编程式事务管理: 通过Transaction Template手动管理事务 实现声明式事务的四种方式: 基于 TransactionInterceptor 的声明式事务: Spring 声明式事务的基础,通常也不建议使用这种方式,但是与前面一样,了解这种方式对理解 Spring … 继续阅读

GC Root和可达性分析算法

对象生死判定 如何判断Java中一个对象应该 “存活” 还是 “死去”,这是 垃圾回收器要做的第一件事。 GC Root GC Root也成为GC根对象。 GC根对象 在Java中, 可作为GC Roots的对象包括以下四种: 虚拟机栈(栈帧中的本地变量表)中引用的对象 本地方法栈 中 JNI (Native方法)引用的变量 方法区 中类静态属性引用的变量 方法区 中常量引用的变量 可达性分析算法 … 继续阅读

jstack与线程状态

jstack jstack是java虚拟机自带的一种堆栈跟踪工具,jstack命令主要用来查看Java线程的调用堆栈的,可以用来分析线程问题(如死锁)。 jstack [-l] pid jstack dump分析当前各个线程的运行情况,如是否存在死锁、是否存在一个线程长时间持有锁不放等等。 定位 在top命令中,已经获取到了占用cpu资源较高的线程pid,将该pid转成16进制的值,在thread … 继续阅读

Java对象引用类型

Java对象引用 从 JDK 1.2 版本开始,把对象的引用分为 4 种级别,从而使程序能更加灵活地控制对象的生命周期。这 4 种级别由高到低依次为:强引用、软引用、弱引用和虚引用。 StrongReference: 强引用 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java 虚拟机宁愿抛出 OutOfMemoryError 错误,使程序异常终止, … 继续阅读