
Java
Michaeles
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Hashmap和hashtable区别
1.相同点:(1)都是map的实现类,都是键值对集合;(2)里边的元素都是无序的,跟添加顺序无关;2.不同点:(1)HashMap允许有一个null键和多个null值;(2)HashMap不是线程安全的,HashTable是线程安全的。...原创 2018-10-17 09:32:04 · 1987 阅读 · 0 评论 -
乐观锁和悲观锁的原理及应用场景
一、乐观锁和悲观锁的策略1.悲观锁(一般都是通过锁机制来实现的)(1)每次去拿数据都会认为别人会修改,所以每次拿数据的时候都会上锁。比如:行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java里面的同步原语synchronized关键字的实现也是悲观锁。2.乐观锁(1)每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新...原创 2019-01-10 11:57:55 · 3797 阅读 · 0 评论 -
Java实现线程同步的几种方式?
1.为什么要使用同步?使用多线程时,保证数据的唯一性和准确性。二、Java实现同步的几种方式//通过加synchronized关键字实现多个线程同时访问共享资源时出现的问题,当有申请者申请该资源时,如果资源没有被占用,就给这个申请者使用,否则不能使用该资源。1.synchronized关键字(1)同步方法public synchronized void save(){}...原创 2019-01-16 00:24:05 · 11931 阅读 · 0 评论 -
详解synchronized和reentrantlock的区别
一、synchronized和reentrantlock的区别?(1)可重入锁比Synchronized多了锁投票、定时锁等候、中断锁等候;线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后...原创 2019-01-16 01:18:30 · 3294 阅读 · 0 评论 -
自定义Classloader实现类加载
1.testpackage com.interview.javabasic.reflect;public class ClassLoaderChecker { public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationExce...原创 2019-01-27 16:07:23 · 591 阅读 · 0 评论 -
Java8 新特性
一、Lambda表达式:Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。)Lambda表达式可以说是Java 8最大的卖点,她将函数式编程引入了Java。Lambda允许把函数作为一个方法的参数,或者把代码看成数据。一个Lambda表达式可以由用逗号分隔的参数列表、–>符号与函数体三部分表示。例如:Arrays.asList( "p", "k", "u","f...原创 2019-01-28 00:35:47 · 204 阅读 · 0 评论 -
单例的双重检测实现
//改进原创 2019-01-30 14:14:20 · 654 阅读 · 0 评论 -
Java内存泄漏的排查总结
1.什么是内存泄漏?(1)程序在申请内存后,无法释放已经申请的内存空间。内存泄漏是纯代码层的问题。主要是因为一些对象占用内存,却不会被GC回收。(2)这些对象的特点是可达的、无用的。二、内存泄漏的排查案例1.确定频繁GC的对象(1)使用jps找出正在运行的虚拟机进程;(2)使用jstat监视虚拟机的各种运行状态信息;2.找出频繁GC的原因(1)使用jmap初步分析内...原创 2019-02-21 11:18:53 · 1470 阅读 · 0 评论 -
关于net.sf.json的使用
一、关于net.sf.json的使用1.将linkedHashmap先转成jsonarrayJSONArray list = JSONArray.fromObject(map);2.然后把JSONArray转成IteratorIterator<Object> it = (Iterator<Object>) list.iterator();3.将itera...原创 2019-03-08 22:02:15 · 1424 阅读 · 0 评论 -
详解hashmap底层原理
一、hashmap的源码问题,hashmap的底层结构?put操作?1.底层结构(基于Java8)性能:O(1)、O(n)、O(logn)注:当链表大小超过8,会被改成红黑树;当低于6时,又会被改为链表;2.put操作流程:(1)先调用putVal()方法,当table数组为空时调用resize()方法,进行初始化;(2)对key进行求hash值(是hash方法...原创 2019-03-10 23:48:00 · 501 阅读 · 0 评论 -
记录一次数据处理问题
1.数据处理要求,向result中插入一条username的数据,数据结构如下图所示。2.代码//转换成json串String response = HttpClientUtil.executeGet(interfaceUri.getUrl()+"/trade/find", param, header, 2000); //1.将string字符串转换为map ...原创 2019-03-13 13:47:49 · 263 阅读 · 0 评论 -
java8 lambada表达式使用
@Transactional@Overridepublic void setMenuToRole(Long roleId, Set<Long> menuIds) { if (!CollectionUtils.isEmpty(menuIds)) { menuIds.forEach(menuId -> { sysMenuRepos...原创 2019-04-08 16:59:24 · 1020 阅读 · 0 评论 -
遍历中修改HashMap的Key
public static void main(String[] args) { HashMap<String, String> hashMap = new HashMap<>(); for (int i = 0; i < 6; i++) { hashMap.put("key-" + i, "valu...原创 2019-05-07 16:49:01 · 2932 阅读 · 0 评论 -
堆(heap)和栈(stack)有什么区别?
一、Java内存模型1.哪里用到了内存划分?(1)虚拟机执行Java代码时,首先要把字节码文件加载到内存,那么这些类的信息都存放在哪个区域呢?(2)当我们创建一个对象实例的时候,虚拟机要为对象分配内存,虚拟机是如何分配内存的呢?2.Java内存模型(Java虚拟机的内存是如何划分的?虚拟机内存划分机制?)(1)程序计数器:是线程私有的,JVM支持多线程同时执行,存放当前正在...原创 2019-01-09 22:18:31 · 1648 阅读 · 0 评论 -
OOM异常
1.什么是OOM?程序申请内存过大,虚拟机无法满足它们,并且垃圾回收器也没有空间可回收。JVM然后自杀了。2.为什么会发生OOM?(1)虚拟机本身可使用的内存太少(2)应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。 内存泄露:申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存就泄露了,因为申请者不用了,而又不能被虚拟机分配给别人用。 内存...原创 2019-01-09 21:01:36 · 727 阅读 · 0 评论 -
如何实现线程安全的HashMap
1、为什么HashMap线程不安全?(1)内部存储结构:HashMap内部存储使用了一个Node数组(默认大小是16),如果存在相同的hashcode和相同的key的元素,那么新值覆盖原来的旧值;如果存在相同的hashcode,那么他们的索引位置就相同,这时判断他们的key是否相同,如果不相同,这时就是产生了hash冲突,这时数据放在一个 Entry 链。 (2)自动扩容机制:如果多个...原创 2019-01-09 20:57:40 · 6478 阅读 · 0 评论 -
HashMap底层原理
一、HashMap底层1.HashMap的实现原理及应用场景?2.HashMap存在大量Hash冲突怎么办?如何伪造Hash冲突?3.HashMap大小、如何实现动态扩容,什么时候ReHash?4.HashMap改变所占的内存空间?改变数据查询性能(改变哈希因子)?5.如何实现线程安全的HashMap?------------------------------------...原创 2018-10-17 15:49:43 · 190 阅读 · 0 评论 -
java中 io和nio的区别
一、概念1.基本概念(1)i o(inputstream/outputstream)整个Java IO体系都是基于字符流(InputStream/OutputStream) 和 字节流(Reader/Writer)作为基类,根据不同的数据载体或功能派生出来的。(2)nio(new io ,指Java新的IO类库)基于通道和缓冲区,实现方式是块,它的目的是提高速度,弥补io的不足...原创 2018-12-16 18:45:15 · 671 阅读 · 0 评论 -
NIO的实现原理
Jetty、Mina、Netty、ZooKeeper等都是基于NIO方式实现。一、通道(Channel)1.通道是对原 I/O 包中的流的模拟,所有数据都必须通过通道。它是一个对象,可以通过它读取和写入数据。借助通道可以用最小的总开销来访问操作系统本身的 I/O 服务。2.主要类型分别对应文件IO、UDP和TCP(Server和Client)。 FileChannel ...原创 2018-12-16 18:48:02 · 1370 阅读 · 0 评论 -
详解Java反射
一、基本概念1.反射机制:在运行状态中,可以动态的获取类信息及动态的调用类对象方法的功能。2.反射常用的几个方法(1)getDeclaredMethod(方法名,参数):返回对应的方法;(2)Field属性:getType()返回字段类型,getName()返回字段名称,set()设置新值3.反射的作用?(1)在运行时判断任意一个对象所属的类、判断任意一个类所具有的成员变量...原创 2019-01-02 17:38:02 · 643 阅读 · 0 评论 -
Java抽象+多态的简单应用
一、抽象1.抽象:使用abstract声明的类叫作抽象类,当父类的某些方法不确定,就可以用抽象类。(1)抽象类是一种模板,不能被实例化;(2)子类继承抽象类,如果子类不是抽象类,就要实现基类中全部的抽象方法;如果子类是抽象类,可以不用写抽象方法、也可以重写抽象方法;2.抽象类和接口的区别(1)抽象方法是抽象类里边的;(2)抽象方法是相对接口而言的,接口必须实现基类中的全部方...原创 2019-01-02 11:54:26 · 360 阅读 · 0 评论 -
详解mysql间隙锁
1.什么是间隙锁?(1)对于键值在条件范围内但并不存在的记录(在相等条件下请求给一个不存在的记录也会加锁),叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(Next-Key锁)。(2)查询使用的范围条件不是相等条件,InnoDB会给符合条件的已有数据记录的索引项加锁;2.举例mysql> select * from emp where...原创 2019-01-17 18:51:00 · 2248 阅读 · 0 评论 -
Java值传递还是引用传递
一、值传递(只有基本类型和String str = “Java测试”;是值传递)1.值传递(参数拷贝):方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。public class TempTest { public static void main(String[] args) { int num =...原创 2019-01-13 22:00:02 · 188 阅读 · 0 评论 -
java内存屏障+可见性
1.内存屏障:(如果字段是volatile,Java内存模型将在写操作后插入一个写屏障指令,在读操作前插入一个读屏障指令)(1)内存屏障(memory barrier)是一个CPU指令。这条指令可以确保一些特定指令的执行顺序,影响一些数据的可见性(可能是某些指令执行后的结果)。(2)插入一个内存屏障,相当于告诉CPU和编译器先于这个命令的必须先执行,后于这个命令的必须后执行。内存屏障另一个...原创 2019-01-24 21:45:58 · 1618 阅读 · 0 评论 -
volatile关键字——JVM提供的轻量级同步机制
一、线程安全性1.Java内存模型中的可见性、原子性、有序性。(1)可见性:一个线程修改的状态对另一个线程是可见的;(2)原子性:同一时刻只有一个线程可以对它进行操作;(3)有序性:保证线程之间操作的有序性。二、volatile关键字1.jvm内存模型(1)普通变量:每个线程先从内存拷贝变量到CPU缓存中,如果计算机有多个CPU,每个线程可能在不同的CPU上被处理,...原创 2019-01-24 22:22:23 · 437 阅读 · 0 评论 -
happen-before原则
1.什么是happen-before(1)编写的程序都要经过优化(编译器和处理器会对程序进行优化)后才会被运行,优化分为很多种,其中有一种优化叫做重排序,重排序需要遵守happens-before规则。(2)a happens-before b :happens-before关系保证a操作将对b操作可见。2.happen-before原则(前一个操作的执行结果必须对后一个操作可见)...原创 2019-01-24 22:40:39 · 3955 阅读 · 2 评论 -
Map子类——HashMap、LinkedHashMap、TreeMap、HashTable
一、HashMap的特点(和set类似)1.hashmap是map的实现类;2.允许一个null键和多个null值;3.hashmap中的元素没有顺序;4.不是线程安全的二、LinkedHashMap 带有添加顺序1.linkedhashMap是map的实现类;2.允许有一个null键和多个null值;3.linkedhashMap是有顺序的(添加顺序);4.不...原创 2019-01-09 20:52:43 · 334 阅读 · 0 评论 -
HaspMap底层实现原理
1.hashMap的原理,是如何实现的?线程安全问题? hashmap如何实现动态扩容?(1)实现原理HashMap是基于散列法(又称哈希法hashing)的原理,使用put(key,value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当给put()方法传递键和值时,我们先对键调用hashCode()方法,根据返回的hashCode用于找到bucket(...原创 2019-01-09 20:56:11 · 1394 阅读 · 0 评论 -
Assert断言的使用
断言方法说明:单元测试中,常用的断言方法介绍:Assert.AreEqual() 测试指定的值是否相等,如果相等,则测试通过;Assert.Inconclusive() 表示一个未验证的测试;Assert.IsTrue() 测试指定的条件是否为True,如果为True,则测试通过;Assert.IsFalse() 测试指定的条件是否为False,如果为False,则测试通过;Asser...原创 2019-09-06 16:48:31 · 785 阅读 · 1 评论