架构
架构
qq_32300143
这个作者很懒,什么都没留下…
展开
-
rabbitmq实现分布式事务
代码理论参考链接https://blog.csdn.net/pastxu/article/details/124531593自我理解:生产端:通过建立一张消息表,消息表中的状态来实现数据是否发送到rabbitmq中,利用rabbitmq的消息确认机制更新消息发送状态,未发送成功的消息可以采用定时任务扫描重新发送这样保证生产端能闭环成功发送消息到rabbitmq消费端:同样利用rabbitmq的消息确认机制保证消息能够被消费,未正常消费的消息可以通过死信队列进行人工消费处理...原创 2022-06-08 18:42:55 · 261 阅读 · 1 评论 -
分布式锁的两种实现方式
1.基于redisson实现(本质redis)原理:SET my:lock 随机值 NX PX 30000 这个的NX的意思就是只有key不存在的时候才会设置成功,PX 30000的意思是30秒后锁自动释放。别人创建的时候如果发现已经有了就不能加锁了。 释放锁就是删除key,但是一般可以用lua脚本删除,判断value一样才删除 <dependency> <groupId>org.springframework.原创 2021-12-03 16:00:39 · 723 阅读 · 0 评论 -
字符串作为多线程的锁
1.有一种业务场景,多线程下处理大量数据字符串,我们希望相同的字符串只能同时被一个线程处理,这个时候就可以对字符串加锁,注意字符串要调用intern方法在JAVA虚拟机中,有运行时数据区,包含线程共享的:堆,方法区 和线程隔离的:程序计数器,Java虚拟机栈,本地方法栈.其中方法区包含一块取域,叫做常量池,因为String类型被用到的频率高,所以HotSpot将它放入了常量池.Intern()String.intern()是一个Native方法,它的作用是:如果字符常量池中已经包含一个等于此Str原创 2021-12-02 18:09:51 · 429 阅读 · 0 评论 -
基于双向链表实现LinkedList
package com.zl.jdk.hashmap;/** * @description: 双向链表 * @author:zhanglei * @createTime:2021/7/19 16:43 * @version:1.0 */public class ExtLinkedList<E> { //第一个元素 private Node first; //最后一个元素 private Node last; //链表大小 .原创 2021-10-27 13:45:08 · 124 阅读 · 0 评论 -
MySql组合索引
1.创建组合索引create index index_meterwarn_fuhe on t_iot_meter_warn(METERNO,TRIGNUM,WARNTYPECODE)2.查看索引使用情况explain select a.*from t_iot_meter_warn a where a.TRIGNUM = 22 and a.WARNTYPECODE = 01说明没有用到索引,以下几个个语句均用到:explain select a.*from t_iot_meter_wa原创 2021-07-07 15:09:15 · 4347 阅读 · 0 评论 -
jvm参数调优
-XX:+PrintGC 每次触发GC的时候打印相关日志-XX:+UseSerialGC串行回收-XX:+PrintGCDetails更详细的GC日志-Xms 堆初始值-Xmx 堆最大可用值-Xmn 新生代堆最大可用值-XX:SurvivorRatio用来设置新生代中eden空间和from/to空间的比例.-XX:NewRatio 配置新生代与老年代占比...原创 2021-07-07 15:02:17 · 77 阅读 · 0 评论 -
手写springIOC
springIOC主要是通过java实现,而容器主要就是一个ConcurrentHashMappackage com.zl.springIOC.utils;import com.zl.springIOC.ann.ExtResource;import com.zl.springIOC.ann.ExtService;import java.lang.reflect.Field;import java.util.List;import java.util.Map;import java.ut原创 2021-04-30 15:04:21 · 91 阅读 · 1 评论 -
spring嵌套事务问题
@Override public void addClassify(Classify classify) { classifyDao.insert(classify); addClassify2(classify); //int m = 1/0; } @Transactional public void addClassify2(Classify classify) { ...原创 2021-04-26 17:16:42 · 271 阅读 · 0 评论 -
netty5高级
netty服务器端package com.zl.netty.gaoji;import io.netty.bootstrap.ServerBootstrap;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.*;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.S.原创 2021-04-14 17:56:53 · 130 阅读 · 0 评论 -
netty入门及使用
Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。Netty是基于Java NIO client-server的网络应用框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议。Netty提供了一种新的方式来开发网络应用程序,这种新的方式使它很容易使用和具有很强的扩展性。Netty的内部实现是很复杂的,但是Netty提供了简单易用的API从网络处理代码中解耦业务逻辑。Netty是完全基于NIO实现的,所以整个Ne.原创 2021-04-12 17:24:36 · 153 阅读 · 0 评论 -
设计模式之代理模式
什么是代理?通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用处理,或调用后处理。既(AOP微实现),AOP核心技术面向切面编程。静态代理静态代理需要自己生成代理类public class XiaoMing implements Hose { @Override public void mai() { System.out.println("我是小明,我要买房啦!!!!haha "); }}class Proxy implements H...原创 2021-04-09 17:06:10 · 69 阅读 · 0 评论 -
设计模式之单例设计模式
单例设计模式单例保证一个对象JVM中只能有一个实例,常见单例 懒汉式、饿汉式什么是懒汉式,就是需要的才会去实例化,线程不安全。什么是饿汉式,就是当class文件被加载的时候,初始化,天生线程安全。package com.zl.design;/** * @author zhanglei * @description : 单例设计模式 * @date 2021/4/9$ 15:17$ * @return $ */public class SingletonDemo { ..原创 2021-04-09 15:47:35 · 47 阅读 · 0 评论 -
自定义注解实现基本ORM
主要实现思路,自定义注解+反射package com.zl.annotion;import jdk.nashorn.internal.runtime.logging.Logger;import java.lang.annotation.*;import java.lang.reflect.Field;/** * @author zhanglei * @description : 自定义注解实现简单ORM * @date 2021/4/9$ 10:48$ * @return $原创 2021-04-09 11:37:35 · 193 阅读 · 0 评论 -
java中的各种锁
悲观锁:悲观锁悲观的认为每一次操作都会造成更新丢失问题,在每次查询时加上排他锁。每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Select * from xxx for update; (这个for update就是在加锁,只能有一个连接操作该数据,其他的全部阻塞)乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会.原创 2021-04-08 17:09:11 · 74 阅读 · 0 评论 -
线程池原理
corePoolSize: 核心池的大小。 当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中maximumPoolSize: 线程池最大线程数,它表示在线程池中最多能创建多少个线程;keepAliveTime: 表示线程没有任务执行时最多保持多久时间会终止。unit: 参数keepAliveTime的时间单位,有7种取值,在TimeUnit类中有7种静态属性:Java通过Executors(jdk1.5并发包...原创 2021-04-08 11:25:00 · 50 阅读 · 0 评论 -
java利用BlockingQueue(可阻塞)模拟队列
package com.zl.thread;import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;/** * @author zhanglei * @description : * @date.原创 2021-04-07 14:29:47 · 88 阅读 · 0 评论 -
java并发包Semaphore的用法
Semaphore是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞。Semaphore可以用来构建一些对象池,资源池之类的,比如数据库连接池,我们也可以创建计数为1的Semaphore,将其作为一种类似互斥锁的机制,这也叫二元信号量,表示两种互斥状态。它的用法如下:availablePermits函数用来获取当前可用的资源数量wc.acquire(); //申请资源wc.release();// 释放资源原创 2021-04-06 11:49:22 · 89 阅读 · 0 评论 -
用MyEclipse自动生成hibernate映射文件和实体类
点击打开链接 https://www.cnblogs.com/klslb/p/6908447.html转载 2018-02-28 16:10:02 · 159 阅读 · 0 评论