`
qtlkw
  • 浏览: 299836 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表

guava

    博客分类:
  • JAVA
 
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/ ...

转:架构

    博客分类:
  • JAVA
 
架构是软件的核心和灵魂,没有好的架构的软件经过一段时间的迭代后,会很快走向腐朽。 不能要求每个程序员都能设计出好的架构,那么框架出现了。框架只是知识和经验的总结,提供了一种通用的套路和便捷的落地方式。框架对应软件的各个层次,最上层的架构框架对应着架构。 SSH是web开发框架,它的背后是分层架构。使用但不盲目追求框架,更要明白框架背后的架构。程序员不应该成为框架的奴隶。 不使用框架也能够设计和写出优雅的软件。比如OSchina网站。
12月份重构公司社群活动产品,原来自己不是很成熟,按传统的形式处理卖票的信息-现在回首很多地方都会出问题。 先说下背景:业务是卖票!所以自然而然会遇到高并发下的库存问题 搜了很多网上提供以下几种方案: 1.并发数很小,不考虑并发的话采用Redis的原子操作。缺点也很显然,高并发肯定是有问题的!对应方案如下 http://blog.csdn.net/wujiangwei567/article/details/51210600 2.高并发请求采用队列形式,化解为单线程。消费时再使用Redis原子操作加减库存 3.采用Redis的分布式锁 上面是转载,公司目前用的是第一种方案,实 ...

数据库索引

如果要建立组合索引的话,也是等值列在前面,非等值列在后 即: isdel, state, price 是否要建立组合索引是另一个话题,需要考虑这三列的数据分布情况. 比如:单独用三列过滤后的数据较多,同时用的话过滤后的数据很少,那就可以建立组合索引

经典笔试题

    博客分类:
  • JAVA
 
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
 
/** * 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 ...
静态变量不属于对象,属于类,不能被序列化.还有瞬态的变量也不能被序列化.序列化保存的是对象的状态,而静态变量是类的状态。 1.基本类型的数据可以直接序列化 2.对象要被序列化,它的类必须要实现Serializable接口;如果一个类中有引用类型的实例变量,这个引用类型也要实现Serializable接口。 3.可以用这个代码:ObjectOutputStream out  = new ObjectOutputStream(new FileOutputStream("seria")); 但是不能用这个代码:ObjectOutputStream out  = new Obj ...
1.重构的时候遇到Spring按Type装载匹配的Bean的异常,当有两个具象类且是父子关系时(如下图, 父类SPParser4ItemAOImpl和子类SPParser4BrandAOImpl),  通过Spring容器ApplicationContext.getBean按type装载匹配父类时,会匹配到两个实例(自己SPParser4ItemAOImpl和子类SPParser4BrandAOImpl),  装载子类时,只会找到子类实例本身(SPParser4BrandAOImpl).  有兴趣可看下DefaultListableBeanFactory.doGetBeanNamesForTyp ...

Spring生命周期

1.容器启动,实例化所有实现了BeanFactoryPostProcessor接口的类.它会在任何普通Bean实例化之前加载. 2. 实例化剩下的Bean, 对这些Bean进行依赖注入. 3. 如果Bean有实现BeanNameAware的接口那么对这些Bean进行调用 4. 如果Bean有实现BeanFactoryAware接口的那么对这些Bean进行调用 5. 如果Bean有实现ApplicationContextAware接口的那么对这些Bean进行调用 6. 如果配置有实现BeanPostProcessor的Bean, 那么调用它的postProcessBeforeInitializat ...
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 ...
Global site tag (gtag.js) - Google Analytics