- 博客(20)
- 收藏
- 关注
原创 spring初始化方法的执行顺序以及其原理
Spring中初始化方法的执行顺序首先通过一个例子来看其顺序/** * 调用顺序 init2(PostConstruct注解) --> afterPropertiesSet(InitializingBean接口) --> init3(init-method配置) */public class Test implements InitializingBean { pu...
2018-11-13 19:11:24 3571
原创 阅读HashMap(1.8)源码做的一些笔记
相对于JDK1.6,在JDK1.8中HashMap的一些算法是有变化的,在1.8引入了红黑树,当一个Hash桶中元素个数大于一定值得时候,会把链表转为红黑树,降低了查询时的时间复杂度,还有就是hash桶中的链表,摒弃了1.6中采用的头插法(扩容的时候在多线程下可能会引起死循环)采用了尾插法。然后再扩容的时候,不再重新计算一个节点所在的hash桶的下标,而采用了Hash&oldCap的算法,...
2018-11-12 19:03:41 195
原创 阅读HashMap(1.6)源码所做的一些记录
HashMap是用来存放键值对对的,其底层实现是数组+链表(JDK1.6),而且在多线程的情况下它是不安全的,下面是基于JDK1.6的常用功能的源码分析。一、构造方法和一些重要的属性1、几个属性// 默认的初始容量static final int DEFAULT_INITIAL_CAPACITY = 16;// 最大容量static final int MAXIMUM_CAPACITY...
2018-11-12 18:59:03 266
原创 mybatis笔记-mybatis如何通过只需要配置接口就能实现数据库的操作
在用mybatis的时候,我们只需要写一个接口,然后服务层就能调用,在我们的认知中,是不能直接调接口的方法的,这个其中的原理是什么呢?由于自己比较好奇,就取翻了一下mybatis的源码,一下是做的一些记录。通过一个最简单的例子来揭开它的面目。@Testpublic void testDogSelect() throws IOException { String resource = ...
2018-11-09 19:38:22 823
原创 阅读LinkedList源码做的一些记录
LinkedList在JDK1.6的实现是基于双向环形链表,在JDK1.8依然是双向链表,但不再是环形的,本文是基于JDK1.8的源码来解析的一、构造方法以及部分成员变量1、长度transient int size = 0;2、头结点和尾节点transient Node<E> first;// 头结点transient Node<E> last;// 尾节点...
2018-11-08 19:31:29 124
原创 阅读线程池相关的代码的记录
线程池源码探索一、构造方法此构造方法中,产生线程的工厂使用了默认的工厂,而任务拒绝策略也是采用默认的public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) { ...
2018-11-08 19:01:05 148
原创 阅读ConcurrentHashMap源码的一些记录
在多线程的环境下,HashMap不能满足我们的要求,而Hahstable效率太低,一般会推荐大家用ConcurrentHashMap,ConcurrentHashMap使用分段锁,能够让锁的粒度更小,能够很大程度上提高并发的效率。本文为基于JDK1.6的源码探索。一、构造方法以及一些属性1、一些属性// 默认的初始容量static final int DEFAULT_INITIAL_CAP...
2018-11-08 18:47:40 144
原创 阅读Vector源码记录的一些笔记
在多线程的情况下,ArrayList和LinkedList都是线程不安全的,Vector是线程安全的,ArrayList是基于数组实现的,LinkedList是基于双向链表实现,而Vector的实现也是基于数组的,从数据结构来看,Vector和ArrayList应该很像,实时也是如此,基本上两者的实现逻辑是一样的,只是Vector的大部分方法为了保证其在并发环境下安全性,都会加上关键字synchr...
2018-11-08 18:20:49 106
原创 阅读ArrayList源码的一些记录
ArrayList的底层是基于数组实现的,但是我们知道数组的长度一旦确定就不能够再次变化,ArrayList的长度是可以变化的,其实就是在需要扩容的时候,重新生成一个数组,并把原数组中的元素放到新的数组中,用新的数组替代就得数组,就完成了ArrayList的扩容。本文是基于JDK1.8的源码,同时也会提到一些和JDK1.6的一些差别一、构造方法1、给定初始大小的构造方法public Arr...
2018-11-08 18:13:47 171
原创 Mybatis之插件(plugin)
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:·Executor (update, query, flushStatements, commit,rollback, getTransaction, close, isClosed)·ParameterHandler (getParameterObject, setPa...
2018-07-02 19:33:20 1743
原创 Mybatis之typeAliases配置
在mybatis中我们经常配置,别名来简化我们的配置文件书写,其中配置别名的方式我们常用的一个是直接配置,另一个是配置package来让mybatis进行扫描。我们来看一下mybatis对这个标签的解析代码。在mybatis的XMLConfigBuilder类中的parseConfiguration方法,集合了对各种配置属性的解析,其中有一句this.typeAliasesElement(roo...
2018-06-24 16:09:52 4391
原创 Mybatis配置文件之properties的解析
今天通过源码的角度来看mybatis对properties属性的解析首先在配置文件中配置Properties属性,配置如下:<properties resource="prop.properties"><!-- 也可以配置url,但url和resource只能存在一个 --> <property name="username" value="username"...
2018-06-24 14:59:26 5281 1
原创 JAVA的动态代理
一般而言,java的动态代理分两种,一种是JDK代理机制,一种是cglib代理。JDK代理:这种代理方式我们必须提供接口。首先声明一个接口public interface IUserDao { void sayHello();} 然后实现此接口(要代理的类一定要实现接口)public class UserDao implements IUserDao { public void ...
2018-06-16 17:01:29 175
原创 Mybatis实现自定义TypeHandler
本文主要记录学习mybatis自定义TypeHandler实例。本实例是java中的List类型的数据存入数据库转为varchar类型首先是POJO的内容如下public class Hobby { private Long id; private List<String> hobbys; public Long getId() { return...
2018-06-10 18:22:09 6148
原创 Mybatis在IDEA中找不到mapper映射文件
刚开始在IDEA中做用Mybatis查数据库中的数据时,报mapper映射文件找不到,害的我检查了好几次配置的路径是不是正确,但是看了好几遍都没有发现有拼写错误。(我记得以前在eclipse中这样写是没问题的)<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//myba...
2018-06-09 16:47:57 21195 1
原创 JAVA的静态分派和动态分派
静态分派 : 以下是静态分派的测试代码public class StaticDispatch { static abstract class Human{} static class Man extends Human{} static class Woman extends Human{} public static void say(Human human){
2017-10-19 21:07:20 243
原创 js中小数运算精度丢失问题
在js中做一些计算的时候,如果直接计算有可能造成精度丢失,比如在计算1.79 + 0.12的时候,直接计算的结果就是1.9100000000000001,但是我们知道正确的计算结果应该1.91.我的解决办法如下(直接放代码)<html> <body> <input type="button" name="name" value="xxxx" onclick="test()"/
2017-06-14 18:40:19 4084
原创 javascript中json、回调函数、匿名函数的一些测试
var person = {name:"张三",sex:"男",age:"13",address:[{p:"粤",c:"深",s:"南京路"},{p:"湘",c:"长",s:"西御街"}],testclick:function(){alert("hello world!")}}; function student(){alert("student");} person.student =s
2017-06-08 19:41:20 911
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人