前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java Web技术经验总结(十五)

Java Web技术经验总结(十五)

作者头像
阿杜
发布2018-08-06 11:32:25
6320
发布2018-08-06 11:32:25
举报
文章被收录于专栏:阿杜的世界阿杜的世界
  1. MySQL在旧表中增加唯一索引时,如何处理原有的重复数据?参考:mysql删除重复记录只保留一条
代码语言:javascript
复制
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);
  1. google的commons包有很多有用的工具,今天遇到一个问题,判断两个字符串是否可以正常转换为数字类型,可以使用NumberUtils这个工具类。
  2. MySQL知识:MySQL删除数据不会回收空间,删除表才会回收空间
  3. Fork/Join 模式有自己的适用范围。如果一个应用能被分解成多个子任务,并且组合多个子任务的结果就能够获得最终的答案,那么这个应用就适合用 Fork/Join 模式来解决。Fork/Join框架是ExecutorService的一种实现,也会把任务提交到线程池中去执行,它的特殊之处在于使用了工作窃取算法——已经处理完自己的任务的线程可以“窃取”其他正在忙碌运行的线程的任务来执行。参考:oracle官方学习文档

Fork/Join模式的工作过程示意图

  1. Java SE8中的java.util.Arrays工具类中的parallelSort()方法就使用了Fork/Join框架进行排序。在多核系统上,使用并行算法对大数组进行排序比顺序算法要快很多。
  2. 文章阅读——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
  3. Java并发包中有很多基础工具,其中包括阻塞队列。今天阅读The Java Specialists' Newsletter的一篇文章:Blocking Queue,其中写了阻塞队列的基本实现原理,并给出了一个基本的测试用例。
  4. 文章阅读:使用 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 方法才叫优雅.
  5. 使用Optional的错误姿势:
  • 调用 isPresent()方法时
  • 调用 get()方法时
  • Optional 类型作为类/实例属性时
  • Optional 类型作为方法参数时
  1. 在J2EE项目中,利用MyBatis的动态语句,每张表只需要一个insert sql、每张表只需要一个update sql,对于查询接口,由于每个接口需要的字段不一样,因此可以提供多个不同的查询SQL。
  2. Java 8中的Lambda 表达式详解:可被传递(存放)的匿名函数的简写形式。
  • 匿名:不需要像平常的方法一样需要起名字
  • 函数:有参数、函数体、返回值,甚至可以抛出异常
  • 传递:可以用作函数参数或者保存在局部变量中
  • 简洁:不需要写一大堆模板代码

Lambda 表达式使用举例

  1. 函数式接口(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)对象,并基于它做一些操作,就可以使用。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.12.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档