java
文章平均质量分 72
大角码
单手敲代码
展开
-
@AutoPipeline注解使用,自动生成责任链模板
在繁琐的业务流程处理中,通常采用面向过程的设计方法将流程拆分成N个步骤,每个步骤执行独立的逻辑。…}但是这样剥离仍然是不彻底的,修改其中一个步骤仍然可能影响其他步骤(同一个类修改,不符合开闭原则)。在这种场景下,有一种经典的设计模式-责任链模式,可以将这些子步骤封装成独立的handler,然后通过pipeline将其串联起来。总体来看,纯手动编写有以下问题:正确性:实现复杂度较高,短时间手工编写容易出错。原创 2022-09-28 11:44:08 · 506 阅读 · 1 评论 -
dubbo-admin支持spring-cloud-dubbo
支持spring-cloud-dubbo具体项目代码https://github.com/luoxiangxing/spring-cloud-dubbo-admin一、修改的具体类1、org.apache.dubbo.admin.service.RegistryServerSync引入spring-cloud-dubbo的类@Resourceprivate DubboServiceMetadataRepository dubboServiceMetadataRepository;@Res原创 2022-01-13 23:11:21 · 840 阅读 · 0 评论 -
MappedByteBuffer再RocketMq上的优化
最近在参考阿里的rocketMQ来优化我们自己的mq,发现一段有意思的代码:MappedFile.javapublic AppendMessageResult appendMessage(final MessageExtBrokerInner msg, final AppendMessageCallback cb) {/*** 奇怪的地方在这里/*ByteBuffer byteBuffer = writeBuffer != null ? writeBuffer.slice() : this.ma原创 2021-05-20 16:24:31 · 796 阅读 · 3 评论 -
阻塞与不阻塞队列、各种队列区别、阻塞队列常用方法
阻塞队列的使用BlockingQueue 队列常用的操作方法: 1.往队列中添加元素: add(), put(), offer() 2.从队列中取出或者删除元素: remove() element() peek() poll() take()每个方法的说明如下: offer()方法往队列添加元素如果队列已满直接返回false,队列未满则直接插入并返回true; add()方法是对offer()方法的简单封装.如果队列已满,抛出异常new IllegalStateExcept原创 2020-11-07 16:10:21 · 476 阅读 · 0 评论 -
JDk动态代理,代理接口
JDK代理,代理的是接口,那么笔者想一想,既然代理的是接口,那如果没有实现类怎么办,能不能代理。答案是可以的,Mybatis就是这样的。Mybatis使用JDK动态代理来实现Mapper接口,事先保存好Mapper接口,和接口声明的方法,返回值,参数类型,然后代理类的方法调用的时候使用MapperMethod这个事先放入方法缓存里的对象来真实调用功能。笔者极度简化了一下代码:被代理的接口:public interface Subject2 {String selectById();}这个接口转载 2020-06-12 16:43:45 · 386 阅读 · 1 评论 -
理解悲观锁乐观锁、同步锁、读锁、写锁
ava 锁分类Java 中的锁有很多,可以按照不同的功能、种类进行分类,下面是我对 Java 中一些常用锁的分类,包括一些基本的概述从线程是否需要对资源加锁可以分为悲观锁和乐观锁 从资源已被锁定,线程是否阻塞可以分为自旋锁 从多个线程并发访问资源,也就是 Synchronized 可以分为无锁、偏向锁、轻量级锁和重量级锁 从锁的公平性进行区分,可以分为公平锁和...转载 2019-12-27 16:00:34 · 3414 阅读 · 0 评论 -
文件IO与网络IO的理解,多路复用技术与reactor模式的关系
1、文件IO与网络IO1.1专有名词之前一直对IO一知半解,所以整理下IO各种概念与IO读取数据的流程,先了解一下专有名词:(1)用户空间 / 内核空间现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操...原创 2019-06-17 00:30:33 · 2958 阅读 · 4 评论 -
try(){} catch(){}使用
原创 2019-01-03 16:55:53 · 4772 阅读 · 1 评论 -
通过反射获取实例化对象的所有的属性值
1、model是一个已经实例化后的对象Model model = new Model();2、获取model的所有的属性的值Field[] field = model.getClass().getDeclaredFields(); // 获取实体类的所有属性,返回Field数组Field[] field = model.getSuperClass().getDeclaredFields()...原创 2018-12-20 16:26:59 · 3238 阅读 · 0 评论