自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 收藏
  • 关注

原创 分布式id解决方法--雪花算法

雪花算法

2023-05-12 15:32:49 1666

原创 Redis实现分布式锁

redis,redisson

2023-05-11 11:08:34 780

原创 ThreadLocal底层源码解析

ThreadLocal底层源码解析

2023-05-10 14:41:25 737

原创 AQS底层源码解析

AQS底层源码解析

2023-05-09 15:10:02 550

原创 Java锁

公平锁,非公平锁,可重入锁,递归锁,自旋锁(共享锁)读锁,(独占锁)写锁,互斥锁独占式:只有一个线程能执行,具体的 Java 实现有 ReentrantLock。共享式:多个线程可同时执行,具体的 Java 实现有 Semaphore和CountDownLatch。手写一个自旋锁。

2023-05-05 10:20:24 375

原创 CountDownLatch和CyclicBarrier和Semaphore

JUC包下,利用它可以实现类似计数器的功能,比如有一个任务A,它需要等到其他几个任务执行完毕后才能执行。争车位,通过acquire()获取一个许可,release()释放一个许可。countdownlanch是减到0,这个是加法,让一组线程等待至某个状态之后再全部同时执行。等待至barrier状态再全部同时执行。

2023-05-05 10:19:16 44

原创 ConcurrentHashMap底层源码解析

ConcurrentHashMap

2023-05-04 17:21:23 593

原创 HashMap底层源码解析及红黑树分析

HashMap

2023-04-28 09:52:31 951

原创 HashSet和CopyOnWriteArraySet

HashSet和CopyOnWriteArraySet

2023-04-26 16:19:07 47

原创 ArrayList和CopyOnWriteArrayList

ArrayList和CopyOnWriteArrayList

2023-04-26 15:56:58 346

原创 Java设计模式(十二)模板方法模式

模版方法模式

2023-04-06 14:21:30 287

原创 Java设计模式(十一)代理模式

代理模式

2023-04-06 09:22:59 297

原创 Java设计模式(十)享元模式

享元模式

2023-04-04 16:19:13 58

原创 Java设计模式(九)外观模式

外观模式

2023-04-04 16:00:45 404

原创 Java设计模式(八)组合模式

组合模式

2023-04-04 15:48:34 50

原创 Java设计模式(七)装饰器模式

装饰器模式

2023-04-04 15:03:12 47

原创 Java设计模式(六)桥接模式

桥接模式

2023-04-04 14:20:38 258

原创 Java设计模式(五)适配器模式

适配器模式

2023-04-04 11:03:07 305

原创 Java设计模式(四)建造者模式

建造者模式

2023-04-04 10:04:20 44

原创 Java设计模式(三)原型模式

原型模式

2023-04-04 09:42:22 464

原创 java设计模式(二)工厂模式

工厂模式

2023-04-03 16:52:39 201

原创 Java设计模式(一)单例模式

单例模式

2023-04-03 14:29:40 301

原创 JVM垃圾回收之GCRoots可达性分析

JVM之GCRoots

2023-03-10 09:50:48 734

原创 docker安装RabbitMQ

docker安装运行rabbitmq命令

2022-07-06 16:10:51 220

原创 redis(四)实战篇

如何手写redis客户端知道结构set100万数据只需要3秒钟,如何做到‘pipeline,批量情况才使用。实时性要求不高的场景使用pipeline两行代码调用分布式锁是要实时一致性还是最终一致性不更新数据,先删除再新增才快。延时时间根据业务来设置,延时双删解决先删缓存,再删数据库把key操作了多少次记录下来。放到代理层,监听,然后统计。但是会影响性能服务端,ELK有个packetbeat,抓包,抓到redis命令数据,然后发现热点数据缓存雪崩:大量热点数据同时过期,(大家过期时间一样,所以

2022-06-15 15:41:20 67

原创 redis(三)分布式篇

上篇重点持久化持久化机制rdb(记录快照)配置多少秒中多少key被修改,aof(记录操作命令)子进程fork会快照,不会阻塞,所以rdb快哨兵模式,监控,自动选取主节点哨兵发送命令,等待redis响应,监控多个redis哨兵投票(算法),进行故障转移,切换成功后,发布订阅配置哨兵配置文件sentinel monitor myredis 127.0.0.1 6379 11代表主机宕机开始投票客户端配置哨兵ip和端口,不再配置redis集群的了。通过30000响应时间判断是否响应,没有响应

2022-06-15 09:24:26 102

原创 java8新特性stream便利求和

List commonList;// 取字段string转int构建新列表List collect = commonList.stream().map(dto -> Integer.valueOf(dto.getCell6())).collect(Collectors.toList());// reduce求和Optional reduce = collect.stream().reduce(Integer::sum);Integer total = reduce.get();...

2021-04-30 10:22:00 679

原创 Java 测试URL地址是否能正常连接

public static int testWsdlConnection(String address) throws Exception { int status = 404; try { URL urlObj = new URL(address); HttpURLConnection oc = (HttpURLConnection) urlObj.openConnection(); oc.setUseCaches(false); oc.setConnectTimeout(

2021-04-30 10:20:17 237

原创 幂等性解决方案

幂等性解决方案1.防重表数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据(比如订单表对订单号进行唯一索引,所有重复提交可能产生同一个订单号的都会被拆除。当然,订单号要按你自己的设定走,一般订单号设计会是时间戳加迭代。那么如果是这样,创建仍然不能保证幂等,具体根据业务需求来判定建立的唯一索引位置)2.token令牌机制分为两个阶段,获取token和使用token。每次接口请求前先获取一个token,然后再下次请求的时候在请求的header体中加上这个token,后台进行验证,如果验证通过删除

2020-12-22 01:35:58 323 1

原创 Java基础

1.String类是否可以被继承?不能,String类有final修饰符,而final修饰的类是不能被继承的String str=”a”;其实和String str=new String(“a”)还是有差异的。public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString...

2020-11-09 16:47:27 454

原创 Netty

为什么netty高性能比传统的io性能提升8倍Netty核心组件之Channel启动

2020-11-04 16:22:25 47

原创 IO流

spring5底层nettyzookeeper底层也是nettydubbo的多协议支持也是用的netty(RPC)有可能成为架构师的你打下基础Netty能帮我们解决什么问题框架是为了解决开发,netty就是框架,封装io操作。io加多线程解决实际复杂业务为什么要封装io操作java中io的演化之路阻塞和非阻塞BIO 同步阻塞NIO 同步非阻塞(线程池),多路复用AIO 异步非阻塞(事件驱动,回调)不断提升IO操作性能出现IO操作框架,降低繁杂操作,关注点转移到业务功能实现

2020-11-04 13:29:50 245

原创 序列化和反序列化

通信涉及到对象传输,涉及到序列化和反序列化远程传输,对象存储实现SerializableObjectInputStream转化成对象流,序列化进行传输uuid保证序列化和反序列化的id是一样的1.什么是序列化?•序列化:序列化是将对象转化为字节流。•反序列化:反序列化是将字节流转化为对象。2.序列化的用途?•序列化可以将对象的字节序列持久化-保存在内存、文件、数据库中。•在网络上传送对象的字节序列。•RMI(远程方法调用)3.序列化和反序列化•序列化:java.io.ObjectO

2020-11-03 10:39:41 101

原创 通信协议

http rpc一个http协议的通信流程通信协议TCP/UDPUDP是User Datagram Protocol的简称,称为用户数据报协议,TCP是Transmission Control Protocol的简称,称为传输控制协议。使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输http是应用层协议tcp属于传输层协议OSI七层网络模型应用

2020-10-30 14:39:07 184 1

原创 线程池实现原理

优点线程池,限流,控制线程数降低频繁创建和销毁线程性能开销任务响应速度更快java中提供的线程池jdk中提供了一个Executors源码ThreadPoolExecutor阿里要求使用这个来创建线程池。核心还是ThreadPoolExecutor了解更充分,可以更好控制资源线程池大小设置取决于硬件和软件cpu核心数,线程执行情况参数如下:keepAliveTime怎么去监控线程进行回收,超时后会回收线程池实现原理ctl 高三位代表当前的线程状态,低29位代表当前的线程

2020-09-14 08:01:37 71

原创 并发工具基本原理Condition

Condition的使用及原理在synchronized里面是wait/notify在condition里面是await/signalAQS里面的方法condition状态-2,封装成节点。该节点既是firstWaiter,也是lastWaiter,后续有节点加入,nextWaiter指向下个节点调用wait阻塞时候要释放锁,释放锁fullyRelease,重入次数释放后会唤醒线程判断是否在同步队列中,如果不在同步队列中,说明当前没有被唤醒只有aqs队列中才存在prev和aqs关系

2020-09-12 08:52:56 60

原创 Lock基本使用及原理分析

JUC并发工具包java.util.concurrentLock重入锁,记录获得锁的次数ReentrantLock实现LockReentrantLock原理AQS(同步工具)实现线程同步,同步组件AQS基本实现.lock()去获取锁原理。表示当前线程获取锁成功非公平锁允许插队CASjvm层面实现原子操作。实现原子性,和内存中值相比(state和expect相比较,相等update,cas成功了),将0变为1,说明线程获取锁成功,返回boolean值true,实现锁的获得,乐

2020-09-07 17:16:18 731

原创 volatile关键字可见性问题

Volatile关键字保证共享变量可见性多个线程,读取和写,读取线程不能及时读取到改变的值实现跨线程可见性,使用volatile关键字指令lock,在修改变量属性时候加lock,如果不加volatile关键字,这个lock指令是不存在的,这就是区别,多个汇编指令lock,可见性到底是什么?硬件层面最核心组件,cpu,内存,磁盘,速度差异,绝大部分程序计算都有依靠,最大化cpu资源1.cpu增加高速缓存2.引入线程,进程3.指令优化,指令重排序主内存和cpu之间加入cpu高速缓存,.

2020-09-07 10:13:30 475

原创 Redis(二)原理

Java中操作使用jedisRedis高级特性,发布订阅、事务、Lua脚本底层工作原理,单线程工作机制、内存回收、持久化发布订阅模式publish subscribeunsubscribe这个模式了解一下,专业还是用mq的Redis事务multi开启事务,exec执行事务,discard取消事务。watch监视变化Lua脚本c语言编写的,为什么用Lua?好处,1.多个命令一次发送执行,2.原子性3.复杂命令放到文件写入文件中通过ip访问次数限制Redis为什么这

2020-08-25 16:19:01 182

原创 Redis(一)基础篇

数据放入内存中,提升效率。并有持久化功能为什么要把数据库放入内存加快吞吐量,读取快redis丰富的数据类型,分布式,持久化,内存淘汰,过期策略,主从复制,哨兵机制redis几种数据类型有八种,最常用的StringString存储类型,int,float,stringsetnx只有key不存在才能设置成功,可以用做分布式锁expire设置过期时间提供递增递减操作批量获取,mget追加 appendembstr连续存储,编码只读,只要修改,会转化成raw再进行修改,即使没到44

2020-08-24 15:46:49 80

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除