自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 JUC学习笔记- ReentrantLock 和 AQS

AQS : 抽象队列同步器,其核心属性,锁的状态state,(FIFO)双向队列和CAS操作。AQS定义了2种资源共享的方式,EXCLUSIVE(独占,即只有一个线程能获取到该资源,比如ReentrantLock),SHARED(共享,多个线程可以共享该资源,Semephore/CountDownLatch),当然也可以兼而有之,比如ReentrantReadWriteLock队列模型:公平锁:先看入队队列,如果有等待的队列,就是先来先得,排队过程中,先进入队列的先获得锁 (前面释放锁,会唤醒后面的在队列等

2022-06-22 19:03:33 245 1

原创 JVM学习笔记-对象内存分配过程

老年代空间分配担保机制: 在minor gc时,检查老年代剩余可以空间是否大于年轻代里的所有对象(包含垃圾和非垃圾)。如果大于等于,则做minor gc。如果小于,在看下是否配置了担保参数,-xx: -HandlePromotionFailure, 如果配置了,那么判断老年代剩余空间是否小于历史每次minor gc后进入老年代的对象的平均大小,如果是,进行full goc, 减少一次minor gc。 如果不是执行minor gc. 如果没有任何担保,直接进行full gc.对象逃逸分析 Test1方法中创

2022-06-19 00:04:59 182

原创 JVM学习笔记-基础知识

JDK = JRE + 一众工具JRE = JVM + 一众lib jar1.加载;通过IO流的方式把字节码文件读入到JVM中的方法区2.校验:通过校验字节码文件内容的头4位16进制是否是java 魔数café babe3 准备:为类中静态部分开辟空间并赋初始值4 解析 :将符号引用转成直接引用(静态链接)5 初始化: 为类中的静态部分指定值并执行静态代码块类被加载后,类中的类型信息,方法信息,属性信息,运行时常量池,类加载的引用等信息会被加载到元空间中JVM 类加载器有BootStrapClassLoad

2022-06-18 23:59:57 119

原创 分布式学习笔记-2PC和3PC协议

XA规范分布式系统架构下,进行事务提交,保持一致性而设计的一种算法。各个系统进行事务提交的时候,都能知道成功与否,都能实现回滚或是成功提交。但是分布式框架下,多系统进行事务提交,各个系统无法感知其他系统中的事务是否正常提交了或是需要回滚。这个时候需要引入一个事务协调者去协调各个节点完成事务操作。有了分布式事务的场景,就会有解决该问题的方式规范,XA规范就是解决分布式事务的规范。分布式事务的实现方式有很多种,最具有代表性的是XA分布式事务协议。XA协议包括两阶段提交(2PC)和三阶段提交(3PC)两种实现。思

2022-06-18 23:41:19 144

原创 分布式学习笔记-CAP定理和BASE 理论

CAP定理:指一个分布式系统最多满足AP 或是CP, P必须保障,其他2选1.分布式系统存在八大谬论网络相当可靠延迟为0传输宽带是无限的网络相当安全拓扑结构不会改变必须要有一名管理员传输成本为0网络同质化1 Basically Available 基本可以 : 系统出现故障的时候,允许损失部分可用性,保证核心功能key2 Soft state 软状态 指允许系统中的数据存在中间状态,并认为该中间状态存在不会影响系统的可用性。即是允许系统之间数据同步,可以存在延迟3 Eventually consisten

2022-06-18 23:38:20 157

原创 分布式学习笔记-限流算法

计数器算法计数器算法: 指定时间内,累计访问次数,达到设定的阈值时,触发限流策略,下个时间周期进行访问试,统计访问数清零。可以利用redis的incr 原子自增性,再结合过期时间实现计时器算法无法解决临界问题,相邻周期之间时间段出现大并发,如第一个周期最后10秒和第二个周期前十秒,出现超过100限流阈值。滑动时间窗口算法为了解决计算器算法的临界值问题,发明了滑动窗口算法,在TCP网络通信协议中,就是采用这种算法解决网络拥堵问题 滑动时间窗口就是将计算器中的实际周期切分为多个小的时间窗口,分表在每个时间

2022-06-18 23:34:07 64

原创 分布式学习笔记-分布式锁的实现

数据库,Redis(Redisson), Zookeeper三种方案的比较上面几种方式,哪种方式都无法做到完美。就像CAP一样,在复杂性、可靠性、性能等方面无法同时满足,所以,根据不同的应用场景选择最适合自己的才是王道。从理解的难易程度角度(从低到高)数据库 > 缓存 > Zookeeper从实现的复杂性角度(从低到高)Zookeeper >= 缓存 > 数据库从性能角度(从高到低)-> redis 写入内存就返回,然后再同步其他节点,所以快缓存 > Zookeeper >= 数据库从可靠性角度(从高到低

2022-06-18 23:31:33 121

原创 分布式学习笔记-唯一主键生成方式

分布式如何生成唯一主键 描述优点缺点UUIDUUID 通用唯一标识码缩写,其目是让分布式系统中所有元素都有唯一的辨识信息,而且不需要通过中央控制器来指定唯一标识java.util.UUID.randomUUID().toString(),1)降低全局节点的压力,使得主键生成速度更快2)生成的主键全局唯一3)跨服务器合并数据方便1)由于无序,检索效率低2)UUID 占16字节,占用空间大数据库主键自增Mysql表主键自增1) INT 和BIGINT 占用空间小2)顺序性好,检索性能好,索引的裂变1)并发性能不

2022-06-18 23:29:10 294

原创 Zookeeper基础知识笔记-分布式锁和事务性的支持

1 客户端调用 create() 方法创建父节点 locknode 与其子节点 locknode/guid-lock-,注意所创建节点的类型需要设置为 EPHEMERAL_SEQUENTIAL。2 客户端调用 getchildren(“locknode”) 方法来获取所有已经创建的子节点,同时在这些子节点上注册 Watcher。3 客户端获取了所有子节点之后,如果发现自己在步骤1中创建的子节点是所有子节点中序号最小的,就说明自己已经获取到了锁。4 如果客户端在步骤 3 中发现自己创建的子节点并非是所有子节点

2022-06-12 00:08:58 308

原创 Zookeeper 基础知识笔记-工作流程

1. 客户端连接的是Leader节点进行写Leader 写入事务文件,然后给自己一个ACK 信号,然后同步去Follower,Follower写入事务文件保存,给Leader 返回ACKLeader收到半数以上的ACK,就会发送commit给follower,然后自己将数据写入内存中,follower收到commit同样将数据写入内存 2. 客户端连接的是Follower节点进行写Follower会将请求转发给Leader, Leader再进行 #1的情况操作 3. Observer 观察者只对外提供读功能

2022-06-12 00:03:07 269

原创 Zookeeper基础知识笔记-ZAB工作原理

Zookeeper 的核心是原子广播机制 (ZAB Zookeeper Atomic Broadcast),这个机制保证了各个 server 之间的同步。 实现这个机制的协议叫做 Zab 协议。Zab 协议有两种模式,它们分别是恢复模式和广播模式。恢复模式当服务启动或者在领导者崩溃后, Zab 就进入了恢复模式,当领导者被选举出 来,且大多数 server 完成了和 leader 的状态同步以后,恢复模式就结束了。状 态同步保证了 leader 和 server 具有相同的系统状态。广播模式一旦 lead

2022-06-11 23:51:43 155

原创 Zookeeper 基础知识笔记

Zookeeper是开源的分布式应用程序协调服务,是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置文件的管理、集群管理、同步锁、leader 选举、队列管理等。zookeeper集群通过paxos协议变种zab来保持的。zookeeper的主要角色为:首领-leader,跟随者-follower,观察者-observerleaderleader是zookeeper集群的主节点,负责响应所有对ZooKeeper状态变更的请求(事务性更新和非事务性查询)对于exists,getData,getChi

2022-06-11 23:43:46 162

原创 Redis 基础知识笔记-分布式锁 Redisson

实现的基础是 setNx (底层是lua脚本保证原子性) 1 为什么要使用lua语言因为一大堆复杂的业务逻辑,可以通过封装在lua脚本中发送给redis,保证这段复杂业务逻辑执行的原子性2 加锁机制分析:lua中第一个if判断语句,就是用“exists myLock”命令判断一下,如果你要加锁的那个锁key不存在的话,你就进行加锁。3 锁互斥机制如果在这个时候,另一个客户端(客户端2)来尝试加锁,执行了同样的一段lua脚本,会怎样呢?第一个if判断会执行“exists myLock”,发现myLock这个锁

2022-06-11 23:31:49 270

原创 Redis 基础知识笔记-高可用

集群的演进:1.主从一个主多个从, 当主节点 出现问题,需要人工切换到从缺点:1 需要人工切换,无法实时监控切换; 2. 主节点故障会导致数据丢失无法恢复 3.主从内存的内容都是一样,降低可用性优点:1, 主从可以实现读写分离,降低主节点压力 2. 当多个从的时候可以实现从从复制,只需要有一个从节点连接主节点做同步2.哨兵模式master宕机,哨兵会自动选举master并将其他的slave指向新的master。在主从模式下,redis同时提供了哨兵命令redis-sentinel,哨兵是一个独立的进程,作

2022-06-11 23:27:22 173

原创 Redis 基础知识笔记-持久化

Redis 持久化两种 RBD和 AOF1. RBD (Redis data base)默认选择RBD, RBD 是在指定间隔时间执行了指定次数的的写操作,则会fork 一个子进程去将快照存储到磁盘上,不影响Redis 远单线程 的IO,生成一个dump.rbd文件,替换旧的dump.rbd。Redis 重启会通过加载dump.rdb文件恢复数据。优点1 适合大规模数据恢复2 对业务数据完整性和一致性要求不高,RDB是很好的选择缺点1 数据完整性和一致性不高,最后一次宕机会导致最后一次没够条件写入磁盘的数据

2022-06-11 23:13:53 151

原创 Redis 基础知识笔记

1. Redis 是单线程还是多线程,为什么Redis快单工作线程,高版本出现多IO 线程, epoll原来工作线程就是串行执行,输入+计算+输出。 现在提升性能,输入输出都用了多线程,只有计算在工作线程中串行。增加吞吐量。Redis 内部肯定是线程安全的,但是外部程序调用没办法保障,所以需要外部调用程序去保障。旧版本执行新版本执行过程 为什么Redis快? a 单线程使用epoll并实现多路复用,虽然是单线程,但是输入输出是可以做到多线程并发,只是处理数据的时候才是单线程。 b. 基于内存操作 c.

2022-06-11 23:06:30 84

原创 Redis 基础知识笔记-数据类型

各种数据类型的使用场景1. String 1.1分布式锁1.2存储结构体信息: 如序列号的json1.3 Int 可以实现阅读数,访问数的统计 set num 1 incr num1.4 共享session2. Hashmap2.1 存对象,例如实现购物车3. List (栈,队列,BlockMQ)3.1 消息流,例如朋友圈微博)3.2 队列和栈,一个线程写,一个线程读3.3 抢购 (list的pop操作是原子性的,所以即使有多个用......

2022-05-27 18:33:28 50

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除