Spring管理junit transaction

OTP

我们在日常的开发中,很大部分ut 都是测试数据库的增删改查功能,重复的ut常常因为数据库不一致而失败,例如第一次测试的时候刚刚插入了一条数据,再运行同样的ut因为数据重复就会失败。因此最好的测试方式是自己mock数据。每次ut在结束的时候都将数据库状态恢复到初始状态。这里就介绍一种spring使用transaction实现的方式。

在spring配置文件中配置数据库事务管理:

<tx:anno......

银行里的动态密码

OTP

最近用了中国银行的网银,虽然整体体验很烂,但是动态密码还是很有趣,细思量下来,里面有很多门道。

动态密码(OTP)

动态密码是一种实时变化的密码,银行里所用的是同步的密码技术,其同步方案又分为基于时间的同步方案和基于事件的同步方案。基于事件的密码生成需要两个基本输入:原定的密码种子和用户的特定事件(如登录,或者某个生成密码的操作等)。在用户的生成密码之后,服务器这一端会根据相同的事件和密码种子生成密码......

图片编辑的web端解决

最近项目里面需要给用户提供一个图片裁剪和压缩的功能,这些图片是要推送到手机端,为了不过多浪费用户的流量,所以必须要压缩到某个阈值范围内。由于网站面向的用户都是偏低端的用户,而且他们绝大多数都是实用ie7,8的,所以不能使用html5来实现了。所以目前可用的方案只有两个:

前端使用flash程序编辑图片后提交至后台保存;

或 后端接收原始图片,在服务器端对图片进行裁剪和压缩等编辑操作。

经过调研,如果前端使用flash程序处理图片可以使用第三方的api(如美图秀秀apihttp://open.web.meitu.com/)或者前端重新开发一个图片处理的flash插件。后端处理图......

Inner Join vs Where

现在有两种Sql:

Inner Join

select * from Table1 a

Inner join Table2 b

On a.index = b.index

Where

select * from Table1 a,Table2 b

where a.index = b.index

这两种SQL有什么区别,除了语法上的区别,结果上看也看不出区别来。其实这两种SQL的作用是一样的。我们先将这两个sql放到MySql上看看结果:

Explain select * from Table1 a

Inner join Table2 b

......

第一篇

又开始折腾博客了,这是第一次实用静态博客,折腾了好久也没折腾好。