自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (1)
  • 收藏
  • 关注

原创 过滤器和拦截器的区别

区别1.拦截器是基于java的反射机制的,而过滤器是基于函数回调。 2. 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。 3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。 5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用

2017-12-28 13:04:01 418

原创 SpringBoot之过滤器Filter

Filter简介Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。Filter实现继承Filter接口@Component@We

2017-12-28 11:24:19 1075 3

原创 SpringMVC之参数校验注解@Valid

注解介绍 以上基本是所有注解了。注解使用实体类中添加注解@Datapublic class User { @Range(min = 0,max = 100,message = "年龄必须在0~100之间") private Integer age; private String name; @Length(min = 8,message = "密码不能少于八位")

2017-12-27 00:10:01 3253

原创 通过反射获取对象属性

user类@Datapublic class User { private Integer age; private String name; private String password;}反射获取 //获取参数对象 String age = PropertyUtils.getProperty(user,"age").toString();

2017-12-26 20:18:56 403

原创 Java并发容器——CopyOnWriteArrayList

CopyOnWriteArrayList这是一个ArrayList的线程安全的变体,其原理大概可以通俗的理解为:初始化的时候只有一个容器,很常一段时间,这个容器数据、数量等没有发生变化的时候,大家(多个线程),都是读取(假设这段时间里只发生读取的操作)同一个容器中的数据,所以这样大家读到的数据都是唯一、一致、安全的,但是后来有人往里面增加了一个数据,这个时候CopyOnWriteArrayList

2017-12-25 16:44:31 312

原创 Java并发容器——ConcurrentLinkedQueue

在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。 JDK中,提供了一个ConcurrentLinkedQueue类来

2017-12-25 16:27:43 282

原创 Java并发容器——ConcurrentSkipListMap

当我们希望快速存取<Key, Value>键值对时我们可以使用HashMap。当我们希望在多线程并发存取<Key, Value>键值对时,我们会选择ConcurrentHashMap。TreeMap则会帮助我们保证数据是按照Key的自然顺序或者compareTo方法指定的排序规则进行排序。OK,那么当我们需要多线程并发存取<Key, Value>数据并且希望保证数据有序时,我们需要怎么做呢?

2017-12-25 11:57:23 560

原创 Java并发容器——ConcurrentHashMap

并发环境下为什么使用ConcurrentHashMapHashMap在高并发的环境下,执行put操作会导致HashMap的Entry链表形成环形数据结构,从而导致Entry的next节点始终不为空,因此产生死循环获取EntryHashTable虽然是线程安全的,但是效率低下,当一个线程访问HashTable的同步方法时,其他线程如果也访问HashTable的同步方法,那么会进入阻塞或者轮训状态。

2017-12-22 10:51:03 260

原创 阻塞queue系列之SynchronousQueue

SynchronousQueue是这样一种阻塞队列,其中每个 put 必须等待一个 take,反之亦然。同步队列没有任何内部容量,甚至连一个队列的容量都没有。 常用方法add @Test public void addAndtake() throws InterruptedException {// Executors.newCachedThreadPool().

2017-12-21 16:35:29 452

原创 阻塞queue系列之LinkedTransferQueue

LinkedTransferQueue在JDK7 中新增的。无界FIFO线程安全的阻塞队列。 transfer 算法比较复杂,实现很难看明白。大致的理解是采用所谓双重数据结构 (dual data structures) 。之所以叫双重,其原因是方法都是通过两个步骤完成:保留与完成。比如消费者线程从一个队列中取元素,发现队列为空,他就生成一个空元素放入队列 , 所谓空元素就是数据项字段为空。然后

2017-12-21 16:03:28 676

原创 阻塞queue系列之DelayQueue

DelayQueue是一个无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的Delayed 元素。底层也是通过数组实现,所以读写操作使用的是同一把锁,其插入的元素必须实现Delayed接口。构造方法public DelayQueue() {}public DelayQueue(Collection<? extends E> c) { this.ad

2017-12-21 10:48:58 611

原创 阻塞queue系列之PriorityBlockingQueue

和ArrayBlockingQueue一样内部使用数组实现,插入和获取数据使用同一把锁。不同的是,不管有无指定长度,都会实现可以实现自动扩容;在构造函数需传入comparator,用于插入元素时继续排序,若没有传入comparator,则插入的元素必须实现Comparatable接口。构造函数 public PriorityBlockingQueue() { this(DEFAULT

2017-12-21 00:56:52 5484 2

原创 阻塞queue系列之LinkedBlockingDeque

LinkedBlockingDeque是一个基于链表的双端阻塞队列。 LinkedBlockingDeque使用的是一把锁。 其它基本和LinkedBlockingQueue无异,前往LinkedBlockingQueue

2017-12-21 00:26:16 350

原创 阻塞queue系列之LinkedBlockingQueue

LinkedBlockingQueue继承AbstractQueue,实现了BlockingQueue,Serializable接口。内部使用单向链表存储数据。可定义容量,默认初始化容量是Integer最大值(可能出现内存溢出)。插入和取出使用不同的锁,putLock插入锁,takeLock取出锁,添加和删除数据的时候可以并行。多CPU情况下可以同一时刻既消费又生产。LinkedBlockingQu

2017-12-21 00:13:51 712

原创 阻塞queue系列之ArrayBlockingQueue

extends AbstractQueueimplements BlockingQueue, java.io.Serializable一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列检索操作则是从队列头部开始获得元素。添加和删除使用的是同一把锁Reentr...

2017-12-20 23:07:34 807

原创 第三方登陆--微信登陆

微信公众号如果是自己测试:申请一个测试账号就行了。 具体开发流程参考:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842定义httpclient用于请求微信接口public static JSONObject doGetJson(String url) { JSONObject jsonObject =

2017-12-19 17:18:25 731

原创 springBoot集成quartz集群

1、导入依赖: <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency>2、在项目中添加quartz.pr

2017-12-15 13:59:51 3556 8

原创 springBoot集成pageHelp

引入jar <!-- mybatis的分页插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.0</version> </depende

2017-12-07 16:36:55 1144

原创 springBoot之过滤器解决前端跨域问题

关于拦截器原理,请参考我的另一篇博客:SpringBoot之过滤器Filterpackage com.cci.eclickup.common.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig

2017-12-06 16:18:46 3151

原创 RedisTemplate序列化

Spring提供了默认的StringSerializer和JdkSerializer。StringSerializer就是通过String.getBytes()来实现的,而且在Redis中,所有存储的值都是字符串类型的。所以这种方法保存后,通过Redis-cli控制台,是可以清楚的查看到我们保存了什么key,value是什么。JdkSerializationRedisSerializer,这个序

2017-12-05 13:42:52 3561

原创 redis分布式锁redisson(下)

关于redisson的源代码请参考官网:https://github.com/redisson/redisson redisson官方讲解参考:https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95springBoot中实现首先需要引入redisson <!--redis--> <dependency>

2017-12-02 18:26:51 1996

原创 redis分步式锁(上)

前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,本篇博客将详细介绍如何正确地实现Redis分布式锁。需满足如下条件:-互斥性。在任意时刻,只有一个客户端能持有锁。 - 不会发生

2017-12-02 17:47:47 604

java 23种设计模式

用java详细讲解了23种设计模式

2017-05-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除