
Java
雪落南城
这一场人间流浪,长随步履温柔相候
展开
-
怎么理解ThreadContextClassLoader破坏双亲委派?
ThreadContextClassLoader原创 2023-01-11 00:52:53 · 337 阅读 · 0 评论 -
线上线程池配置错误导致服务故障
线程池配置错误引发线上故障原创 2022-12-02 15:58:17 · 314 阅读 · 0 评论 -
NoClassDefFoundError问题排查的一个方向
同事遇到了NoClassDefFoundError的问题,但是看路径相关java文件都是在的,运行时却会报这个错误;基础知识储备:1、NoClassDefFoundError 不同于ClassNotFoundException,后者出现在编译期间找不到文件,前者出现在运行期间排查方向建议:可以看一下报错的这个类,是否有一些静态属性,在类加载的过程中出错,也可能会报NoClassDefFoundError的错误咨询群回答:“class初始化失败抛异常被吞,然后就noclassdef了”示例:pu原创 2022-01-18 19:44:42 · 484 阅读 · 0 评论 -
注解生效一定作为Spring管理的bean吗?----Reflections获取使用了指定注解的所有字段
由于之前使用注解,大部分都是为了切面,需要有一个切面类,同时目标类也作为一个Spring管理的bean,在Spring启动的时候,生成动态代理类其实我们的注解并不是仅仅为了生成动态代理,比如说mt的配置中心,系统如何实时感知配置项的变更?就是因为加了zk的监听器,每个zk的临时节点都是一个配置项,利用注解为每一个配置项添加监听器其中一个知识就是,初始化的时候遍历服务中注解了@XXConfig的字段,为这些字段添加监听器,用到了开源包org.reflections:reflections:jar:0.9.原创 2021-12-13 15:19:50 · 451 阅读 · 0 评论 -
bean转换神器,DO-DTO-VO等互转
我们在开发的过程中,经常会遇到各种bean的转换,DO->DTO,远程RPC对象转本地服务对象等,这种情况笔者之前有两种做法1.手动set2.使用org.springframework.beans…copyProperties(sourceBean, targetBean);第一种方法,字段多的时候工作量比较大第二种方法,利用了反射的原理,相比直接set有性能损耗最近学习到了兄弟工程里的方法,像lombok一样,自动编译好代码,即省了工作量也不损失执行性能 -------- mapstruc原创 2021-04-21 14:55:48 · 2126 阅读 · 2 评论 -
Java复习提纲
最近忙着梳理一些过去的学习资料,没有怎么更新博客,给大家分享一下自己整理的java复习提纲吧,包括java基础及分布式相关的知识,由于wps限制,部分分支不太全,后边会有单独的脑图奉上~太坑了大小限制不能传高清无码····...原创 2021-03-17 22:43:03 · 136 阅读 · 0 评论 -
CAS分段机制
众所周知,单纯的CAS在高并发场景下,会造成线程的空转所以在jdk1.8中做了优化引入了类 LongAdder当多个线程进行修改时,使用多个cell,每个cell value初始值为0,分散多个线程的请求压力如果需要求和 则将base和所有的cell加起来即可...原创 2021-02-28 19:25:31 · 686 阅读 · 0 评论 -
判断一个类是否实现了某个接口
注意是一个class对象,不是一个实例,不能用instanceof两个方法:假设接口的类为 interfaceTest.class目标类 targetTest.class方法一:targetTest.class.getInterfaces() 获得一个数组,遍历数组判断 接口类是否存在方法二: interfaceTest.class.isAssignableFrom(targetTest.class);...原创 2021-01-24 20:25:39 · 4456 阅读 · 1 评论 -
java根据url获取文件流
最近的一个需求需要根据一个mp3的链接获取文件流上传到内部的存储平台,记录一下获取文件流的代码吧。pom文件 <dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> <version>0.8.0</version>原创 2021-01-18 17:52:18 · 6820 阅读 · 1 评论 -
Java序列化-为什么要实现Serializable接口/serialVersionUID作用是什么
在日常编码中,经常看到一些实体类实现了Serializable接口,不禁会问,为什么要实现这个接口?浅显的回答就是为了序列化,那么,再深挖一点呢?为什么要序列化?网络中的数据传输和磁盘的数据存储都是二进制方式,序列化就是为了把java对象转成二进制进行传输和存储。Serializable接口的作用1、Serializable是一个空接口,目的就是为了告诉JVM这个类帮忙序列化一下2、实现了Serializable接口的类可以被ObjectOutputStream转换为字节流,同时也可以通过Obje原创 2020-10-30 18:05:23 · 923 阅读 · 0 评论 -
父类子类定义相同的变量名
今天遇到了一个很有意思的问题,父类和子类都定义了一个同名变量,声明一个父类类型a指向子类实例时,a.变量 = 父类的值代码public class Father { public int i = 1; public int f = 2; public int getI() { return i; } public Father() { System.out.println("father construct.."); }}原创 2020-05-29 10:54:05 · 4216 阅读 · 3 评论 -
关于final内存可见性的探究
java可见性通常我们提到可见性,关键字通常是volatile 和 synchronized,今天发现有的文章提及了final对于内存可见性的一些观点讲道理 final 和 volatile 多少有些互斥的感觉算了 还是上代码测一下吧测试我们理解的可见性是对某个字段修改了之后,其他线程也会感知到,但是final修饰的字段是不能重新赋值的,怎么办呢。当final修饰的是数组,List的时候,我们虽然不能将声明的变量重新指向别的内存地址,但是可以修改List里边的内容public class F原创 2020-05-21 20:37:23 · 3436 阅读 · 18 评论 -
List按照指定长度分隔截取
推荐神器:guavaimport com.google.common.collect.Lists;List<String> idList = mapper.getIds(queryMap);//批量更新,每次200条List<List<String>> partition = Lists.partition(idList, 200);...原创 2020-05-07 11:23:12 · 1789 阅读 · 0 评论 -
HashMap扩容原理
//hashmap中的数组transient Node<K,V>[] table;//临界值 也就是达到这个值会执行扩容int threshold;//扩容因子final float loadFactor;1、初始化HashMap2、第一次put3、后续达到临界值时扩容...原创 2020-03-11 01:52:44 · 269 阅读 · 0 评论 -
Java动态代理
什么是动态代理为什么要用动态代理实战demoimport java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class ProxyTest { public static void main(String[] ar...原创 2020-03-02 16:17:07 · 193 阅读 · 0 评论 -
Semphore-多线程争抢多资源解决方案
当我们遇到N个线程抢夺M个资源时(N>M),可以使用Semphore我们模拟 6辆车抢3个车位代码:public static void main(String[] args) { //模拟6辆车抢3个车位 Semaphore semaphore = new Semaphore(3); for (int i = 1; i <=6 ...原创 2020-02-18 22:53:06 · 664 阅读 · 0 评论 -
CyclicBarrier使用及源码
当我们有如下使用场景时:A、B、C三个线程都到达某一步时,执行某些操作,然后线程ABC继续执行。跟CountDownLatch的区别在于,countdownlatch是等待ABC执行完代码:public static void main(String[] args) { //需要等待的总线程数量 int threadCount = 7; C...原创 2020-02-18 22:33:45 · 191 阅读 · 0 评论 -
CAS
CAS是什么CAS的全称为Compare-And-Swap,它是一条CPU并发原语它的功能是判断内存某个位置的值是否为预期值,如果是则改为新的值,这个过程是原子的。CAS并发原语体现在Java语言中就是sun.misc.Unsafe类中的各个方法。调用Unsafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令。这是一种完全依赖于硬件的功能。由于CAS是一种系统原语,原语属于操作系统...原创 2020-02-17 14:40:01 · 120 阅读 · 0 评论 -
java-FileChannel使用
前文学到了Kafka的零拷贝技术的java实现是用到了filechannel的tranferTo现在介绍一下FileChannel的使用// 使用通道读文件public void readData(File file) { FileInputStream fis = null; try { fis = new FileInputStream(file...原创 2019-12-04 11:56:59 · 448 阅读 · 0 评论 -
Date、LocalDateTime、字符串 时间相互转化
Date转String:Date d1 = new Date();SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String str = format.format(d1);LocalDateTime 转 StringDateTimeFormatter.ofPattern("yyyy-...原创 2019-10-28 12:04:00 · 2026 阅读 · 0 评论 -
Java-强引用,软引用,弱引用,虚引用
1、强引用Object o = new Object();GC不会清理2、软引用String str = new String("test");SoftReference<String> softReference = new SoftReference(str);内存不足时会清理3、弱引用String str = new String("test"...原创 2019-09-30 10:40:55 · 108 阅读 · 0 评论 -
使用telnet调用远程dubbo接口
打开终端telnet [ip] [dubbo端口号]lscd 类名invoke 方法名(参数)示例telnet 10.41.42.56 20931Trying 10.41.42.56...Connected to 10.41.42.56.Escape character is '^]'.lsnet.wecash.postloan.core.service.PLR...原创 2019-06-17 17:08:49 · 3032 阅读 · 1 评论