Caffeine(2):深入解密来自未来的缓存

2021-11-15
阅读 9 分钟
2.8k
读这篇文章之前希望你能好好的阅读: 你应该知道的缓存进化史 和 如何优雅的设计和使用缓存? 。这两篇文章主要从一些实战上面去介绍如何去使用缓存。在这两篇文章中我都比较推荐Caffeine这款本地缓存去代替你的Guava Cache。本篇文章我将介绍Caffeine缓存的具体有哪些功能,以及内部的实现原理,让大家知其然,也要知其...
封面图

Caffeine(1):一个现代的缓存设计方案

2021-11-15
阅读 4 分钟
2.4k
缓存是提升性能的通用方法,现在大多数的缓存实现都使用了经典的技术。这篇文章中,我们会发掘 Caffeine 中的现代化的实现方法。Caffeine 是一个开源的 Java 缓存库,它能提供高命中率和出色的并发能力。期望读者们能被这些想法激发,进而将它们应用到任何你喜欢的编程语言中。
封面图

Spring(2)-AOP简介

2021-10-13
阅读 4 分钟
2.8k
我们先回顾一下OOP:Object Oriented Programming,OOP作为面向对象编程的模式,获得了巨大的成功,OOP的主要功能是数据封装、继承和多态。
封面图

分布式锁(5)-MLock使用介绍(自己实现,基于redis,适用于真实项目)

2021-10-11
阅读 3 分钟
3.8k
分布式锁 MLock 使用介绍分布式锁 MLock gitee地址分布式锁 MLock github地址系列文章链接:分布式锁(1)-分布式锁简介分布式锁(2)-基于Redis的实现分布式锁(3)-Redisson实现分布式锁(4)-基于Mysql实现分布式锁(5)-MLock使用介绍(自己实现,基于redis,适用于真实项目)1.基于使用java+redis实现了常用的分布式锁,提供注...
封面图

spring(1)-ApplicationContextAware详解

2021-10-08
阅读 9 分钟
7k
Aware本义就是"自动的",顾名思义spring给我们自动做了些事情。spring有很多以Aware结尾的类,有EnvironmentAware、ApplicationContextAware、MessageSourceAware等。
封面图

算法(7)-差分数组

2021-08-31
阅读 2 分钟
8.6k
如果给你一个包含5000万个元素的数组,然后会有频繁区间修改操作,那什么是频繁的区间修改操作呢?比如让第1个数到第1000万个数每个数都加上1,而且这种操作时频繁的。
封面图

Java注解学习1-Java Annotation认知(包括框架图、详细介绍、示例说明)

2021-08-18
阅读 13 分钟
12.8k
网上很多关于Java Annotation的文章,看得人眼花缭乱。Java Annotation本来很简单的,结果说的人没说清楚;弄的看的人更加迷糊。
封面图

算法(6)-数组异或操作(异或性质)

2021-05-07
阅读 4 分钟
4.3k
1486. 数组异或操作难度简单83给你两个整数,n 和 start 。数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。请返回 nums 中所有元素按位异或(XOR)后得到的结果。示例 1: {代码...} 示例 2: {代码...} 示例 3: {代码...} 示例 4: {代码...} 提示:1 <= n <= 10000 <= sta...
封面图

Spring aop 通过获取代理对象实现事务切换

2021-05-06
阅读 2 分钟
7.2k
在项目中,涉及到同一个类中一个方法调用另外一个方法,并且两个方法的事务不相关。这里面涉及到一个事务切换的问题,通过spring aop类里面的AopContext类获取当前类的代理对象,这样就能切换对应的事务管理器了,具体做法如下:
封面图

Java错误解决记录(踩坑记录)

2021-04-28
阅读 2 分钟
5.6k
You aren‘t using a compiler supported by lombok, so lombok will not work and has been disabled.Preferences | Build, Execution, Deployment | Compiler 在User-local build process VM options (overrides Shared options):后面添加-Djps.track.ap.dependencies=false
封面图

6种延时队列的实现方案

2020-08-31
阅读 10 分钟
4.4k
我个人一直秉承的观点:工作上能用JDK自带API实现的功能,就不要轻易自己重复造轮子,或者引入三方中间件。一方面自己封装很容易出问题(大佬除外),再加上调试验证产生许多不必要的工作量;另一方面一旦接入三方的中间件就会让系统复杂度成倍的增加,维护成本也大大的增加。

JUC-Condition

2020-08-13
阅读 6 分钟
2.5k
在使用Lock之前,我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了。配合Object的wait()、notify()系列方法可以实现等待/通知模式。Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以及功能特性上还是有差别的。Object和Condition接口的一些对...

LeetCode 1290 二进制链表转整数

2020-07-02
阅读 1 分钟
1.8k
LeetCode 1290 二进制链表转整数 题目 1290. 二进制链表转整数 给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。 请你返回该链表所表示数字的 十进制值 。 示例 1:输入:head = [1,0,1]输出:5解释:二进制数 (101) 转化为十进制数 (5) 示例 2:输入:hea...

二叉树知识点回忆以及整理

2020-06-17
阅读 18 分钟
2.2k
在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”,左子树和右子树同时也是二叉树。二叉树的子树有左右之分,并且次序不能任意颠倒。

红黑树的增删操作

2020-06-16
阅读 16 分钟
3.4k
红黑树查找的最坏时间复杂度也是O(logN)。为了它这么高的性能,我感觉自己费了这么多脑细胞和时间来学习也是值得的(自己前前后后看了好多次)。这篇文章和插入图也是我自己用心根据自己的理解来做,希望大家能在学习红黑树的时候提高效率,不走弯路。

ThreadLocal

2020-06-08
阅读 5 分钟
1.7k
通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK中提供的ThreadLocal类正是为了解决这样的问题。 ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。

BUG-并行流与数组下标越界-思考与总结

2020-04-30
阅读 8 分钟
2.7k
BUG-并行流与数组下标越界-思考与总结 今天线上环境报异常,发现了一个之前没注意过的问题,记录一下。 1. 异常信息 异常信息如下: {代码...} 产生bug的代码改写后如下: {代码...} 2. 异常追踪分析 从上面的信息可以看出,是StringBuilder.append使用时,产生了数组下标越界异常。下面是代码追踪: {代码...} 一路追踪...