![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
foralllove
遗憾终是遗憾
展开
-
@Validated 自定义注解校验请求参数符合枚举值
自定义注解校验请求参数枚举。原创 2022-02-27 17:02:47 · 1291 阅读 · 0 评论 -
java synchronized锁升级
java synchronized 简述锁升级过程原创 2022-02-20 19:13:13 · 277 阅读 · 0 评论 -
线程基本介绍
线程介绍原创 2022-02-13 18:40:42 · 226 阅读 · 0 评论 -
JVM 随笔
jvm 信息笔记原创 2022-01-09 15:46:13 · 221 阅读 · 0 评论 -
WebFluxServerWebExchange 中form data获取问题
@Slf4jpublic class OpenFilter implements WebFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { return exchange.getFormData().doOnNext( formData -> { .原创 2021-11-14 20:29:08 · 3004 阅读 · 0 评论 -
dom4j自定义注解xml处理工具
package pers.util.xml.annotation;import org.dom4j.*;import pers.util.xml.model.Dom4jXmlAttribute;import pers.util.xml.model.Dom4jXmlDemo;import pers.util.xml.model.Dom4jXmlField;import pers.util.xml.model.Dom4jXmlNamespace;import sun.reflect.generi.原创 2021-07-12 02:24:35 · 361 阅读 · 0 评论 -
spring cloud nacos源码解析(2)实例注册的那些事
//客户端注册请求 @CanDistro @PostMapping @Secured(parser = NamingResourceParser.class, action = ActionTypes.WRITE) public String register(HttpServletRequest request) throws Exception { //获取命名空间 key = namespaceId 默认值public final S.原创 2021-06-27 22:31:40 · 462 阅读 · 0 评论 -
spring cloud nacos源码解析(1)了解nacos
1.第一步下载nacos源码https://github.com/alibaba/nacos.git2.nacos原创 2021-06-20 20:24:35 · 271 阅读 · 0 评论 -
设计模式二十三之适配器模式
1.什么是适配器模式转换不同系统的资源为目标系统可识别处理的资源。例如充电头(统一处理电流降压为手机可支持的电压)2.适配器优缺点将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,而无须修改原有码。 增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性。 灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”。...原创 2021-06-20 18:31:40 · 69 阅读 · 0 评论 -
spring AOP @Around @Before @After 区别
spring aop中@Around @Before @After三个注解的区别@Before是在所拦截方法执行之前执行一段逻辑。@After 是在所拦截方法执行之后执行一段逻辑。@Around是可以同时在所拦截方法的前后执行一段逻辑原创 2021-06-06 20:56:22 · 700 阅读 · 0 评论 -
Could not load TestContextBootstrapper [null]. Specify @BootstrapWith‘s ‘value‘ attribute or make th
再用springboot的test的时候,提示这个,出现这个错误的解决方法是jar包冲突 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.12.RELEASE</version> .原创 2021-06-06 20:54:28 · 1550 阅读 · 0 评论 -
sleuth日志追踪
maven依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependency> <groupId&原创 2021-05-23 21:13:24 · 188 阅读 · 0 评论 -
@RequestBody 和 @GetMapping 使用时效原因
当我们使用@GetMapping的时候配合使用@RequestBody接受参数会发现无法接受到参数。网上说@RequestBody 不能和@GetMapping搭配使用,需要使用@PostMappig。其实不是必然。@RequestBody可以处理的是请求的body体内容,需要识别Content-Type的值。http请求为application/json @RequestBody才可以解析body值。@GetMapping前端大多使用了application/x-www-f...原创 2021-05-09 20:59:41 · 1505 阅读 · 0 评论 -
srpingboot 整合 seata 1.3.0 + nacos 1.3.2
1.下载seata服务端修改config文件type类型使用nacosregistry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "nacos" loadBalance = "RandomLoadBalance" loadBalanceVirtualNodes = 10 nacos { application = "sh-seata-server" serverAddr = "1..原创 2021-05-09 20:41:33 · 203 阅读 · 4 评论 -
@EnableAsync和@Async
1处理问题在业务层中我们需要同时修改多张表的数据并且需要有序的执行,如果我们用往常的同步的方式,也就是单线程的方式来执行的话,可能会出现执行超时等异常造成请求结果失败,及时成功,前端也需要等待较长时间来获取响应结果,这样不但造成了用户体验差,而且会经常出现请求执行失败的问题2.处理@Async注解帮我们实现了创建线程池的繁琐,提高了我们的开发效率。@EnableAsync用于开启异步支持,@Async标注需要执行的异步方法3.自定义线程池开发可以自定义线程池注入bean来完成@As...原创 2021-04-26 02:51:47 · 549 阅读 · 0 评论 -
ArrayList底层数组扩容原理
ArrayList是一个普通的类,如果我们开心,可以自己写一个。ArrayList初探 - 知乎专栏文章发表后,评论区有人问如下问题。我们先回顾一下之前的所说过的数组,话不多说,上代码:老规则,我们继续画一画,加深一下印象,上图:这个图我们去掉了ArrayList初探 - 知乎专栏一文图里那些无用的细节(方法区,常量池等),方便大家看起来清晰,我们用eclipse的debug功能看一下,看是否与我们图上画的一致再看一下执行结果,也在我们期望中。好,我们改一下代..转载 2021-04-11 22:00:31 · 354 阅读 · 0 评论 -
ArrayList扩容机制(基于jdk1.8)
<div id="article_content" class="article_content clearfix"> <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css"> <div id="content_views" class=...转载 2021-04-11 21:41:18 · 213 阅读 · 0 评论 -
设计模式二十三之工厂模式--抽象工厂模式
1.什么是抽象工厂模式是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。解决工厂方法模式无法处理多产品问题。2.优缺点优点:可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。 当需要产品族时,抽象工厂可以保证客户端始终只使用同一个产品的产品组。 抽象工厂增强了程序的可扩展性,当增加一个新的产品族时,不需要修改原代码,满足开闭原则缺点: 新增产品种类工厂都需要更新..原创 2021-04-04 20:29:10 · 186 阅读 · 1 评论 -
设计模式二十三之单例模式
1.什么是单例模式?它的核心在于,单例模式可以保证一个类仅创建一个实例,并提供一个访问它的全局访问点。该模式有三个基本要点:一是这个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。由于在一个系统中,一个类经常会被使用在不同的地方,通过单例模式,我们可以避免多次创建多个实例,从而节约系统资源。2.饿汉模式在类初始化阶段就已经在堆内存中开辟了一块内存,用于存放实例化对象,所以也称为饿汉模式。汉模式实现的单例的优点是,可以保证多线程情况下实例原创 2021-03-21 19:34:13 · 131 阅读 · 3 评论 -
设计模式二十三之工厂模式--简单工厂模式
1.什么是简单工厂模式简单工厂模式属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。2.优缺点优点:简化客户端创建消费对象的困难只专注消费。明确了各自的职责和权利,有利于整个软件体系结构的优化。缺点:违背了高内聚的责任分配原则,工厂集中了全部的创建逻辑,当工厂出现问题系统会崩溃。当有新的产品类型时,必须要修改工厂的创建逻辑。对系统的维护和扩展非常不利。3.适用场景工厂产品少,对如何创建产品不关心。4.工...原创 2021-03-28 18:48:15 · 122 阅读 · 0 评论 -
String 调优
1.String数据结构演变java6String 对象是对 char 数组进行了封装实现的对象,主要有四个成员变量:char 数组、偏移量 offset、字符数量 count、哈希值 hash。String 对象是通过 offset 和 count 两个属性来定位 char[]数组,获取字符串。这么做可以高效、快速地共享数组对象,同时节省内存空间,但这种方式很有可能会导致内存泄漏。java7/8java 对 String 类做了一些改变。String 类中不再有 offset 和 c.原创 2021-03-21 20:27:42 · 168 阅读 · 3 评论 -
类加载过程
1:类加载过程:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。一个非数组类的加载阶段(加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,这一步我们可以去完成还可以自定义类加载器去控制字节流的获取方式(重写一个类加载器的loadClass()方法)。数组类型不通过类加载器创建,它由 Java 虚拟机直接创建。所有的类都由类加载器加载,加载的作用就是将 .class文件加载到内存。2.双亲委派模型每一个类都有一个对应它的类加载器。系统...原创 2021-03-14 20:50:14 · 165 阅读 · 1 评论 -
hashmap 扩容死循环问题
1.hashmap不能用于多线程场景中,多线程下推荐使用concurrentHashmap!主要原因就在于其的扩容机制。2.hashmap扩容机制创建一个新的newtab替代oldtab。然后数据迁移,但是1.7版本时才有头插入法。如下图(图是网上找的)单线程:1.7扩容代码1 do {2 //保留要转移指针的下一个节点3 Entry<K,V> next = e.next;4 //计算出要转移节点在hash桶中的位置5 i...原创 2021-03-14 20:38:26 · 339 阅读 · 0 评论 -
CPU 缓存模型
1.cpu缓存模型作用CPU 缓存则是为了解决 CPU 处理速度和内存处理速度不对等的问题。内存可以看作外存的高速缓存,程序运行的时候我们把外存的数据复制到内存,由于内存的处理速度远远高于外存,这样提高了处理速度。CPU Cache 缓存的是内存数据用于解决 CPU 处理速度和内存不匹配的问题,内存缓存的是硬盘数据用于解决硬盘访问速度过慢的问题。2.CPU Cache 的工作方式:先复制一份数据到 CPU Cache 中,当 CPU 需要用到的时候就可以直接从 CPU Cache 中读取原创 2021-03-07 15:41:13 · 467 阅读 · 0 评论 -
分布式id
1.分布式idID是数据的唯一标识,传统的做法是利用UUID和数据库的自增ID,使用Mysql需要事务支持,所以会使用Innodb存储引擎,UUID太长以及无序,并不适合在Innodb中来作为主键,自增ID比较合适,但是随着的业务发展,数据量将越来越大,需要对数据进行分表,而分表后,每个表中的数据都会按自己的节奏进行自增,很有可能出现ID冲突。这时就需要一个单独的机制来负责生成唯一ID,生成出来的ID也可以叫做分布式ID,或全局ID。2.数据库自增id基于数据库的自增ID,需要单独使用.原创 2021-03-07 04:38:19 · 110 阅读 · 0 评论 -
java 实体类转xml格式(jaxb 和 xstrem)(二)
1.Xtream方式转化优点:使用便捷缺点:效率不高2.XstreamstreamTag标记/** * 描述:StreamXmlTag * * @author 归墟 * @date 2021/2/25 20:32 */public interface StreamXmlTag extends XmlTag { /** * 转换操作 * * @return xml String */ default String ha.原创 2021-02-28 20:40:02 · 403 阅读 · 2 评论 -
java 实体类转xml格式(jaxb 和 xstrem)(一)
1.javxb方式定义可以接口xmlTag ,model时效表示可以转化为xml格式/** * 描述:XmlTag * * @author 归墟 * @date 2021/2/25 20:31 */public interface XmlTag { /** * 转换为xml格式 * * @return string 类型 失败为null */ String toXml();}定义jaxbXmltag标记选用的方式转化方..原创 2021-02-28 20:23:27 · 705 阅读 · 2 评论 -
HashMap hash冲突解决方法
常用两种方法:链表法和开放寻址法1.链表法 当出现hash冲突时,会将元素插入对应数组下的链表中(或红黑树),链表插入速度快。在插入或删除的时候,查找对应的数据下的链表,然后查找链表中元素。2.开发寻址法 当出现hash冲突时,重新探测一个新的空闲位置,将元素插入。 线性探测法: 散列表中插入元素时,如果某个数据经过散列函数散列之后,存储位置已经被占用了,那么我们就从当前位置开始,依次往后遍历,直到找到空余的位置插入为止(插入第一个空余的位置,方便查找)在查找元...原创 2021-02-21 17:29:04 · 1430 阅读 · 0 评论 -
java的两种序列化方式
1.java序列化作用让java中对象以字节流的形式在网络服务中传输。通过反序列化的方式可以获取java对象。1.方便传输,速度快,还很安全,被调用方序列化,调用方反序列化即可拿到传输前最原始的java对象,常用于不同进程之间的对象传输 2.方便存储,不管是存储成文件还是数据库,都行,存储为文件,下回要用可以直接反序列拿到对象2.java序列化方式相应的对象实现了序列化接口java.io.Serializable(隐式序列化),自动序列化所有非static和 transient...原创 2021-02-07 20:19:59 · 612 阅读 · 0 评论 -
mybatis防止sql注入原理
1.什么是sql注入sql注入解释: 是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句去修改数据信息。例如:"select * from user where id =" + "参数" ,然后有人而已恶意拼接参数 1;delete from user;select * from user where id =1;delete from user;数据库就被恶意修改了。2.mybaties防止sql注入用法mybatis提供两种站位符号 #{}和 ${}${}...原创 2021-01-24 19:58:50 · 1346 阅读 · 1 评论 -
@JsonFormat 使用和转换配置失效问题解决
1.@JsonFormat 作用@JsonFormat注解是一个时间格式化注解,可以将date日期格式转化为json的时候,输出的指定格式例如:yyyy-MM-dd HH:mm:ss2.@JsonFormat 使用方法maven引入: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>...原创 2021-01-23 10:24:11 · 8853 阅读 · 3 评论 -
@Resource 和 @Autowire
1.@Autowire是Spring开发的,而@Resource是jdk开发的2@Resource优先以name查询bean,如果查询不到才会以type查找。@Autowire是以type查询的。@Autowire required默认为true要求 bean必须存在。@Resource装配顺序1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常2. 如果指定了name,则从上下文中查找名称(id)匹配的bean...原创 2021-01-17 18:53:11 · 223 阅读 · 0 评论 -
java 异常类
1.java异常类1.java所有异常类继承throwable2.java的异常分为两种:error和exception2.java断点方式1.普通断点方式2.条件断点3.全局断点原创 2021-01-03 20:10:16 · 65 阅读 · 0 评论 -
Rpc框架 技术选型对比
1.dubbo框架2.springCloud原创 2020-12-27 03:09:19 · 721 阅读 · 0 评论 -
java(一)equals和"=="
本文章提供于初学者或者复习基础知识的人参考,如有错漏敬请补充!public static void main(String[] args){ int a = 33; long l = 33L; // 当==用于基本数据之间比较的时候(包括String),比较的是两者之间的值。 System.out.println(a == l); Integer int...原创 2018-08-21 22:39:23 · 146 阅读 · 0 评论 -
Java(一)
Java(一)之基本数据类型本文章提供于初学者或者复习基础知识的人参考,如有错漏敬请补充!java的8种基本数据类型整型: byte 占1个字节 8位short 占2个字节 16位int 占4个字节 32位 (初始化默认) 在64位中大多位4字节少数为8字节long 占8个字节 64位 在32位操作系统中占4位 定义时数值后面加Ljava默认位十进制数据,指定1...原创 2018-08-20 23:53:19 · 175 阅读 · 0 评论 -
java(一) string,stringbuffer,stringbulder简析
首先string是字符串常量,但是stringbuffer,stringbulder是字符串变量,当string初始化之后值是不可变的。string在源码中的本质是一个char数组。运行测试以下结果; String str = "string" ; System.out.println(str.hashCode()); str = str + "Test"; System....原创 2018-08-22 16:18:44 · 558 阅读 · 0 评论