摘要:
介绍 Resilience4j是一个轻量级、易于使用的容错库,其灵感来自Netflix Hystrix,但专为Java 8和函数式编程设计。 springcloud2020升级以后Hystrix被官方移除,Resilience4目前是官方推荐的熔断限流方案。 核心组件 相关问题 按照网上很多文章进行 阅读全文
摘要:
失败无限重试- 多个线程竞争,第一个拿到锁第二个会无限重试 RLock lock = redisson.getLock("码哥字节"); try { // 1.最常用的第一种写法 lock.lock(); // 执行业务逻辑 ..... } finally { lock.unlock(); } 拿锁 阅读全文
摘要:
介绍 一个分布式事务的解决方案框架。 Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 角色 Seata事务管理中有三个重要的角色: TC(Transaction Coordinator)- 事务协调者:维护全局和分支事务的状态,协调全局事务 阅读全文
摘要:
分享一个大文件断点续传的工具类,实测效果很好。 package com.skyworth.file.util; import cn.hutool.core.io.FileUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjs 阅读全文
摘要:
现在我们介绍避免死锁的几个常见方法。 ❑ 避免一个线程同时获取多个锁。 ❑ 避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。 ❑ 尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制。 ❑ 对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁 阅读全文
摘要:
Redis的淘汰策略有哪几种? volatile-lru 从已设置过期时间的数据集中挑选最近最少使用的数据淘汰 volatile-ttl 从已设置过期时间的数据集中挑选将要过期的数据淘汰 volatile-random 从已设置过期时间的数据集中任意选择数据淘汰 对于以上三种策略,如果没有符合条件的 阅读全文
摘要:
介绍 线程池同其他池技术一样属于提高效率,减少性能开销的池化资源技术。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。 创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时候就创建若干线程来响应 阅读全文
摘要:
索引相关 abcd联合索引搜索ba会走索引么 会,重排 索引的底层实现是B+树,为何不采用红黑树,B树? (1):B+Tree非叶子节点只存储键值信息,降低B+Tree的高度,所有叶子节点之间都有一个链指针,数据记录都存放在叶子节点中 (2):红黑树这种结构,h明显要深的多,效率明显比B-Tree差 阅读全文
摘要:
简介 ReentrantLock重入锁,是实现Lock接口的一个类。 支持重入性(表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞,synchronized隐式支持重入性) ReentrantLock还支持公平锁和非公平锁两种方式。 ReentrantLock是J.U.C包下提供 阅读全文
摘要:
user nginx; worker_processes auto; #worket_cpu_affinity auto; error_log /var/log/nginx/error.log warn; pid /run/nginx.pid; #include /usr/share/nginx/m 阅读全文
摘要:
幂等性解决方案 幂等性就是同一个操作执行多次,产生的效果一样。多如此请求,多次消费不会造成程序逻辑异常。 保证幂等性的方法 前端 1 按钮只能点击一次 2 当用户提交表单后,执行一个客户端的重定向,即 Post_Redirect_get,避免用户刷新重复提交 后端 1 使用唯一索引,这样当数据重复的 阅读全文
摘要:
核心组件 SqlSessionFactoryBuilder SqlSessionFactoryBuilder的作用就是通过XML或者Java代码来建造一个工厂(SqlSessionFactory),并且可以通过它建造多个这样的工厂。一旦完成建造工厂的任务,我们就应该废弃它,回收空间。所以它的生命周期 阅读全文
摘要:
介绍以下这些SQL语句会产生一个隐式的提交操作,即执行完这些语句后,会有一个隐式的 COMMIT操作 DDL语句:ALTER DATABASEUPGRADE DATA DIRECTORY NAME,ALTER EVENT, ALTER PROCEDURE, ALTER TABLE, ALTER VI 阅读全文
摘要:
🐱🐉 介绍 Semaphore 信号量,用来控制同一时间<span m+="" 2m="" regular";color:#0c0c0c;background:="" #ffc000"="">,资源可被<span microsoft="" yahei";color:#0c0c0c;backgr 阅读全文
摘要:
栈的相关介绍 阅读全文
摘要:
逃逸分析,其实就是分析一个对象是否会逃逸出方法,分析对象的动态作用域。如果一个对象在一个方法内定义,并且有可能被方法外部引用使用,那认为它逃逸了。 public static StringBuffer craeteStringBuffer(String s1, String s2) { String 阅读全文
摘要:
简介 AQS 是 Java 并发包里实现锁、同步的一个重要的基础框架。 AQS内部维护了一个等待队列,借助CAS方法实现了无阻塞算法进行更新。 AQS定义两种资源共享方式 Exclusive(独占,只有一个线程能执行,如ReentrantLock) Share(共享,多个线程可同时执行,如Semap 阅读全文
摘要:
CountDownLatch CountDownLatch 是一种通用的同步工具CountDownLatch内部的实现主要是依靠AQS的共享模式。 当一个线程把CountDownLatch初始化了一个count之后,其他的线程调用await就会阻塞住,直到其他的线程一个一个调用countDown方法 阅读全文
摘要:
介绍 什么是SpringIOC,就是把每一个bean(实体类)与bean(实体类)之间的关系交给第三方容器进行管理。 关键类 BeanFactory IOC的顶层容器,描述了IOC的规范。 BeanFactory是一个接口,是Spring中工厂的顶层规范,IOC的核心接口。 定义了getBean() 阅读全文
摘要:
设置命令 -Xms 设置堆的最小空间大小 -XX:NewSize 设置新生代最小空间大小 -XX:MaxNewSize 设置新生代最大空间大小 -XX:PermSize 设置永久代最小空间大小 -XX:MaxPermSize 设置永久代最大空间大小 -Xss 设置每个线程的堆栈大小 Jstat 收集 阅读全文
摘要:
原理 总体上来讲MVCC的实现是基于ReadView版本链以及Undo日志实现的 MVCC就是在使用READ COMMITTD、REPEATABLE READ这两种隔离级别的事务在执行普通的SELECT操作时访问记录的版本链的过程,这样可以使不同事务的读-写、写-读操作并发执行,从而提升系统性能; 阅读全文
摘要:
1 错误日志 Error Log 服务器启动关闭过程中的信息 服务器运行过程中的错误信息 从服务器上启动服务器进程时产生的信息 查看路径: show variables like 'log_error'; 2 全查询日志 General Query Log 全查询日志记录了所有对数据库的请求信息,不 阅读全文
摘要:
Condition Condition是一种多线程通信工具,表示多线程下参与数据竞争的线程的一种状态,主要负责多线程环境下对线程的挂起和唤醒工作。 方法 // 阻塞 // 造成当前线程在接到信号或被中断之前一直处于等待状态。 void await() throws InterruptedExcept 阅读全文
摘要:
介绍 volatile 是 Java 虚拟机提供的轻量级的同步机制,它可以保证可见性(缓存一致性协议)和有序性(禁止指令重排序,也就是通过内存屏障来实现),但是不保证原子性。 JMM 介绍 JMM 是一个抽象的概念,它描述的是一种规范。这些规范定义了程序中各种变量的访问规则。 JMM 定义了线程和主 阅读全文
摘要:
介绍 ThreadLocal是一个线程变量工具类,提供了线程局部变量,就是为每一个使用该变量的线程都提供一个变量值的副本。我们可以利用ThreadLocal创建只能由同一线程读和写的变量。因此就算两个线程正在执行同一段代码,并且这段代码具有对ThreadLocal变量的引用,这两个线程也无法看到彼此 阅读全文
摘要:
安装 切换为 root 用户,非 root 用户,请在所有命令前面加上 sudo 更新apt apt update 安装依赖 apt install apt-transport-https ca-certificates curl software-properties-common 添加docke 阅读全文
摘要:
事务提交 Mysql 默认开启自动提交事务 两段提交 把一个事务分成两个阶段来提交,就是把redolog拆分成了prepare和commit两段 MySQL想要准备事务的时候会先写redolog、binlog分成两个阶段。 两阶段提交的第一阶段 (prepare阶段):写rodo-log 并将其标记 阅读全文
摘要:
前期准备 1.hyper-v功能 win10家庭版没有提供hyper-v的问题可通过如下脚本解决,保存为bat并运行重启电脑即可。 pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for 阅读全文
摘要:
1.Monitor对象 Monitor对象被称为管程或者监视器锁。 在Java中,每一个对象实例都会关联一个Monitor对象。 这个Monitor对象既可以与对象一起创建销毁,也可以在线程试图获取对象锁时自动生成。 当这个Monitor对象被线程持有后,它便处于锁定状态。Synchronized的 阅读全文
摘要:
Join 主线程join 启动线程t1,随后调用join,main线程需要等t1线程执行完毕后继续执行。 public class MainJoin { static class MyThread implements Runnable { String name; public MyThread( 阅读全文
摘要:
什么是页? 页是InnoDB中管理数据的最小单元 页与页之间是通过一个双向链表连接起来。 页的组成 FileHeader 上一页下一页的指针 FIL_PAGE_PREV FIL_PAGE_NEXT PageHeader Infimum & Supremum Records 会记录当前页最大最小记录 阅读全文