6 老马啸西风

尚未进行身份认证

我要认证

Github: https://github.com/houbb 邮箱:1060732496@qq.com

等级
TA的排名 138

StampedLock 读写锁中的最强王者

StampedLock简介我们前面介绍了 ReentrantReadWriteLock可重入读写锁详解,不过 jdk1.8 引入了性能更好的 StampedLock 读写锁,我愿称之为最强!一种基于能力的锁,具有三种模式用于控制读/写访问。StampedLock的状态由版本和模式组成。锁定采集方法返回一个表示和控制相对于锁定状态的访问的印记; 这些方法的“尝试”版本可能会返回特殊值为零以表示获取访问失败。锁定释放和转换方法要求stamps作为参数,如果它们与锁的状态不匹配则失败。三种模式这.

2020-10-24 08:14:27

ReentrantLock 可重入锁这样学,面试没烦恼,下班走得早

为什么需要 ReentrantLock ?既生 synchronized,何生 ReentrantLock?每一个接触过多线程的 java coder 肯定都知道 synchronized 关键字,那为什么还需要 ReentrantLock 呢?其实这就是 ReentrantLock 与 synchronized 对比的优势问题:(1)ReentrantLock 使用起来更来更加灵活。我们在需要控制的地方,可以灵活指定加锁或者解锁。这可以让加锁的范围更小,记住老马的一句话,更小往往意味着更快。.

2020-10-21 23:18:28

工作 5 年了,竟然不知道 volatile 关键字?

“工作 5 年了,竟然不知道 volatile 关键字!”听着刚面试完的架构师一顿吐槽,其他几个同事也都参与这次吐槽之中。都说国内的面试是“面试造航母,工作拧螺丝”,有时候你就会因为一个问题被PASS。你工作几年了?知道 volatile 关键字吗?今天就让我们一起来学习一下 volatile 关键字,做一个在可以面试中造航母的螺丝工!volatileJava语言规范第三版中对 volatile 的定义如下:java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该

2020-10-20 21:13:47

java 从零实现属于你的 redis 分布式锁

点赞再看,已成习惯。为什么需要分布式锁在 jdk 中为我们提供了加锁的方式:(1)synchronized 关键字(2)volatile + CAS 实现的乐观锁(3)ReadWriteLock 读写锁(4)ReenTrantLock 可重入锁等等,这些锁为我们变成提供极大的便利性,保证在多线程的情况下,保证线程安全。但是在分布式系统中,上面的锁就统统没用了。我们想要解决分布式系统中的并发问题,就需要引入分布式锁的概念。上一节我们已经对分布式锁原理进行了详细讲解,参见:red.

2020-10-17 21:24:42

3天时间,我是如何解决redis bigkey删除问题的?

问题的出现一个平坦无奇的工作日,领导到我工位和我说,“有一个 redis 慢操作,你这几天有时间帮忙解决一下。”“好的。”,管他什么问题,既然让我做,我自然觉得自己能搞定。然后我收到一封 redis 慢操作的 excel 文件,这个还挺好,每个操作的耗时都给出来了,看了下我们系统有几个操作耗时几秒钟。好家伙,对于单线程的 redis 来说,一个操作几秒钟确实是挺致命的,不过都是在凌晨左右,还好。慢操作分析redis 的慢操作已经有了,如果没有,我们可以自己去 redis 服务器查看历史的慢日.

2020-10-17 14:58:24

java 手写并发框架(二)异步转同步框架封装锁策略

序言上一节我们学习了异步查询转同步的 7 种实现方式,今天我们就来学习一下,如何对其进行封装,使其成为一个更加便于使用的工具。思维导图如下:拓展阅读java 手写并发框架(1)异步查询转同步的 7 种实现方式异步转同步的便利性实现方式循环等待wait & notify使用条件锁使用 CountDownLatch使用 CyclicBarrierFutureSpring EventListener上一节我们已经对上面的 7 种实现方式进行了详

2020-10-12 21:51:04

从零手写缓存框架(14)redis渐进式rehash详解

redis 的 rehash 设计本文思维导图如下:HashMap 的 rehash 回顾读过 HashMap 源码的同学,应该都知道 map 在扩容的时候,有一个 rehash 的过程。没有读过也没有关系,可以花时间阅读下 从零开始手写 redis(13) HashMap源码详解 简单了解下整个过程即可。HashMap 的扩容简介这里简单介绍下:扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组

2020-10-11 21:50:50

从零开始手写缓存框架 redis(13)HashMap 源码原理详解

为什么学习 HashMap 源码?作为一名 java 开发,基本上最常用的数据结构就是 HashMap 和 List,jdk 的 HashMap 设计还是非常值得深入学习的。无论是在面试还是工作中,知道原理都对会我们有很大的帮助。本篇的内容较长,建议先收藏,再细细品味。不同于网上简单的源码分析,更多的是实现背后的设计思想。涉及的内容比较广泛,从统计学中的泊松分布,到计算机基础的位运算,经典的红黑树、链表、数组等数据结构,也谈到了 Hash 函数的相关介绍,文末也引入了美团对于 HashMap 的源

2020-10-10 21:39:03

java 手写并发框架(一)异步查询转同步的 7 种实现方式

序言本节将学习一下如何实现异步查询转同步的方式,共计介绍了 7 种常见的实现方式。思维导图如下:异步转同步业务需求有些接口查询反馈结果是异步返回的,无法立刻获取查询结果。比如业务开发中我们调用其他系统,但是结果的返回确实通知的。或者 rpc 实现中,client 调用 server 端,结果也是异步返回的,那么如何同步获取调用结果呢?正常处理逻辑触发异步操作,然后传递一个唯一标识。等到异步结果返回,根据传入的唯一标识,匹配此次结果。如何转换为同步正常的应用场景很多,但是有时

2020-10-09 21:12:08

从零开始手写缓存框架(12)redis expire 过期的随机特性详解及实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(二)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现java从零开始手写redis(七)LRU 缓存淘汰策略详解java从零开始手写redis(八)朴素 LRU 淘汰算法性能优化第二

2020-10-08 14:32:56

java 从零开始手写 redis(11)clock时钟淘汰算法详解及实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现java从零开始手写 redis(七)LRU 缓存淘汰策略详解前面我们实现了 FIFO/LRU/LFU 等常见的淘汰策略,不过在操作

2020-10-07 19:20:42

java 从零开始手写 redis(十)缓存淘汰算法 LFU 最少使用频次

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现java从零手写实现redis(七)LRU 缓存淘汰策略详解从零开始手写 redis(八)朴素 LRU 淘汰算法性能优化本节一起来

2020-10-06 21:56:18

从零开始手写 redis(八)朴素 LRU 淘汰算法性能优化

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现我们前面简单实现了 redis 的几个特性,java从零手写实现redis(一)如何实现固定大小的缓存? 中实现了先进先出的驱除策略。

2020-10-04 18:12:36

从零开始手写 redis(七)LRU 缓存淘汰策略详解

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现我们前面简单实现了 redis 的几个特性,java从零手写实现redis(一)如何实现固定大小的缓存? 中实现了先进先出的驱除策略。

2020-10-03 21:50:45

java 从零开始手写 redis(六)redis AOF 持久化原理详解及实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路我们前面简单实现了 redis 的几个特性,java从零手写实现redis(三)内存数据如何重启不丢失? 中实现了类似 redis 的 RDB 模式。redis aof 基础Redis AOF 持

2020-10-02 12:59:32

java 从零开始手写 redis(五)过期策略的另一种实现思路

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器前面实现了 redis 的几个基本特性,其中在 expire 过期原理时,提到了另外一种实现方式。这里将其记录下来,可以拓展一下自己的思路。以前的实现方式核心思路原来的实现方式见:java从零手写实现redis(三)redis expire 过期原理

2020-10-01 22:18:39

从零开始手写 redis(四)监听器的实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?本节,让我们来一起学习一下如何实现类似 guava-cache 中的 removeListener 删除监听器,和类似 redis 中的慢日志监控的 slowListener。删除监听器说明我们在两种场景下删除数据是对用户透明的:(1)size 满了之后,进行数据淘汰。(2)expire 过期时,清

2020-09-30 19:56:08

从零手写 cache 之 redis expire 过期实现原理

前言我们在 从零手写 cache 框架(一)实现固定大小的缓存 中已经初步实现了我们的 cache。本节,让我们来一起学习一下如何实现类似 redis 中的 expire 过期功能。过期是一个非常有用的特性,比如我希望登录信息放到 redis 中,30min 之后失效;或者单日的累计信息放在 redis 中,在每天的凌晨自动清空。代码实现接口我们首先来定义一下接口。主要有两个:一个是多久之后过期,一个是在什么时候过期。public interface ICache<K, V>

2020-09-28 20:11:15

从零开始手写缓存之如何实现固定缓存大小

程序员的三高前段时间有一位同事体检,体检医生说他三高。我打趣道,程序员三高不是高性能、高并发、高可用吗?你是哪三高?每一个追求性能的开发者,都对高性能孜孜不倦地追求着,而缓存是我们踏上这条高性能大道的必经之路。小到 cpu 设计,大到服务分布式缓存,我们每时每刻都在接触缓存,今天我们就一起学习下缓存的发展之路,以及如何如何手写一个可以指定大小的 cache。cache 发展之路古代社会 - HashMap当我们应用有一定流量之后或者查询数据库特别频繁,这个时候就可以祭出我们的java中自带的H

2020-09-27 23:17:25

18次版本迭代,从零到一实现 java web 权限管理控台(文末福利)

​privilege-adminprivilege-admin 是一款为 java 设计的权限管理控台。特性用户,角色,权限的管理黑白名单管理登入/登出日志审计基于 auto-log 的统一日志输出创作目的权限作为 web 开发可以说是最基础,但同时也是最重要的一个环节。前端时间写了 https://github.com/houbb/privilege 权限管理框架,但是没有控台配置,总觉的是残缺的,于是花时间从零实现了一个权限管理控台。多年不接触前端,前端技术变化也

2020-09-26 22:38:29

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。