- 博客(97)
- 收藏
- 关注
原创 Java锁
公平锁,非公平锁,可重入锁,递归锁,自旋锁(共享锁)读锁,(独占锁)写锁,互斥锁独占式:只有一个线程能执行,具体的 Java 实现有 ReentrantLock。共享式:多个线程可同时执行,具体的 Java 实现有 Semaphore和CountDownLatch。手写一个自旋锁。
2023-05-05 10:20:24 388
原创 CountDownLatch和CyclicBarrier和Semaphore
JUC包下,利用它可以实现类似计数器的功能,比如有一个任务A,它需要等到其他几个任务执行完毕后才能执行。争车位,通过acquire()获取一个许可,release()释放一个许可。countdownlanch是减到0,这个是加法,让一组线程等待至某个状态之后再全部同时执行。等待至barrier状态再全部同时执行。
2023-05-05 10:19:16 89
原创 redis(四)实战篇
如何手写redis客户端知道结构set100万数据只需要3秒钟,如何做到‘pipeline,批量情况才使用。实时性要求不高的场景使用pipeline两行代码调用分布式锁是要实时一致性还是最终一致性不更新数据,先删除再新增才快。延时时间根据业务来设置,延时双删解决先删缓存,再删数据库把key操作了多少次记录下来。放到代理层,监听,然后统计。但是会影响性能服务端,ELK有个packetbeat,抓包,抓到redis命令数据,然后发现热点数据缓存雪崩:大量热点数据同时过期,(大家过期时间一样,所以
2022-06-15 15:41:20 79
原创 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 119
原创 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 694
原创 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 272
原创 幂等性解决方案
幂等性解决方案1.防重表数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据(比如订单表对订单号进行唯一索引,所有重复提交可能产生同一个订单号的都会被拆除。当然,订单号要按你自己的设定走,一般订单号设计会是时间戳加迭代。那么如果是这样,创建仍然不能保证幂等,具体根据业务需求来判定建立的唯一索引位置)2.token令牌机制分为两个阶段,获取token和使用token。每次接口请求前先获取一个token,然后再下次请求的时候在请求的header体中加上这个token,后台进行验证,如果验证通过删除
2020-12-22 01:35:58 372 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 482
原创 IO流
spring5底层nettyzookeeper底层也是nettydubbo的多协议支持也是用的netty(RPC)有可能成为架构师的你打下基础Netty能帮我们解决什么问题框架是为了解决开发,netty就是框架,封装io操作。io加多线程解决实际复杂业务为什么要封装io操作java中io的演化之路阻塞和非阻塞BIO 同步阻塞NIO 同步非阻塞(线程池),多路复用AIO 异步非阻塞(事件驱动,回调)不断提升IO操作性能出现IO操作框架,降低繁杂操作,关注点转移到业务功能实现
2020-11-04 13:29:50 279
原创 序列化和反序列化
通信涉及到对象传输,涉及到序列化和反序列化远程传输,对象存储实现SerializableObjectInputStream转化成对象流,序列化进行传输uuid保证序列化和反序列化的id是一样的1.什么是序列化?•序列化:序列化是将对象转化为字节流。•反序列化:反序列化是将字节流转化为对象。2.序列化的用途?•序列化可以将对象的字节序列持久化-保存在内存、文件、数据库中。•在网络上传送对象的字节序列。•RMI(远程方法调用)3.序列化和反序列化•序列化:java.io.ObjectO
2020-11-03 10:39:41 116
原创 通信协议
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 239 1
原创 线程池实现原理
优点线程池,限流,控制线程数降低频繁创建和销毁线程性能开销任务响应速度更快java中提供的线程池jdk中提供了一个Executors源码ThreadPoolExecutor阿里要求使用这个来创建线程池。核心还是ThreadPoolExecutor了解更充分,可以更好控制资源线程池大小设置取决于硬件和软件cpu核心数,线程执行情况参数如下:keepAliveTime怎么去监控线程进行回收,超时后会回收线程池实现原理ctl 高三位代表当前的线程状态,低29位代表当前的线程
2020-09-14 08:01:37 98
原创 并发工具基本原理Condition
Condition的使用及原理在synchronized里面是wait/notify在condition里面是await/signalAQS里面的方法condition状态-2,封装成节点。该节点既是firstWaiter,也是lastWaiter,后续有节点加入,nextWaiter指向下个节点调用wait阻塞时候要释放锁,释放锁fullyRelease,重入次数释放后会唤醒线程判断是否在同步队列中,如果不在同步队列中,说明当前没有被唤醒只有aqs队列中才存在prev和aqs关系
2020-09-12 08:52:56 72
原创 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 779
原创 volatile关键字可见性问题
Volatile关键字保证共享变量可见性多个线程,读取和写,读取线程不能及时读取到改变的值实现跨线程可见性,使用volatile关键字指令lock,在修改变量属性时候加lock,如果不加volatile关键字,这个lock指令是不存在的,这就是区别,多个汇编指令lock,可见性到底是什么?硬件层面最核心组件,cpu,内存,磁盘,速度差异,绝大部分程序计算都有依靠,最大化cpu资源1.cpu增加高速缓存2.引入线程,进程3.指令优化,指令重排序主内存和cpu之间加入cpu高速缓存,.
2020-09-07 10:13:30 526
原创 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 198
原创 Redis(一)基础篇
数据放入内存中,提升效率。并有持久化功能为什么要把数据库放入内存加快吞吐量,读取快redis丰富的数据类型,分布式,持久化,内存淘汰,过期策略,主从复制,哨兵机制redis几种数据类型有八种,最常用的StringString存储类型,int,float,stringsetnx只有key不存在才能设置成功,可以用做分布式锁expire设置过期时间提供递增递减操作批量获取,mget追加 appendembstr连续存储,编码只读,只要修改,会转化成raw再进行修改,即使没到44
2020-08-24 15:46:49 88
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人