Java
文章平均质量分 66
Java开发中用到的各种知识点,Java项目经验等等
master-dragon
weixin:dwl_1270530306
展开
-
Java Semaphore使用例子和流程
CAS操作消耗一个信号量;如果没有信号量可消耗了,就死循环等待了。release增加信号量;acquire减少信号量。semaphore.acquire()的反向操作。输入如下:可以看到同时最多只有2个线程能得到执行。原创 2023-09-19 22:52:44 · 252 阅读 · 0 评论 -
CountDownLatch 使用例子和代码流程
当每个被计数的线程完成任务后,计数器值减一,当计数器的值为0时,表示所有线程都已经完成了任务,然后在CountDownLatch上等待的线程就可以恢复执行。join方法的本质调用的是Object中的wait方法实现线程的阻塞,即有monitor锁的概念。输出如下: main线程只等待业务线程的业务逻辑结束就行。如下,main线程和其它线程运行时序不定,达不到其它线程都结束后main县城再结束的效果。A线程中执行 B.join(),则A线程阻塞住,直到线程B完成,A线程才能再继续。单词2: latch。原创 2023-09-17 10:10:24 · 150 阅读 · 0 评论 -
Java ReentrantLock锁源码走读
Java ReentrantLock锁源码原创 2023-09-16 17:09:11 · 161 阅读 · 0 评论 -
Java复习重写equals方法必须重写hashcode方法
A对象在业务上看来是一个对象,相等的;但是equals方法和hashcode方法都没有重写,实际是不等的,hashcode也不同;即每次业务都是合理的,某个对象只有一个存储到map中,以最后的更新值为准,不会出现什么意外。只重写了equals方法,两个对象相等,但是hashcode不同,在HashMap中是两个key存储, 取出来不同;综合上述的例子,也就说明了为什么重写equals方法必须重写hashcode方法。那么只重写equals方法,两个相等对象会出现一样的hashcode产生误解吗;原创 2023-08-19 16:10:30 · 126 阅读 · 0 评论 -
Spring循环依赖-实践&三级缓存的再次理解
Areturn b;this.b = b;Breturn a;this.a = a;return c;this.c = c;Creturn a;this.a = a;关于理解为什么需要三级缓存以及三级缓存的作用,通过本文实际例子是可以充分说明的。只有A,B的相互依赖,二级缓存就够了;只需要存储一个中间对象:A 创建依赖B, B创建依赖A,从这个中间缓存取就能完成创建B, 那么A也创建完成了,这样之后A,B都加入到一级缓存singletonObjects中,很完美。原创 2023-08-12 16:55:32 · 214 阅读 · 0 评论 -
Java ClassLoader类loadClass/findClass
符号引用就是我们运行时数据区在类加载阶段,还未对类进行布局时,我们通过符号引用访问class文件中数据的实际内存地址,加载进运行时数据区进行布局。准备阶段不分配类中的实例变量的内存,实例变量将会在对象实例化时随着对象一起分配在 Java 堆中。* 字节码验证:是整个验证过程中最复杂的一个阶段,通过验证数据流和控制流的分析,确定程序语义是否正确,主要针对方法体的验证。* 文件格式验证:验证字节流是否符合 Class 文件的规范,如主次版本号是否在当前虚拟机范围内,常量池中的常量是否 有不被支持的类型.转载 2023-07-08 15:42:52 · 964 阅读 · 0 评论 -
java lambda之方法句柄&invokedynamic指令
理解java 方法句柄 和 invokedynmic指令原创 2022-10-29 15:51:22 · 781 阅读 · 0 评论 -
线程池中某个线程执行有异常,该如何处理?
java 线程池异常处理原创 2022-10-22 16:58:23 · 2975 阅读 · 0 评论 -
java.lang.IncompatibleClassChangeError 常见错误
最近开发中遇到类冲突报错 java.lang.IncompatibleClassChangeError,遂了解并复现一些casejava.lang.IncompatibleClassChangeError 解释错误解释package java.lang;/** * Thrown when an incompatible class change has occurred to some class * definition. The definition of some class, on w原创 2022-05-02 10:32:09 · 2202 阅读 · 0 评论 -
二叉树的非递归遍历 (leetcode-重点掌握不使用栈的非递归)
原文链接:http://www.cnblogs.com/dolphin0520/archive/2011/08/25/2153720.html原创 2015-09-03 20:37:02 · 1822 阅读 · 0 评论 -
关于数的基础知识(存储&位运算)
为什么计算机采用补码存储数据http://www.360doc.com/content/12/1009/21/10086564_240513741.shtml字符常量一种是普通字符,即用单撇号括起来的一个字符,如’b’ ,’y’,‘?’。字符常量在储存在计算机的储存单元中时,是以其代码(一般采用ASCII代码)储存的。另一种是转义字符,即特殊字符常量。转移字符是C语言中表示字符的一种特殊形式,其原创 2017-02-12 14:41:57 · 917 阅读 · 0 评论 -
Java Function & Supplier 的实际例子对比感受抽象和懒加载
Supplier以 人使用交通工具出行为例, 如下:很自然的代码,没有任何问题interface Vehicle { void drive();}class Car implements Vehicle { public Car() { System.out.println("new Car()"); } @Override public void drive() { System.out.println("car...原创 2021-11-28 16:43:23 · 1036 阅读 · 0 评论 -
Java类加载器不同导致SPI加载报错: Provider ... not a subtype
如下图整段代码如下,当注释掉myThread.setContextClassLoader(myClassLoader);后才正常运行package com.hotload;import java.util.ServiceLoader;class MyThread extends Thread{ @Override public void run() { try{ ServiceLoader<A> serviceLoader原创 2021-09-25 16:31:35 · 4372 阅读 · 1 评论 -
java new对象的类加载器是谁?
关于java new 对象使用的流程我们都知道如下图所示但是究竟是谁(即那个类加载器)完成【加载】的呢?如下两个类:Testpackage com.hotload;/** * @Author mubi * @Date 2020/7/27 08:49 */public class Test { public Test() { } public String hello(String msg){ return "hello:" + msg;原创 2021-09-25 16:01:56 · 870 阅读 · 0 评论 -
类加载器不同导致类型强制转换报错:java.lang.ClassCastException
直接看如下错误例子com.hotload.Test cannot be cast to com.hotload.Test,因为com.hotload.Test的类加载器是MyComOtherClassLoader,而非默认的 sun.misc.Launcher$AppClassLoader如下则正常原创 2021-09-25 15:24:26 · 1897 阅读 · 0 评论 -
maven plugin 简单介绍和实战 (2021-05-29)
maven plugin 开发: https://maven.apache.org/plugin-developers/index.html什么是plugin?“Maven” is really just a core framework for a collection of Maven Plugins. In other words, plugins are where much of the real action is performed, plugins are used to: create原创 2021-05-29 14:54:55 · 1330 阅读 · 0 评论 -
Mockito 动态代理 & ByteBuddy
现在说动态代理:总是想到Spring AOP的JDK动态代理(基于反射) & Cglib代理(当然这两种都是新增一个新的class)完成动态代理;其实各种mock也有不少使用的动态代理技术的,比如Mockitomock例子public interface HelloService { String say(String what);}import com.example.service.HelloService;import org.junit.Assert;import原创 2021-03-14 16:40:48 · 1526 阅读 · 0 评论 -
Java 双亲委派问题&解决实战(三)
本文主要对上两篇文章进行总结,同时结合过去工作说一些感想Java 双亲委派问题&解决实战(一)Java 双亲委派问题&解决实战(二)首先通过上两篇文章的讲解和代码实战,对JAVA类加载的双亲委派是有了进一步认识,比纸上谈兵更有体会。其次,其实工作中的确是经常遇到依赖问题,版本升级问题;比如业务依赖了rpc中间件,数据库中间件, 而这两个都依赖fastjson,但是是不同版本;还有比如经常有fastjson安全漏洞,要全员业务升级,比较糟糕的做法就是每个业务组,每个项目都人工一个原创 2021-03-13 20:30:15 · 270 阅读 · 0 评论 -
Java 双亲委派问题&解决实战(二)
接上一篇: Java 双亲委派问题&解决实战(一),讨论依赖中的类加载问题设想如下场景demo1 的1.0;2.0;3.0 三个版本分别北依赖;如果业务bundle-main要正常运行依赖结果,这显然要冲突项目工程如下:经过上一篇文章,显然只要我们自定义类加载器,每个模块类正确加载对应版本的即可,代码如下package com.dq.bundle.main;import java.io.File;import java.lang.reflect.InvocationTarge原创 2021-03-13 20:05:22 · 226 阅读 · 0 评论 -
Java 双亲委派问题&解决实战(一)
目录java.lang.NoClassDefFoundError 问题引入工程的3个模块介绍测试例子报错`java.lang.NoClassDefFoundError`附:测试代码 & 原因使用自定义类加载器解决使用arthas查看类加载信息java.lang.NoClassDefFoundError 问题引入工程的3个模块介绍源码见:https://github.com/doctording/bundlebundle-main 测试demo1 有一个Hello类demo2 有一个Us原创 2021-03-13 16:07:17 · 350 阅读 · 0 评论 -
Java工具arthas的使用--结合实际工作
目录安装使用sc命令 查看JVM已加载的类信息thread命令dashboard命令在这里插入图片描述安装使用help命令帮助cls命令清屏命令列表:https://arthas.aliyun.com/doc/commands.htmlsc命令 查看JVM已加载的类信息thread命令查看所有线程dashboard命令todo:需总结工作中实际用到的场景...原创 2021-02-28 13:55:10 · 748 阅读 · 0 评论 -
groovy脚本实现对spring bean的任意调用
spring项目,特别在排查问题的时候(当然这里有权限问题),总想通过测试数据访问某个service的某个方法。通常可以写测试controller,但是每个方法都写一个,也太蛮烦了。假如有个可以像GroovyShell那样跑任意的脚本的程序,那就很愉快了。整个演示视频如下: groovy脚本 & Spring 视频源码见:https://github.com/doctordin原创 2021-02-28 12:21:48 · 1122 阅读 · 0 评论 -
抛给前端“Index: 0, Size: 0“错误,再次提醒RuntimeException
遇到"Index: 0, Size: 0"错误,古老的垃圾代码导致犯错代码演示如下import java.util.ArrayList;import java.util.List;class Obj{ int id; String name;}public class Hello { final static int N = 5; /** * 其它接口 */ List<Obj> getNNumberObjs(){原创 2020-10-22 23:14:42 · 6198 阅读 · 0 评论 -
java开发复习手册
打算陆续把各种java开发学习资料搬到github上:https://github.com/doctording/sword_at_offer, 整理成gitbook: https://doctording.github.io/sword_at_offer/.虽然类似的很多,但希望仍有自己的思考和总结,也方便后续回顾,养成习惯,后续大数据相关也能仿照此开始...原创 2020-09-20 22:27:12 · 126 阅读 · 0 评论 -
【演练】Java应用频繁Full GC, OOM
目录前言演练代码故障现象jmap查看问题原因定位问题解决本文总结前言本文主要是演练java应用频繁full gc,oom,如何排查解决的过程演练代码线程池用自定义线程工厂jvm参数:-Xms20M -Xmx20M -XX:+PrintGC -Xloggc:gc.logimport java.math.BigDecimal;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.u原创 2020-07-15 23:31:59 · 1172 阅读 · 0 评论 -
【线上】查询处理由于错误变慢,进而导致tomcat线程池满,导致大量请求在线程池中等待,客户端调用超时关闭
客户端请求是60秒读超时返回,服务端一般处理查询是几十毫秒;由于特殊错误,导致处理时间变成了好几十秒了;原创 2020-07-13 23:06:02 · 1114 阅读 · 0 评论 -
【线上】StringBuilder / StringBuffer 线程不安全代码问题
线上有同事写的,特此记录下,也提醒自己不能这么垃圾。直接给出线上写的垃圾代码, 类似如下public class Main { static StringBuilder sb = new StringBuilder(); static void test() { try { // consume from upstream TimeUnit.MILLISECONDS.sleep(100); } catc原创 2020-07-10 20:50:30 · 552 阅读 · 0 评论 -
【线上】jvm OOM(原因:对象实例过多)
jmap dump下来分析是一个对象实例过多,且该对象包含大json,因为是偶发,所以很诡异。最后排查原因定时任务拉取操作记录对象,拉取设置的时间范围过大为什么时间范围过大使用了一个当前时间和上一次定时任务运行时间用了本地变量去存储上一次时间,然后定时任务执行完去更新上一次时间变量一个实例倒是没什么大问题,多实例且任务是单实例运行了。那么,要是1个实例今天跑了一次定时任务,然后一直都是其它实例在跑定时任务;那么突然定时任务选中个这个实例,那么时间范围就是【1天前,now】,本来比如说1原创 2020-05-26 23:43:37 · 824 阅读 · 1 评论 -
HttpClient的使用和各种报错
项目中用到了HttpClient, 开发运维过程中也遇到了各种报错,遂整理,以加深认识和方便复习巩固java.net.ConnectException: Connection refused (Connection refused)服务端没有启动,客户端尝试去连接请求, 客户端调用代码报错就会出现Connection refusedjava.net.SocketTimeoutExceptio...原创 2020-04-05 00:01:26 · 3599 阅读 · 0 评论 -
java NPE 犯错收集
1. Boolean 为null如下if(null){}则java.lang.NullPointerExceptionif(info != null && info.getFlag()){ // do sth.}正确写法if(info != null && info.getFlag() != null && info.getFla...原创 2020-04-02 22:52:34 · 382 阅读 · 0 评论 -
【线上】高网络IO引起的CPU负载问题
gc log截图部分如下当时是收到了cat心跳告警,当时的一些现场系统负载飙高gc & 线程Falcon查看机器的cpu,io情况磁盘IO网络IO飙高,CPU负载也飙高原因机器是8C12G的当时是开了400个线程在消费一个有400个partition的topic数据jvm设置如下:-Xms8G -Xmx8G -Xss512K-XX:+UseG1G...原创 2020-03-10 00:01:20 · 1979 阅读 · 0 评论 -
【演练】Java CPU,内存等问题排查与定位解决
cpu 负载高排查演练1 启动java程序并观察cpu负载import java.util.*;import java.util.concurrent.TimeUnit;class Test { void testCpu(){ int num = 0; long start = System.currentTimeMillis() / 1000;...原创 2020-02-15 23:24:07 · 524 阅读 · 0 评论 -
mvn常用命令和使用
编译mvn compile编译测试mvn test-compile运行测试mvn test清除mvn clean会清除生产的target目录打包(包括测试,是把jar打到本项目的target)mvn package打包,并把target下的jar安装到本地仓库mvn install忽略测试mvn install -DskipTests 或 m...原创 2019-08-06 23:53:41 · 648 阅读 · 0 评论 -
eclipse maven 简单web项目
本文地址:http://blog.csdn.net/qq_26437925/article/details/52151668 参考学习:http://jinnianshilongnian.iteye.com/blog/2188113 源码地址:http://download.csdn.net/detail/qq_26437925/9598013把开涛大牛的文http://jinnianshilo原创 2016-08-08 14:38:43 · 323 阅读 · 0 评论 -
数据库CURD工作总结: MySQL数据库,结合MyBatis的使用
最近工作的小结索引 和 主键insert into , insert ignore into, replace into mybatis 注意 selective (xxxExampleSelective 和 xxxExamaple的区别)批量增删改查数据库操作需要优化,(可以用内存操作来代替频繁的操作数据库)例如: user, userGroup , user_use...原创 2018-03-24 19:33:17 · 311 阅读 · 0 评论 -
Java 对象为空,为null判断,NPE错误
import java.lang.reflect.Array;import java.util.Collection;import java.util.Map;class ObjectUtils { public static boolean isNull(Object object) { return object == null; } pub...转载 2018-04-05 17:02:30 · 1946 阅读 · 0 评论 -
java native实践
native 方法作为java扩展,java对底层实现有限,可以通过调用c/c++来实现一些扩展。 native方法 显然与底层相关,与平台相关。java中native方法只有声明,没有具体的定义。.java, 加载一个动态库,然后调用其中的add方法public class NativeDemo{ public native int add(int a, int b); st原创 2018-04-19 14:31:08 · 272 阅读 · 0 评论 -
Java 时间相关的工具类整理
人性化的时间package timeutil;/** * @Author mubi * @Date 2018/7/29 上午11:36 */public enum HumanizedTimeEnum { LastYear("去年", "y", -1), LastMonth("上个月", "M", -1), LastHour("一小时前", "h"原创 2018-07-29 13:15:34 · 267 阅读 · 1 评论 -
【线上】加上重试机制(使用guava-retrying)
很多场景都有重试的必要,不能因为一些边界,某些抖动,不稳定因素导致一些误会和不必要的反复;如果重试能够解决问题,那么自然要使用重试原创 2019-03-26 23:25:59 · 415 阅读 · 0 评论 -
CompletableFuture future.get 遇到 java.util.concurrent.TimeoutException
2019-08-07 工作中遇到的问题大概是: 有个线程池满了,然后新的任务使用CompletableFuture.supplyAsync执行,用future1.get(1, TimeUnit.SECONDS)) 去获取的时候报错java.util.concurrent.TimeoutException报错java.util.concurrent.TimeoutException觉得很奇怪;随...原创 2019-08-07 22:33:45 · 4616 阅读 · 0 评论