![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后端
文章平均质量分 62
成长之旅
我想带你见证自己的成长之旅,沿途可能有美丽的风景,也可能有完颜炯奇,这正是这趟旅行的美丽之处。
展开
-
分享一种实用redis原子锁的方式
实用redis 分布式锁原创 2023-03-01 16:05:19 · 733 阅读 · 0 评论 -
集群方式下的java Redis锁 lua脚本
redis集群方式原子锁,lua脚本原创 2023-03-01 15:53:13 · 539 阅读 · 0 评论 -
.p12 证书过期时间查询
证书过期时间原创 2023-01-09 15:25:24 · 2435 阅读 · 0 评论 -
如何不落地文件使用压缩流ZipOutputStream的一些操作
Java 文件压缩方面的知识原创 2022-07-08 14:08:41 · 1652 阅读 · 0 评论 -
有趣的链式调用
今天在公司接收一个其他人做的项目,发现一个有趣的链式调用。先看下这个链的chou'xianpublic abstract class AbstractHandler { protected String uuid; protected String code; protected String logMessagePrefix; protected String logMessageFormat = "[%s]-[%s-%s]-[接口%s]-[%s]--原创 2022-03-28 09:47:22 · 177 阅读 · 0 评论 -
MySql行级锁的一些实用小思考
mysql的引擎是InnoDB你有没有遇到过这种场景, 你有一个收款表, 表里边有一个余额字段 , 然后 这个余额字段 频繁的update,我们假设很多人往你余额里边充钱, 当然也有很多人在你这里取钱,也就是说这行余额不断的加减运算,不断的更新。那么 高并发下 会锁表 是不是会非常慢(你这一行属于是典型的热点行数据) 那么我们怎么提高 并发能力呢。先说一个比较好的办法,就是 你把这个余额 分成好几行,然后 让每个往里存钱的 或者取钱的事务 随机访问 余额行就可以,这样就能提高并发能力, 比较好的做.原创 2022-03-04 14:52:25 · 567 阅读 · 0 评论 -
数据库建立索引要考虑回表问题
这个文章我们略过很复杂的技术细节,直接告诉你怎么用,如果你有兴趣可以自己查下资料学习。毕竟知识只有自己总结过的才是自己的。注:我们讨论的是你的数据库引擎是InnoDB什么是回表:看下边的sql,其中表user 且name 建立索引select * from user where name='张三';这条sql 语句因为name 建立了 索引,索叶子节点是保存的主键id(你可以这样理解就是索引下边挂着注主键),然后 拿到主键id之后 在查询user 所有信息。注意这里 拿索引下边的原创 2022-03-03 16:35:03 · 520 阅读 · 0 评论 -
关于流的关闭方式自动方式写法
大家先看下这个方法 try catch 后边final 还要 里边继续try catch 关闭流:public static byte[] obj2byte(Object obj) { if (obj == null) return null; byte[] ret = null; ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream out = null; tr.原创 2022-02-22 10:23:57 · 850 阅读 · 1 评论 -
最新的XXL_JOB正确使用
springboot 整合xxljob 首先你需要启动一个xxl_job的管理中心 就这这个页面。一般公司都会给你配置好你的项目如何整合:在spring boot的配置文件中加上如下配置,注意 1:admin.addresses 就是你xxljob的管理页面地址。2: 下边这个端口号 自己写一个9097,这个端口号就是 你执行器的端口号,一会要配置到管理页面上 zhxxl: job: admin: addresses: http://localhost:8.原创 2022-01-05 15:48:07 · 4134 阅读 · 0 评论 -
注意Mybatis-Plus IN操作数组的时候不能使用基本数据类型。
看下这个操作 如果你 status 接收到的是一个int[]数组 ,Java 基本数据类型你实际上是查不到数据的public List<Test> queryByOrderNoAndStatus(String orderNo, int... status) { wrapper.eq("order_no", orderNo).in(status != null, "status", status); List<Test> testList= mapper.sele.原创 2021-12-09 19:36:18 · 732 阅读 · 1 评论 -
接口隔离原则的设计
我们在做java 开发中,要做到单一职责原则,也就是我不必要的依赖不需要引入。我们举个例子有一个类Modem, 有以下四个方法,但是如何我们有没有办法做到,一部分人调用能看到一部分方法。public class Modem{public void dial(String pno) {}public void hangup() {}public void send(char c) {}public void recv() {}}接口隔离设计:1.增加接口Connectio原创 2021-10-26 15:56:26 · 102 阅读 · 0 评论 -
工厂枚举设计模式
工厂设计模式我们制单,但是我在开发中遇到一位同事他用的这种方式挺有意思。废话不多说直接上代码。以下以FTP文件操作为demo定义枚举类@AllArgsConstructor@Getterpublic enum FileTypeEnum { UNKNOWN(0, "/upload/insurance", "", "未知"), A_FILE(1, "/upload/insurance/A_FILE", "A文件前缀", "A类文件"), B_FILE(2, "/u原创 2021-09-28 14:27:08 · 2246 阅读 · 0 评论 -
多线程下SimpleDateFormat为什么报错?
我们有一个工具类提供了一个简单的解析方法:代码如下class SimpleDateFormatTest implements Runnable { private static final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override public void run() { try { tr...原创 2021-09-06 11:09:31 · 487 阅读 · 0 评论 -
订单延时通知技术
(26条消息) redis 延时任务 看一篇成高手系列2_hjm4702192的专栏-CSDN博客_redis 延时任务转载 2021-09-03 15:29:22 · 142 阅读 · 0 评论 -
zookeeper实现分布式锁Demo
分布式锁的产生原因,单服务集群或者分布式开发的环境下,多个JVM无法进行锁操作。实现方式又Redis 或者zookeeper。实现原理:在zookeeper上创建临时节点,因为只有一个系统可以创建成功,创建不成功的话会报不存在的错误。当一个拿到锁得系统执行完之后,.close()方法。即关闭临时节点。其它线程可以创建即拿到锁。这个过程利用事件通知zookeeper的handleDataDeleted当节点删除时触发事件,可以用于通知其它线程拿锁。Redis和zk实现分布式锁的区别:Redis是n..原创 2021-07-13 10:12:12 · 222 阅读 · 0 评论 -
读写锁简单Dome
读写锁一般用于项目中清理缓存,下边就是一个小的Demo.当线程操作写方法时,读线程等待。publicclassCache {staticMap<String, Object> map= newHashMap<String, Object>();staticReentrantReadWriteLock rwl= newReentrantReadWriteLock();staticLock r= rwl.readLock();staticLock...原创 2021-07-09 11:34:58 · 109 阅读 · 0 评论 -
SpringBoot服务器Tomcat转换undertow服务器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId><-- 排除tomcat服务依赖 --> <exclusions> <exclusion> <groupId>org.spr.原创 2021-07-06 16:56:54 · 349 阅读 · 0 评论 -
ConcurrentHashMap1.7源码详细解读
1.首先看构造函数public ConcurrentHashMap() { this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL);}其中原创 2021-06-10 17:02:06 · 198 阅读 · 0 评论 -
SpringAOP的执行方式
SpringAOP 的整体涉及是递归方式 +责任链设计模式下面我们通过模拟Spring 源码方式 看下如何调用的/** * 调用链接口 */public interface MethodInterceptor { Object invoke(MethodInvocation invocation) throws Throwable;}/** * 前置通知接口 */public class MethodBeforeAdviceInterceptor implemen原创 2021-04-22 17:15:12 · 138 阅读 · 0 评论 -
SpringBean的全生命周期
SpringBean完整生命周期我们先执行一个测试,然后在分析源码/** * Bean 全生命周期 */@Componentpublic class JxdSpringBean implements BeanNameAware, BeanFactoryAware,InitializingBean,DisposableBean, ApplicationContextAware { public JxdSpringBean(){ System.out.println("1原创 2021-04-14 10:50:22 · 114 阅读 · 0 评论 -
SpringBean 三种初始化和销毁方法
当Bean在执行完构造函数的时候,可以默认执行 初始化和销毁的方法,即当SpringBean执行完构造方法后可以默认执行一个初始化方法,当销毁的时候可以执行一个销毁方法。上代码:方法一注解方式:@Bean(initMethod = "initMethod",destroyMethod = "destroyMethod")public User getUser() { return new User("jxd", 28);}看下我们的Userpublic class U原创 2021-04-11 11:36:51 · 236 阅读 · 0 评论 -
Spring 如何依据Linux或者Win环境注入不同的Bean
1.我们首先建一个JxdCondition 类 实现Condition 接口import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.env.Environment;import org.springframework.core.type.Annotate原创 2021-04-09 14:09:59 · 326 阅读 · 0 评论 -
访问者模式一种工厂模式升级版
工厂模式很多人都了解,但是如果工厂里边的类非车多20个以上这样代码会非车繁琐。下面我介绍一下访问者模式我们设想一个场景,对PDF,PPT, WORD文档进行 压缩功能或者提取功能。/** * 压缩 */public class Compressor implements Visitor { @Override public void visit(PPTFile pptFile) { System.out.println("Compressor PPT."原创 2021-02-19 14:31:48 · 123 阅读 · 0 评论 -
byte[]转换成压缩流
1.当我们拿到一个文件之后,我们会把它压缩然后压缩,然后读取流。这样中间会有很多次落地成文件很不方便。有一个简单的办法如下方法。别人拿到这个压缩后的byte[] 可以之间转换成zip的压缩文件。/** * 源流 转换成ZIP流 * * @param sourceData * @return byte[] */public byte[] getZipByte(byte[] sourceData, String name) { ByteArrayOutputStream bos =原创 2021-01-22 09:07:19 · 1449 阅读 · 0 评论 -
RabbitMQ-headers连接方式详解
RabbitMQ-headers 链接方式:他是一种交换机 通过 Key-value 匹配queues 。也是忽略routingKey的一种路由方式。一、首先看下这个图片: any: 只要在发布消息时携带的有一对键值对headers满足队列定义的多个参数arguments的其中一个就能匹配上,注意这里是键值对的完全匹配,只匹配到键了,值却不一样是不行的; all:在发布消息时携带的所有Entry必须和绑定在队列上的所有Entry完全匹配。all 也就是Q2所有的都key-value都原创 2020-11-18 15:32:00 · 2003 阅读 · 2 评论