1、Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本的一致性。在进行反序列化时,JVM会将传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果一样的话,就可以进行反序列化,否则就出现序列化不一致的异常,会抛出InvalidCastException!
2、Having和Where的区别?
having后面接的语句与where类似,where后面的表达式怎么写,having就怎么写,但是两者之间有一个很重要的区别就是:
- where是针对表中的列进行筛选,查询数据
- having是针对查询结果中的列进行筛选,查询已经得到的结果中的数据
- 简单的说:where对表起作用,having对结果进行筛选
- MySQL
select * from room303
where age >=22
having salary < 1900;
3、select五个子句的具体顺序为:
where、group by、having、order by、limit
MySQL默认引擎为InnoDB,InnoDB支持行锁和表锁。
行锁和表锁
MySQL的行锁是通过索引加载的,行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁即无法实现,取而代之的是表锁。
行锁:会出现死锁,发生锁冲突几率低,并发高。
表锁:不会出现死锁,发生锁冲突几率高,并发低。
锁冲突:例如说事务A将某几行上锁后,事务B又对其上锁,锁不能共存否则会出现锁冲突。(但是共享锁可以共存,共享锁和排它锁不能共存,排它锁和排他锁也不可以)
死锁:例如说两个事务,事务A锁住了1-5行,同时事务B锁住了6-10行,此时事务A请求锁住6-10行,就会阻塞直到事务B施放6-10行的锁,而随后事务B又请求锁住1-5行,事务B也阻塞直到事务A释放1-5行的锁。死锁发生时,会产生Deadlock错误。
锁是对表操作的,所以自然锁住全表的表锁就不会出现死锁。