
Java
文章平均质量分 50
飞翔的咩咩
我家傻咩咩啊!飞在花丛中啊
展开
-
Centos7替换默认openjdk
[root@VM_0_2_centos jdk1.8.0_281]# update-alternatives --display javajava - status is auto.link currently points to /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre/bin/java/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jr.原创 2022-04-05 15:52:34 · 1832 阅读 · 0 评论 -
JDK动态代理源码解读
入口是java.lang.reflect.Proxy#newProxyInstance简化一下就三步://从缓存查找代理类,或者生成指定的代理类Class<?> cl = getProxyClass0(loader, intfs);//获取public构造器,如果不是public 设置为可访问final Constructor<?> cons = cl.getConstructor(constructorParams)//调用有参构造器创建实例cons.newI原创 2022-03-28 01:27:01 · 1066 阅读 · 0 评论 -
Java开发需要的官方文档
//Java虚拟机文档https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/// JavaSE 规范文档和JVM规范文档Java SE Specificationshttps://docs.oracle.com/javase/specs/index.html//Java api文.原创 2022-03-09 18:21:29 · 9508 阅读 · 0 评论 -
Integer和Long可以用==号比较值大小吗?
遇到问题,最好的办法是写个Test类测试一下,再看源码 @Test public void test() throws Exception { Integer a = 127; Integer b = 127; Integer c = new Integer(127); Integer d = new Integer("127"); Integer e = new Integer("127"); .原创 2021-11-18 17:50:07 · 2662 阅读 · 0 评论 -
用BeanCopier实现属性copy
偶然发现有个属性拷贝的类比较好用,比org.springframework.beans.BeanUtils性能好.先看用法:public static void main(String[] args) { PayUserThirdaccountVO payUserThirdaccount = new PayUserThirdaccountVO(); payUserThirdaccount.setId("1"); payUserThirdaccount.setThirdpaySyste原创 2021-11-12 23:47:20 · 1328 阅读 · 0 评论 -
HttpClientUtils 上传下载类(参考)
HttpClientUtils.javapackage com.rongsoft.common.util;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import org.apache.commons.compress.archivers.ArchiveEntry;import org.apache.commons.原创 2021-11-04 18:41:45 · 657 阅读 · 0 评论 -
代理模式在Jeesuite框架中的使用
上一篇解析Jeesuite框架中mybatis拦截器的使用讲到拦截器添加到了sqlSessionFactory的配置类sqlSessionFactory.getConfiguration().addInterceptor(interceptor)那么拦截器是何时执行以及如何生效的呢?这个实际上是添加到配置类Configuration的interceptorChain属性了interceptorChain.addInterceptor(interceptor);我们先来看这个拦截器接口..原创 2021-10-14 19:17:31 · 161 阅读 · 0 评论 -
Windows环境使用Ant Design Pro
下载安装nodenpm install -g yarnyarn create umi原创 2021-06-01 11:57:30 · 577 阅读 · 0 评论 -
flowable中的责任链模式示例
上一文讲到flowable使用了责任链模式执行命令LogInterceptor extends AbstractCommandInterceptorSpringTransactionInterceptor extends AbstractCommandInterceptorCommandContextInterceptor extends AbstractCommandInterceptorCommandInvoker extends AbstractCommandInterceptor..原创 2021-05-27 18:44:13 · 518 阅读 · 0 评论 -
flowable中命令模式的应用
flowable中大量使用了设计模式中的 命令模式,咱来看看源码.首先出场的执行器接口:CommandExecutor 只有一个实现类CommandExecutorImpl 负责执行所有的命令.执行器有个最重要的方法 /** * Execute a command with the default {@link CommandConfig}. */ <T> T execute(Command<T> command);这个执行器在创原创 2021-05-26 22:59:30 · 2182 阅读 · 0 评论 -
Bean转Map方法
// Bean --> Map 1: 利用Introspector和PropertyDescriptor 将Bean --> Mappublic static Map<String, Object> transBean2Map(Object obj) throws Exception { if (obj == null) { return null; } Map<String, Object> map = new HashMap<String.原创 2021-04-30 18:38:02 · 970 阅读 · 2 评论 -
后台导出文件
HttpServletResponse response ServletOutputStream out = null; try { response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ";filename*=utf-8''" + URLEncoder.encode(fileName, "UTF-8")); ..原创 2021-04-21 14:24:05 · 207 阅读 · 0 评论 -
list调用stream方法报错空指针异常
java.lang.NullPointerExceptionatjava.util.stream.Collectors.lambda$groupingBy$45(Collectors.java:907)atjava.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)atjava.util.ArrayList$ArrayListSpliterator.forEachRemain...原创 2021-03-26 18:38:16 · 6936 阅读 · 0 评论 -
tkMapper的andLike的使用
查询条件: where type='intf' and (code like '%keyword%' or name like '%keyword%')Example example = new Example(SysPermissionEntity.class);example.createCriteria().andEqualTo("type","intf").andLike("code","%"+keyword+"%");List<SysPermissionEntity> per.原创 2021-03-15 17:00:08 · 3104 阅读 · 0 评论 -
mybatis的mapper类报错Error:(60,54) java: 找不到符号
SysConfigEntity version = sysConfigMapper.findOneByCode(VERSION_KEY);sysConfigMapper这个标识报错"Error:(60,54) java: 找不到符号",clean之后还是maven 编译失败.往下查看,发现 mapper类与 xml的参数名不一致,修改后重新编译成功....原创 2021-03-03 10:53:30 · 3123 阅读 · 0 评论 -
ZooKeeper的Watcher机制以及源码分析
ZooKeeper 的 Watcher 机制,总的来说可以分为三个过程:客户端注册 Watcher、服务器处理 Watcher 和客户端回调 Watcher客户端。注册 watcher 有 3 种方式,getData、exists、getChildren;如何触发事件? 凡是事务类型的操作,都会触发监听事件。create /delete /setData,来看以下代码简单实现 final CountDownLatch countDownLatch = new CountDo...原创 2020-12-25 11:57:29 · 198 阅读 · 0 评论 -
Java知识笔记(先存着,再消化)
Java面试必考题:Minor GC、Major GC、Full GC的区别和联系堆的最大值默认是1/4其中 新生代:老年代 = 1:2然后 Eden : from = 8:1GC触发条件GC类型 触发条件 触发时发生了什么 注意 查看方式 YGC eden空间不足 清空Eden+from survivor中所有no ref的对象占用的内存 将eden+from sur中所有存活的对象copy到to sur...原创 2020-11-09 16:59:27 · 161 阅读 · 0 评论 -
Java如何获取dump快照(jmap命令)以及分析快照(jhat命令)
创建dump文件: jmap -dump:format=b,file=jvmdump.bin 31209[root@web-nginx~]# jmap -dump:format=b,file=jvmdump.bin 31209Dumping heap to /root/jvmdump.bin ...Heap dump file created分析dump文件:jhat jvmdump.bin当出现Snapshot resolved.Started HTTP server on por.原创 2020-11-09 00:56:59 · 1743 阅读 · 0 评论 -
Java查看以及修改JVM参数
查看虚拟机参数:1.查看启动时显式指定的参数列表:jps -v2.查看未指定的参数 java -XX:+PrintFlagsFinal 或者java -XX:+PrintFlagsInitial | grep xxxxx[[email protected]~]# java -XX:+PrintFlagsInitial | grep NewSize uintx MaxNewSize = 184...原创 2020-11-09 00:09:04 · 663 阅读 · 1 评论 -
Java中ThreadLocal的用法
ThreadLocal的作用是能存储一个跟随线程的变量,线程未结束前你可以设置以及获取值。* This class provides thread-local variables. These variables differ from* their normal counterparts in that each thread that accesses one (via its* {@code get} or {@code set} method) has its own, independ原创 2020-11-07 01:33:18 · 304 阅读 · 0 评论 -
String.format()报错FormatFlagsConversionMismatchException
String.format()报错FormatFlagsConversionMismatchException,一开始以为是有参数为空了,设置为非null参数后,还是同样报错.import lombok.extern.slf4j.Slf4j;@Slf4jpublic class MainTest { public static void main(String[] args) { String msg = String.format("接口请求失败,Id:s%,code.原创 2020-11-04 16:45:39 · 5890 阅读 · 2 评论 -
JVM中jstat命令和jmap命令
jstat -gc <pid>: 可以显示gc的信息,查看gc的次数,及时间。 显示列名 具体描述 S0C 年轻代中第一个survivor(幸存区)的容量 (字节) S1C 年轻代中第二个survivor(幸存区)的容量 (字节) S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (字节) ...原创 2020-11-02 00:19:56 · 1436 阅读 · 0 评论 -
JVM的Stop-The-World与safepoint
JVM为什么需要Stop-The-World?上一篇Java虚拟机面试准备(二)垃圾收集算法和垃圾收集器中介绍了判断对象是否存活需要进行可达性分析,此时可能其它进程已经更新对象的引用,那么可能出现误报和漏报,误报问题不大,可以进行下一次回收,漏报则是漏了可达对象,造成将非垃圾对象标注了垃圾,可能是虚拟机崩溃.所以为了避免漏报,需要STOP THE WORLD.何时 STOP THE WORLD ?STOP THE WORLD是通过safepoint机制来实现的,当JVM收到STOP THE WO原创 2020-10-27 00:16:16 · 287 阅读 · 0 评论 -
Java虚拟机面试准备(二)垃圾收集算法和垃圾收集器
垃圾收集器需要解决三个问题:1.回收收集哪里的内存垃圾?2.怎么判断是否是内存垃圾。3.怎么回收?上一篇Java虚拟机面试准备(一)运行时数据区中我们明白运行时数据区有分线程共享和线程隔离。线程隔离的数据区随线程的生命周期创建和回收,所以不过多考虑内存回收。内存的回收主要是再线程共享的区域,即垃圾回收主要考虑Java堆和方法区。那怎么判断对象是否需要回收呢?对象存活判断两种方式:1.引用计数算法:给对象添加一个计数器,初始值为0,每引用一次+1,引用失效就-1,最终为0.原创 2020-10-25 23:59:43 · 172 阅读 · 0 评论 -
Java虚拟机面试准备(一)运行时数据区
JVM运行时数据区:方法区(Method Area) 堆(Heap) 虚拟机栈(VM Stack) 本地方法栈(Native Method Stack) 程序计数器(Program Counter Register)另加执行引擎和本地库接口.其中方法区和堆是线程共享,虚拟机栈本地方法栈和程序计数器是线程隔离的,是线程私有的,所以生命周期与线程相同.如下图程序计数器:程序计数器是一块较小的内存空间,是指当前线程执行字节码的行号指示器.CPU调度的基本单位是线程,线程的切换需..原创 2020-10-24 01:55:09 · 198 阅读 · 0 评论 -
Java多线程死锁问题
百科的定义是:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。死锁的产生需要四个条件:1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资.原创 2020-10-23 00:43:01 · 3047 阅读 · 4 评论 -
Java类的加载及单亲委派模型
类的生命周期:加载->链接(验证+准备+解析)->初始化(使用前的准备)->使用->卸载。其中,类的加载过程是加载->链接(验证+准备+解析)->初始化(使用前的准备)验证是验证代码合法性准备是创建静态变量以及设置静态变量的初始值(重点在分配内存空间)解析是常量池中的符号引用替换为直接引用初始化是 执行初始化逻辑以及执行静态初始化块内的逻辑这里有个图比较清晰明了:类的加载机制:单亲委派模型这里的加载逻辑是:自定义加.原创 2020-10-22 01:10:39 · 254 阅读 · 2 评论 -
Spring中RestTemplate源码解析
在实现客户端的负载均衡中,有一种简单的方式就是通过调用被@LoadBalanced注解过的RestTemplate来实现面向服务的接口调用。例如:@Bean@LoadBalancedRestTemplate restTemplate() { //return new RestTemplate(); return new SimpleRestTemplateBuilder().build();}这里我没有使用默认的new RestTemplate(),我使用了自定义的配原创 2020-10-21 00:03:00 · 305 阅读 · 0 评论 -
通过一个题目理解Java类的初始化与加载机制
// reuse/Beetle.java// The full process of initializationclass Insect { private int i = 9; protected int j; Insect() { System.out.println("i = " + i + ", j = " + j); j = 39; } private static int x1 = printInit("stat.原创 2020-10-14 00:37:20 · 119 阅读 · 0 评论 -
Thread的6种状态以及转化
Thread有6种状态,在类java.lang.Thread.State中。原创 2020-10-13 23:40:42 · 242 阅读 · 0 评论 -
转载备份:Java对象结构与锁实现原理及MarkWord详解
看到一篇文章很好,转来备份一下:原文链接:Java对象结构与锁实现原理及MarkWord详解我们都知道,Java对象存储在堆(Heap)内存。那么一个Java对象到底包含什么呢?概括起来分为对象头、对象体和对齐字节。如下图所示:对象的几个部分的作用:1.对象头中的Mark Word(标记字)主要用来表示对象的线程锁状态,另外还可以用来配合GC、存放该对象的hashCode;2.Klass Word是一个指向方法区中Class信息的指针,意味着该对象可随时知道自己是哪个Class的实例转载 2020-10-12 14:56:19 · 141 阅读 · 0 评论 -
Junit报错“Test cannot be resolved to a type“
问题:添加Junit的@Test后报错"Test cannot be resolved to a type"原因:是项目没有导入 JUnit 库解决办法: 项目右键 -> Build Path -> Configure Build Path -> Libraries -> Add Library -> JUnit -> next -> finish OK...原创 2020-10-10 10:56:50 · 1113 阅读 · 1 评论 -
Java 对象与XML互转
工具类MarshallAble.javapackage com.example.demo.jaxb;import org.springframework.util.ClassUtils;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import javax.xml.bind.Unmarshaller;import java.io原创 2020-10-01 02:08:41 · 363 阅读 · 0 评论 -
多个线程操作共享变量会发生什么问题?
package com.example.demo.synchronize;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class ThreadSafeSample { public int sharedState; public void nonSafeAction() { while (sharedState < 100000) { int former = sharedState++.原创 2020-09-29 01:40:15 · 660 阅读 · 0 评论 -
Java类库文件拷贝的两种方式IO和NIO
FileCopyWithInputStreamDemo.javapackage com.example.demo.java.filecopy;import lombok.extern.slf4j.Slf4j;import java.io.*;@Slf4jpublic class FileCopyWithInputStreamDemo { public static void main(String[] args) { File source = new F...原创 2020-09-27 00:34:19 · 301 阅读 · 0 评论 -
Java中string.intern()是干嘛的?
先看下面一共输出几个true?package com.example.demo.concurrent;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class StringDemo { public static void main(String[] args) { String s1 = "11"; String s2 = new String("1")+new String("1"); .原创 2020-09-25 00:42:12 · 295 阅读 · 0 评论 -
Java之String常用知识点
1.Java 1.8以及之前 String由char数组存储,1.9开始由byte数组存储/** The value is used for character storage. */private final char value[];2.String实现了Comparable<String>,可以进行字符串比较3.String.valueOf(Object obj) 转成String4.String有两个常用实现类StringBuffer和StringBuilder,都原创 2020-09-24 00:16:01 · 239 阅读 · 0 评论 -
Java引用之强引用、软引用、弱引用、幻象引用区别以及使用示例
Java对象引用除了强引用之外还有软引用、弱引用、幻象引用以及FinalReference.强引用:常见的普通对象引用 比如Result counter = new Result("Johnny","12");软引用:能豁免垃圾回收,只有在抛出OOM之前才会清理.弱引用:不能豁免垃圾回收.用来构建没有特定约束的关系,是很多缓存实现的选择.幻象引用:在对象被finalize之后的一种引用,不可达调用get()返回null.FinalReference:处理native的对象,..原创 2020-09-23 15:44:14 · 181 阅读 · 0 评论 -
Java并发包之CompletableFuture使用场景以及简单使用(一)
CompletableFuture是Java8提供的一个并发类,方法很多,使用相对复杂。使用场景:多个线程需要并行或者串行等发杂场景。先示例一下CompletableFuture的简单场景,上一篇中讲到一个场景是,A和B并行执行,其中结果给C再去执行。使用CompletableFuture会更简便易于理解。CompletableFutureDemo.javapackage com.example.demo.concurrent.completablefuture;import l原创 2020-09-21 00:35:28 · 1952 阅读 · 0 评论 -
CompletionService的使用场景以及示例
CompletionService用来异步获取ExecutorService的执行结果,因为用了阻塞队列,所以先出的结果先获取。目前只有一个实现类ExecutorCompletionService。下面是示例Demo:场景是,三个耗时操作分别进行,最后将处理结果给主线程的另一个子线程保存结果。结构为CompletionServiceDemo.javapackage com.example.demo.concurrent.completionservice;import lomb.原创 2020-09-20 01:06:44 · 617 阅读 · 0 评论