- 浏览: 964958 次
- 性别:
- 来自: 北京
最新评论
-
菜鸟学生会:
Spring与dubbo分布式REST服务开发实战网盘地址:h ...
Dubbo与Spring的配合使用 -
奔跑的码侬:
基于 Spring + Dubbo 开发分布式REST服务实战 ...
Dubbo与Spring的配合使用 -
卧槽这是我的昵称麽:
...
MyBatis的parameterType和resultMap -
xiongzhe90:
学习中,赞一个
idea14使用maven创建web工程 -
zqb666kkk:
nice 非常好!
jquery form向spring mvc提交表单
文章列表
使用AOP统计方法的执行时间
- 博客分类:
- 架构和设计
1. 需求背景
性能调优阶段,需要找出执行时间比较长的方法,针对这些方法进行调优。
2. 可行方案
一种是传统的在每个方法前后获取System.currentMis(),然后得到方法的执行时间。
这种方式的缺点是方法多会写很多耦合代码,而且不可重用,测试完需要删掉。
另一种使用AOP监控方法的前后点,监控方法的执行时间,比较优雅且无侵入。
可行的方案之一是使用 Around Advice, 环绕通知可在方法执行前后做一些操作。
AOP,面向切面编程,Aspect Oriented Programming, 可以通过预编译方式和运行期动态代理实现在不修 ...
Thread.join用法
- 博客分类:
- basic of java
Thread.join(): 用来让主线程等待子线程执行完毕再执行下面的操作。
顾名思义,join会让子线程加入MainThread.
适用场景:
主线程需要等子线程执行完毕后,再执行下一步操作。
比如:主线程需要统计子线程的执行时间,或需要统计子线程的执行结果等。
join() 的作用是等待该线程终止,即该线程存活的时候一直等待,等待线程死亡,好残忍 。。
JDK的源码 join()方法在线程isAlive()为true的时候一直轮询,直到变为die状态。
所以
线上故障排查----高内存占用
- 博客分类:
- basic of java
1. 找出占内存比较大的内存的PID(使用top命令)
比如找出PID为8763
2. 查看当前Java进程创建的活跃对象数目和占用内存大小
jmap -histo:live $pid > jmap.log
比如查看24102进程的存活对象:
jmap -histo:live 24102 | more
例如:
...
类的初始化,包括生成对象的初始化和类的静态块的实例化。
初始化触发的时机: 类被直接引用(主动引用)的时候。
主动引用
主动引用的情形有:
1. 使用new关健字实例化对象
2. 使用类的静态变量
3. 使用类的静态方法
4. 使用反射机制调用上述操作
5. 程序入口 (调用main方法)
初始化顺序是:
静态块 ---> 非静态块 ---> 构造函数。
如果有超类,则初始化顺序是:
父类静态块--->子类静态块--->父类非静态块--->父类构造函数--->子类非静态块--->子类构造函数
...
Java类加载机制
- 博客分类:
- basic of java
类的加载属于Java中的JVM的底层工作。
类加载包括类的生命周期中加载、连接、初始化三个阶段。
在加载阶段,JVM在做什么工作?
简单地说,就是找到需要加载的类并把类的信息加载到jvm的方法区,然后在堆区实例化一个java.lang.Class对象,作为方法区中这个类的信息的入口。
当执行Class中的下列代码的时候,会做下面的事情:
User user = new User();
1. 在方法区(Method Area)中找User的class信息,如果方法区存在User的class信息,则根据User的class信息构造出User对象,存入heap中,并把 ...
反射机制之---Class对象
- 博客分类:
- basic of java
Java中的类对象也属于基本部分,类对象即是Class信息对象,当类加载器(ClassLoader)加载类信息的时候,生成Class对象,Class对象是Java对象的模板,每个Java对象都是基于Class信息生成新的对象。
众所周知,Class信息存在方法区(Method Area),或者称为永久代(Perm区),Class对象生成后和其他Java对象一样,也存放在堆(Heap)里。
获取Class对象的几路方式:
1. Class类的静态方法: Class.forName("${className}"), className应该是全称,即包括Cla ...
反射机制之---概念
- 博客分类:
- basic of java
反射机制是Java语言中很重要的特性,是在运行时获知对象信息,并可在运行时操作对象的机制。
反射(Reflect), 顾名思义,通过Java对象的Class信息,可以逆向生成对象、探知运行时的对象信息、调用对象方法,一种可以反向作用的机制。
反射的用途:
1. 在运行时获取任意对象所属的类对象
Class<?> clazz = Class.forName(String className);
2. 在运行时构造任意类的对象
Object obj = clazz.newInstance();
3. 在运行时获取任意类所具有的成员变量和方法
f ...
设计模式之---策略模式
- 博客分类:
- 架构和设计
策略模式,顾名思义,是使用不同的策略解决问题的模式,孙悟空有七十二变,孙子兵法有三十六计,这里的七十二变和三十六计里的每一个变法和计谋,都是一种策略。需要当事者根据具体的情形,去做选择变成什么和使用哪一个计谋。
1. 策略模式类图
2. 策略模式的组成:
抽象策略基类、策略实现类、调用者。
基类中有抽象的算法,实现类实现具体和算法行为,调用者类持有策略接口的引用,可以灵活调用不同实现类的策略。
3. design example
以外出旅行为例,有各种不同的旅行方式。
策略抽象基类
/**
* 策略抽象基类, 具有抽象行为接口
*/
publ ...
ThreadLocal 源码分析
- 博客分类:
- 多线程
ThreadLocal字段意义为线程本地,其实表达不够准确,应该为线程本地变量或线程局部变量更合适一些。
ThreadLocal 常用来存储每个线程的私有信息,相当于是线程组的私有变量容器,每个变量值为单一线程私有,不被其他线程共享。
ThreadLocal类的方法解析:
protected T initialValue() {
return null;
}
initialValue方法用来初始化线程变量容器的数据,相当于调用了set方法设置线程实例与变量的关联关系,此方法在需要初始化时可以被覆盖, 实现具体的初始化数据逻辑。
...
MySql的事务隔离级别
- 博客分类:
- database
前言
数据库都是有事务的,事务的不同级别,对应数据操作的不同级别安全性。本文以MySql为例介绍一下数据库的事务隔离级别。
事务定义
事务是将数据从一种状态改变到另一种状态。
事务隔离级别是事务看别的事务修改的数据的可见程度。
事务的可见性
脏读 (Dirty read): 一个事务读取到另一个事务还没有提交的数据,又叫无效数据读取。
Example: 事务一对数据进行了增删改等写操作,但还未提交,事务二可以读取到事务一还未提交的数据。这时候事务一Rollback了,事务二读到的就是脏数据。
不可重复读 (Non-repeatable read):在同一个事 ...
缓存在应用中经常可以遇到,大的可以表现为分布式缓存服务和外部的缓存服务应用,小的可以使用应用级的缓存。
缓存的主要作用,一是可以加快热点数据访问速度,二是保护后端的数据库不被突然增长的压力压垮,三是减少计算,是以空间换时间的典型应用。
从分类上来说,缓存可以分为外部缓存服务和应用缓存。
外部缓存服务可以表现为MemCache、Redis、MongoDB等。
应用缓存可以使用HashMap自实现,也可以使用Guava的缓存Cache。
缓存的失效策略:
1. Timeout算法,设置有效期,超时失效。
2. LRU(Least Recently Used)算法,最近最 ...
MyBatis 批量操作
- 博客分类:
- 架构和设计
使用MyBatis做数据处理框架时,操作大量数据的插入、更新等耗时的工作时,可以使用批量处理来提高效率,MyBatis的批量处理主要使用foreach标签来实现。
foreach 元素的功能是非常强大的,它允许你指定一个集合,声明可以用在元素体内的集合项和索引变量。它也允许你指定开闭匹配的字符串以及在迭代中间放置分隔符。这个元素是很智能的,因此它不会偶然地附加多余的分隔符。
注意: 你可以将任何可迭代对象(如列表、集合等)和任何的字典或者数组对象传递给foreach作为集合参数。当使用可迭代对象或者数组时,index是 ...
软件设计中的心跳机制
- 博客分类:
- 架构和设计
前言
在软件的设计架构中,心跳检测很重要,像在dubbo service、web api invoke中,需要consumer端感知provider端是否存活,不存活则切换调用另一个provider。
一、什么是心跳检测
判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉。用于检测TCP的异常断开。
基本原因是服务器端不能有效的判断客户端是否在线也就是说,服务器无法区分客户端是长时间在空闲,还是已经掉线的情况。所谓的心跳包就是客 ...
Dubbo与Spring的配合使用
- 博客分类:
- 架构和设计
Dubbo是一个服务治理框架,对分布式服务的管理和治理、监控有较好的实现。
本案举例说明Dubbo与Spring的配合使用:
1. Maven引入dubbo的配置
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency& ...
logback异步记录日志
- 博客分类:
- 架构和设计
logback支持异步记录日志,这样可加快程序的主流程处理速度,提高接口的qps。
logback异步记录日志的原理,也是使用一个缓冲队列,当缓冲数量到一定阀值时,才把日志写到文件里。
下面是配置示例:
<?xml version="1.0" encoding="utf-8"?>
<configuration scan="false">
<property name="outPattern" value="[%p] %d{yyyy-MM-dd H ...