- 浏览: 307060 次
- 性别:
- 来自: 杭州
最新评论
-
wst0350:
点赞,有空深入讲解下原理
Servlet、Filter 和 Listener 调用顺序、生命周期的实验分析 -
tuspark:
Eclipse中高亮设置内容还有很多细节选项可以设置的,可以看 ...
Eclipse 设置匹配代码高亮 -
xichao1929:
这个时候,怎么启动发布的项目呢?????
JBoss设置为Windows服务 -
xiaozi7:
非常感谢,楼主的英语水平不一般那
WebSphere MQ Version 7 发布订阅相关配置 -
qtlkw:
slave没玩过
Hudson: java.lang.OutOfMemoryError: Java heap space error
文章列表
1.Guava Cache的get/getIfPresent方法当参数为null时会抛空指针异常
我刚开始使用时还以为Guava Cache跟HashMap一样,get(null)返回null。
实际上Guava整体设计思想就是拒绝null的,很多地方都会执行com.google.common.base.Preconditions.checkNotNull的检查。
2.Guava Cache的load方法不能返回null,否则抛异常
Guava Cache的get方法先在本地缓存中取,如果不存在,则会触发load方法。但load方法不能返回null。
static Cache<S ...
最近项目开发中用到了Redis, 选择了官网推荐的java client Jedis。
Redis常用命令学习:http://redis.io/commands
Redis官方推荐Java客户端Jedis(包含了所有Redis命令的实现):https://github.com/xetorthio/jedis
Jedis使用过程中最常见异常JedisConnectionExc ...
mac下安装memcached
- 博客分类:
- 缓存
参照: http://stephen830.iteye.com/blog/2009678
将数据写入到数据库中时,首先需要执行数据库写入操作,然后将之前缓存的任何受此写入操作影响的结果设定为无效。此过程有助于防止缓存和数据库之间出现数据不一致性。
libevent 是安装 memcached 的唯一前提条件。它是 memcached 所依赖的异步事件通知库。您可以在 monkey.org 上找到关于 libevent 的源文件
libeven 安装包下载地址 http://libevent.org/
memcached安装包下载地址 http://memcached.org/
...
架构是软件的核心和灵魂,没有好的架构的软件经过一段时间的迭代后,会很快走向腐朽。
不能要求每个程序员都能设计出好的架构,那么框架出现了。框架只是知识和经验的总结,提供了一种通用的套路和便捷的落地方式。框架对应软件的各个层次,最上层的架构框架对应着架构。
SSH是web开发框架,它的背后是分层架构。使用但不盲目追求框架,更要明白框架背后的架构。程序员不应该成为框架的奴隶。
不使用框架也能够设计和写出优雅的软件。比如OSchina网站。
使用 redis 减少 秒杀库存 超卖思路
- 博客分类:
- JAVA
12月份重构公司社群活动产品,原来自己不是很成熟,按传统的形式处理卖票的信息-现在回首很多地方都会出问题。
先说下背景:业务是卖票!所以自然而然会遇到高并发下的库存问题
搜了很多网上提供以下几种方案:
1.并发数很小,不考虑并发的话采用Redis的原子操作。缺点也很显然,高并发肯定是有问题的!对应方案如下
http://blog.csdn.net/wujiangwei567/article/details/51210600
2.高并发请求采用队列形式,化解为单线程。消费时再使用Redis原子操作加减库存
3.采用Redis的分布式锁
上面是转载,公司目前用的是第一种方案,实 ...
如果要建立组合索引的话,也是等值列在前面,非等值列在后
即: isdel, state, price
是否要建立组合索引是另一个话题,需要考虑这三列的数据分布情况. 比如:单独用三列过滤后的数据较多,同时用的话过滤后的数据很少,那就可以建立组合索引
public class BaseTest {
public BaseTest(){
System.out.println("1");
}
{
System.out.println("2");
}
static{
System.out.println("3");
}
public void f1(){
System.out.println("f1");
} ...
Restful vs RPC
- 博客分类:
- JAVA
传统的RPC一般是基于二进制协议的,client发个二进制包过来(然后阻塞),server处理完回复一个包,client收到后醒来。在二进制协议中一般可以在包中加个id来指明回复和请求的对应关系,这样我们就能在一个tcp连接上同时发起 ...
/**
* java生成随机数字和字母组合
* @param length 生成随机数的长度
* @return
*/
public static String buildRandomCharAndNumber(int length) {
StringBuilder builder = new StringBuilder();
Random random = new Random();
for (int i = 0; i < length; i++) {
...
1.escapeSql 提供sql转移功能,防止sql注入攻击,例如典型的万能密码攻击' ' or 1=1 ' '
StringBuffer sql = new StringBuffer("select key_sn,remark,create_date from tb_selogon_key where 1=1 ");
if(!CommUtil.isEmpty(keyWord)){
sql.append(" and like '%" + StringEscapeUtils.escapeSql(keyWord) + "%'" ...
http://www.importnew.com/15259.html
概述
在这篇教程里,我们将要去了解下即将到来的JDK 8(译注,现在JDK 8已经发布了)中的Lambda表达式——特别是怎样使用它来编写Comparator和对集合(Collection)进行排序。
这篇文章是Baeldung上的“Java ——回归基础”(“Java – Back to Basic”)系列的一部分。
首先,让我们先定义一个简单的实体类:
public class Human {
private String name;
private int age;
publi ...
Java序列化几点注意事项
- 博客分类:
- JAVA
静态变量不属于对象,属于类,不能被序列化.还有瞬态的变量也不能被序列化.序列化保存的是对象的状态,而静态变量是类的状态。
1.基本类型的数据可以直接序列化
2.对象要被序列化,它的类必须要实现Serializable接口;如果一个类中有引用类型的实例变量,这个引用类型也要实现Serializable接口。
3.可以用这个代码:ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("seria"));
但是不能用这个代码:ObjectOutputStream out = new Obj ...
Spring自动装配匹配类名问题
- 博客分类:
- Spring
1.重构的时候遇到Spring按Type装载匹配的Bean的异常,当有两个具象类且是父子关系时(如下图, 父类SPParser4ItemAOImpl和子类SPParser4BrandAOImpl), 通过Spring容器ApplicationContext.getBean按type装载匹配父类时,会匹配到两个实例(自己SPParser4ItemAOImpl和子类SPParser4BrandAOImpl), 装载子类时,只会找到子类实例本身(SPParser4BrandAOImpl). 有兴趣可看下DefaultListableBeanFactory.doGetBeanNamesForTyp ...
Spring生命周期
- 博客分类:
- Spring
1.容器启动,实例化所有实现了BeanFactoryPostProcessor接口的类.它会在任何普通Bean实例化之前加载.
2. 实例化剩下的Bean, 对这些Bean进行依赖注入.
3. 如果Bean有实现BeanNameAware的接口那么对这些Bean进行调用
4. 如果Bean有实现BeanFactoryAware接口的那么对这些Bean进行调用
5. 如果Bean有实现ApplicationContextAware接口的那么对这些Bean进行调用
6. 如果配置有实现BeanPostProcessor的Bean, 那么调用它的postProcessBeforeInitializat ...
List删除element两种方式的不同
- 博客分类:
- JAVA
public class DateUtilTest {
public void testDeleteElement(List<String> list) throws Exception{
for (int i=list.size()-1;i>=0;i--) {
if(list.get(i).equals("5")){
list.remove(i);
continue;
}
if(i ...