摘要: 本文接着上文应用限流进行讨论。 之前谈到的限流方案只能针对于单个 JVM 有效,也就是单机应用。而对于现在普遍的分布式应用也得有一个分布式限流的方案。 基于此尝试写了这个组件: https://github.com/crossoverJie/distributed-redis-tool 阅读全文
posted @ 2018-07-24 08:12 crossoverJie 阅读(1572) 评论(3) 推荐(3)
摘要: LRU 是 Least Recently Used 的简写,字面意思则是最近最少使用。 通常用于缓存的淘汰策略实现,由于缓存的内存非常宝贵,所以需要根据某种规则来剔除数据保证内存不被撑满。 阅读全文
posted @ 2018-07-23 08:02 crossoverJie 阅读(652) 评论(0) 推荐(0)
摘要: 分布式锁在分布式应用中应用广泛,想要搞懂一个新事物首先得了解它的由来,这样才能更加的理解甚至可以举一反三。 首先谈到分布式锁自然也就联想到分布式应用。 在我们将应用拆分为分布式应用之前的单机系统中,对一些并发场景读取公共资源时如扣库存,卖车票之类的需求可以简单的使用同步或者是加锁就可以实现。 但是应用分布式了之后系统由以前的单进程多线程的程序变为了多进程多线程,这时使用以上的解决方案明显就不够了。 阅读全文
posted @ 2018-07-20 08:32 crossoverJie 阅读(3611) 评论(11) 推荐(0)
摘要: 开发中不免会遇到需要所有子线程执行完毕通知主线程处理某些逻辑的场景。 或者是线程 A 在执行到某个条件通知线程 B 执行某个操作。 可以通过以下几种方式实现: 阅读全文
posted @ 2018-07-19 08:31 crossoverJie 阅读(907) 评论(3) 推荐(1)
摘要: 不管是在面试还是实际开发中都是一个应该掌握的技能。 阅读全文
posted @ 2018-07-18 08:35 crossoverJie 阅读(1044) 评论(7) 推荐(1)
摘要: 众所周知 HashMap 是一个无序的 Map,因为每次根据 key 的 hashcode 映射到 Entry 数组上,所以遍历出来的顺序并不是写入的顺序。 阅读全文
posted @ 2018-07-17 08:55 crossoverJie 阅读(1618) 评论(1) 推荐(1)
摘要: 使用 synchronize 来做同步处理时,锁的获取和释放都是隐式的,实现的原理是通过编译后加上不同的机器指令来实现。 而 ReentrantLock 就是一个普通的类,它是基于 AQS(AbstractQueuedSynchronizer)来实现的。 是一个重入锁:一个线程获得了锁之后仍然可以反复的加锁,不会出现自己阻塞自己的情况。 阅读全文
posted @ 2018-07-16 08:00 crossoverJie 阅读(613) 评论(0) 推荐(1)
摘要: 当 JVM 收到一个 new 指令时,会检查指令中的参数在常量池是否有这个符号的引用,还会检查该类是否已经被加载过了,如果没有的话则要进行一次类加载。 阅读全文
posted @ 2018-07-13 08:08 crossoverJie 阅读(1601) 评论(3) 推荐(2)
摘要: 众所周知 synchronize 关键字是解决并发问题常用解决方案,有以下三种使用方式: 同步普通方法,锁的是当前对象。 同步静态方法,锁的是当前 Class 对象。 同步块,锁的是 {} 中的对象。 阅读全文
posted @ 2018-07-12 09:00 crossoverJie 阅读(1023) 评论(2) 推荐(2)
摘要: 当我们在做数据库分库分表或者是分布式缓存时,不可避免的都会遇到一个问题: 如何将数据均匀的分散到各个节点中,并且尽量的在加减节点时能使受影响的数据最少。 阅读全文
posted @ 2018-07-10 11:59 crossoverJie 阅读(623) 评论(0) 推荐(0)