`
文章列表

状态模式

状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。   (1)context是一个类,它可以拥有一些那边状态。在例子中,gumballMachine就是这个context (2)state接口定义了一个所有具有状态的共同接口;任何状态都实现这个相同的接口,这样一来,状态之间可以互相替换 (3)不管是在什么时候,只要有人调用context的request()方法,它就会被委托到状态来处理。 (4)concreteStateA(具体状态)处理来自context的请求,每个concreteStateA都提供了它自己对于请求的实现。所以,当context改变状态 ...
单例设计模式 1、 public class Singleton1 { private static Singleton1 uniqueInstance = new Singleton1(); private Singleton1(){ } public static Singleton1 getInstance() { return uniqueInstance; } } 2、 public class Singleton2 { private volatile static Singleton2 uniqueIns ...
java接口使用入参时经常会判断一些参数的校验规则,使用validation的标签判断能拦截大部分不符合要求的参数,如:notnull max min ...而有些业务需求的判断也可以通过自定义的标签来实现下面实现request入参:判断多个参数需要有至少一个不为空pom依赖的包: <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <versi ...
cron表达式详解 Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:  Seconds Minutes Hours DayofMonth Month DayofWeek Year或 Seconds Minutes Hours DayofMonth Month DayofWeek  每一个域可出现的字符如下: Seconds:可出现", - * /"四个字符,有效范围为0-59的整数  Minutes:可出现", - * /"四个字符,有效范围为0-59的整数  Hours: ...
java.util.concurrent初始化线程池及多线程的代码spring配置   <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http:// ...
  获取文件权限:chmod +x  ./XXX.sh 查看该文档编辑所在的操作系统: :set ff?   修改系统格式:  :set ff=unix 保存退出   杀掉线程 kill -9 pid   mac jdk的版本切换: http://www.cnblogs.com/maxinliang/p/4389971.html     系统配置/etc/profile权限: sudo vi /etc/profile   i   修改后退出     修改文件生效:source /etc/profile        
oracle rownum:分页查询时可用伪列rownum,rownum只支持<,<=,!=,  所以分页查询需要使用子查询 例子:  select * from (select t.*, ROWNUM RN from table t ) a where a.RN between 5 and 10   rownid:表中每行数据都有唯一的地址标志 查询数据时,根据条件索引时,将查询该条数据的rowid返回,再回表查询该条rowid所在数据的数据。 所以,当select的字段都能在索引项时,则不需要再回表查询。 当然,一张表建立过多的索引也不是解决查询的根本 所以 ...
之前研究了一下dubbo的源码,rpc服务框架里面非常重要的一部分时动态代理,无论时服务端的对象或是消费端的对象,都是通过代理来处理的。 代理在我们很多框架,中间件甚至业务开发场景中都是非常重要的技术。 dubbo使用了jdk原生的动态代理和javassist的字节码代理   下面的代码也是转了dubbo作者的博客,深入的学习了下。 不单是学习了技术的方案,同时也学习了考虑事情的思路。当有很多备选的技术方案是,最实际的就是拉出来做对比,再选型。   package com.test.proxy.proxy_demo; import java.lang.reflect.F ...
继续上一篇   追踪了一下代码,找到了springAOP启动时注册的代理类 类AnnotationAwareAspectJAutoProxyCreator 是处理切面xml配置spirngaop或者注解创建代理类的容器。 其父类AbstractAutoProxyCreator中根据配置的通知类型执行 postProcessBeforeInstantiation postProcessAfterInitialization 方法   然后调用wrapIfNecessary方法将需要切面的方法存入map advisedBeans     /** * Wrap the giv ...

springAOP

springAOP是spring框架里面一个通用的模块,项目中用来记录日志,接口调用返回的拦截记录,及纪录调用时间的性能数据,以及在部分重要接口出做入参和返回的信息记录。 现在系统学习一下springAOP的应用以及相关底层。   例如定义切入点表达式  execution (* com.sample.service.impl..*.*(..)) execution()是最常用的切点函数,其语法如下所示:  整个表达式可以分为五个部分:  1、execution(): 表达式主体。  2、第一个*号:表示返回类型,*号表示所有的类型。  3、包名:表示需要拦截的包名,后面的两 ...
项目使用dubbo架构做分布式服务实现的,因为业务的操作流程较长,请求分多部,所以需要保证客户端的请求保证唯一性,目前系统中是是用数据库的锁机制,保证请求的唯一,但是并发量上来的话就回导致数据库的压力较大。 之前研究过使用zookeeper的注册中心,将分布式的请求同步进行,但是跟业务场景不符合,所以可以使用redis的setnx实现并发数据过来的唯一性   代码很简单     public class RedisSyc { public static void main(String[] args) { Jedis jedisClient = new J ...
最近项目中有个需求,需要在redis缓存中存储计数功能,计数应用中的异常数据,到达一定阈值的时候发送邮件 短信警报处理。由于redis中并发没有锁功能,所以并发写数据时将value值写入到队列中。   import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class Redi ...
Global site tag (gtag.js) - Google Analytics