Java面试题总结(三)

15 阅读2分钟

list和set的区别

  • list代表了有序可重复集合,可直接根据元素的索引来访问
  • Set代表无序不可重复集合,只能根据元素本身来访问

数据库事务描述

事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须是使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。
事务的四个特征:原子性、一致性、隔离性、持续性

大表数据怎么查询,怎么优化

  • 水平切分:针对数据量大的表,要选择一个合理的sharding key,为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改,sql中尽量带sharding key,将数据定位到限定的表上去查,而不是扫描全部的表。
  • 垂直拆分:根据模块的耦合度,将一个大的系统分成多个小的系统,即分布式系统
  • 主从复制:读写分离
  • 优化sql语句,加索引
  • 加缓存,memcached,redis

垂直拆分和水平拆分

  • 水平拆分:把一个表的数据分到多个库的多个表里去,每个库的表结构都一样,只不过每个库表放的数据是不同的,所有库表的数据加起来就是全部数据。水平拆分的意义,就是将数据均匀放更多的库里,然后用多个库来抗更高的并发,还有就是用多个库的存储容量来进行扩容。
  • 垂直拆分:把一个有很多字段的表给拆分成多个表,或者是多个库上去。每个库表的结构都不一样,每个库表都包含部分字段。一般来说,会将较少的访问频率的字段放到一个表里去,然后将较多的访问频率的字段放到另外一个表里去。

HashMap和HashSet的区别

  • HashMap实现了map接口,HashSet实现了set接口
  • HashMap存储键值对,HashSet仅存储对象
  • HashMap调用put()向map中添加元素,HashSet调用add()方法向Set中添加元素
  • HashMap使用键(key)计算HashCode,HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false
  • HashMap相对于HashSet较快,因为它是使用唯一的键获取对象,hashset相比于hashMap来说比较慢