分类 技术随笔 下的文章

BigDecimal与double四则运算性能对比

在做金融类系统处理金额数据时,double提供的精度位数有限,进行大量资产的核查清算时,容易因位数过多产生精度不够的情况。

Java的BigDecimal在这方面支持较好,可以提供任意位的精确计算,不过其效率一般,为了探究与double的性能差距,简单测了一亿次迭代情况下的加减乘除运算,进行比较,本次试验使用我的渣渣办公本,i5-2410m 4G内存。

通过测试,BigDecimal与double的性能差距在100倍这个量级,测试一亿次迭代数据,处理效率尚可在可接受范围。

结果图(单位毫秒):

BigDecimal性能

vmware mac 10.11/10.12 虚拟机 共享文件夹/调整分辨率

虚拟机的mac升级到10.12后,分辨率被锁定1024x768,直接vi编辑配置文件无法保存,在vmware中共享的文件夹也无法打开。

原因是10.11之后增加了System Integrity Protection (SIP)功能,禁止让软件以 root 身份来在 Mac 上运行。

好在有办法关掉。

常规办法是在引导时按住command+R键,进入recovery environment,在终端进行操作,比如这样:

How to turn off System Integrity Protection in El Capitan

Click the menu.
Select Restart...
Hold down command-R to boot into the Recovery System.
Click the Utilities menu and select Terminal.
Type csrutil disable and press return .
Close the Terminal app.
Click the  menu and select Restart... .

不过虚拟机好像不太好正确按出来,可以尝试在引导时按住command键(普通键盘alt键)进入boot manager,然后选择Enter setup ——> Boot from a file ——> Recovery HD[PciRoot(0x0)/…] ——> ——> boot.efi

Spring Boot 集成 HBase的一些注意事项

Spring boot 确实降低了开发一个符合现代架构Java Web应用的门槛,不过由于普及范围不太广,资历也还比较年轻,相关文档和Spring MVC那套比起来相当贫乏。

所以可能会趟到一些坑。

实话讲,Spring boot开发一个Java Web应用是十分称职的,不论是做Restful API提供纯后台服务,还是使用MVC加上一些模板渲染引擎,Spring boot都可以胜任,并能简单的、出色的完成工作。与Spring进行一大堆配置相比,Spring boot的配置非常简单。数据连接方面,Spring boot data组件涵盖了大多数应用场景,jpa写到飞起,默认的tomcat连接池也可满足一般需求。

我最近一个需求是进行HBase数据检索。

spring-data-hadoop的hbaseTemplate挺强大的,我初步想集成进来,不过这个组件现在Spring boot里没有办法做到简单配置,还需要写xml的配置文件并显式生效。官方现在尚无简单进行hbase集成的文档和参考案例,相关的讨论可以看这两个帖子:

http://stackoverflow.com/questions/31381615/use-hbase-with-spring-boot
http://stackoverflow.com/questions/24795097/how-to-use-hbase-with-spring-boot-using-java-instead-of-xml

不过hbase原生api使用起来也不麻烦,我要开发的这个应用十分简单,心想索性就引入原生的包直接写就好了。

所以我引入了hbase-client和hadoop-hdfs两个包,就像这样

B9 Creator 汉化

B9Creator是流行的3D打印开源DLP解决方案,其早期软件开源,虽然功能简单但是DIY足够,是国内众多DLP厂商首选解决方案。上位机软件只有英文版,本站收集了一些汉化资源进行整合并校对,将汉化版源码在github上开源方便国内,使用qt开发,注意编译环境版本,地址如下:

https://github.com/zhonghcc/b9creator-zh_cn
B9C_Plain_logo

jodatime spring mvc (spring boot) 配置 解决时区问题

jodatime依靠其方便的api和与Data无缝转换,成为java开发负责时间逻辑的不二之选。
当jodatime作为Entity的属性自动转换时,一般用到jadira.usertype

在实体类中使用jodatime需要引入jadira.usertype
自动转换有两种配置,一种是在属性上加注解:

// Will be mapped as DATETIME (on MySQL)

@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime createTime;

// Will be mapped as DATE (on MySQL), i.e. only date without timestamp
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDate")
private LocalDate birthdayDate;

一种是做全局配置
spring boot的app.properties配置如下:

spring.jpa.properties.jadira.usertype.autoRegisterUserTypes = true

这样在实体类中就可以直接使用jodatime的DateTime类型,在存取数据库的时候会自动完成类型转换

// Will be mapped as DATETIME (on MySQL)
private DateTime createTime;

// Will be mapped as DATE (on MySQL), i.e. only date without timestamp
private LocalDate birthdayDate;

不过有一个问题,当数据库保存实体时,时间少了8个小时,2016-06-20 00:00:00存到数据库中变成了2016-06-19 16:00:00,看来是丢了时区信息。