月度归档:2016年02月

java序列化版本号

点击量:724

在写java程序的时候经常会看到类中会有一个序列化版本号:serialVersionUID。这个值有的类是1L,有的又是很长的数值,通常是这样声明的:

或者:

这是为什么呢?今天来总结下这个序列化版本号的作用。
先说说序列化,java的序列化指的是把java对象转化为字节序列(bytes)的过程,而反序列化就是把字节序列转化为java对象的过程。这个功能主要的作用是把java对象存储在磁盘上或者在网络上传输,如果没有这个功能你想要传输对象的话只能通过字符串拼接了。至于具体是怎么实现的查下api就知道,很简单,不再赘述了。正是因为有了反序列化机制,所以jvm需要判断需要转化的两个类是不是同一个类,于是就需要一个序列化版本号。如果在反序列化的时候两个类的serialVersionUID不一样则jvm会抛出InvalidCastException的异常;如果serialVersionUID一致则表明可以转换。
下面再来讨论下这个字段的值。
首先这[……]

继续阅读

RMDB中的事务隔离级别

点击量:204

网上关于这部分的介绍很多,这里写下自己对这几个隔离级别的理解。
首先解释下什么是隔离性(isolation):DB中的隔离性指的是一个操作产生的影响什么时候以哪种方式可以对其他并发操作可见。

然后再介绍几个容易混淆的概念:幻读,脏读和不可重复读
脏读(dirty reads)
某一个事务读取了另一个事务中已经修改了的但是尚未commit的数据,这就是脏读。一旦另一个事务发生回滚,则读取的值就是脏读了。
幻读(phantom reads):
A phantom read occurs when, in the course of a transaction, two identical queries are executed, and the collection of rows returned by the second query is different from the first.
在一个事务中,两个同样的查询语句得到的查询结果却不一样,这就是幻读,这里要注意一点:幻读是针对多条返回结果而言的
不可重复读(non-repeatable read)
A[……]

继续阅读