- 博客(242)
- 资源 (12)
- 收藏
- 关注
原创 Ehcache源码解析——配置文件解析
首先,我们来看看Ehcache的初始化时序图。 从时序图可以看出,Ehcache内部是使用SAX来解析配置文件的。一般来说,XML文件的解析就是将配置文件解析成配置对象,下面是Ehcache的配置文件和配置类。ehcache.xml<?xml version="1.0" encoding="UTF-8"?><ehcache xmlns:xsi="http:...
2018-04-23 09:25:34 1069
原创 shell常用操作
一、获取本机ip地址local_ip=`/sbin/ifconfig eth0 |grep "inet addr"| cut -f 2 -d ":"|cut -f 1 -d " "`或local_ip=`/sbin/ifconfig eth0 |grep "inet addr"| awk -F ":" '{print $2}'|awk '{print $1}'`或l...
2018-04-12 08:59:27 227
原创 Redis主从复制
一、配置主从复制 参与复制的Redis实例划分为主节点(master)和从节点(slave)。默认 情况下,Redis都是主节点。每个从节点只能有一个主节点,而主节点可以 同时具有多个从节点。复制的数据流是单向的,只能由主节点复制到从节 点。在从节点中,可以通过以下三种方式配置复制:在配置文件中加入slaveof{masterHost}{masterPort}随Redis启动生 ...
2018-04-01 13:20:34 433
原创 Tomcat参数详解
<Connector port="8080" protocol="HTTP/1.1" maxPostSize="-1" maxHttpHeaderSize="8192" maxConnections="10000" acceptCount="1000" connectionTimeout="3000"
2018-03-31 23:58:13 1363
原创 Spring AOP原理解析——创建代理
网上有很多分析Spring AOP的源码的文章,但大部分都是从配置文件入手,晦涩难懂。下面我们换一种思路,从AOP的原理及整体架构着手,来看看Spring AOP是如何玩转起来的。 我们都知道,Spring-AOP时基于动态代理来实现的,而实现动态代理主流的有两种方式,一种是JDK动态代理,另一种是Cglib动态代理。下面我们主要以JDK动态代理为例来讲解Spring-AOP是如何实现的...
2018-03-22 09:36:09 822
转载 Redis容量评估
一.Redis常用的数据结构在进行Redis的容量评估之前,有必要了解一下Redis常用的数据结构。1.SDS redis没有直接使用c语言传统的字符串(以空字符为结尾的字符数组),而是自己创建了一种名为SDS(简单动态字符串)的抽象类型,用作redis默认的字符串。//SDS的定义如下(sds.h/sdshdr):struct sdshdr { int le...
2018-03-18 10:51:53 20088 3
原创 如何处理CPU负载过高
方法一第一步:找到占用CPU过高的进程的pid 使用top命令,然后按shift+p按照CPU排序第二步:找到进程中消耗资源最高的线程的id 使用top -H -p [进程id]第三步:将线程id转换为16进制(字母要小写) 使用echo 'obase=16;[线程id]' | bc或者printf "%x\n" [线程id] 【bc是linux的计算器命令】第四步:查看线程状...
2018-03-15 09:49:08 17228 1
原创 JVM如何处理StackOverflowError
如何模拟StackOverflowError,可以参考: http://blog.csdn.net/u011983531/article/details/63250882我们知道,当虚拟机栈容量太小或者栈帧太大时,程序都会抛出StackOverflowError异常,对于StackOverflowError的处理方法,有下面两种:通过try…catch(Throwable ...
2018-03-15 09:22:01 2117
原创 4.Java数据结构原理解析-Set系列
一.Set家族特点 Set 效率 有序性 HashSet 读取快,插入慢 无序 LinkedHashSet 插入快,读取慢 会保存插入的顺序 TreeSet 插入快,读取慢 自定义排序规则二.HashSet实现原理 我们都知道,Set与List的主要区别在于Set中的元素是不允许重复的,正好Map的key是不...
2018-03-09 19:56:35 467
原创 3.JVM垃圾回收机制-如何回收内存
在前面的文章中,我们已经介绍过哪些内存需要回收以及什么时候回收。 哪些内存需要回收:http://blog.csdn.net/u011983531/article/details/49227013 什么时候回收:http://blog.csdn.net/u011983531/article/details/79479972在本篇中,我们来看看具体如何回收已经不可用的内存。一.垃圾回...
2018-03-09 09:41:46 669
原创 2.JVM垃圾回收机制-什么时候回收内存
在前面的文章中,我们介绍过JVM垃圾回收机制负责的是堆和方法区的内存。 参考:http://blog.csdn.net/u011983531/article/details/49227013在本篇中,将重点关注堆和方法区的内存何时会被回收。 简单来说,当一个对象已经死亡时,就会对其进行回收,那么根据什么方法来判断对象是否死亡呢?一.引用计数算法算法描述:给对象添加一个引用计...
2018-03-08 09:42:17 4523 1
原创 volatile的适用场景与使用实例
一.volatile的原理二.适用场景必须满足以下两个条件才能保证volatile变量是线程安全的:对变量的写操作不依赖于当前值该变量没有包含在具有其他变量的不变式中三.使用实例...
2018-03-06 09:36:37 1449 1
原创 7 Mycat原理解析-DDL语句处理
前面,我们已经讲过了Mycat如何判断sql类型,然后针对不同类型的sql就行不同的处理【Mycat原理解析-SQL语句的处理】,下面,我们来看看其中的DDL语句,Mycat是怎么处理的。结合ServerParse.java中的代码,我们来看看Mycat支持的常见的DDL语句的。CREATE:create indexDROP:drop indexTRUNCATE:truncate t
2018-01-29 09:23:43 1841
原创 6 Mycat原理解析-EXPLAIN语句处理
前面,我们已经讲过了Mycat如何判断sql类型,然后针对不同类型的sql就行不同的处理【Mycat原理解析-SQL语句的处理】,下面,我们来看看其中的explain语句,Mycat是怎么处理的。 Mycat提供的EXPLAIN语句并不是用来查看执行计划的,而是用来查看路由结果的,如果要查询真正的执行计划,拿到路由结果里面的sql语句,到具体的实例上面查看就行了。例如,下面的sql语句,就被
2018-01-26 14:42:21 3628
原创 5 Mycat原理解析-SQL语句的处理
Mycat接收到客户端的sql语句时,会统一使用ServerQueryHandler.query(String sql)方法来处理,ServerQueryHandler主要做了两件事情。确定sql的类型。比如:SELECT、UPDATE、INSERT、SHOW等将不同类型的sql交给不同的处理器进行处理@Overridepublic void query(String sql) {
2018-01-25 13:50:59 1305
原创 Java任务调度线程池ScheduledThreadPoolExecutor原理解析
ScheduledThreadPoolExecutor是JDK在ThreadPoolExecutor的基础上实现的任务调度线程池。 ScheduledThreadPoolExecutor的构造函数全部是调用父类(也就是ThreadPoolExecutor)的构造函数。其中,核心线程数是必须设置的,最大线程数是Integer.MAX_VALUE,空闲工作线程生存时间是0,阻塞队列是Dela...
2018-01-16 10:06:31 3406
原创 4.Mycat原理解析-线程模型
Mycat的线程主要包括下面几个部分:主线程,IO线程(包括NIOAcceptor、NIOConnector、NIOReactor)、调度线程(包括scheduler、heartbeatScheduler)、业务线程池(包括timerExecutor、businessExecutor)
2018-01-03 18:51:10 723
原创 3.Mycat原理解析-后端连接管理
一、数据源与连接池 前面我们说过,Mycat除了作为服务端外,还作为客户端来连接数据库,所以需要管理与数据库的连接。在管理后端连接中,主要涉及到下面两个类。PhysicalDatasourceBackendConnection 从下面的类图可以看出,同普通的数据源一样,PhysicalDatasource负责建立连接,并且内部维护了一个连接池——conMap。 Mycat
2018-01-03 11:45:39 2506
原创 2.Mycat原理解析-网络通信框架
一、3种 IO 类型根据消息通信机制来分,IO分为同步与异步 同步:调用者主动等待调用的结果,发出调用后,在没有得到结果之前该调用就不返回; 异步:发出调用后就直接返回了,但是没有结果。被调用者会在调用真正执行完后,通过状态或者回调函数将结果通知调用者。根据程序在等待调用结果时的状态来分,IO分为阻塞于非阻塞。 阻塞:调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。
2018-01-02 11:45:46 1805
原创 1.Mycat原理解析-Mycat架构分析
MyCat是社区爱好者在阿里Cobar基础上进行二次开发,解决了cobar当时存 在的一些问题,并且加入了许多新的功能在其中,目前MyCAT社区活跃度很高。
2018-01-02 08:52:34 10630 1
原创 Spring中Bean的生命周期管理
Spring中Bean的创建主要有4步:1、解析XML文件,生成BeanDefinition;2、调用BeanFactory的getBean()方法获取Bean;3、创建Bean(主要包括实例化、填充属性、初始化3个步骤);4、如果实现了FactoryBean接口,通过getObject返回Bean在整个创建过程中,Spring提供了丰富的生命周期接口,通过这些接口,开发者可以实现很多自定义需求。
2017-12-26 21:11:53 309
原创 3.Java数据结构原理解析-Queue系列
Queue,也就是队列,满足FIFO的特性。 在Java中,Queue是一个接口,它的实现类有很多,其中非线程安全的代表是LinkedList,线程安全的有阻塞和非阻塞的,阻塞的大都实现了Queue的子接口BlockingQueue(阻塞队列),例如:ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue、DelayQueue等。
2017-11-28 09:21:51 2541
原创 2.Java数据结构原理解析-List系列
一、List家族特点 集合 效率 线程安全性 ArrayList 读取快,插入慢 线程不安全 LinkedList 插入快,读取慢 线程不安全 Vector 慢 线程安全 CopyOnWriteArrayList 读取快,插入慢 线程安全二、ArrayListJava中的数组初始化后,长度就是不...
2017-11-21 22:23:39 369
原创 1.Java数据结构原理解析-Map系列
一、Map家族特点收集 集合 有序性 安全性 速度 是否支持null fail-fast还是fail-safe HashMap 无序 线程不安全 快 key/value可为null fail-fast LinkedHashMap 插入/访问顺序 线程不安全 快 key/value可为null fail-fas...
2017-11-19 12:30:46 582
原创 B树、B+树的java实现
(1)树中每个结点至多有m棵子树。【解释:因为树的阶是m,所有这个是必然】(2)若根结点不是叶子节点,则至少有两棵子树。(3)除根结点之外的所有非叶子结点至少有⌈m/2⌉棵子树。【解释:第一条是用来限制所有节点度的最大值,2、3两条是用来限制根结点和非叶子结点度的最小值】(4)所有的非叶子结点中包含下列信息数据(n,P0,K0,P1,K1,P2,···,Kn-1,Pn)
2017-10-28 16:36:58 7263 2
原创 Linux 下查看、添加、修改环境变量
查看环境变量有两种方式echo $PATH和env | grep PATH,添加环境变量时,在/etc/profile中添加即可
2017-06-07 13:23:37 385
原创 BufferedReader、LineNumberReader的作用与用法
一、BufferedReader提供了下面两个功能:在普通Reader的基础上,提供了缓冲功能,可以更加高效的读取提供了读取一行的功能:readLine()二、LineNumberReader继承自BufferedReader,并且增加了下面两个功能:获取行号:getLineNumber()设置行号:setLineNumber()
2017-05-26 22:51:30 10705
原创 MySQL中CURRENT_TIMESTAMP的使用
众所周知,MySQL的日期类型可以使用CURRENT_TIMESTAMP来指定默认值,但是这个跟MySQL的版本有关系,只有5.6之后的版本才能使用CURRENT_TIMESTAMP作为日期类型的默认值。 例如:ALTER TABLE t_user ADD update_time DATETIME DEFAULT CURRENT_TIMESTAMP在5.6之前的版本,使用CURRENT_TIMES
2017-05-06 22:15:43 65322 8
原创 MySQL、SQLServer、Oracle添加、修改、删除字段总结
MySQL、SQLServer、Oracle添加、修改、删除字段总结:alter table……
2017-05-06 10:47:02 633
原创 Linux crontab 定时执行任务
crontab-[-u user]-用标准输入替代目前的定时任务. crontab-1[user]-列出用户目前的定时任务. crontab-e[user]-编辑用户目前的定时任务. crontab-d[user]-删除用户目前的定时任务.
2017-05-04 13:33:42 382
原创 Java获取类、方法、属性上的注解
获取某个类的注解有3个方法Class.getAnnotations()、Class.getAnnotation(Class< A > annotationClass)、Class.getDeclaredAnnotations();获取某个方法的注解,跟类一样,也是3中方式
2017-04-28 21:03:15 82155 6
原创 Sping-AOP:cglib动态代理与JDK动态代理的区别
默认状态下,Spring-AOP默认使用JDK动态代理,当需要代理的对象没有实现任何接口时,才使用cglib动态代理。一、JDK动态代理JDK动态代理的对象必须实现接口,当某个对象没有实现接口时,就会
2017-04-23 22:49:15 1872
原创 nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type
在使用cglib进行动态代理时,很可能会出现下面的异常:NoClassDefFoundError: org/objectweb/asm/Type当这种异常出现时,可能从下面几个方法查找问题。1、asm包有没有导入由于cglib动态代理需要使用asm反射包,所以,如果没有导入asm就会出现org.objectweb.asm.Type类找不到的问题,导入asm包就可以了。
2017-04-23 21:38:55 1314
原创 <aop:aspect>与<aop:advisor>的区别
在开发过程中,不少有Spring Aop的使用,大多数情况下我们用的是< aop:aspect>,只有在进行事务管理时才用到< aop:advisor>。但是,一直没弄清楚< aop:aspect>与< aop:advisor>的区别。
2017-04-23 15:44:12 29114 7
原创 org.springframework.jdbc.UncategorizedSQLException
当出现UncategorizedSQLException时,很可能是下面几种情况。1、本来是查询一条记录,但是返回了多条
2017-04-14 13:23:36 4435
原创 netstat查看当前网络下TCP的各种状态
命令如下:netstat -nat|awk '{print $6}'|sort|uniq -c|sort -rn
2017-04-09 15:29:15 12042 3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人