板子


package test; //package test; import java.util.*; public class Main { static int N = 100010; static int[] e = new int[N * 2]; static int[] ne = ne

洛谷刷题时间处理


题目https://www.luogu.com.cn/problem/P8665 输入处理: sc.nextInt() 读取测试用例数量 t。 sc.nextLine() 读取并丢弃剩余的换行符,避免影响后续输入。

MySQL

Java 

核心模块 存储引擎 主要是它的存储引擎,存储引擎是什么呢?就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称

🔍 死锁诊断方法大揭秘!💡

Java 

死锁有时候很隐蔽,可能只在特定条件下触发,所以排查死锁是个技术活 🕵️‍♂️。这里介绍几种超实用的方法,帮你快速找到并解决死锁问题 🚀。 🛠 方法 1:使用 jstack(最常用) jstack 是 Java 自带的工具,可以直接查看线程堆栈,快速发现死锁!🔎 jps -l jstack -

多线程

Java 

线程 线程和进程 进程:正在运行程序的实例 线程:进程中的执行单元,CPU调度的基本单位 并行和并发 并行:同一时间动手做多件事情的能力 并发:同一时间应对多件事情的能力 创建方式 继承Thread类

抽奖项目的加锁流程

项目 

加锁是为了解决高并发下的库存竞争问题,确保不会出现超卖情况。 整个是在校验完活动信息之后去,再实现库存扣减 整个setnx获取分布式锁的流程: 获取抽奖活动库存的KEY 使用Redis的incr命令原子性地扣减库存

JVM

Java 

类加载器 类的加载过程:加载 -> 连接 -> 初始化 连接过程:验证 -> 准备 -> 解析 加载过程:获取类的二进制字节流 -> 转换字节流的静态存储结构为运行时数据结构 -> 内存中生成一个class对象,作为数据的访问入口 作用:动态加载 Java 类的字节码( .class 文件)到 JV

抽奖策略中的几种算法

项目 

概率分配 单体概率 奖品抽空后,其他奖品概率保持不变,抽到空的就是没中奖了, 哈希表存储概率分布 随机数索引获取结果 整体概率 当某个奖品抽空后,剩余奖品概率按原比例重新分配。A(20%)抽空后,B(30%)和C(50%)变为B(37.5%)和C(62.5%) 排除不可抽奖的奖品(即库存为0的奖品)

滑动分布式锁处理秒杀

项目 

主要是去解决 高并发抽奖场景下的库存扣减问题,核心思路是:用Redis分布式锁替代数据库行锁,通过细粒度锁设计提升并发能力。 原先用数据库用数据库行锁扣库存(就是SQL里加SELECT ... FOR UPDATE)