- 浏览: 476072 次
- 性别:
- 来自: 杭州
最新评论
-
基地分子:
zk中获取的netty怎么保证一定能用呢?如果某个netty服 ...
Zookeeper实现简单的分布式RPC框架 -
javaeyetodj:
你好,想请教下,前置通知、后置通知如何插入到目标方法的前面和后 ...
Spring aop的多种配置方式以及源码分析 -
yjy1304:
List<String> nodes = zk.g ...
ZK实现分布式排它锁 -
model1235:
都spring4了,还在介绍这么古老的方法
Spring 事务处理(二)源码分析 -
zhangwei_david:
lopez 写道楼主直接new一个接口(new Resourc ...
java多线程lock详解
文章列表
Spring 基于事件的通信
- 博客分类:
- Spring
Spring 应用上下文支持基于事件的Bean间通信。在基于事件的通信模式中,事件的发送者不需要关系,事件的监听者。这样可以使消息的发送者和监听者进行解耦。在Spring中所有事件类必须继承自ApplicationEvent,这样任何bean都可以调用事件发布者的publishEvent()方法,发布一个事件。
public class MyEvent extends ApplicationEvent {
/** */
private static final long serialVersionUID = 1L;
/**
* @param ...
有一组优惠 A-20优惠, B-30元优惠, C-5元优惠 当用户满足条件时随机返回一个优惠;在活动预算一定的情况下需要保证C类优惠券中奖概率最高,B类优惠券最低;以下是权重的实现;
/**
* Copyright 2014-2015, , Inc. All Rights Reserved.
*
* Date: 2016年1月23日
*/
package org.demo.core;
import java.util.ArrayList;
import java.util.Collections;
import j ...
Javassist 实现代码增强
- 博客分类:
- Java
/**
* Desc:TODO
*
* @author zhangwei<wei.zw@corp.netease.com>
* @since 2016年1月14日 下午9:19:34
* @version v 0.1
*/
public final class ClassEnhancedGenerator {
private ClassEnhancedGenerator() {
}
/**
* 类方法增强<BR>
*
* 对指定类的方法进行代码增强(将指定的原方法名改为$enhanced,同 ...
创建分支:david$ git branch test
查看本地分支:
DaviddeMacBook-Pro:haitao-mobile david$ git branch
* develop_new
master
test
切换分支
DaviddeMacBook-Pro:haitao-mobile david$ git checkout test
M .gitignore
Switched to branch 'test
删除本地分支
DaviddeMacBook-Pro:haitao-mobile david$ git branch ...
我们在使用Spring MVC 是都有这样的经历,@ResponseBody返回一个JSON格式字符串到前端,或者使用@RequestBody获取前端REST提交的对象,那么Spring MVC 中是如何处理的呢?大体的流程如下:
在Spring Web中使用 jackson处理,具体实现类是MappingJackson2HttpMessageConverter. 具体的JSON系列化和反序列化都是有jackson实现的。下面主要介绍一下jackson的使用。
对日期进行JSON序列化:
/**
*
* @author zhang ...
TCP 粘包和拆包
TCP 是个“流”协议,所谓流,就是没有界限的一串数据。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上,一个完整的数据包可能会被TCP拆分为多个数据包进行发送,也有可能把多个小的数据包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。
粘包问题的解决策略
由于底层的TCP无法理解上层的业务数据,所以在底层是无法保证数据包不被拆分和重组,这个问题只能够通过上层的应用协议栈设计来解决;大致可以分为:
定长消息
在包尾增加分隔符进行分割
将消息分为消息头 ...
HashSet的实现
- 博客分类:
- Java
HashSet在开发过程中是很长用的,我们很多时候都会借住其不能存储重复内容进行去重;可是很多时候,我们都忽略了其实现原理。如果没有HashSet我们应该使用什么去实现同样的功能呢?
我们看看源码,可以发现原来HashSet就是对HashMap的封装。
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
{
static final long serialVer ...
实现RPC就是这么简单 之 Netty 实现
- 博客分类:
- Java
ServiceServer实现自动发现服务:
/**
*
* @author zhangwei
* @version $Id: NettyServiceServer.java, v 0.1 2015年8月19日 下午2:08:37 $
*/
public class NettyServiceServer implements InitializingBean, Lifecycle, ApplicationContextAware {
/**服务端口号**/
private int port = 12000;
...
RPC(Remote Procedure Call) 在介绍分布是RPC前首先介绍一个下JAVA中简单的RPC实现
服务器端,通过SocketServer,持续接收客户端的请求,并将客户端的请求分发到指定的处理器出去处理。
阻塞通线模型,是server对每一个请求都开启一条线程去执行请求,此种方式的缺点是服务器端线程的数量和客户端并发访问请求树呈1:1的正比关系。
此处对此作出了一定优化,伪异步IO通信,将所有用户请求放到线程池中处理。
/**
*
* @author zhangwei_david
* @version ...
maven+tomcat7 热部署
- 博客分类:
- maven
使用tomcat7+maven3 进行热部署,具体步骤如下:
第一步:安装tomcat7
第二步:配置tomcat 用户TOMCAT_HOME/conf/tomcat-users.xml
<tomcat-users>
<role rolename="manager-gui" />
<role rolename="manager-script" />
<user username="tomcat& ...
有时候在一个项目中为了清晰划分不同web模块需要配置多个web module 。如:
<modules>
<!-- 主web应用 -->
<module>cathy-web</module>
<module>cathy-biz</module>
<module>cathy-common-util</module>
<module>cathy-common-intergration</module>
<modul ...
profile是Spring3.1提供的一个新的配置项,在下面的测试示例中,又有使用了多种AOP配置方式,为了将各种配置方式进行对比在此使用了profile.在测试用例中通过使用@ActiveProfiles("four")注解指定profile的值。
Aop 是Spring 框架的核心功能之一。
Advice 通知时定义在该连接点做什么,为切面增强提供织入接口。Advice是AOP联盟定义的一个接口,在Spring中对其进行了扩展,提供了更为具体的接口如:BeforeAdvice,AfterAdvice,ThrwosAdvice等。
P ...
public class BeanDefinitionParserDelegate {
public static final String BEANS_NAMESPACE_URI = "http://www.springframework.org/schema/beans";
public static final String MULTI_VALUE_ATTRIBUTE_DELIMITERS = ",; ";
/** @deprecated as of Spring 3.1 in favor of {@link # ...
在这里会介绍如下知识点:
factory-method
factory-bean
lookup-method
replace-method
factory-method
在Spring中如果对一个bean的创建使用工厂方法模式就可以使用factory-method
/**
* factory-method demo
* @author zhangwei_david
* @version $Id: FactoryMethodDemo.java, v 0.1 2015年7月8日 下午11:03:58 zhangwei_david Exp $ ...
Java 多线程之信号量-Semaphore
- 博客分类:
- 多线程
技术信号量(Counting Semaphore)用来控制同时访问某个特定资源的操作数量,或者执行某个特定操作的数量。计数信号量还可以用来实现某种资源池或者对容器加边界。
Semaphore中管理着一组虚拟许可(permit),许可的初始数量可以通过在构造方法中指定。在执行操作时首先获取许可(permit),在使用完成后释放许可。如果没有许可,那么acquire则一直阻塞到有许可或者超时中断。
/**
* 计数信号量(Counting Semaphore)用来控制同时访问某个特定资源的操作数量,或者执行某个指定操作的数量。
* 计数信号量还可以用来实现某种资源池 ...