- MySQL在旧表中增加唯一索引时,如何处理原有的重复数据?参考:mysql删除重复记录只保留一条
delete from `target_table` where id in
(Select * from (select max(id) from `fans_sync_job`
where 1=1
group by mp_id, job_type, job_status having count(*) > 1) as b);
- google的commons包有很多有用的工具,今天遇到一个问题,判断两个字符串是否可以正常转换为数字类型,可以使用NumberUtils这个工具类。
- MySQL知识:MySQL删除数据不会回收空间,删除表才会回收空间
- Fork/Join 模式有自己的适用范围。如果一个应用能被分解成多个子任务,并且组合多个子任务的结果就能够获得最终的答案,那么这个应用就适合用 Fork/Join 模式来解决。Fork/Join框架是ExecutorService的一种实现,也会把任务提交到线程池中去执行,它的特殊之处在于使用了工作窃取算法——已经处理完自己的任务的线程可以“窃取”其他正在忙碌运行的线程的任务来执行。参考:oracle官方学习文档
Fork/Join模式的工作过程示意图
- Java SE8中的
java.util.Arrays
工具类中的parallelSort()方法就使用了Fork/Join框架进行排序。在多核系统上,使用并行算法对大数组进行排序比顺序算法要快很多。 - 文章阅读——Java 8中的日期API,借鉴了Joda Time库的良好设计,在升级到Java 8后基本可以不用再使用Joda Time这个第三方库。Java 8中的日期API主要包括以下六个方面:日期(java.time.LocalDate)、时间(java.time.LocalTime)、时间戳(java.time.Instant)、日期时间(java.time.LocalDateTime)、工具API(上述每个类都实现了很多有用的工具API,例如日期加减)、格式解析(format方法和DateTimeFormatter工具类)等。代码可以参见:Learn Java
- Java并发包中有很多基础工具,其中包括阻塞队列。今天阅读The Java Specialists' Newsletter的一篇文章:Blocking Queue,其中写了阻塞队列的基本实现原理,并给出了一个基本的测试用例。
- 文章阅读:使用 Java8 Optional 的正确姿势。Optional的使用:(1)调用get()方法之前要先判断某个值是否被提供,A get() not preceded by a call to isPresent() is a bug;(2)最近Stuart Marks建议使用getWhenPresent()方法来代替get(),不过这个函数名字取得不太好;(3)Optional 中我们真正可依赖的应该是除了 isPresent() 和 get() 的其他方法;(4)用了 isPresent() 处理 NullPointerException 不叫优雅, 有了 orElse, orElseGet 等, 特别是 map 方法才叫优雅.
- 使用Optional的错误姿势:
- 调用 isPresent()方法时
- 调用 get()方法时
- Optional 类型作为类/实例属性时
- Optional 类型作为方法参数时
- 在J2EE项目中,利用MyBatis的动态语句,每张表只需要一个insert sql、每张表只需要一个update sql,对于查询接口,由于每个接口需要的字段不一样,因此可以提供多个不同的查询SQL。
- Java 8中的Lambda 表达式详解:可被传递(存放)的匿名函数的简写形式。
- 匿名:不需要像平常的方法一样需要起名字
- 函数:有参数、函数体、返回值,甚至可以抛出异常
- 传递:可以用作函数参数或者保存在局部变量中
-
简洁:不需要写一大堆模板代码
Lambda 表达式使用举例
- 函数式接口(functional interface):一种特定的Java接口——只定义了一个抽象方法。在Java 8中为接口提供了“默认方法(default method)”,在这里可以确定:即使一个接口中有多个默认方法,只要 它是只定义了一个抽象方法,那么该接口仍然是函数式接口。在java.util.functional包中,Java 8提供了一些常见的函数标识:
- Predicate:接受一个泛型(T)对象,并返回boolean。如果你需要一个包含泛型(T)对象的布尔表达式,则可以使用java.util.functional.Predicate<T>定义一个Lambda表达式;
- Consumer:接受一个泛型(T)对象,并且返回void。如果你需要访问一个泛型(T)对象,并基于它做一些操作,就可以使用。
网友评论