![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
yayaqwl
会开发的测试
展开
-
gson 转 ArrayList
public class GsonUtils { public static <T> List<T> gson2ObjectList(String json,Class clazz) { Type type = new ParameterizedTypeImpl(clazz); List<T> list = new Gson().fromJson(json, type); return list; }原创 2021-01-15 16:56:48 · 949 阅读 · 0 评论 -
Instrumentation与ClassFileTransformer--字节码转换工具
一个代理实现ClassFileTransformer接口用于改变运行时的字节码(class File),这个改变发生在jvm加载这个类之前。对所有的类加载器有效。 class File这个术语定义于虚拟机规范3.1,指的是字节码的byte数组,而不是文件系统中的class文件。 ...转载 2020-12-25 16:16:39 · 340 阅读 · 0 评论 -
jacoco-sonarjava覆盖率
JaCoCo插桩On-the-fly模式中, JVM中通过-javaagent参数指定特定的jar文件启动Instrumentation的代理程序,代理程序在通过Class Loader装载一个class前判断是否转换修改class文件,将统计代码插入class,测试覆盖率分析可以在JVM执行测试代码的过程中完成。offline模式中,在测试前先对文件进行插桩,然后生成插过...原创 2020-05-09 14:43:15 · 255 阅读 · 0 评论 -
Intellij使用-Debug使用快捷键
1、 Debug所有断点查看ctrl+shift+ F82 增加debug断点的快捷键ctrl+ F83、 debug 进入方法 F 7 , 下一步:F8原创 2020-05-09 14:39:50 · 167 阅读 · 0 评论 -
JVM内存结构简单篇(浅入)
网上各种介绍JVM的文章, 一时不知道从哪里看起,有的讲的很深很细,当然看完你就能完全明白,但是对于刚看的人来说, 越看越深奥, 越看越多不懂的术语,词汇,以至于想放弃,写这篇文章就是为了对JVM有一个整体的概念,随后再写更深入的了解, 都说深入浅出,我倒是觉得应该是浅入,深入,再浅出当然JVM内存结构是离不开下面这张图的一看这张图就觉得深奥,我们先浅入下: 这张图有两个概念: ...原创 2018-09-27 13:58:05 · 171 阅读 · 0 评论 -
JVM方法区详解
Class对象是存放在堆区的,不是方法区!这点很多人容易犯错。类的元数据(元数据并不是类的Class对象!Class对象是加载的最终产品,类的方法代码,变量名,方法名,访问权限,返回值等等都是在方法区的)才是存在方法区的!方法区 在一个jvm实例的内部,类型信息被存储在一个称为方法区的内存逻辑区中。类型信息是由类加载器在类加载时从类文件中提取出来的。类(静态)变量也存储在方法区中。jvm...转载 2018-09-14 11:48:04 · 7690 阅读 · 0 评论 -
深入了解Java程序执行顺序
Java中main方法,静态,非静态的执行顺序详解 Java程序运行时,第一件事情就是试图访问main方法,因为main相等于程序的入口,如果没有main方法,程序将无法启动,main方法更是占一个独立的线程,找到main方法后,是不是就会执行mian方法块里的第一句话呢?答案是不一定 看看下面两种最常见的情况: 第一种情况: main方法在一个具有其他方法或属性的类中;...转载 2018-09-12 15:20:57 · 240 阅读 · 0 评论 -
Java的实例化顺序(程序执行顺序)
加载/执行顺序:牢记一点:静态和非静态分开处理使用到静态加载时,静态又分为: 静态变量, 静态代码块, 其中加载顺序是按照类中书写的先后顺序加载的非静态加载顺序: 按照非静态书写顺序加载/执行静态方法,实例方法只有在调用的时候才会去执行当静态加载中遇到需要加载非静态的情况: 先加载非静态再加载静态。下面两种情况的加载顺序不涉及到父类子类的情况:1) 首先将所有静...原创 2018-09-12 15:19:04 · 8202 阅读 · 1 评论 -
HashSet TreeSet LinkedHashSet
HashSet TreeSet LinkedHashSet1. 继承关系1) HashSet2) LinkedHashSet3) TreeSet2. 顺序HashSet无序。LinkedHashSet按照插入的先后顺序, TreeSet 按照自然排序或者指定的排除方式排序(默认自然排序)3. HashSet TreeSet LinkedHashSet都是...原创 2018-09-04 14:27:22 · 313 阅读 · 0 评论 -
Java内存溢出举例
1 堆溢出数组存放10亿个floatfloat arr[] = new float[1000000000];for (int i = 0; i < 1000000000; i++) { Random random = new Random(); float v = random.nextFloat() * 50f; arr[i] = v;} 2. 栈溢出栈...原创 2018-09-27 14:17:15 · 745 阅读 · 0 评论 -
Java Map在遍历过程中删除元素
转自https://blog.csdn.net/u014495327/article/details/43023877Java中的Map如果在遍历过程中要删除元素,除非通过迭代器自己的remove()方法,否则就会导致抛出ConcurrentModificationException异常。JDK文档中是这么描述的:The iterators returned by all of this ...转载 2018-10-07 00:57:05 · 5369 阅读 · 0 评论 -
解决maven编译错误:程序包com.sun.xml.internal.ws.spi不存在
转自https://blog.csdn.net/mn960mn/article/details/51253038当maven项目里面有用到JDK内部的一些类,接口(如:com.sun.xml.internal.ws.spi.ProviderImpl)等的时候,用maven编译一般会出现如下错误[INFO] BUILD FAILURE[INFO] --------------------...转载 2018-10-24 16:29:06 · 8826 阅读 · 0 评论 -
Java Compare 总结
1. Java对Bean排序,可以通过实现Comparator或者Comparable接口2.Comparator或者Comparable接口可以根据实际的需求来排序,但是如果想用通用的比较方式,可以使用apache的BeanComparator来实现。 具体代码如下import org.apache.commons.beanutils.BeanComparator;import o...原创 2019-03-29 09:38:42 · 581 阅读 · 0 评论 -
HashMap 排序
Java中 HashMap没有排序, 如果想要对HashMap排序怎么办,当然是用TreeMap可以,本文总结的是给已有HashMap排序第一次试验: 排序后HashMap结果没变,总结原因: HashMap本生是无序的,将HashMap转换为list,对list排序, 但排序以后还是使用HashMap,结果肯定错误。因为本身HashMap排序并没有变化,解决方法:排序以后直...原创 2019-04-19 17:48:06 · 551 阅读 · 0 评论 -
jsonString 常用方法
1. Map 转Json Stringimport com.google.gson.Gson;Map<String,Integer> indicatorDetails = new HashMap<>();Gson gson = new Gson();String jsonStr = gson.toJson(indicatorDetails);2....原创 2020-03-05 17:19:03 · 1306 阅读 · 0 评论 -
Java sleep wait区别
Java 中 sleep 方法和 wait 方法的区别1)sleep是是属于Thread类的,wait是属于Object类的2)在调用sleep()方法的过程中,线程不会释放锁,而wait方法释放了锁,前提条件是它已经持有锁。所以wait和notify(或者notifyAll)方法都必须被包裹在synchronized语句块3)sleep()需要捕获异常, wait不需要因为Th...原创 2018-08-25 16:58:05 · 147 阅读 · 0 评论 -
ConcurrentHashMap HashMap Hashtable区别
1. HashMap Hashtable,ConcurrentHashMap区别1) 继承关系不同 2) HashMap线程不安全, ConcurrentHashMap,Hashtable线程安全,但是ConcurrentHashMap的效率比Hashtable高,ConcurrentHashMap已经可以完全取代HashtableHashTable 使用synchro...原创 2018-09-04 10:24:02 · 272 阅读 · 0 评论 -
Java并发-对象锁,类锁
1. Java中加同步锁目前使用synchronized锁目前可以理解为下面两种锁,然后每种锁都可以加在代码上或者方法上(也可以按照方法锁和代码锁分类)第一种分类:1)类锁A : 只加在某块代码中,但是加锁的是类 synchronized(Sync.class)b: 加在静态方法上:public static synchronizedvoid test1() {...}2)对象锁A: 加在某块代...原创 2017-08-29 11:38:17 · 493 阅读 · 0 评论 -
Java中HashMap的实现原理
1. HashMap原理图自我总结一句话: 当对象作为Key时, 只有两个对象hashcode相同, 而且equals,存放在HashMap中,key才算相同,其他情况都算key不同先上图: 可以发现哈希表是由数组+链表组成的,一个长度为16的数组中,每个元素存储的是一个链表的头结点HashMap存放的原理: 先查看对象的hashcode是否相同, 如果不同, 存放在不同的散列表里(即不同的数组下...原创 2017-08-28 16:27:31 · 380 阅读 · 0 评论 -
Java并发-ThreadPoolExecutor线程池中BlockingQueue的三种实现
首先先看一下ThreadPoolExecutor线程池的构造方法ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory,Rejec...原创 2018-04-04 00:28:09 · 1473 阅读 · 1 评论 -
Java并发Java Volatile使用
线程并发的时候, 通常会遇到下面三种问题1)原子性2)可见性3)有序性在阅读这篇文章时,需要先了解以上三种概念,这里不做详细的说明,网上有各种说明,在此略过:Volatile两大作用1 .可见性2. 防止重排(保证有序性) 1. Volatile可见性直接用一段代码来看看并行会出现的问题package com.yaya.java.volatileTe...原创 2018-04-12 11:03:23 · 172 阅读 · 0 评论 -
Java并发--线程计数器
Java中经常存在以下的需求,启动多个相同或者不同的线程,主线程需要等待所有的线程执行完才继续往下执行要实现上面的需求,基本的思路: 创建一个计数器, 来记录线程的执行有两种实现方法方法1:使用锁和计数器:需要有一个对象锁,作用一:保证这个计数器的线程安全,作用二:阻塞主线程,等待所有线程执行完再来唤醒主线程继续执行方法2:使用Java线程包中的CountDownLatch:不需要加锁, 不需要w...原创 2018-04-06 00:29:41 · 984 阅读 · 0 评论 -
Java 写一个可以给斗地主玩家随机发牌的程序。
写一个可以给斗地主玩家随机发牌的程序。a:牌可以随机发给三个玩家b:在控制台打印每个玩家的牌。c:对每个玩家手中的牌按照大小排序。 思路:创建一个容器存储所有的牌,再创建三个容器分别表示三个用户的牌,三个用户轮流从第一个容器中取牌,剩下三张为底牌。把大王和小王也算进去。可以封装一个类表示牌package hcq.hw; import java.util.List; import j...转载 2018-04-06 00:55:56 · 485 阅读 · 0 评论 -
JVM类加载
1. Java 类加载机制1) 类加载 (加载)查找并加载类的二进制数据,在Java堆中也创建一个java.lang.Class类的对象CLassLoader类中的loadCLass方法, 使用双亲委派模式原则 类加载结构其基本模型与加载位置如下 Java中类加载代码结构 2) 类连接 (验证, 准备, 解析)Cla...原创 2018-04-19 23:12:59 · 154 阅读 · 0 评论 -
Java String 用法总结
概述本文主要就一些Java中String常用的Util的用法1.List<String> 打印出以“,”分割元素的字符串用法: String.join("分割符","集合")List<String> list = new ArrayList<String>();String listAsString = String.join(",",lis..原创 2018-08-17 13:31:52 · 162 阅读 · 0 评论 -
Java实现线程的方法
有四种方法1)继承Thread public class MyThread extends Thread { public void run() { System.out.println("MyThread.run()"); } } 2) 实现 Runnable 接口public class MyRunnable implements Run...原创 2018-08-23 17:23:17 · 126 阅读 · 0 评论 -
JAVA CAS原理以及应用atomic
官方说法:提到CAS,就会想到悲观锁,乐观锁。 CAS是乐观锁。CAS,compare and swap的缩写,中文翻译成比较并交换。独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观...原创 2018-08-21 11:08:49 · 252 阅读 · 0 评论 -
CountDownLatch和CyclicBarrier的区别
1. 官方概念CyclicBarrier字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。CountDownLatch 一个线程(或者多个), 等待另外N个线程完成某个事情之...原创 2018-08-28 16:52:14 · 463 阅读 · 0 评论 -
Java面试题
多线程1. 线程和进程有什么区别进程是表示资源分配的基本单位,又是调度运行的基本单位线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。(3)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通...原创 2018-08-23 16:40:50 · 291 阅读 · 0 评论 -
Java锁
本文转自https://blog.csdn.net/zqz_zqz/article/details/70233767/之前做过一个测试,详情见这篇文章《多线程 +1操作的几种实现方式,及效率对比》,当时对这个测试结果很疑惑,反复执行过多次,发现结果是一样的: 1. 单线程下synchronized效率最高(当时感觉它的效率应该是最差才对); 2. AtomicInteger效率最不稳定,不...转载 2018-08-29 11:42:25 · 130 阅读 · 0 评论 -
如何控制某个方法允许并发访问线程的个数?
semaphore两个重要的方法就是semaphore.acquire() 请求一个信号量,这时候的信号量个数-1(一旦没有可使用的信号量,也即信号量个数变为负数时,再次请求的时候就会阻塞,直到其他线程释放了信号量)semaphore.release() 释放一个信号量,此时信号量个数+1public class SemaphoreTest { static Semaphore s...转载 2018-08-29 13:21:06 · 1708 阅读 · 0 评论 -
List用法总结
List使用会有一些比较奇怪的问题,使用时需要注意1. 情况1--list remove有误想要按照索引值删除List的,但是会出现下列问题public class ListUtils { /** * remove some indexs of list * * @param originaList * @param removePositionList...原创 2017-05-19 15:41:51 · 1798 阅读 · 0 评论