Archive

Archive for the ‘Life in Coding’ Category

Java客户端Socket在服务端重启后的异常情况处理

三月 17th, 2016 No comments

碰到场景如下:Java服务器端A(使用NIO的异步IO方式),Java客户端B(使用普通IO的同步方式),在服务端A重启后,B->A的Socket毫无疑问的断了,然后就会出现一些异常情况,分析一下。

阅读更多…

警惕long值转化为int,比如在Comparator接口中

三月 2nd, 2016 No comments

long值转为int会造成溢出大家都知道,很多时候却会忽视已发bug,造成明明的正值变为了负值(因为int最高位非0,long值大于int最大值2^31-1=2147483647)。

此次出错的地方在使用java.util.Collections.sort中使用Comparator接口中,因为compare方法通过返回int值来比较大小,而逻辑比较大小是通过比较时间戳long值按最近时间排序,一开始不注意就直接把时间戳long值差给直接转为int值返回了,造成了可能的排序错误(有趣的是只需要24天的毫秒值就会超过int的最大值)。

阅读更多…

jdk中SimpleDateFormat的实例线程不安全

三月 1st, 2016 No comments

线上服碰到诡异问题,解析一段无参数固定代码生成的时间字符串获得时间戳,不定概率出现解析异常,堆栈如下。

产生的原因,因为SimpleDateFormat每次new的代价比较高,固定new一个后重复使用。一开始并没有对输入字符串进行日志打印,就以为是输入字符串的错误,就难以定位到产生问题的原因。

阅读更多…

Java项目无法加载最新的class

十二月 22nd, 2015 1 comment

问题

一个Java项目,无论怎么替换jar包Jar1,运行中某个类A无法加载到最新的class,一直以替换前的旧版本运行导致报错;而Jar1中新加入的类B可以被正确执行,每次替换jar包都能加载到B最新的class。 阅读更多…

Linux下搭建Tomcat环境

八月 28th, 2015 No comments

多年没有碰Java Web了,之前也一直在Windows下玩耍。在Linux下跑起Tomcat也折腾了一阵。

看Apache Tomcat官网,已经有Tomcat 8.x(据说支持Oracle Java 7.0标准),7.x和6.x,习惯还是使用6.0.44版本。

阅读更多…

Liunx下搭建Rails和Nginx环境

八月 12th, 2015 No comments

用rails开发轻量级web,效率最高!

阅读更多…

域名备案和博客迁移至国内

七月 29th, 2015 1 comment

一直用的dreamhost国外的主机,前些日子感觉越来越不好使,速度慢不说,经常根本无法连接上,FTP更是慢大部分时候无法上传和下载。然后国内环境又碰到好多网站设置需要域名备案号的,不然无法使用某些功能,比如国内的广告商、微信网页安全授权等。

前些日子,在微博上偶然发现阿里云虚拟主机免费使用,赶紧尝试了一个,还挺好用的,毕竟咱博客就是个小网站足够了。于是就开始了域名备案和数据迁移。

虽然有点恶心域名备案这个事情,但想想咱也不干什么坏事,毕竟国内网速快啊。 阅读更多…

JSON中出现解析错误的原因之一:不可打印字符

四月 9th, 2015 No comments

JSON规范规定,字符串需要用Unicode传输,而对于ASCII码中的前32个不可打印字符(第33个字符为空格)应该转化为明文的转义模式,比如换行符0A:”\n”,出现在json中就应该是明文的\n,所以内部表示就应该是”\\n”。

所以假如一个json字符串中出现了01-1F这31个字符(00空字符倒是不会出现错误),json就会解析错误。

阅读更多…

Cordova native API和开源插件

三月 30th, 2015 No comments

开发Cordova的APP使用到下面几个原生或者开源第三方的插件,很好用

1.Notification

org.apache.cordova.dialogs和org.apache.cordova.vibration

取代原生alert(不能控制title),提供丰富的alert、confirm等API

2.InAppBrower

org.apache.cordova.inappbrower

可以在APP内部新开一个页面打开浏览器,可以关闭

3.Network Infomation

org.apache.cordova.network-infomation

检查网络类型和状态,可以检查出当前网络是2G/3G/4G/WIFI,有事件监听断网和连网

4.Camera

org.apache.cordova.camera

调用摄像头或从文件夹中选取,可以获取图片base64后的数据

5.Screen Orientation

net.yoik.cordova.plugins.screentorientation

可以使用screen.lock等API, 锁定或者解锁屏幕转动

6.BarcodeScanner

com.phonegap.plugins.barcodescanner

https://github.com/wildabeast/BarcodeScanner/    主页地址

可以扫描二维码等,获取内部的文本信息和文本类型

 

防止数据库数据重复的几种方法

一月 7th, 2015 No comments

在某些数据库表中,比如记录的是一些关联关系,比如某个人关注了另外一个人,person_id和target_id,这种数据表的数据如果出现了重复,可能会引起程序上其他地方的诡异bug,要尽量保持数据的唯一性。这种数据重复,要不就是插入数据时根本没有做存在检查,或者是可能由二次提交产生的比较麻烦的并发情况。

1. 代码层做同步控制,利用锁机制
2. 在数据查重时利用数据库事务 + SQL层加入排他锁,select * from xx where ... lock for update
3. 数据库层Unique检查,建表时加入unique的索引

前两个方法在代码层面,比较容易控制,第三种方法最彻底但是出现冲突时候会报异常。

不过如果在高并发的情况下,使用第三种方式然后主动捕获异常,也是很不错的甚至是最好的。

Ruby字符串的编码

十二月 21st, 2014 No comments

相比较于Java String的编码转换(先将String根据原字符集转化为字节数组,然后再用字节数组根据新字符集拼装成新的字符串),Ruby的字符串编码转化省去了中间字节数组的过程,直接string.encode(new_encoding)即可。

阅读更多…

linux的timeout处理wkhtmltopdf进程超时

十月 25th, 2014 No comments

rails程序中要调用一个系统命令,但是这个系统命令在某些时候可能会处理很久也得不到结果,就需要控制超时情况。

阅读更多…

Rails中has_many等的原理

十月 4th, 2014 No comments

刚接触rails的时候着实被has_many给惊到,这么厉害的功能,尤其是has_many的延迟加载,直到真正需要读取数据的时候才会进行SQL查询(person.posts.size,并不会执行select *到内存后再对Array执行size),但是用普通的调试方法怎么看has_many的结果是一个Array,比如.class方法,然后就觉得很神奇。

阅读更多…

记C#和Excel开发

九月 10th, 2014 No comments

需要一个windows环境下的工具,能够读写Excel。这个Excel比较复杂,内嵌VB脚本,写Excel的时候必须得保留这些原有的脚本数据。

阅读更多…

简析Rails:active_support 2.3.5

七月 28th, 2014 No comments

项目中用到Rails2.3.5,就以此版本研究。和Rails本身相关的,大概有actionmailer(发邮件相关)、actionpack(HTTP和controller相关)、activerecord(ORM框架)、activeresource、activesupport(基础扩展库)。

阅读更多…