自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

韩也的博客

有兴趣的伙伴可以加我QQ:1025276839 一起学习一起进步

  • 博客(37)
  • 收藏
  • 关注

原创 java多线程---线程池ThreadPoolExecutor分析

线程池java中的线程池有很多种,首先来看下其中最基础的一种线程池ThreadPoolExecutor。线程池的作用为,减少创建线程和销毁线程的开销,对线程进行复用。所以看源码之前,提出以下问题:在线程池中,空闲期,线程怎么维持?在使用时,线程池怎么创建线程?怎么控制多个线程的并发保存任务的载体是什么。ThreadPoolExecutor的属性关键属性//ctl这个属性在后面的...

2019-03-04 11:17:35 287

原创 ConcurrentHashMap 原理分析

hashMap 在 1.7 和 1.8 中的区别1、 引入了红黑树2、解决了并发环境下,死链的情况(在1.7的rehash中,会进行链表的反转插入,会引发死链问题,java8 中不会,8中是采用修改头部节点的位置来实现)3、1.7 扩容发送在,插入数据之前,会先检查,扩容后插入。 1.8是在插入数据之后,在判断是否需要扩容。4、为什么1.8解决了死链问题还是不安全,在多线程的情况下,可能...

2019-07-16 16:35:18 290

原创 dubbo--源码spi扩展

SPIjava中的spiMETA-INF/services/接口全路径写入实现类全路径dubbo中的spi规范/META-INF/dubbo ;/META-INF/internal;/META-INF/services文件名(全路径) 内容 key=valueExtensionLoader根据官网介绍,dubbo中支持各种领域的spi扩展,如:协议、监听、路由、负载集群等等...

2019-03-20 17:48:44 244

原创 zk实现一个分布式锁

最近在工作做中,使用到了redis的分布式锁,主要采用了其中一个原子操作getAndSet,并且利用了redis单线程的特性操作。这里来写另一种分布式的锁,zk实现的分布式锁。zk的特性1、数据结构zk的数据结构,存储的方式为key-value,存储的结构为文件夹的结构。所以由于是这样的结构,在同级目录下面不存在相同的节点2、节点的特性有序节点持久化节点临时节点3、watc...

2019-03-14 14:41:41 7495

原创 java多线程---TheadLocal分析

ThreadLocal 分析ThreadLocal 作用ThreadLocal 可以看做是一个线程的副本,每个线程中的ThreadLocal都是不一样的。访问ThreadLocal就是在访问只属于线程自己的变量。那么,这个是怎么做到,每个线程都有自己的ThreadLocal?看下面2个方法set public void set(T value) { Thread t = Threa...

2019-03-05 19:37:34 355

原创 java多线程---synchronizedsynchronized分析

synchronized分析使用方法1、修饰方法public synchronized void test(){ }2、修饰对象(锁定的为什么一定高要是对象?)public void test2(){//Todo synchronized (this){ } //todo}//由于是修饰对象,syn的范围由所修饰对象的生...

2019-03-03 15:46:34 155

原创 java多线程---ReentrantLock源码分析

ReentrantLock源码分析基础知识复习synchronized和lock的区别synchronized是非公平锁,无法保证线程按照申请锁的顺序获得锁,而Lock锁提供了可选参数,可以配置成公平锁,也可以配置成非公平锁。通常来说,非公平锁的效率比公平锁要高。一个线程使用syn获取锁,除非该线程成功获取到锁,否则将一直阻塞住。而Lock锁提供了lockInterruptibly()接...

2019-02-21 17:41:32 151 1

原创 java多线程---CopyOnWriteArrayList解析

CopyOnWriteArrayListList是java三大集合中的一个,最最常见的就是ArrayList和LinkedList。简单来讲,ArrayList是数组的数据格式,当它不发生扩容的情况下,add的速度是比较快的。而LinkedList是一个双向链表的数据格式,不存在对容器的限定等等。ArrayList和Vector的区别Vector是线程安全的集合类,ArrayList并不是...

2019-02-12 12:05:53 221

原创 java多线程---原子类分析

多线程原子类解析什么是原子类原子性操作:指一系列的操作为一个单位,不可分割,要么全部成功,要不全部不成功。提到原子类可能会联想到volatile关键字,但是这2者之间是完全不同的。volatile保持了内存的可见性,但是不适用于以下两种情况:写入变量值依赖当前值时。比如 ++a;读写变量值时已经加锁。加锁本身已经解决了内存变量可见性的问题,所以不需要volatile;如何解决原...

2019-02-06 20:51:31 175

原创 Mybatis中TypeHandler的使用

背景在实际项目中,有一个物品表,其中有一个规格的字段,存入了JSON数组的字符串,但是后续在使用实体类的过程中,发现些不方便,到处要转 String 和 String[]很不方便。因此希望可以直接映射。解决发现网上有一个TypeHandler可以做到枚举和数据字段的相互对应,那么用来做数组和String的转化应该也是可以的。代码如下:@MappedTypes({String[].class...

2018-12-26 22:33:53 8874 2

原创 基于Spring的Schema扩展

基于Spring的Schema扩展阅读Spring源码中,发现Spring提供了可扩展Schema的支持,让我想到了其他的框架中的自定义标签是否也是使用了这个。比如,dubbo中的一些可扩展Schema的支持。在翻阅源码后,发现dubbo也是使用了Spring提供的Schema的支持。根据Spring的介绍,分为如下几个步骤:设计配置写对应的Bean编写XSD文件编写NamespaceH...

2018-09-18 23:31:45 642 1

原创 Spring源码(二)--xml配置文件

Spring的配置文件在分析源码中,首先需要了解它的使用,再读源码时就可以了解到,功能对应的源码是怎么运行的,怎么编写的。 首先来看DefaultBeanDefinitionDocumentReader中的parseDefaultElement方法用来对配置文件中的4大默认标签做解析处理,该方法也是在创建bean的之前会调用private void parseDefaultElement...

2018-08-16 22:31:38 220

原创 Spring源码分析(一)

在工作之余,开始了啃Spring源码的艰苦之旅。Spring 加载资源首先,我认为Spring框架在启动时,第一步需要加载对应的配置文件.xml 文件。联系之前的java知识,java中的I/O操作可以读取文件。并且在日常的开发工作中,资源文件的加载也是经常用到的。Spring中提供了相关的类来加载,如下:Resource resource = new ClassPathResou...

2018-08-14 23:25:19 209 1

原创 java-初识多线程(1)

Thread And RunnableThread和Runnable是在java中比较简单的多线程实现方式,也是早期的多线程相关的API。例如:public static void main(String[] args) { Thread thread = new Thread(new Runnable() { public vo...

2018-08-05 15:50:02 200 2

原创 Spring源码构建缺少jar

Spring源码构建时缺少jar学习spring源码的第一步就是需要构建Spring的源码。Github的地址如下 https://github.com/spring-projects/spring-framework 在下载完成后build,并把源码导入idea,发现有报错。缺少这2个objenesis和cglib的jar,可以选择在maven中下载最新的包,手动导入。当然Spring也...

2018-07-30 00:08:01 1296 1

原创 聊聊Mysql索引那些事

什么是索引?索引就是能够快速查找的数据结构索引是一个文件索引的数据结构类型Hash索引二叉树红黑树等等索引的必要从计算机系统的方面来分析索引存在的必要,在ssd出来之前都是机械硬盘,用进行一次io就需要指针在硬盘上面旋转找到合适的地址,然后读取。如下图: 将圆盘的周长展开,可以看到的更直接如下图: 图中所示,当需要查找1时,时间复杂度为1,当...

2018-06-19 00:58:24 483

原创 这就是HashMap

这就是HashMapjava中有3大集合,Map,Set,List 是我们开发必须要掌握的点。你可以花3-5分钟的时间看完这篇文章,我会从源码的角度分析Map中最常用的HashMap(java1.8)。无论您是开发了很多年经验的前辈,还是和我一样刚出来工作的小白,这篇都是不可不看的文章。相关数据结构-ArraryList 用的特别的多,相信很多人都知道它是一个数组的结构,但是本人...

2018-04-29 00:52:37 247 1

原创 springboot+druid sql监控没有显示sql语句

springboot + druid 整合的过程中发现,在 druid/sql.html 中没有显示sql,开始以为是配置的问题,后来发现是包的引用错误了。。。。网上很多的教程都是如下的包:(连接池可以起到作用,但是不会在监控中显示sql)<dependency><groupId>com.alibaba</groupId><artifactId&...

2018-02-13 15:25:49 12987 8

原创 spring security 中异常 org.springframework.expression.spel.SpelEvaluationException

异常:org.springframework.expression.spel.SpelEvaluationException: EL1057E: No bean resolver registered in the context to resolve access to bean ‘myrbacService’在springboot中添加了springsecurity,在配置权限的时候发生了...

2018-02-11 11:06:23 10819

原创 springcloud注册中心配置集群

部署springcloud高可用注册中心使用eureka实现分布式服务治理,在搭建eureka的注册中心时,一般有如下配置eureka.client.registerWithEureka =false //本身不注册为服务eureka.client.fetchRegistry = false eureka.server.enableSelfPreservation=false //

2018-02-07 18:01:53 789

原创 springboot打包找不到class

springboot项目maven打包后找不到依赖包中的classjava.io.FileNotFoundException:xxxxxxxx.class :解决方法:给被依赖的包中pom加 org.springframework.boot spring-boot-maven-plugin

2018-02-05 22:13:24 8349 2

原创 Illegal access:this web application instance has been stopped already. XXXXXXXX

如下图所显示的类似错误,是由于重启服务器以后之前的进程没有完全关闭:解决的方法:tomcat服务器,在server.xml中把对应的reloadable="true"改为reloadable="false"就可以了

2017-08-09 10:00:05 737

原创 jdbc-批操作和元数据

多次的数据库操作时使用batch可以节省运行的时间。是用batch批操作数据库: DriverManager.registerDriver(new OracleDriver()); String url="jdbc:oracle:thin:@127.0.0.1:1521:xe"; String user="scott"; String password="tiger";

2017-05-24 19:04:45 315

原创 jdbc-连接池的简单使用

/*这里使用的是c3p0的连接池,使用的jar包为c3p0-0.9.1.2.jar,使用的数据库为oracle*/下面直接上代码:连接池的设置代码public class ConnPool { private static ComboPooledDataSource dataSource;//数据源 static { try { dataSource=new Co

2017-05-24 18:36:12 225

原创 java-构造器

构造器的总结:1、java会给一个类中定义一个无參构造器2、构造器在继承中,不能被子类继承3、构造器调用有this()和super()2种,都必须卸载构造器的第一行4、如果构造器中没有显示调用父类构造器的语句,那么java会在第一行自动加入一个super()5、对构造器的调用一直会延伸到object多态:使用  父类  变量名=new 子类构造方法()多态的特性

2017-05-14 21:41:11 178

原创 java-重写override和重载overload

重写· 1、子类重写方法的权限修饰符大于等于父类的方法权限修饰符2、子类重写方法的返回值和父类的返回值必须相同(子类的返回值类型可以是父类返回值的子类)3、方法名相同4、参数列表必须相同(参数的值、个数、顺序)5、只能重写一次6、子类的重写不能抛出比父类更多的异常 重载重载方法只要求方法名相同和参数列表不同,其他都任意;可变长参数:在参数中可以设置任意个

2017-05-14 21:28:15 170

原创 java-方法和变量

构造方法和普通方法构造方法普通方法语法无返回值定义,名称必须是类名有返回值定义,方法名是自定义功能 创建对象,初始化属性值实现自定义的功能调用 new 创建对象对象.方法()互相调用构造方法可以调用普通方法 普通方法不能调用构造方法默认 无参构造器一个

2017-05-10 09:28:45 187

原创 java变量和数据类型

java数据类型划分:基本类型:8种整形:包括十进制,八进制,十六进制byte 1字节(8个位) -128~127short 2字节(16位)int    4字节(32位)long 8字节(64字节)   例如默认100为int型,如果要表达为long,需要加L或l浮点数float 4字节 单精度   例如3.14的默认数据类型为double ,如果要表达float

2017-05-08 19:45:11 181

原创 java安装与配置

java的安装与配置一、首先介绍在JAVA官网下载的文件JDK:负责源代码的编译为字节码文件,不负责运行JRE(Java Runtime Environment):Java运行环境,负责运行java程序的JVM(Java VirtualMachine):Java虚拟机,是JRE的一部分,是运行java的核心机制二、环境配置JAVA_HOME:可选,用于其它java产品自动找

2017-05-08 19:34:16 198

原创 Hibernate—session与transaction

session可以理解为操作数据库的对象。transaction:hibernate对数据的操作都是封装在事务中,默认为非自动提交。所以使用seesion,先把session封装在事务中,然后提交事务。也可使用session的dowork()方法,并设置提交事务模式。来变成自动提交jdbc的模式。junit测试用例:package Test;import java.sql.Co

2016-12-03 18:25:04 271

原创 Hibernate—初见

搭建Hibernate环境eclipse需要手动搭建,比较的麻烦。1、下载安装hibernate插件。2、手动创建持久化类。3、创建关系映射文件。具体的操作百度上面有很多很多,就不再重复了。我使用的是MyEclipse2014,破解版本。可以自动的创建hibernate。百度上也有很多,可以很快的找到。关系映射的创建方法,在MyEclipse中也可以自动创建,关系映

2016-12-02 21:26:04 193

原创 Struts2—拦截器实现权限控制

在Struts2中,有内置的拦截器,在struts-core的struts-default.xml中,有一些框架自身默认配置的拦截器。在拦截器中,有一个拦截器栈,在拦截器栈中拦截器的顺序非常的重要。action会按照里面的顺序去通过拦截器。、只要在定义包的过程中继承struts-default包,defaultstack就是默认的拦截器栈、当为一个显式的拦截器定义一个拦截器时,则不

2016-11-25 21:25:08 272

原创 Struts2—拦截器之计算action调用时间

在上一篇文章中,记录了拦截器的使用方式有2种。这次学习的内容便是使用继承abstractinterceptor类来实现拦截器的简单应用。首先我们创建2个jsp页面:timestart.jsp 点击此处开始计算Action时间 timeend.jsp   action执行完毕  然后我们来创建一个action:timeaction.java,我们等下通过拦截器来计算

2016-11-22 15:52:17 585

原创 Struts2—拦截器(一)

首先来温习一下整个Struts2的架构图在这个架构图中,可以看到interceptor就是拦截器,在Action的执行前后分别都是需要执行拦截器。拦截器的功能有很多,例如:数据转移、数据校验、类型转换等等。工作流程是一递归的过程。如下:定义拦截器:方法一:实现interceptor接口void init()初始化拦截器所需资源void destroy()

2016-11-21 22:46:45 231

原创 struts2—处理结果类型

struts2的处理流程用户请求→struts2框架→控制器→struts2框架→视图资源/success.jsp当result中的name值默认为success。INPUT   action的执行需要前端获得参数,INPUT代表这个参数传递的页面,对一些参数进行验证,验证不通过时,返回INPUT页面。验证第一种情况,参数的类型错误。这是一个user类public class Us

2016-11-19 20:18:18 504

原创 Struts2—action参数传递

Struts2里面action参数的传递有3中方式。一、Action 属性接收首先我们创建一个login.jsp文件作为登入界面,创建一个LoginAction.java文件,在相应的xml里配置好这个Action。 姓名: 密码: xml配置:(success作为一个跳转页面) /success.jsp Lo

2016-11-16 20:28:27 670

原创 struts2—动态方法调用

struts2动态方法调用常用的有3中,这里我记录一下最推荐的使用方法。 方法调用就是为了解决一个action调用多个请求的处理,一面action太多引起不便 重配符方法。下面这一部分是最初始的一个状态,没有添加方法。 /result.jsp /add.jsp /update.jsp 如何使用重配符动态来添加一个方法,下面这个

2016-11-15 22:16:39 261

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除