- 博客(19)
- 收藏
- 关注
原创 Java 实现 跳表skiplist
文章目录定义节点类变量插入实现查找删除实现测试代码与结果完整代码地址github关于跳表的定义与用途,已经有很多不错的资料了,此篇文章主要是分享记录下Java实现定义节点@Data private static class SkipListNode { private int value = -1; // 节点的前一个节点 private SkipListNode backward; // 节点的下一个节点数组
2021-10-24 21:23:24 178
原创 限流算法-你了解多少
文章目录常见限流算法固定窗口滑动窗口漏斗算法令牌桶滑动日志限流总结分布式限流常见限流算法固定窗口滑动窗口漏斗算法令牌桶滑动日志分布式限流固定窗口固定窗口限流算法,是维护一个时间窗口和一个计数器,在这个时间窗口内,请求数达到一定的限制后,则不再接受请求,若检测到超过窗口时间,则将计数器置为0具体实现代码如下public class FixWindow implements LimitingAlgorithm { // 窗口时间,单位为ms private long
2021-10-16 17:40:20 207
原创 Redis过期与缓存淘汰策略
文章目录redis过期策略为什么需要缓存淘汰策略缓存淘汰策略不进行数据淘汰的策略在设置了过期时间的数据进行淘汰在所有数据中进行淘汰redis过期策略redis 过期策略是:定期删除+惰性删除。所谓定期删除,指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。假设 redis 里放了 10w 个 key,都设置了过期时间,你每隔几百毫秒,就检查 10w 个 key,那 redis 基本上就死了,cpu 负载会很高的,消耗在你的检查过期 ke
2021-10-13 01:01:00 198 1
原创 线程私有-ThreadLocal
线程安全的方式不可变互斥线程私有ThreadLocalTheadLocal是通过线程私有变量来实现变量线程安全的一个类主要用途在进行对象跨层传递的时候,使用ThreadLocal可以避免多次传递,打破层次间的约束,典型的就是通过切面拦截将用户的登陆信息存储在ThreadLocal中,在后续的调用层里可以直接通过ThreadLocal获取用户信息线程间数据隔离,这个看具体业务场景,需要进行哪些数据隔离,比较典型的有连接池,各个线程有自己的变量实现原理三个关键类Thread.cl
2021-10-12 00:41:57 1694
翻译 深入理解Java虚拟机
文章目录Java 运行时数据区域程序计数器Java 虚拟机栈本地方法栈堆方法区运行时常量池直接内存Java对象的创建对象的内存布局对象的访问定位垃圾收集判断一个对象是否可被回收引用类型垃圾收集算法垃圾收集器内存分配与回收策略Minor GC和Full GC内存分配策略Full GC 的触发条件类加载机制类初始化时机类与类加载器类加载器分类双亲委派模型Java内存模型与线程内存间的交互操作volatileJava 内存模型特性happen before 先行发生原则Java 与 线程线程的实现Java 线程的
2021-10-10 16:57:33 152
原创 手撕三种分布式锁
为什么需要分布式锁锁的作用就是多个线程或者进程对同一份资源进行修改时,保证资源是被正确地修改,例如多个线程同时对一个数字加一,由于读取、修改、赋值,不一定是一个原子操作,需要锁来保证这一个过程的原子性分布式锁就是保证多个应用或进程对同一份资源进行操作时,结果的正确性分布式锁常见解决方案分布式锁需要具备的几个条件:互斥(必须):同一时刻,分布式部署的应用中,同一个方法/资源只能被一台机器上的一个线程占用锁失效保护(必须):出现客户端断电等异常情况,锁仍然能被其它客户端获取,防止死锁可重入(可选
2021-09-20 10:18:01 729
原创 SpringCloud (一) SpringCloud环境搭建以及使用
demo代码地址https://github.com/qinkuan/springcloudtest目录demo代码地址https://github.com/qinkuan/springcloudtest什么是SpringCloudSpringCloud中常用组件及作用Maven环境初步搭建Eruaka的使用Openfeign的使用Hystrix的使用服务降级服务熔断Hystrix- dashboard的使用应用暴露运行信息新建Hystrix Dash
2021-09-13 00:21:09 526
原创 (二) schema设计
schema设计设计中的常见陷阱范式和反范式三范式第一范式第二范式第三范式范式化的优点和缺点优点缺点反范式化的优点和缺点优点缺点混用范式化和反范式化设计中的常见陷阱太多的列:MySQL的存储引擎API工作时需要在服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列。从行缓冲中将编码过的列转成行数据结构的操作代价是非常高的。太多的关联:过多的关联会占用较多的CPU范式和反范式三范式第一范式每一列的属性都是不可再分的属性值,确保每一列的原子性符合第一范式
2021-08-17 23:07:32 396
原创 (一) Mysql数据类型
mysql数据类型数据类型的选择整数类型实数类型字符串类型BLOB和TEXT类型日期和时间类型datetimeTIMESTAMP标识符数据类型的选择更小的通常更好简单就好尽量避免NULL整数类型tinyint 占空间8位smallint 占空间16位mediumint 占空间24位int 占空间32位bigint 占空间64位它们可以储存值的范围为-2n-1 ~ 2n-1-1实数类型float 4个字节double 8个字节decimal decimal(18,9),
2021-08-15 22:03:38 97
原创 集合系列(三) LinkedList
文章目录类属性构造方法常用方法我们先来列举一下常用方法接下来我们看一下内部关键方法LinkedLIst 是一个底层为双端链表的数据结构,可以当队列,栈,列表使用,特点是类public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{}我们从这个类的继承
2021-08-01 19:02:03 101
原创 集合系列(二) Vector与Stack
Vectorvector是一个同步线程安全的集合,底层是数组,实现同步的方式是对底层数组的操作方法添加synchronize关键字,因此性能会较差,整体实现跟ArrayList差不多// 诸如此类public synchronized boolean add(E e) {}Stack顾名思义,是个栈,后进先出,继承自Vector,所以线程安全,效率较低,可以用线程不安全的LinkedList替代public class Stack<E> extends Vector<E
2021-07-28 23:14:51 319
原创 如何设计一个简易的工单系统
需求背景先来看看业务整体结构图由于当前所在公司是做保险相关业务的,需要对接很多公司,下单的过程中,必须将数据成功传输到保险公司并得到返回才算成功,在这个交互的过程中,很容易因为保险公司系统处于升级,或者过于繁忙状态,或者其他原因,导致我们下单失败,所以我们需要一个系统来对这些承包失败的订单继续处理,重新承保或者退款。另外还有一些其他需要人工介入的操作,我们也需要将其视为一个工单来处理。以单个工单任务为例以承包失败为例流程与状态确定从业务流程可以看出,等待人工介入,是一个持续的过程,因此我们.
2021-07-26 16:19:56 2800 1
原创 集合系列(一) ArrayList
文章目录类属性构造方法常用方法类public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable支持随机访问支持克隆支持序列化属性// 默认容量 用于初始化时默认的容量大小private static final int DEFAULT_CAPACITY = 10;/
2021-07-17 18:23:04 84
翻译 使用JAVA NIO 的内存映射进行大文件的读写
public class LargeMappedFiles { static int length = 0x8FFFFFF; //128MB public static void main(String[] args) throws Exception{ MappedByteBuffer out = new RandomAccessFile("test.dat"...
2020-03-10 11:32:28 565
原创 postgresql生成自增序列
postsql 生成自动增长字段CREATE SEQUENCE test_c_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; alter table tablename alter column columnname set default nextval(...
2020-03-10 11:31:16 602
原创 Linux 下的kafka 安装踩过的坑
安装Kafka需要的软件:1、JDK2、zookeeper3、kafka这三个东西可以根据网上的资料来进行安装和配置。过程中碰到这些坑1、远程服务器,例如阿里云,记得在控制台开启端口准入和准出2、 ./kafka-server-start.sh -daemon ../config/server.properties ,运行kafka时,如果不想断开远程连接后,kafk...
2020-03-10 11:27:37 705
原创 Java网络编程(三) 堆外内存DirectByteBuffer
DirectByteBuffer堆外内存(DirectByteBuffer),JVM有自己的内存模型,DirectByteBuffer是分配在非JVM内存中的内存。下面我们带着三个问题去探讨:1、堆外内存的作用是什么2、堆外内存是如何分配与回收的,与JVM有什么关系3、堆外内存使用原因以及会...
2019-12-12 20:25:48 367
原创 Java网络编程(二) NIO-HeapBuffer
NIO-HeapBuffer 对于网络编程来说,缓冲区Buffer是数据的容器,缓冲区的好坏会直接影响到整个传输的性能,Java中的Buffer是NIO下的一个抽象类,其常用子类有ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、Floa...
2019-12-11 19:36:17 191
原创 Java网络编程(一) Socket与BIO
JavaSocket编程基础1、BIO的基本模型图上图描述了BIOSocket通信时的基本结构2、Socket通信基本示例服务端代码:public class BioServer { public static void main(String[] args) { in...
2019-12-11 16:45:19 424
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人