
Java 知识
文章平均质量分 70
lqadam
这个作者很懒,什么都没留下…
展开
-
自定义线程池如何捕获线程异常
最近写了个自定义的线程池,用于处理持续时间短、频次高的任务,逻辑上借鉴了CachedThreadPool,使用SynchronousQueue 作为任务的缓存队列,即实现没有任务进入队里,只要有空闲线程就执行任务。此外还自定义了拒接执行策略,由默认的异常拒绝执行,改为CallerRunsPolicy策略,并加了一行日志用作监控告警。自定义线程池不是重点,本文的重点在线程池捕获异常的问题。在实现该线程池的时候,笔者为其设置了一个ThreadFacotry,其中实现了UncaughtExceptionHan原创 2020-06-30 00:30:09 · 1629 阅读 · 0 评论 -
枚举类 注解校验
文章目录前提知识1. 对离散值(非枚举)的校验校验注解校验实现使用示例缺点2. 对枚举的校验校验注解校验实现使用示例缺点与一丢丢改进使用示例校验器实现补充内容java validation内没有对枚举的校验工具,但是离散的枚举值校验确实是有必要的,这里列两种枚举的校验方法,实际大同小异。前提知识首先,javax.validation包是提供了方便的自定义校验的入口的,就是javax.vali...原创 2019-12-08 16:32:08 · 3320 阅读 · 0 评论 -
ConcurrentLinkedQueue VS LinkedBlockingQueue
https://stackoverflow.com/questions/1426342/need-a-queue-that-can-support-multiple-readers/The major difference between ConcurrentLinkedQueue and LinkedBLockingQueue is its throughput. Under moderat...转载 2019-12-08 16:25:32 · 235 阅读 · 0 评论 -
使用BigDecimal还可能有精度问题吗
据以往知识和行业经验,因为二进制问题,doubel无法精确表示10进制小数,这个时候可以使用BigDecimal类型来规避。但是BigDecimal就没有精度问题了么?就最近的实践,发现一种情况,即使使用了BigDecimal,也可能有精度问题,当然问题的症症结不是因为BigDecimal,听往下看。这个问题的本质,还是使用了double,这里记录下。问题复现如下:BigDecimal ...原创 2019-12-08 16:16:05 · 706 阅读 · 0 评论 -
缓存的使用模式
缓存的使用模式最近在看公司的库存编年史,看到公司在库存上的架构演变,看到关于缓存的地方,发现对于缓存的设计有点忘了,整理总结一下。cache aside 最常见就是最常见的有缓存读缓存,没缓存读db,回写缓存,更新db需要失效缓存问题这里需要注意的是并发情况下的顺序问题先更新db,后更新缓存:后更新,而不是失效缓存的问题是 如果有并发的写的话,因为回写缓存的网络延迟不好控制,会存在先...原创 2019-12-08 16:14:15 · 400 阅读 · 0 评论 -
Java8 新时间API使用示例
import org.junit.Assert;import org.junit.Test;import java.time.Duration;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.Period;import java.time.temporal.ChronoField;...原创 2018-11-21 23:28:21 · 214 阅读 · 0 评论 -
maven archetype 自定义
archetype是什么如何创建archetype(简易版,标准版请看后面#更多问题)第一步第二步第三步如何使用archetype更多问题未解决的问题参考来源archetype是什么archetype是maven的工程原型(模版),也就是说,使用archetype,可以将maven中已存在的工程结构和配置套用到新创建的工程上。 一般用idea创建mav...原创 2018-06-06 17:54:06 · 2663 阅读 · 0 评论 -
Think in Java 阅读拾遗
1. 类内成员变量不初始化,会有默认值,方法内临时变量不初始化,没有默认值,会报错2. 关于无符号右移,对于byte、short类型的负数,会先转化成int再右移。这种流程下,可能会出现因为补码表示出错3. 关联2,>>>=最后的‘=’,强制转化是直接将移位后的int截取后若干位给byte或者short的,所以也会导致移位错误的问题4. 关联2,对cha...原创 2018-05-24 22:13:09 · 302 阅读 · 0 评论 -
Spring 和 Quartz 实现定时任务
Java 定时的四种方式Quartz对于继承QuartzJobBean需要做需要实现定时任务的类继承orgspringframeworkschedulingquartzQuartzJobBean实现定时执行的方法xml里要么声明这个定时任务类要么使用注解扫描的方式声明xml里声明新的beanclass为orgspringframeworkschedulingquartzJobDetailBe原创 2017-10-19 10:02:08 · 3434 阅读 · 0 评论 -
Apache Commons IO入门教程
Apache Commons IO 示例1 Utility Classes2 文件监控器3 过滤器4 比较器5 输入6 输出译文,转载自Apache Commons IO入门教程,留作备忘Apache Commons IO是Apache基金会创建并维护的Java函数库。它提供了许多类使得开发者的常见任务变得简单,同时减少重复(boiler-plate)代码,这些代码可能遍布于每个独立的转载 2017-09-10 10:53:00 · 484 阅读 · 0 评论 -
BeanUtils 初探
实习的时候碰上有人用BeanUtils,感觉很方便,省了很多胶水代码的工作,但是自己当时用的时候,发现它还是有一些问题,但是没有仔细琢磨,现在有时间了,琢磨一下.Apache common.BeanUtils 作用BeanUtils提供了一些方法,用来从一个简单的Java对象(JavaBean)中,提出属性,或者实现给其他JavaBean拷贝属性. 这样,就可以省略此前容易出错的各种通过sett原创 2017-09-06 21:12:19 · 909 阅读 · 0 评论 -
文件下载文件名乱码的几个问题
Java Web后端做文件的下载,各个浏览器之间有兼容性问题,下载文件的文件名可能有乱码,下面总结几个乱码问题和常见解决办法:firefox文件名乱码的问题:一般下载文件,都会指明Content-disposition,形如下response.setHeader("Content-disposition", "attachment;filename="+URLEncoder...原创 2018-08-05 17:42:13 · 4550 阅读 · 1 评论 -
SXSSFWorkbook写入大量数据的两点处理
初用SXSSFWorkbook,感觉以读写大量数据为买点的SXSSFWorkbook,提供出了两个API,作为对大量数据处理的方式。这里对这两个API做一个小总结。构造入参rowAccessWindowSize 这个参数,会指定一个sheet可读取的row数目,超过该数目的row,会被写入到磁盘文件中,进而不能在通过getRow访问到,通过这种方式,内存使用空间就缩小很多了。 需...原创 2018-08-05 18:03:04 · 9841 阅读 · 1 评论 -
lombok 子类中如何使用@Builder
lombok大家都知道,在使用POJO过程中,它给我们带来了很多便利,省下大量写get、set方法、构造器、equal、toString方法的时间。除此之外,通过@Builder注解,lombok还可以方便的时间建造者模式。但是,在使用@Builder过程中,我发现了一问题:子类的Builder对象没有父类的属性。这在使用上造成了一定的问题。几番搜索,对于这个问题,找到了如下解法,解法的链...原创 2018-09-16 00:58:31 · 18116 阅读 · 2 评论 -
中文拼音排序的两种方法
最近遇到了中文排序的需求,所谓中文排序,一般都是说按中文对应的拼音字母排序,经过网上查询了解,总结一下,有下面两种方式,一一介绍下:数据库中排序能在数据库中解决的问题,自然放到数据库中解决,尤其排序一般和分页一起出现,如果能在数据库层面做掉,从查询性能和代码的简洁性上讲都是最好的,那么如何在数据库层面对中文进行排序呢?其实,文字的排序,就是按代表文字的,背后的编码排序,UTF-8下,中...原创 2018-09-16 01:49:38 · 18030 阅读 · 1 评论 -
Mybatis 数据源配置(多数据源类似)
import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.SqlSessionTemplate;import ...原创 2018-11-21 23:33:00 · 313 阅读 · 0 评论 -
零拷贝
今日看rocketMQ的设计,读到如何提高broker的发送性能,看到了使用mmp(文件内存映射)的技术,零拷贝,提高了数据从文件到内存再到网络的传输效率。这里有点迷糊,所以详细google了一把。特写下来留作记录。内容都是来自于已有的东西,都放到后文的参考文档里面,参考文档比我详细多了,有图有解释,有理论,甚至有代码,如果能看参考文档的原文的话,建议看原文。概念澄清“零拷贝”:在...原创 2018-12-14 23:27:11 · 1476 阅读 · 1 评论 -
使用Date CalendarAPI的日期工具类
下面是一个使用Date,Calendar类实现的日期的工具类,可能有些地方还需要作调整,现在是凭感觉写的,之后还会写一个使用Java8新日期API的工具类,二者功能相同。import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Da...原创 2019-01-29 20:45:01 · 180 阅读 · 0 评论 -
使用jdk8 time API的日期工具类
这是日期工具类的第二篇,使用新API来做的。现阶段Java8的新日期API,收到的支持并不太多,mybatis不支持对LocalDate,LocalDateTime的直接读写,需要再引入一个库,使用新的typeHandler才行,数据库内,似乎对LocaDate存储也有问题,使用不当可能引起日期不对的情况,具体了解的不多,所以现阶段这个库的普及情况还有待考证。import java.time.*...原创 2019-01-29 20:48:09 · 884 阅读 · 0 评论 -
Spring AOP拾遗
这里不介绍基本的AOP,只记录我在学习过程中自己发现需要注意的点。需要注意的点1. 启用AOPAOP需要显式的启用才能使用,除了在切面编程类上声明@Aspect之外,如果使用Java config的配置方式,需要在配置类上注明@EnableAspectJAutoProxy.如果是xml配置的话,需要使用<aop:config/>然后Aop的类,也需要通过声明@compent之类...原创 2019-02-13 11:51:26 · 183 阅读 · 0 评论 -
HashSet的add方法的问题
HashSet的add方法的问题昨天敲题,自己写了一个类,然后用Set过滤重复,碰到了equals和hashCode的问题,加之之前面试的时候问到过相关的内容,觉得自己学得还是浅,所以带着疑问有看了看HashMap的代码,将几个问题总结一下.关于HashSet 传入对象,怎么过滤首先,我们知道所有的Set里面都套了一个Map,使用Map的Key存值,Value存放一个固定的Object,这是适配器模原创 2017-06-08 12:12:16 · 11789 阅读 · 0 评论 -
关于JDK7的IllegalArgumentException:Comparison method violates its general contract
关于JDK7的IllegalArgumentException:Comparison method violates its general contract今天看社区问答的时候看到的一个问题,起因是说阿里开发手册中关于Compartor的实现的问题,建议实现满足对称性,传递性和自反性.回答中提到了JDK7中如果不满足这样的性质会出现的问题.这时我才知道原来JDK7及以上版本里,用于比较的函数一定要原创 2017-05-30 15:43:07 · 2905 阅读 · 0 评论 -
[翻译]"双重检查锁被打破了"宣言
在看书的时候看到了这篇文章的引用,因而上网查了这篇文章,看着看着觉得,不如翻译了写出来吧,所以有了这篇博客. 第一次翻译,如有不足还请包涵. 文章中我加入的话都有(注:)字样,文章翻译我尽量逐字逐句并且表达清晰,所以可能有些绕嘴. 原文地址:The “Double-Checked Locking is Broken” Declaration原创 2017-05-26 17:23:10 · 506 阅读 · 0 评论 -
【读书笔记】《Effective Java》(6)--方法
这是《Effective Java》的第7章内容总结,讲到了一些方法通用设计的东西。嗯,感觉后面的内容着眼在规范上面。方法38. 检查参数的有效性本条建议: 除非参数的有效性的检测工作要付出昂贵的性能代价,或者方法中的计算已经隐式地执行了必要的有效性检测,否则应当在方法开头就对参数进行检查,对于构造器也是如此。同时,公有方法对参数检查的各种限制和检查到问题时抛出的异常都应当写到JavaDoc文原创 2016-09-21 15:11:23 · 587 阅读 · 0 评论 -
【读书笔记】《Effective Java》(5)--枚举和注解
时隔几日,我又总结了一章内容。这一章是枚举和注解,都是Java1.5新加入的特性原创 2016-09-19 13:26:05 · 750 阅读 · 0 评论 -
【读书笔记】《Effective Java》(4)--泛型
趁着中秋小长假,把泛型这一章的内容整理出来,这一章讲真,看着很乱,一是因为对泛型在Java上的实现了解的还不够清晰,第二个我觉的书上给的泛型的注意点分散在各个小节里,不好总览。原创 2016-09-17 14:53:27 · 1016 阅读 · 0 评论 -
Java String类 传参的问题
疑问来自于这段代码public class Test1 { public static void changeStr(String str) { str = "welcome"; } public static void main(String[] args) { String str = "1234";原创 2016-07-08 16:39:22 · 1311 阅读 · 2 评论 -
【读书笔记】《Effective Java》(9)--并发
这一部分应该是Java很难的一部分,不过《Effective Java》讲到的不算多,建议先补一下Java多线程的知识,比如,我这几天找到Java并发编程这里,恶补了下多线程的知识。并发66. 同步访问共享的可变数据同步不仅是互斥地访问对象,还意味着其他线程对于对象的操作(线程间可靠的通信),己方可见Java语言规范保证读或者写一个变量是原子的,除非这个变量的类型为long或double(这是书原创 2016-09-28 18:32:58 · 728 阅读 · 0 评论 -
【读书笔记】《Effective Java》(10)--序列化
这一部分就是《Effective Java》 的最后一章了,读书笔记作完,但是以后还要经常温习,毕竟知识点很多。原创 2016-09-28 18:35:46 · 1095 阅读 · 0 评论 -
【读书笔记】《Effective Java》(3)-- 类和接口
这一章的笔记时隔略久,因为开学了,有事情要做了。现在正值中秋佳节,放假了,有时间补完这篇笔记。 现在正在看下一章——泛型,发现难度更高一点,估计更新下一篇读书笔记的时间会更长。原创 2016-09-15 23:14:16 · 1018 阅读 · 0 评论 -
【读书笔记】《Effective Java》(2)--对于所有对象都通用的方法
又读了一章,之前一直觉得Java的体系很完善了,读了这一章,发现原来Java平台本身也有一些设计不周到的地方,而且有些地方因为已经成为公开API的一部分还不好改,相信继续读下去对Java的了解会更深一步的。昨天下载了VS Code,尝试了一下,感觉比sublime还要用一些,尤其Markdown支持预览,不用设置,正好我觉得在oneNote上做笔记格式不好控制,就学了下Markdown的语法,用md原创 2016-09-10 14:49:01 · 840 阅读 · 0 评论 -
【读书笔记】《Effective Java》(7)--通用程序设计
由至周末,再更新一章的笔记,做到后来发现,78条建议只读标题可以都懂一些东西,再都每一条里面的例子又是另外一些知识。原创 2016-09-24 16:22:19 · 605 阅读 · 0 评论 -
【读书笔记】《Effective Java》(8)--异常
没想到今天完成了两章笔记的总结,这部分内容感觉没有泛型那部分难懂,不过要想熟练运用还是要多写代码才行,毕竟照以往我的代码,异常处理都是很草率的。 下一部分是并发,这一章有些难度,还是先看看其他博文扫扫盲再看书。原创 2016-09-24 21:14:50 · 492 阅读 · 0 评论 -
对于JdbcTemplate#queryForObject()的使用
JdbcTemplate#queryForObject()的误用在我写的小工程中,我使用了,也仅使用了Spring,所以数据库访问相关的操作都是通过Spring的JdbcTemplate解决的,除了要码sql语句,还要填充Bean对象之外,其他感觉都不错.在这个过程中,我使用了JdbcTemplate的几个方法,其中对于queryForObject方法,我起初有一些误用,后来出错才改正,这里做一个记原创 2017-05-13 21:17:38 · 14993 阅读 · 1 评论 -
java.sql.Date 和java.util.Date并不相同
这是我写一个小工程的第三篇总结,从这篇开始,记录我在开发过程中碰到的各种坑。java.sql.Date 和java.util.Date并不相同虽然java.util.Date是java.sql.Date,java.sql.Time,java.sql.Timestampe的父类,但是这几个类之间并没有遵循里氏替换原则,java.sql.Date只保存了日期信息,没有时间信息,java.sql.Time原创 2017-05-13 20:22:28 · 466 阅读 · 0 评论 -
Java 经典实例摘记 高级部分(博而不精)
16. 网络客户端查找网络地址(16.2)使用InetAddresss类,该类没有公有的构造函数,通过调用静态方法get*By*,可以实现从域名得到IP地址或者从IP地址得到域名的功能。 此外,这个方法实际不会访问网络,所以不会抛出和网络相关的异常(我想,这个类实际上是在访问本地的DNS缓存)使用TCP或者UDP的服务(16.4 & 16.7)Socket是TCP的实现,通过Socket的实例的g原创 2017-02-24 15:30:04 · 892 阅读 · 0 评论 -
Java 经典实例摘记 文件相关
给Map排序(7.9)两个方法: 1. 使用本来就基于key有序的TreeMap 2. 如果使用的是HashMap等不保证有序的Map,可以将Entry填充到ArrayList中,对ArrayList进行排序,以下是示例代码:Map<String,Integer> map=new HashMap<String,Integer>();//here ,we pretend we having pu原创 2017-02-24 15:28:37 · 312 阅读 · 0 评论 -
Java字符串拼接操作 详解(配合源码)
书接上回,上一次我们提到函数调用是嵌套在一句语句中性能好还是分成几条调用性能好,在那篇文章中测试代码使用的是String的拼接操作,因为它一个耗时操作。不过在用javap反编译之后,我发现即便是对String使用+拼接,javac也会将其优化,或者说是java里对String的‘+’运算进行了重载,编译成StringBuilder的append方法。这里我就有疑问了。错误认识在不知道上述常识之前,我原创 2016-11-30 13:08:32 · 6889 阅读 · 0 评论 -
Java 经典实例摘记 前5章 字符串和数字
封面写着是Java的CookBook,本着随便看看的态度看了前几章,过几天发现前面的忘了,算了,还是做下笔记吧。Java经典实例这本书,我看的第二版,虽然引入的JDK1.5的东西,但是整体风格还是很有点过时的,所以取其精华,将我没见过的技巧摘记下来了原创 2016-12-03 22:08:30 · 510 阅读 · 0 评论 -
Java并发编程的艺术 读后记要(2)
Java下的并发解决传统的解决方法(JDK1.5之前)传统的解决方法很简单。 * 如果是单个数据的话,对数据使用volatile关键字修饰,这个关键字可以保证数据不会停留在CPU的写缓存中,而是写入内存,下一次对该数据的读取一定读到的内存中的最新数据。也就是解决了可见性问题。但是volatile变量原子性还有问题,对volatile变量多线程下的自增自减操作,不是原子的。 * 如果是集合类,传统原创 2017-02-24 15:21:32 · 481 阅读 · 0 评论