JAVA
王英豪很ok,
这个作者很懒,什么都没留下…
展开
-
深入理解JDK动态代理《从手写模拟到源码剖析》
目录 一.java代理模式的实现 二.手写模拟JDK动态代理 三.JDK动态代理源码剖析正题一、java代理模式的实现 1.java中代理模式的实现方式java代理分静态代理和动态代理,java静态代理实现有两种:继承,聚合。java动态代理实现有两种:JDK动态代理,CGLIB代理。 2.静态代理和动态代理的主要区别和特...原创 2019-11-13 14:54:50 · 531 阅读 · 0 评论 -
关于ThreadLocal的使用可能造成的内存泄露以及避免方案以及为什么使用弱引用
我们知道,每个Thread类中有一个ThreadLocalMap类型的threadLocals变量,即每个线程中都有一个自己的map,map中的key为ThreadLocal实例,value为要存储的值我们查看该Map的结构,发现里面有个内部类Entry,此Entry类型是构成map的结点结构,类似HashMap中的Node一样。我们在此发现一个问题,发现Entry中的key没有显式声明,...原创 2019-11-04 14:32:42 · 732 阅读 · 0 评论 -
JDK8中HashMap链表转红黑树的阈值为什么选8?为什么用红黑树做优化?
为什么会引入红黑树做查询优化呢?在平常我们用HashMap的时候,HashMap里面存储的key是具有良好的hash算法的key(比如String、Integer等包装类),冲突几率自然微乎其微,此时链表几乎不会转化为红黑树,但是当key为我们自定义的对象时,我们可能采用了不好的hash算法,使HashMap中key的冲突率极高,但是这时HashMap为了保证高速的查找效率,就引入了红黑树来优化...原创 2019-11-03 21:33:18 · 8810 阅读 · 7 评论 -
JAVA 读写锁中锁降级的必要性
既然大家看到了这篇博客,也应该都大概了解了读写锁的一些概念,咱们直接上主题,读写锁中为什么要用锁降级;先引用书上的一段话说说锁降级的概念: 锁降级指的是写锁降级成为读锁。如果当前线程拥有写锁,然后将其释放,最后再获取读锁,这种分段完成的过程不能称之为锁降级。锁降级是指线程先持有写锁,再获取到读锁,随后释放(先前拥有的)写锁的过程;锁降级的必要性1:锁降级中读锁的获取是否必要呢...原创 2019-08-27 20:16:02 · 1844 阅读 · 5 评论 -
深入理解volatile关键字---缓存一致性原理
volatile关键字转自:http://www.cnblogs.com/dolphin0520/p/3920373.html volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,vola...转载 2019-06-05 21:10:52 · 3173 阅读 · 0 评论 -
记一次Gradle项目mybatis整合Spring时, Invalid bound statement (not found):
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题,即在mybatis中dao接口与mapper配置文件在做映射绑定的时候出现问题,简单说,就是接口与xml要么是找不到,要么是找到了却匹配不到。常见原因: 一般的原因 Mapper interface和xml文件的定义对应不上,需要检查...原创 2019-04-18 21:05:46 · 2510 阅读 · 0 评论 -
SSM框架整合之配置文件(详细)
一.applicationContext.xml1.配置数据源(Mybatis)<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql....原创 2019-04-18 16:54:01 · 774 阅读 · 0 评论 -
JAVA三种代理模式:静态代理、动态代理和cglib代理的实现
一、代理模式介绍代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。代理模式UML类图:举个例子,我们生活中经常到火车站去买车票,但是人一多的话,就会非常拥挤,于是就有了代售点,我们能从代售...原创 2019-04-09 19:56:02 · 257 阅读 · 0 评论 -
Spring中的xml配置Schema约束
相关概念在使用spring的配置文件时,新添加一个配置文件就需要添加相应的约束,一直没有研究过为什么要有这些约束,这些约束是干什么的。spring在启动的时候需要验证xml文档,约束的作用就是来验证配置文件的xml文档语法的正确性。在项目中其中的一个spring配置文件约束:<?xml version="1.0" encoding="UTF-8"?> <!--...原创 2019-03-31 20:58:37 · 577 阅读 · 0 评论 -
JDK7HashMap的存储结构以及时间复杂度
我们知道HashMap是基于Hash表来设计的,他的底层是数组和链表的结合体,那么HashMap的最大的特点就是快,因为是由键找值。(1)什么是HashMap以及HashMap的构成HashMap是基于哈希表的Map接口实现,用来存储键值对,线程不安全因此也很快,允许null值null键。HashMap实际上是一个数组和链表的结合体。键值对Map.Entry存放在链表里面,数组里面存放的是...原创 2019-03-20 13:01:01 · 7340 阅读 · 8 评论 -
String中创建字符串常量用new和不用new的区别
String实质是字符数组,两个特点:1、该类不可被继承;2、不可变性(immutable)例如 String s1 = new String(“myString”);和 String s1 = “myString”;第一种方式通过关键字new定义过程:1.在程序编译期,编译程序先去字符串常量池检查,是否存在“myString”,如果不存在,则在常量池中开辟一个内存空间存放“myStri...原创 2019-01-19 16:11:33 · 7207 阅读 · 4 评论 -
关于Java对象作为参数传递是传值还是传引用的问题
在Java中,当对象作为参数传递时,究竟传递的是对象的值,还是对象的引用,这是一个饱受争议的话题。若传的是值,那么函数接收的只是实参的一个副本,函数对形参的操作并不会对实参产生影响;若传的是引用,那么此时对形参的操作则会影响到实参。 首先我们来看一句代码:Object obj = new Object();这句话的意思是:创建一个Object对象,再创建一个名为obj的引用,让这个引用指向...原创 2018-12-27 11:10:10 · 626 阅读 · 0 评论 -
Java中String直接赋值和使用new的区别:
String str2 = new String(“ABC”);String str1 = “ABC”;String str1 = “ABC”;可能创建一个或者不创建对象。从JDK1.7版本之后,java String池设置在堆中;如果”ABC”这个字符串在java String池里不存在,会在java String池里创建一个String对象(“ABC”),然后str1指向这个内存地址。...原创 2018-12-27 11:04:41 · 4634 阅读 · 3 评论 -
Lambda表达式与匿名内部类的区别
1:匿名内部类可以为任意接口创建实例-----不管接口中包含多少个抽象方法,只要匿名内部类实现所有的抽象方法即可;但Lambda表达式只能为函数式接口创建实例。2:匿名内部类可以为抽象类甚至普通类创建实例;但Lambda表达式只能为函数式接口创建实例。3:匿名内部类实现抽象方法的方法体中允许调用接口中定义的默认方法;但Lambda表达式的代码块中不允许调用接口中定义的默认方法。...原创 2018-12-27 10:58:50 · 633 阅读 · 0 评论