aty

虽有嘉肴,弗食,不知其旨也;虽有至道,弗学,不知其善也。是故学然后知不足,教然后知困。知不足,然后能自反也;知困,然后能自强也。...

maven资源过滤导致打包后文件变大

使用maven进行资源过滤的时候,只要过滤需要过滤的文件,一些二进制文件,比如https证书等,就不要参与资源过滤,否则打包后会破坏文件内容。

2017-02-15 14:32:44

阅读数 3026

评论数 2

java泛型的一些常见用法

java泛型常见写法

2017-02-09 08:57:30

阅读数 2271

评论数 0

遍历java集合或数组的几种方式

以数组为例,基本上有下面4种常见的遍历方式:方式1:多次调用函数,而这些调用是不必要的,浪费。方式2:引入了额外的length变量,而且该变量在整个方法作用域内都可见,有变量作用域污染问题。方式3:不存在方式1的浪费,不存在方式2的作用域污染,唯一不好的地方在于多定义一个变量。方式4:不存在方式1...

2017-02-06 20:12:32

阅读数 1350

评论数 0

熟练使用java的Enum、EnumSet、EnumMap

对java枚举一直没有系统学习过,之前就是用枚举来替代接口中的常量,今天看到同事写的一段代码使用了EnumSet,不是特别熟悉。于是重新学习了Enum、EnumSet、EnumMap。

2017-02-06 19:56:44

阅读数 3574

评论数 1

JDK8新特性:使用stream、Comparator和Method Reference实现集合的优雅排序

大家对java接口Comparator和Comparable都不陌生,JDK8里面Comparable还和以前一样,没有什么改动;但是Comparator在之前基础上增加了很多static和default方法。本文主要结合JDK的stream编程,学习下Comparator。stream().so...

2017-02-05 13:23:55

阅读数 18545

评论数 0

JDK8新特性:使用Method References实现方法复用,简化lambda表达式

之前的文章已经介绍了函数式接口与lambda表达式,这篇文章主要学习下方法引用。使用方法引用,可以减少lambda表达式的书写,在Stream API中很常用。我们想实现整数list的排序,使用lambda我们还得自己编写一个Comparator对象(虽然也很简单),实际上JDK类库已经提供了类似...

2017-01-18 10:36:19

阅读数 1032

评论数 0

JDK8新特性:使用Optional避免null导致的NullPointerException

Optional实际上是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。

2017-01-15 20:00:13

阅读数 37114

评论数 3

消息摘要、MAC(消息认证码)、数字签名扫盲贴

消息摘要与MAC的区别,消息摘要只能保证消息的完整性,MAC不仅能够保证完整性,还能够保证真实性。MAC不能保证消息的不可抵赖性,而数字签名可以保证。

2017-01-14 15:56:50

阅读数 8866

评论数 0

SimpleDateFormat不是线程安全的类

SimpleDateFormat不是线程安全的类,可能报各种异常

2017-01-13 09:24:32

阅读数 484

评论数 0

JDK8新特性:编译器保留方法参数名字

很长一段时间里,Java程序员一直在发明不同的方式使得方法参数的名字能保留在Java字节码中,并且能够在运行时获取它们(比如Paranamer类库)。最终,在Java 8中把这个强烈要求的功能添加到语言层面(通过反射API与Parameter.getName()方法)与字节码文件(通过新版的jav...

2017-01-12 13:19:34

阅读数 4141

评论数 1

JDK8新特性:重复注解Repeating Annotations

注解并不是什么新鲜东西了,比如spring中存在大量注解简化我们的配置。但是在JDK8之前,我们是不能使用重复注解的,即某个位置相同注解只能出现一次。这里有个使用@Repeatable( Schedules.class )的注解类Schedule,Schedules仅仅是Schedule注解的数组...

2017-01-12 09:20:28

阅读数 1127

评论数 0

JDK8新特性:lambda入门

lambda其实就是为@FunctionalInterface服务的,能够用一种全新的、简洁的语法创建函数式接口的对象。当然如果一个接口不符合函数式接口的定义,是不能通过lambda表达式来创建其对象的。lambda其实就是定义入参、函数体、返回值,然后可以生成任意一个接口(符合该函数入参和返回值...

2017-01-11 09:26:39

阅读数 1450

评论数 0

maven项目构建:maven-antrun-plugin插件实现文件内容拷贝和文件重命名

maven-antrun-plugin插件实现文件内容拷贝和文件重命名

2017-01-10 20:07:32

阅读数 4709

评论数 0

JDK8新特性:函数式接口@FunctionalInterface的使用说明

通过JDK8源码javadoc,可以知道这个注解有以下特点: 1、该注解只能标记在"有且仅有一个抽象方法"的接口上。 2、JDK8接口中的静态方法和默认方法,都不算是抽象方法。 3、接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么...

2017-01-06 14:03:29

阅读数 29492

评论数 5

JDK8新特性:接口的静态方法和默认方法

在jdk8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的。JDK8及以后,允许我们在接口中定义static方法和default方法。静态方法,只能通过接口名调用,不可以通过实现类的类名或者实现类的对象调...

2017-01-06 10:46:53

阅读数 21345

评论数 16

Guava库:Preconditions实现优雅校验

实际开发中需要做入参校验的情况比比皆是,比如开发一个rest接口,肯定要对参数各种校验,防止错误的输入导致程序出错。我们可以使用Preconditions(前置条件),这样我们自己代码中就不会出现大段的if代码了。Preconditions类似我们写junit单元测试或者spring中的asser...

2017-01-05 09:58:30

阅读数 3242

评论数 0

guava-retrying重试工具库: Retryer.call()使用注意事项

前面我们介绍了如何通过RetryerBuilder构造一个Retryer对象,现在我们学习下如何使用 Retryer.call()。这个API很重要,对于这个方法的入参、返回值、可能抛出的异常要了解清楚。入参:很简单,就是一个实现了业务逻辑的Callable对象;返回值:某次尝试成功后,Calla...

2016-12-27 14:17:07

阅读数 5655

评论数 0

guava-retrying重试工具库: AttemptTimeLimiter

AttemptTimeLimiter和guava的TimeLimiter基本是一样的,是为了限制某个任务的执行时间。比如我希望一个Callable任务执行时间不超过5s,如果超过抛异常TimeoutException。

2016-12-27 13:59:25

阅读数 1417

评论数 0

guava-retrying重试工具库: RetryListener

当发生重试之后,假如我们需要做一些额外的处理动作,比如发个告警邮件啥的,那么可以使用RetryListener。每次重试之后,guava-retrying会自动回调我们注册的监听。可以注册多个RetryListener,会按照注册顺序依次调用。

2016-12-27 13:26:59

阅读数 2812

评论数 1

guava-retrying重试工具库: 阻塞策略BlockStrategy

什么是阻塞策略呢?通过前面的学习,我们知道guava-retrying是可以设置2次重试的时间间隔的。比如第一次失败后,需要等待200ms再开始第二次尝试,也就是说线程需要等待200ms。实现200ms等待有多种方式,比如通过sleep方式,比如通过自旋的方式,比如锁、wait等多种控制手段,这其...

2016-12-27 13:14:16

阅读数 1623

评论数 1

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