- 博客(21)
- 收藏
- 关注
原创 URLClassLoader
自定义目录标题package com.example.demo;import org.junit.Test;import java.io.*;import java.net.URL;import java.net.URLClassLoader;import java.nio.file.Paths;import java.util.*;import java.util.jar.JarEntry;import java.util.jar.JarFile;public class T
2020-05-14 00:21:14 232 5
原创 【Java8】 行为化参数
### 需求 有一个苹果集合appleList ,筛选出红色的苹果 。苹果实体类如下public class Apple { private String color; private int weight; //getter and setter}解决方案一写一个过滤红色苹果的方法即可: public static List<Apple> filterRedAppl
2017-06-25 21:13:47 384
原创 [设计模式] 构建者模式
构建器模式主要是来解决多个属性对象创建的问题,为多个属性的对象创建提供了一个很好的解决方案,使得客户端的代码更容易书写。
2017-03-25 14:57:24 307
原创 [设计模式] 单例模式
单例模式是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。在Java中,这个模式需要注意主要是线程安全问题。
2017-02-27 17:01:57 238
原创 [JVM] 类加载机制
类加载器时虚拟机重要一部分,负责将class文件加载到虚拟机中,只有在虚拟机中class文件才能发挥其作用,文本将了解类加载的基本机制,加深对虚拟机的理解。
2017-02-24 13:33:45 259
原创 [JVM] 垃圾回收机制
JAVA与C++的一个区别在于Java是基于JAVA虚拟机的,JAVA虚拟机会帮我们自动回收内存,那么JAVA虚拟机是怎么实现垃圾回收的呢。
2017-02-22 16:49:17 211
原创 [Java并发] AbstractQueuedSynchronizer实现(一)
AbstractQueuedSynchronizer是 ReentrantLock,CountDownLatch等的底层实现的框架。
2017-01-12 17:16:38 308
原创 [Mybatis] Mapper接口原理分析
上篇文章中,是直接用SqlSession.selectList()去执行一条SQL的,但是作为 一个ORM框架,我们往往是调用接口去执行,如下所示:“` InputStream inputStream = Resources.getResourceAsStream(“mybatis-config.xml”); SqlSessionFactoryBuilder builder =
2016-12-29 12:39:26 742
原创 [Mybatis] Mybatis运作流程分析
因为机缘关注起来Mybatis,本文将探索Mybatis的整体执行流程,了解其大概是如何运作的。Mybatis示例 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactoryBuilder builder = new SqlSessionFactoryB
2016-12-28 17:47:34 329
原创 String操作符 “+” 原理
public class StringOperator { public static void main(String[] args) { String a = "a"; String b = "b"; String ab = a+b; }}代码如上,很简单,使用javap -c 反编译看下。 本文使用的是JDK 1.8
2016-12-05 19:10:59 723 2
原创 SpringMVC源码分析(二)-URL映射的注册
首先我们来看下AbstractHandlerMethodMapping这个类,它实现了InitializingBean接口,里面有个afterPropertiesSet()方法。这个接口是spring-beans这个组件的内容,想一想,平时使用搭建SpringMVC的时候,是不是把这个jar包也扔到项目里头了?对于spring-beans这个组件在这里就 不拓展了,我们只要知道实现了Init
2016-12-04 17:25:08 1253
原创 [MySQL] 聚簇索引
聚簇索引并不是一种单独的索引类型,而是一种数据存储的方式。聚簇索引表(InnoDB)的数据是放在叶子节点,而非聚簇索引(MyISAM)的的叶子节点是存放指向数据行的指针。 要是每个索引列都存放着数据,那么将产生巨大的存储消耗,故一般只有在主键列的索引(主键索引)的叶子节点存放着数据,其它非主键索引叶子节点将指向主键索引,如果没有主键,将会选择一个唯一非空作为聚簇索引,如还是没
2016-11-26 12:13:23 377
原创 [MySQL] 索引类型
MySQL的索引是由存储引擎层实现的,而不是服务器层实现的。所以,不同的存储引擎支持的索引是不一样的。常见的索引类型B+ 树索索引以B树来实现,特性是非叶子结点只存储键,叶子字节存储数据(聚簇索引)或者指向数据的物理地址(非聚簇索引)。适用于全键值,键值范围,及最左前缀键只查找。对于多列索引值只适合于最左前缀查找。哈希索引Memory支持哈希索引,哈希索引是基于哈希表实现的,存储引擎将所有的索引列计
2016-11-25 10:03:46 318
原创 SpringMVC源码分析(一)
为什么要看SpringMVC源码工作中使用公司内部封装的框架,入参处理繁琐,响应方法还要进行XML配置,卧槽,还是多个XML的配置,这感觉完全是以前的老古董的东西,用起来心都碎了。想想以前用的SpringMVC,使用体验完爆现在使用的框架,让人好想了解其内部是如何实现的。基于上面的疑惑,带着下面三个疑问去阅读SpringMVC框架:请求如何映射到RequestMapping方法,参数如何传递怎样
2016-11-21 18:50:55 388
原创 AtomicInteger源码分析
要解决什么问题最常需要解决的问题是i++ 这个语义在多线程中是不安全的。虽然从语法上看上去是一个操作,实际上分为了三步。取出i的值,i+1,将i+1的计算结果赋值给i。假设i的初始值为5,一种不安全的情况如下: - 1 2 3 4 5 6 线程1 i(5) i+1(6) i(6) 线程2 i(5) i+1(6)
2016-11-17 22:21:53 258
原创 Java多线程: CAS
悲观锁与乐观锁悲观锁:悲观锁思想认为如果多个线程中使用共享资源,则它们肯定会同时进行修改从而引起冲突,悲观锁的解决方式是共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程。synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。乐观锁:乐观锁思想认为如果多个线程使用共享资源,它们修改应该是有先后顺序的,不会同时进行修改,如果真的有冲突则后面修改失败。乐
2016-11-16 17:38:05 1457
原创 ConcurrentModificationException异常分析
什么是ConcurrentModificationException集合如ArrayList在迭代时进行修改则会报出ConcurrentModificationException异常如何实现首先看下modCount,这个值是在ArrayList创建的时候初始化为0,并且对集合进行更新操作(add,remove等)时不断递增,确保每次进行更新操作后modCount的值都是不一样的,下面是remove(
2016-11-15 21:26:33 238
原创 [MySQL] MySQL使用utf8mb4字符集
MySQL使用utf8mb4字符集更改配置文件my.ini[client]port=3306default-character-set = utf8mb4[mysql]default-character-set = utf8mb4[mysqld] character-set-client-handshake = FALSE collation-server = utf8mb4_un
2016-10-08 21:19:59 377
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人