caffine

加载方式Cache手动加载123456789101112131415161718192021222324252627282930public static void main(String[] args) { Cache<String, String> cache = Caffeine...

单例模式

当我们提到单例模式,首先想到的是什么 指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同的时候,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序尽在内存中创建一个对象,所有需要调用的地方都共享这一单例对象。 单例模式创建的方式有两种 懒汉式:在需要的时候才去创建该单例类对象 ...

类加载机制

类的生命周期首先我们来了解一下类的整个生命周期 加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载 其中前五步为类的加载过程 加载 通过全类名获取定义此类的二进制字节流 将字节流所代表的静态存储结构转换为方法区的运行时数据结构 在内存中生成一个代表...

高并发高可用系统设计

如何设计一个抢红包系统,或者是一个商城秒杀系统,设计的时候又需要重点关注那些业务。 以上两种系统类型,在一个时间点,会有请求激增的情况出现,且数量远远大于库存或者预定个数的数量,也就是说,只有少部分的用户能够抢到红包或者秒杀到商品,整个业务流程的话相对来说不会非常复杂。 友好的用户体验 用户不能接受破窗的体...

RedLock

首先引入需要锁的条件 多任务环境下(进程或者线程); 任务都对同一共享资源进行读写; 对资源的访问应该是互斥的。 但如果是分布式环境的话,JVM锁,是解决不了环境加锁的问题的。 按照官方的思路语设计方案,算法只需具备3个特性就可以实现一个最低保障的分布式锁: 安全属性(Safety property):...

Linux服务器状态监控

服务器基本参数确认首先我们需要明确,服务器的CPU,内存,磁盘情况 CPU CPU总核数 = 物理CPU个数 * 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数 查看CPU的信息(型号) 1cat /proc/cpuinfo | grep name | cut -...

Arthas

简介Arthas是Alibaba开源的Java诊断工具,当你遇到以下类似问题而束手无策的时候,Arthas可以帮助你解决: 这个类是从哪个jar包加载的?为什么会报各种类相关的Exception? 我改的代码为什么没有执行到?难道是我没commit?还是分支错了? 遇到问题无法在线上debug,难道只能通过...

log4j bug

log4jLog4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感...

数据的加密、签名与CA证书

简介敏感数据传输过程中要防止窃取和恶意篡改。使用安全的加密算法加密传输对象可以保护数据,这就是所谓的对对象进行密封。而对密封的对象进行数字签名则可以防止对象被非法篡改,保持其完整性。 我们简单来说,发送者对明文进行加密然后生成密文,这就是加密,接受者通过一段数据来验证发送数据的用户便是正确的发送者,那么这就是签名...

Java JVM工具

JDK与JRE在说这些工具之前先了解一下JDK与JRE之间的区别吧 JDK: java development kit(java开发工具) JRE: java runtime environment (java运行时环境) JDK是java开发工具包,它提供了Java开发环境和运行环境,可以这样说,在JDK中包含...