自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Thxxxxxx

一枚爱剪辑,爱网球,爱羽球,爱乒乓,爱滑雪,爱滑冰就是不爱学习的计算机渣渣记录日常所学

  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 PostProcessor

BeanPostProcessor创建Bean的后置处理器,在创建Bean对象前后或者初始化方法前后执行BeanFactoryPostProcessor在BeanFactory标准初始化之后调用,来定制和修改BeanFactory内容。在Bean的定义已经被加载,但还有创建对象的时候执行。BeanDefinitionRegistryPostProcessor给容器中加入额外的Bea...

2019-06-30 10:04:08 1006

转载 简单AOP实现过程

切面类实现:@Aspectpublic class LogAspects { //抽取公共的切入点表达式 //1、本类引用 //2、其他的切面引用 @Pointcut("execution(public int com.atguigu.aop.MathCalculator.*(..))") public void pointCut(){}; //@Before在目标方...

2019-06-29 10:01:20 474

原创 Spring注解 (更新中)

@Configuration 表明当前类为配置类@ComponentScan 扫描组件,注册到容器@Component @Service @Controller 表明该类为组件类@Bean 在方法上使用返回一个对象注册到容器中@Lazy 单实例Bean 不会在容器启动时注册到容器中,而是在第一次使用@Scope Bean的单例的还是多例的@PropertyS...

2019-06-28 19:54:06 92

原创 Bean的生命周期

1.指定初始化方法和销毁方法@Bean(initMethod="init",destoryMethod="desroty")2.让Bean实现InitializingBean接口和DisposableBean接口3. @PostConstruct @PreDestroy4.BeanPostProcessor 的postProcessBeforeInitialization方法和...

2019-06-28 18:38:17 109

原创 Spring容器中导入组件方式

1. componentscan包扫描+组件注解(@controller @service @ component )2. 在方法上添加@Bean id默认为方法名3. @import在配置类上@Import({Color.class,Red.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.cla...

2019-06-28 11:09:44 263

原创 LinkedBlockingQueue的put,take方法

put操作:在LinkedBlockingQueue中有putlcok和takelock俩把锁,put操作使用putlock这把锁,利用lockInterruptibly方法加锁,该方法的作用为:如果该线程被标记为中断,可抛出异常。加锁之后,判断count是否等于容量,相等的话条用await()方法线线程加到条件队列中去,直到唤醒,把元素加入到队列,然后判断一下count+1如果还没有达到容量值...

2019-06-27 16:42:16 1664

原创 几个需要扩容的集合

ArrayListprivate void grow(int minCapacity) { int oldCapacity = elementData.length; // 新容量为旧容量的1.5倍 int newCapacity = oldCapacity + (oldCapacity >> 1); // 如果新容量发现比需要的容量还小,则以需要...

2019-06-27 15:28:28 209

原创 CopyOnWriteArrayList的addIfAbsent()方法

大致执行过程:首先获取当前数组存取元素,然后找我们要插入数据的下标值,找到了直接返回false,没找到的话,上锁,再次判断数组是否发生变化,这里多一次判断,我认为是为了防止这种可能性的出现:在判断完是否存在元素和加锁之间,另一个线程加入了我们要加的元素,不判断的话,那么同一个元素就有可能出现俩次,违背了addIfAbsent的意愿。加锁之后,如果数组并没有变的话,那么就执行CopyOnWrite...

2019-06-27 10:05:59 2541 4

原创 大话ConcurrentHashMap的put,get过程

put最最最一开始得检查桶是否进行初始化,然后确定判断所放桶中是否有元素,没有元素的话,那么就用CAS的方式添加元素,当然有可能失败,有可能其他线程已经抢占先添加,这个过程在一个死循环里,失败了再从头来一次,判断桶是否初始化,桶内是否有元素等等,如果此时桶内有元素了,那么判断桶内第一元素的hash值是否为MOVED,说明正在扩容,那么此线程就会帮助扩容,如果不是的话,那么就对一个元素synch...

2019-06-26 21:55:48 3553 5

原创 大话TreeMap的put,get过程

get首先会判断在初始化TreeMap的时候是否传入了外部选择器Comparator,如果传入了,那么利用Comparator遍历整棵树,找到要存放的位置,利用Comparator的compare()方法比较树根节点p的key和传入的key,compare方法等于0说明相等,那么直接返回根节点,小于0的话p=p.left,大于0的话p=p.right。若没有找到返回null。没有传入Compa...

2019-06-26 16:06:58 277

转载 TreeMap方法源码

构造方法public TreeMap() { comparator = null;}/** * 使用传入的comparator比较两个key的大小 */public TreeMap(Comparator<? super K> comparator) { this.comparator = comparator;}/** * key必须实现Com...

2019-06-26 10:29:50 109

原创 大话HashMap的put,get过程

put最先判断桶的长度是否为0,为0的话则需要先对桶进行初始化操作,接着,求出hashcode并通过扰动函数确定要put到哪个桶中,若桶中没有元素直接插入,若有元素则判断key是否相等,如果相等的话,那么就将value改为我们put的value值,若不等的话,那么此时判断该点是否为树节点,如果是的话,调用putreeval方法,以树节点的方式插入,如果不是树节点,那么就遍历链表,如果找到了ke...

2019-06-25 20:12:42 1398

转载 HashMap方法源码

三种构造函数public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted}public HashMap(int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR);}public ...

2019-06-25 18:19:00 194

原创 LinkedList方法源码

在队首队尾添加元素方法// 从队列首添加元素private void linkFirst(E e) { // 首节点 final Node<E> f = first; // 创建新节点,新节点的next是首节点 final Node<E> newNode = new Node<>(null, e, f); // 让...

2019-06-25 11:07:34 132

原创 ArrayList方法源码

三种构造函数不带参数的构造函数public ArrayList() { // 如果没有传入初始容量,则使用空数组DEFAULTCAPACITY_EMPTY_ELEMENTDATA // 使用这个数组是在添加第一个元素的时候会扩容到默认大小10 this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}带初始容...

2019-06-25 10:29:05 134

原创 一段CyclicBarrier代码

如图所示,这是需求,下面为代码实现// 订单队列Vector<P> pos;// 派送单队列Vector<D> dos;// 执行回调的线程池 Executor executor = Executors.newFixedThreadPool(1);final CyclicBarrier barrier = new CyclicBarrier(2...

2019-06-24 22:07:53 83

原创 杂七杂八

JVM会把虚拟机栈和本地方法栈中正在引用的对象、静态属性引用的对象和常量,作为GC Roots。启动类加载器-》扩展类加载器-》应用加载器lib lib/ext classpathServlet规范中ServletContext是tomcat的Context实现的一个成员变量,而Spring的ApplicationCo...

2019-06-24 19:50:41 274

转载 Mybatis查询执行流程

String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);Sql...

2019-06-24 11:06:16 181

转载 Mybatis的缓存

一级缓存: (本地缓存):sqlSession级别的缓存。一级缓存是一直开启的;SqlSession级别的一个Map 与数据库同一次会话期间查询到的数据会放在本地缓存中。 以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库; 一级缓存失效情况(没有使用到当前一级缓存的情况...

2019-06-22 19:26:50 123

原创 InnoDB和MyISAM有哪些不同

MyISAM使用前缀压缩技术使得索引更小,但InnoDB则暗战原数据格式进行存储MyISAM索引通过数据的物理地址位置引用被索引的行,而InnoDB则根据主键引用被索引的行MyISAM支持空间索引,可以用作地理数据数据。MylSAM不支持事务,最小锁范围为表锁,InnoDB支持事务,并且支持行锁MylSAM对于count(*) 的值有固定存储地址,InnoDB对于count(*)需...

2019-06-22 09:44:45 167

原创 JDK JRE JVM

JVM JRE ↗ Java核心类库JDK ↘ 开发诊断工具...

2019-06-21 15:38:19 575

原创 @Param

Mapper.class中有个接口方法public User getUserByIdandName(Integer id,String name);Mapper.xml<select id="getUserByIdandName" resultType="user">select * from user where id=#{param0} and name=#{p...

2019-06-20 20:00:11 2131

转载 Mysql和Oracle获取自增主键

mysql<!-- parameterType:参数类型,可以省略, 获取自增主键的值: mysql支持自增主键,自增主键值的获取,mybatis也是利用statement.getGenreatedKeys(); useGeneratedKeys="true";使用自增主键获取主键值策略 keyProperty;指定对应的主键属性...

2019-06-20 19:44:55 334 1

原创 Mybatis的全局配置文件中的标签

先来看下整体结构图如下: propertise使用properties来引入外部properties配置文件的内容。 resource:引入类路径下的资源 url:引入网络路径或者磁盘路径下的资源<properties resource="dbcon...

2019-06-20 18:30:19 991

原创 Mybatis简约执行过程

SqlsessionFactory sqlsessionFactory=getSqlsessionFactory();SqlSession openSession =sqlsessionFactory.openSession();EmployeeMapper mapper=openSession.getMapper(EmployeeMapper.class); //获得代理对象Em...

2019-06-20 15:35:49 125

原创 公平锁的lock()方法走读

首先我们先搞明白继承关系,ReentrantLock的内部类FairSync extends Syncextends AbstractQueuedSynchronizer ReentrantLock中的内部类FairSync中lock方法,调用了AbstractQueuedSynchronizer中的acquire()方法。 final void lock() { ...

2019-06-19 21:59:51 436

原创 内存模型和锁

由于cpu处理速度和内存读取速度相差太远,同时cpu对内存的读取消耗要大于对缓冲的读取,所以为每个cpu加了自己的缓冲区域。从而导致了线程之间的可见性问题。在程序执行期间,会有虚拟机编译优化和处理器编译优化。从而导致了线程之间的有序性问题。java引入了内存模型,它描述了多线程代码中哪些行为是合法的。按照我们的要求禁用缓冲和编译优化。其中,votilate,final,synchron...

2019-06-19 16:38:35 147

原创 ArrayBlockingQueue中的方法

添加操作(1)add(e)时如果队列满了则抛出异常;(2)offer(e)时如果队列满了则返回false;(3)put(e)时如果队列满了则使用notFull等待;(4)offer(e, timeout, unit)时如果队列满了则等待一段时间后如果队列依然满就返回false;删除操作(1)remove()时如果队列为空则抛出异常;(2)poll()时如果队列为空则返回...

2019-06-15 22:22:40 1186

转载 HashMap的put方法讲解

public V put(K key, V value) { // 调用hash(key)计算出key的hash值 return putVal(hash(key), key, value, false, true);}static final int hash(Object key) { int h; // 如果key为null,则hash值为0,否则调用k...

2019-06-13 19:56:48 769

原创 ArrayList各方法的时间复杂度

add(E e)方法添加元素到末尾,平均时间复杂度为O(1)。add(int index, E element)方法添加元素到指定位置,平均时间复杂度为O(n)。get(int index)方法获取指定索引位置的元素,时间复杂度为O(1)。remove(int index)方法删除指定索引位置的元素,时间复杂度为O(n)。remove(Object o)方法删除...

2019-06-12 21:58:52 11296 6

转载 XML的验证模式

DTDDTD(Document Type Definition),即文档类型定义,为 XML 文件的验证机制,属于 XML 文件中组成的一部分。DTD 是一种保证 XML 文档格式正确的有效验证方式,它定义了相关 XML 文档的元素、属性、排列方式、元素的内容类型以及元素的层次结构。其实 DTD 就相当于 XML 中的 “词汇”和“语法”,我们可以通过比较 XML 文件和 DTD 文件 来看文...

2019-06-11 21:48:29 254

原创 0611-VIVO

java虚拟机内存java垃圾回收机制java收集器数据库索引画B+数B+树插入数据mybatis自动生成简单sqlxml中#{}和${}成员变量和方法变量抽象类和接口LinkedList源码LinkedList和ArrayList...

2019-06-11 21:04:46 240

转载 为什么TCP连接至少3次握手

A 要发起一个连接,当发了第一个请求杳无音信的时候,会有很多的可能性,比如第一个请求包丢了,再如没有丢,但是绕了弯路,超时了,还有 B 没有响应,不想 和我连接。 A 不能确认结果,于是再发,再发。终于,有一个请求包到了 B,但是请求包到了 B 的这个事情,目前 A 还是不知道的,A 还有可能再发。 B 收到了请求包,就知道了 A 的存在,并且知道 A 要和它建立连接。如果 B 不乐意建立连接,则...

2019-06-07 22:13:59 98

转载 转发网关

服务器 A要访问服务器 B。首先,服务器 A 会思考,192.168.4.101 和我不是一个网段的,因而需要先 发给网关。那网关是谁呢?已经静态配置好了,网关是 192.168.1.1。网关的 MAC 地址是多少呢?发送 ARP 获取网关的 MAC 地址,然后发送包。包的内容是这样的:源 MAC:服务器 A 的 MAC目标 MAC:192.168.1.1 这个网口的 MAC源 I...

2019-06-07 16:28:31 2425 1

转载 Condition的await()方法

public final void await() throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); Node node = addConditionWaiter(); //释放同步状态(锁) int savedStat...

2019-06-03 10:26:13 4088

转载 HashMap中hash函数怎么是实现的?

我们可以看到,在 hashmap 中要找到某个元素,需要根据 key 的 hash 值来求得对应数组中的位置。如何计算这个位置就是 hash 算法。前面说过,hashmap 的数据结构是数组和链表的结合,所以我们当然希望这个 hashmap 里面的元素位置尽量的分布均匀些,尽量使得每个位置上的元素数量只有一个。那么当我们用 hash 算法求得这个位置的时候,马上就可以知道对应位置的元素就是我们...

2019-06-02 20:48:24 1812

K-均值聚类算法中的testSet.txt

机器学习实战这本书中的数据集文本。

2019-04-20

空空如也

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

TA关注的人

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