02 2019 档案
摘要:分布式锁: Redis分布式锁 RedLock算法 1)获取当前时间戳,单位是毫秒 2)跟上面类似,轮流尝试在每个master节点上创建锁,过期时间较短,一般就几十毫秒 3)尝试在大多数节点上建立一个锁,比如5个节点就要求是3个节点(n / 2 +1) 4)客户端计算建立好锁的时间,如果建立锁的时间
阅读全文
摘要:生命周期包括:加载、连接(验证、准备、解析)、初始化、使用、卸载 类初始化: 遇到new、getstatic、putstatic、invokestatic四条字节码指令时;常见场景:使用new实例化对象,读取或设置一个类的静态字段、调用一个类的静态方法 使用java.lang.reflect包的方法
阅读全文
摘要:乐观锁&悲观锁 悲观锁:获取数据时加锁,(synchronized关键字、Lock实现类) 乐观锁:使用数据时不加锁,更新时判断之前是否有其他线程更新数据,(CAS算法) CAS(Compare And Swap): 无锁算法,实现线程的变量同步 java.util.concurrent包中的原子类
阅读全文
摘要:locks部分:显式锁(互斥锁和速写锁)相关; atomic部分:原子变量类相关,是构建非阻塞算法的基础; executor部分:线程池相关; collections部分:并发容器相关; tools部分:同步工具相关,如信号量、闭锁、栅栏等功能; Executor 建立线程池,执行线程 Thread
阅读全文
摘要:用zookeeper来做分布式锁、分布式协调 zk使用场景: 分布式协调:(MQ解耦) A系统在zk中某个节点注册监听器,B完成处理后修改值,A收到通知 分布式锁: 同一个数据连续两个修改操作,只有一个可以获取锁 元数据/配置信息管理: dubbo等分布式系统的注册中心(Kafka、Storm) 如
阅读全文
摘要:synchronized关键字了解 解决多线程访问资源的同步性,保证被修饰的方法或者代码块在任意时刻只能有一个线程执行 synchronized使用方式 修饰实例方法,对当前对象加锁 修饰静态方法,对类对象加锁 修饰代码块,对当前对象加锁 JDK1.6以后对synchronized关键字的优化 偏向
阅读全文
摘要:为什么用缓存? 高性能:减少查询同一个数据时的响应速度 高并发:减少数据库的承载压力(2000/s),缓存走内存,天然支撑高并发 缓存的不良后果: 缓存与数据库的双写不一致 缓存雪崩 缓存穿透 缓存并发竞争 Redis和memcached区别(单线程、NIO、异步) Redis支持服务器端数据操作:
阅读全文
摘要:Java垃圾回收机制 判断对象已死方法: 引用计数法(循环引用) 可达性分析 GC Roots: 虚拟机栈中的引用对象 方法区中静态属性引用对象 方法区中常量引用对象 本地方法栈中JNI(Java native interface)引用的对象 引用分类: 强引用、软引用、弱引用、虚引用 垃圾回收算法
阅读全文
摘要:分布式会话(session): tomcat + redis Tomcat RedisSessionManager 缺点:分布式会话重耦合在Tomcat中,当web容器迁移成jetty后,需要重新配置 Spring session + redis tomcat + redis Tomcat Redi
阅读全文

浙公网安备 33010602011771号