![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
快乐是
细心认真
展开
-
达梦数据库新手上路排坑
达梦数据库本地启动调试原创 2024-03-28 17:24:03 · 190 阅读 · 0 评论 -
Dubbo如何将netty的异步请求转为同步方法调用
double通过全局变量+唯一调用id+CompletableFuture将异步调用转为同步原创 2022-12-06 16:31:41 · 742 阅读 · 0 评论 -
FeignClient调用接口400异常
feign调用400或者401了原创 2022-12-06 09:59:03 · 1097 阅读 · 0 评论 -
本地启动springboot项目失败端口问题
springboot启动端口绑定问题定位原创 2022-11-29 15:34:29 · 1050 阅读 · 0 评论 -
RocketMQ顺序消息
顺序消息原创 2022-09-20 10:26:18 · 787 阅读 · 0 评论 -
单元测试参数化
单元测试参数化jupiter原创 2022-08-25 21:47:18 · 311 阅读 · 0 评论 -
手写单向链表和反转
手写单向链表和反转原创 2022-07-21 12:50:16 · 181 阅读 · 0 评论 -
mysql如何保证主从数据一致
mysql两阶段提交原创 2022-05-21 15:02:55 · 731 阅读 · 0 评论 -
aviator使用笔记
aviator可解决什么问题使用表达式代替ifelse实现复杂策略,类似于策略模式另外判断逻辑可以放到运营后台进行配置aviator如何使用核心方法 com.googlecode.aviator.AviatorEvaluator.execute表达式判断的时候,如果靠左边的条件可以拿到判定结果,右边就不用判断了,如果后面是方法的话,就不会调用了,减少了不必要的方法调用package com.demo.aviator;import com.google.common.collect.Immut原创 2022-04-07 11:26:59 · 1192 阅读 · 0 评论 -
maven如何发布源码
有两种方式pom中增加属性配置<properties> <maven.source.skip>false</maven.source.skip></properties>pom中增加插件<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifac原创 2022-02-22 14:25:50 · 1178 阅读 · 0 评论 -
slf4j全局变量
要实现追踪某一个方法的调用全过程,需要在方法入口增加日志关键字,并在每一行log中都带该关键字,就可以实现调用追踪需要两步step1.调用前后分别增加和删除关键信息org.slf4j.MDC.put(“kw”, UUID.randomUUID().toString().replaceAll("-", “”));。。。。。org.slf4j.MDC.remove(“kw”);step2.日志pattern中增加 %X{kw} 输出关键信息完成...原创 2021-08-11 13:36:17 · 206 阅读 · 0 评论 -
字符串作为队列工具类
主代码import org.apache.commons.lang3.StringUtils;/** * 字符串最为队列,处理工具类 * @author dongzhihua */public abstract class StringQueueUtils { public static final String SEPARATOR = ","; /** * 作为队列,pop一个元素 * @param queueStr * @return原创 2021-06-23 15:19:17 · 342 阅读 · 0 评论 -
java如何定位死锁
使用arthas非常简单运行thread -b 即可,见下图arthas安装见官网 https://arthas.gitee.io/install-detail.html测试代码如下package com.dong;import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.ExecutorService;import java.util.concurrent.Execu原创 2021-06-02 19:09:41 · 244 阅读 · 0 评论 -
JAVA如何定位死循环原因
首先我们要清楚,死循环会导致当前线程cpu一直处于使用中状态。所以我们首先要找到最近一段时间cpu使用100%的线程,然后找到它所运行的代码块。使用到的工具:arthas、jmap、jvisualvm找到最近cpu使用100%的线程在arthas环境下运行dashboard命令,该命令5秒统计一次,但是线程【pool-1-thread-1】cpu使用时间为4.859,几乎是100%,可以和其它线程比较非常突出,那就是它了导出dump文件先使用jps找到对应的进程编号【xxx】再使用命令原创 2021-06-02 18:20:47 · 1075 阅读 · 0 评论 -
Java老白整理的程序猿知识图谱
Java老白整理的程序猿知识图谱说明:基于普通应用,依据请求发送到处理为主线梳理。1. 网络tcp/ip,http,https2. 负载nginx3. 容器tomcat4. 应用Spring,SpringBoot5. 外围5.1 存储MySQL,Mybatis,ConnectionPool,ShardingShere,主键生成(雪花,发号器)Redis5.2 RPCDubbo,Netty,SpringCloud5.3 MQRockitMQ,IO多路复用,Kaf原创 2021-05-21 10:18:41 · 125 阅读 · 1 评论 -
类加载打破双亲委派模型
什么是双亲委派类首先由AppClassLoader加载所需要的类,位于程序目录下如果没有找到要加载的类,则交给ExtClassLoader类加载器进行加载,位于JAVA_HOME/ext目录下最后,类通过上述类加载器都没有加载成功则由BootstrapClassLoader进行加载,位于JAVA_HOME/rt目录下为什么要打破有些接口声明和加载是由jdk完成的,但由应用自己实现。显然在类加载的时候找不到需要的类。此时需要打破双亲委派模型如何打破自定义类加载器继承ClassLoader,覆盖原创 2021-05-18 11:15:43 · 146 阅读 · 0 评论 -
HashMap学习笔记
数据结构HashMap存储的是键值对,key和value,使用Entry对象存储使用数组+链表的数据结构,1.8以后增加了红黑树的结构数据定位原理使用key做hash运算得到hash值,hash与数组长度取模得到数组下标index,从数组index位置对应的对象类型(链表/红黑树)获取元素。无论数组对应位置是链表或红黑树,都需要key相等时才认为是同一个元素关键概念CAPACITY:数组的长度size:总的元素个数,不等于数组长度loadFactor:加载因子threshold:数组扩容.原创 2021-03-27 13:56:52 · 120 阅读 · 0 评论 -
StringBuffer和StringBuilder单线程谁的性能更好
结论:不一样的量级,结果不一样。原因还在分析中,有直到的大拿帮忙回复一下import org.junit.Test;/**@Author jvm@Date 2021/1/28 07:50StringBuffer和StringBuilder性能测试,结果如下count:1WStringBufferExecutor: 7StringBuilderExecutor: 1count:1KWStringBufferExecutor: 347StringBuil原创 2021-01-28 08:09:59 · 249 阅读 · 1 评论 -
JAVA内存管理系列之二:垃圾回收器总览
Serial新生代垃圾回收器,采用复制算法单线程回收,对于小内存和单核CPU,性能优秀,但是当内存过大会回收时间会变长而使程序出现长时间卡顿Parallel Scavenge新生代垃圾回收器,采用复制算法多线程回收,效率很大提升,据说内存大于10G也会出现系统卡顿ParNew同 Parallel Scavenge,只是为了和CMS配合使用CMS老年代垃圾回收器,采用标记清除算法注意:CMS不宜用于生产,因为会产生大量碎片空间,当足够碎片时启用SeriaOld垃圾回收器G1原创 2021-01-16 22:34:23 · 105 阅读 · 0 评论 -
JAVA内存管理系列之一:总览
JAVA内存管理系列之一:总揽什么是垃圾程序已经没有引用的对象,包括栈、堆垃圾定位算法根可达算法,目前流行。从根开始,遍历对象和对象的属性,找出可以触达的对象。遍历完之后不可触达的对象可认定为垃圾GCRoot:线程栈变量、静态变量、常量池、本地方法栈中JNI指针引用计数器(已过时):使用计数器来记录对象引用次数,如果计数器为零,则认为没有引用,可认定为垃圾。但是不能解决循环引用问题 遗留问题:弱引用如何解决垃圾回收算法Marking Sweep 标记清除Coping 拷贝M原创 2021-01-16 19:45:31 · 112 阅读 · 0 评论 -
poi和easyexcel解析excel性能对比
结论:easyexcel比poi好太多了结果:使用poi解析直接oom,使用easyexcel解析20个线程并发会频繁fullGC但是没有oom介质:jdk1.8.0_65,apache.poi-3.1.7,esayexcel2.2.7,excel(10500行*2列+2sheet)363KB启动参数:-Xms50M -Xmx80M -XX:+PrintGC -XX:+HeapDumpOnOutOfMemoryError测试方式:创建一个controller,分别调用poi和easyexcel的解析原创 2021-01-16 13:09:34 · 4577 阅读 · 0 评论 -
绕过构造器和初始化代码快
import sun.misc.Unsafe;import java.lang.reflect.Field;/**@Author dongzhihua@Date 2021/1/2 21:40*/public class TestConstructor {{System.err.println(“00))))))))))))))))”);}public void set(String str) {System.out.printf(“set %s\n”, str);}public原创 2021-01-09 20:38:22 · 64 阅读 · 0 评论 -
如何将接口通过反向代理生成实例然后注册到Spring
需要组件:bean工厂,bean注册器,bean扫描器,接口定义bean注册器其实是spring的bean定义后置处理器,将这个bean注册到spring的时候就会触发对应的方法。此时我们在postProcessBeanDefinitionRegistry这个方法中,使用bean扫描器扫描接口,并修改将接口的定义信息修改实现bean工厂构建的目的bean工厂作用是根据接口创建代理实现package com.dong.factory;import org.springframework.bea原创 2021-01-09 14:59:38 · 308 阅读 · 1 评论 -
Spring Cache实战
Spring Cache实战环境jdk1.8Spring 4.3.9.RELEASE引包spring-contextlombok 1.16.12cache配置<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c原创 2020-11-09 11:44:46 · 224 阅读 · 2 评论 -
防止重复提交
生成token放到页面和缓存首先确认需要生成token缓存中用token作为key,提交请求的uri作为value怎么知道提交请求的uri呢?将页面请求uri作为key,表单提交请求的uri作为value放到缓存中页面提交表单的时候带上token进行校验检验如果表单提交的uri需要校验token从表单数据中获取token,并从缓存中根据token获取到uri与当前表单进行比较,如果一直认为通过,将token删除有什么漏洞请大家留言反馈...原创 2020-08-02 08:35:51 · 102 阅读 · 0 评论 -
maven多私服配置埋坑
AB环境ideamaven3.0.5配置存在~/.m2/settings.xml 和 %M2_HOME%/conf/settings.xml两个配置文件,idea指向.m2下的文件问题描述存在~/.m2/settings.xml 和 %M2_HOME%/conf/settings.xml两个配置文件,idea指向.m2下的文件问题描述.m2下配置文件配置了两个私服,私服A和私服B。M2_HOME下的配置没有改。但是问题来了,有个包只在私服A中,私服B没有...原创 2020-06-01 21:59:42 · 908 阅读 · 0 评论 -
mybatis反向工程使用配置(maven插件方式)
只要3步增加配置文件增加插件运行命令详细操作如下配置文件需要修改三处,见配置<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_原创 2020-05-28 17:16:07 · 208 阅读 · 0 评论 -
老白java.lang.Integer源码
Integer.toString(int i, int radix)将i转成radix进制字符串,这个方法使用了 Integer.digits数组,精髓在这里while (i <= -radix) { buf[charPos--] = digits[-(i % radix)]; i = i / radix; },可以使用这个方法将长的十进制id转换成长度较短的36进制id,发挥你的想象...原创 2020-04-17 09:48:05 · 137 阅读 · 0 评论 -
mybatis使用sqlSessionFactory配置
spring调用代码如下@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(“classpath:spring-mybatis-config.xml”)public class SqlSessionFactoryTest {@ResourceSqlSessionFactory sessionFactory;@Test...原创 2020-04-14 18:12:36 · 3743 阅读 · 0 评论 -
springMVC请求处理流程
步骤类调用方法描述1chrome发起请求2DispatcherServletdoService收到并处理请求3DispatcherServletdoDispatch派遣请求,派遣给处理器和适配器处理3DispatcherServletgetHandler匹配处理器3DispatcherServletgetHandlerAd...原创 2019-07-11 12:15:52 · 102 阅读 · 0 评论 -
java8多线程方法过期
suspend该方法挂起线程,但是不会释放锁,具有死锁倾向。另外值得一提的是,挂起的线程状态仍然是Runnablestop该方法是不安全的。执行stop方法后,线程会释放已锁定的资源。如果被锁定的资源存在不一致的状态,而这种状态对其它线程可见(破坏了原子操作)destroy该方法最初用于破坏该线程,但不作任何清除。不释放锁,亦有死锁倾向...原创 2019-05-21 19:51:44 · 375 阅读 · 0 评论 -
filter中获取spring对象
web.xml contextConfigLocation /WEB-INF/classes/spring/*.xml org.springframework.web.context.ContextLoaderListener applicationContext.xml filter ...原创 2015-02-13 11:23:41 · 353 阅读 · 0 评论