学习中
文章平均质量分 54
绿皮船长
这个作者很懒,什么都没留下…
展开
-
AQS抽象队列同步器
抽象队列同步器原创 2023-02-28 19:36:56 · 445 阅读 · 1 评论 -
2023面试题目总结
一些常见面试题原创 2023-01-31 14:04:27 · 448 阅读 · 0 评论 -
记一个并发取号的bug
123原创 2023-01-11 15:23:39 · 135 阅读 · 0 评论 -
mybatis拦截器
mybatis拦截器原创 2022-09-23 13:12:18 · 1013 阅读 · 0 评论 -
分布式锁的使用
org.apache.commons.lang3;原创 2022-09-13 14:38:12 · 422 阅读 · 0 评论 -
关于mock第三方调用
123原创 2022-07-15 11:15:51 · 2117 阅读 · 0 评论 -
责任链设计模式
责任链设计模式原创 2022-07-13 14:48:57 · 129 阅读 · 0 评论 -
ZIP文件的导出
zip文件导出原创 2022-06-29 20:53:47 · 333 阅读 · 0 评论 -
利用注解进行文件导出
利用注解进行文件导出原创 2022-06-17 16:48:29 · 195 阅读 · 0 评论 -
利用InheritableThreadLocal进行子父线程参数传递
线程池包装类package com.example.git_lab_exc.service;import java.util.concurrent.ExecutorService;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;import javax.lang.model.e原创 2022-05-26 11:08:23 · 245 阅读 · 1 评论 -
利用Set和Map进行接口的策略模式
package com.example.git_lab_exc.service;import java.util.HashMap;import java.util.Map;import java.util.Set;import javax.annotation.PostConstruct;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Com.原创 2022-05-20 14:04:44 · 113 阅读 · 0 评论 -
记一次oom
紧急解决方式:加堆内存1.top -h -p -pid命令查看cpu占用较高的线程2.printf %x tid进行线程的进制转换,转成16进制,例如找到CPU负载高的线程pid 8627, 把这个数字转换成16进制,21B3(10进制转16进制,用linux命令: printf %x 8627)3.jstack pid 打印进程中所有线程的运行堆栈,拿线程的16进制编码进行检索,查看堆栈信息,结合代码进行分析。 jstack pid|grep 21B3...原创 2022-05-17 17:05:27 · 104 阅读 · 0 评论 -
线程池 线程工厂,拒绝策略代理类
线程工厂package com.example.git_lab_exc.service;import java.util.concurrent.ThreadFactory;import java.util.concurrent.atomic.AtomicInteger;import lombok.Data;/** * @auther lpc * @create 2022-05-12-9:51 */@Datapublic class MyThreadFactory implemen原创 2022-05-12 13:17:45 · 180 阅读 · 0 评论 -
hash算法与一致性hash算法
白话解析:一致性哈希算法 consistent hashing-朱双印博客原创 2022-05-10 14:46:15 · 123 阅读 · 0 评论 -
策略设计与事件监听器
Registry类实现监听器,泛型事件监听器触发事件-->放入Map中//Map存储k-v,v是接口写一个方法,通过一个Registry类操作这个Map通过key拿到对应的实现类具体:继承一个listener,泛型是一个事件当这个事件发生的时候,就会执行onApplicationEvent里的方法--> Map<String,Filler> map = contextRefreshedEvent.getApplicationContext().get原创 2022-05-05 14:38:51 · 227 阅读 · 0 评论 -
利用DelayQueue与Delayed 完成异步延时操作
@Test public void Juc() throws InterruptedException { System.out.println("马上输出"); DelayQueue<Delayed> delayeds = new DelayQueue<>(); new Thread(() -> { delayeds.offer(new MyDelayedTask("task1", 3...原创 2022-03-22 19:59:11 · 778 阅读 · 0 评论 -
kafka_任务发送流程_分区器过滤器_生产者吞吐量_丢数_幂等性_事务性消息
主线程中j经过操作,在内存中根据分区器生成多个DQuence,然后通过sander线程,等到批次数据达到16K的时候,就会来拉取数据。或者根据linger.ms的数据,按照时间来拉取。一般来说在生产环境之中这两个值会进行修改。接下来DQuence分区的数据要发往不同的kafka节点,以不同的节点为key,后面跟随对应请求,可以发送最多五个没有响应的请求,等到第一个请求得到答复,才会继续发送请求副本同步机制ask:0不需要反馈ask:1发送的数据leader收到就可,即使数据...原创 2022-03-21 19:49:56 · 1732 阅读 · 0 评论 -
Nginx_502
Nginx开启的前提下:Nginx 502就是后端对请求无法处理,查看监控后端几个API的负载均很低,当前请求的QPS远远低于服务的上限。一、(有可能是负载均衡问题导致服务器挂掉了)通过监控。查看QPS数量而且同一瞬间,多套独立部署的API均处理不过来的概率也比较低。我们简单做了个对比测试,分别对域名(请求走Nginx)与直接通过IP对内网一个API通过wrk进行小规模压测直接通过域名走Nginx对API进行压测的话,QPS远远小于预期,并且存在大量失败请求。基本断定问题出在Nginx原创 2022-03-21 09:49:23 · 4487 阅读 · 0 评论 -
分库分表,年份实现类<AviatorEvaluator>表达式,@Accessors
1.实现aware方法,会让这个application拿到全部的bean2.所有的service都实现了AbstractReport这个接口,所以map里的bean都是service(map<implName,AbstracReport>)3.项目启动会把所有bean放到serviceImpMap里4.找到对应的bean,都是调用最新的-->在一个年份配置表里 :(getServiceImpl())方法分表注解mapper...原创 2022-03-15 11:22:59 · 620 阅读 · 0 评论 -
Mysql的连接流程__缓存查询
从上图中我们可以看到,这些东西大致分为三部分,分别是:客户端、server层和存储引擎。1、Client层我们使用mysql的自带的命令行工具,我们的springboot使用jdbc链接我们的数据库,或者sqlyog等连接工具都归纳为mysql客户端(Client),主要用于发送执行sql语句的请求。(jdbc发送sql语句请求)2、Server层主要包括连接器、缓存查询、分析器、优化器、执行引擎等,涵盖mysql大部分功能以及所有内置函数(日期、数学和加密函数等),所有跨引擎的功能都在这...原创 2022-03-15 11:04:58 · 195 阅读 · 0 评论 -
mysql间隙锁
自增索引不断插入查询(并发)的时候,会有间隙锁。查询走索引,索引会锁住间隔的数据,要解决虚幻读问题(因此锁住),当一个事务需要查询后插入,多条事务就会形成死锁;具体原理:MYSQL(04)-间隙锁详解 - 简书解决:一:删除索引或者降低隔离级别二:从RR可重复读降低为RC读已提交...原创 2022-03-09 14:03:07 · 605 阅读 · 0 评论 -
volatile JMM CAS ABA 集合安全问题
1.collections的synclist方法2.vector类3.写时复制,读写分离思想:copyonwriterArrayList写时复制底层原创 2021-12-27 21:28:17 · 2145 阅读 · 0 评论 -
java限流
背景:高并发PV:PageView综合浏览量;QPS:每秒请求查询数量响应时间:服务器响应时间吞吐量:单位时间内处理请求的数高并发:1.物理角度(扩容) 扩容是目前效果最明显的增加并发量技巧之一(水平扩容)单体数量的增加,伴随着数据库的访问限制成为了瓶颈-->服务的拆分 2.提高接口并发能力(提高接口响应速度,缩短接口的响应时间)缓存(把数据...原创 2021-12-20 11:39:04 · 592 阅读 · 0 评论 -
Threadlocal
堆空间上的线程私有空间Spring中保证bean的线程安全事务:ThreadLocal中的Map,key是线程池value是connThreadLocal是一个壳子,真正的存储结构是ThreadLocal里有ThreadLocalMap这么个内部类而ThreadLocalMap的引用是在Thread上定义的ThreadLocal只是作为key,存储set到ThreadLocalMap的变量当然是线程私有的咯为什么不用Thread当做key?如果用Thread当做key,.原创 2021-12-19 18:54:57 · 302 阅读 · 0 评论 -
java分布式事务
不同的连接事务:数据库操作的最小单元分布式事务:跨越connect的事务CAP理论一致性:Consistency 集群的各个节点数据都是一致的,因此可以向任意节点读写数据,并且总是得到相同数据 可用性:Availability 可用性表示总是能够访问集群(读/写),即便集群中某个节点宕机了 分区容忍性:Partition toleranc 数据库之间网络连接,但是宕机了,变为分区依然可以进行数据库操作 1.一旦出现了分区的情况下,需要保证数据的一致性,就要牺牲.原创 2021-12-17 20:09:32 · 2781 阅读 · 0 评论 -
JAVA消息中间件RoketMQ
1.消息中间件是什么能够实现与平台无关的消息调用拥有失败重试机制2.2限流削峰3.模型消息具有topoic,并且也是按照topic进行存储原创 2021-12-15 11:50:27 · 3316 阅读 · 0 评论 -
分布式锁以及redis主从结构锁失效问题
前提:分布式请求分发在多个服务器上,利用redis进行分布式锁setnx请求设置过期时间,以及锁的值是uuid,执行完成之后删除锁但是问题是如果调用过程中出现卡顿,锁失效因此如果没有执行结束就给锁续命Redission框架的lock与unlock,底层lua脚本问题:当redis存在主从架构,加锁成功,执行逻辑此时redis挂掉,信息没有同步给集群,线程二访问到了新的主机,此时显示没有加锁又进行了操作,那么出现问题zookeeper集群与redis区别(cap原则)redis a原创 2021-12-14 19:06:18 · 3438 阅读 · 1 评论 -
项目三介绍
mall-parent-pom只有gateway使用了web其他不需要,因为服务间的调用dubbo不用http协议身份认证拦截器模块的api下提供者下提供接口实现类3.去网关层写控制器方法打开redis和zookeeper利用response返回数据(try-catch) response就像Basedata定义response接受请求自定义一个response对象继承requst类 ->封装对象,封装行为,参数校验...原创 2021-12-11 16:42:18 · 331 阅读 · 0 评论 -
微服务(四)Mapstruct_jwt_spi_API网关
1.2.3.注入对象4. 包扫描====与DO与DTO之间的属性映射@Mappings({@Mapping})list对象转换把方法改成传入list和返回list<dto>的方法(因为调用的是上面那个方法,所以不需要映射)====================1.接口有不同的实现方式2.动态替换与发现感觉没啥用;===API网关...原创 2021-12-10 19:37:41 · 562 阅读 · 0 评论 -
(三)微服务 dubbo
微服务架构进程级别的隔离API网关客户端 --> 后端应用CDN:Content Delivery Network 静态资源 ,内容分发网络对外揭露请求,对内路由Dubbo从一个运行的进程中调用另一个进程里的方法去这取得接口实现类Dubbo原理提供者启动spring容器容器中:1.实现了真正对外暴露的接口功能的对象 2.供外界调用的服...原创 2021-12-09 17:54:07 · 482 阅读 · 0 评论 -
分布式锁 java
redis 分布式锁服务治理线程进来获得锁,进行操作,线程二获得锁2,watch线程1(只会watch前一个节点),当1结束时进行操作;原创 2021-12-08 23:24:02 · 90 阅读 · 0 评论 -
微服务(一)_linux
/:根⽬录,所有的⽬录、⽂件、设备都在/之下,/就是Linux⽂件系统的组织者,也是最上级的领 导者。 /bin:bin 就是⼆进制(binary)英⽂缩写。在⼀般的系统当中,都可以在这个⽬录下找到linux常⽤的命令。系统所需要的那些命令位于此⽬录。 /boot:Linux的内核及引导系统程序所需要的⽂件⽬录。 /dev:dev 是设备(device)的英⽂缩写。(除了cpu与内存(主机)以外的)这个⽬录对所有的⽤户都⼗分重要。因为在这个⽬录中包含了所有linux系统中使⽤的外部设备。但...原创 2021-12-08 15:44:46 · 917 阅读 · 0 评论 -
(二)Nginx
与tomcat的对比nginx集成的情况Nginx不处理请求,只负责分发给代理的集群,由集群中的web应用处理请求1.正向代理2.反向代理与静态资源服务器3. Nginx的优势1. 高并发、高性能2. 扩展性好(模块化设计)3. 异步非阻塞的事件驱动模型4. 高可靠性(热部署、7*24多进程模型,一个master管理worker进程,挂掉后重启使用nginxNginx指令:在目标位置输入1.配置文件...原创 2021-12-08 11:51:30 · 689 阅读 · 0 评论 -
JAVA虚拟机(四)方法区
存储类信息,各个线程共享的内存区域,OOM问题:大量的jar包,比如tomcat部署的工程过多时会导致方法区溢出问题;大量动态反射类设置元空间的初始大小与最大可见方法区OOM方法区的运行时常量池中的Stringtable 字符串常量池的位置会发生变化类信息:全类名,接口,类的修饰符等等域信息,成员属性的信息(classloader加载到方法区)甚至抛出的异常也有异常表进行记录,最后都由classloader加载到方法区...原创 2021-12-08 10:06:22 · 82 阅读 · 0 评论 -
linux(二)jdk mysql tomcat配置
5.1 JDK环境搭建从oracle官⽹下载linux的jdk8,之后⽤winscp⼯具等将jdk8上传到linux机器上解压tar.gz到某个目录下sudo mkdir /usr/local/java cd /usr/local/java sudo tar -zxvf jdk-8u231-linux-x64.tar.gz sudo mv jdk1.8.0_231/ jdk配置JDK的环境变量1. 进入配置...原创 2021-12-07 22:57:35 · 124 阅读 · 0 评论 -
(一)linux
/:根⽬录,所有的⽬录、⽂件、设备都在/之下,/就是Linux⽂件系统的组织者,也是最上级的领 导者。 /bin:bin 就是⼆进制(binary)英⽂缩写。在⼀般的系统当中,都可以在这个⽬录下找到linux常⽤的命令。系统所需要的那些命令位于此⽬录。 /boot:Linux的内核及引导系统程序所需要的⽂件⽬录。 /dev:dev 是设备(device)的英⽂缩写。(除了cpu与内存(主机)以外的)这个⽬录对所有的⽤户都⼗分重要。因为在这个⽬录中包含了所有linux系统中使⽤的外部设备。但...原创 2021-12-07 22:47:55 · 944 阅读 · 0 评论 -
shiro组件
根据uri找到对应filter,通过代理来进行验证认证通过之后访问带锁的handler(授权filter)会遍历所有钥匙 ---> 授权的filter和handler方法绑操作:1.导入依赖2.shiro配置类实现realm(并且注册进容器)将这两个注入容器中的方法,放入容器之后,(配置类????)这容器类取出,设置进自己的realm(这样重写的类的方法,就会执行了)注册filter组件(...原创 2021-12-03 11:26:25 · 482 阅读 · 0 评论 -
TypeHandler(查询mysql表中的数组)
查询roleids(varchart),用integer数组 接收1.实现接口2.利用objeckmapper json转化(new一个)3.4.5.利用json 转换6.配置7.注解@MappedTypes(String[].class)@MappedJdbcTypes(JdbcType.VARCHAR)public class StringArrayHandler implements TypeHandler<String[...原创 2021-11-30 23:13:43 · 996 阅读 · 0 评论 -
MultipatFile 文件上传
原创 2021-11-30 21:45:18 · 246 阅读 · 0 评论 -
JAVA虚拟机(三)堆_空间分配,GC,TLAB(线程私有部分),对象逃逸分析
堆上的缓存区不是共享的对象逃逸:对象在方法块中出生与消亡:此时的对象没有在堆上出生堆空间结构堆空间分为新生代与老年代,永久代虽然属于堆空间,但是目前调优不能影响到它默认新生代与老年代的比例为1:2新生代内 伊甸园:幸存者0:1 = 8:1:1,但是在Visual VM中显示为6:1:1自适应内存分配策略:UseAdaptiveSizePolicy要想是8,需要显示的赋值为8几乎所有的对象都是在伊甸园中被创造,但是当伊甸园区满的时候有可能...原创 2021-11-27 23:22:47 · 238 阅读 · 0 评论