首页 / 面试 / JAVA面试——数据库
JAVA面试——数据库
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA面试——数据库,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2845字,纯文字阅读大概需要5分钟。
内容图文
- 基础:
- 基本存储结构:页(大小16KB)
- 各个数据页组成双向链表,每个数据页的记录组成单向链表
- 索引:
- 数据库中一个或几个列以特定数据结构存储(B-Tree Hash),减少查找时间(将无序的数据变成有序)
- 聚簇索引 & 非聚簇索引:
- 按照数据存放的物理位置为顺序,提高多行检索速度
- 加快单行检索
- 聚集索引 & 非聚集索引:
- 聚集索引:
- 以主键创建的索引
- 叶子节点存放表中数据
- 非聚集索引
- 以非主键创建的索引
- 叶子节点存放主键和索引列
- 覆盖索引:把要查询出来的列和索引是对应的(主键+值)
- 唯一索引 & 主键索引 & 聚集索引:
- 不允许两行具有相同索引值的索引
- 主键值唯一,使用主键进行索引时,允许对数据的快速访问
- 行的物理顺序与逻辑顺序相同,数据访问速度更快
- B-树(平衡多路查找树)
- 每个节点最多有m个分支
- 节点有n-1个关键字,有n个分支
- 叶子节点处于同一层
- 根节点不是叶子节点至少2个分支,非根非叶子节点至少有ceil(m/2)个分支
- B+树
- 分支数=索引数
- 每个节点大小等于一页的大小(16KB)
- 顺序扫描速度快
- 通过顺序访问指针提高区间查询性能
- 磁盘预读特性,相邻节点预先载入
- InnoDB B+Tree索引:主索引、辅助索引
- 主索引:叶子节点data域记录完整数据记录,聚簇索引
- 辅助索引:叶子节点data域记录主键值
- 哈希索引
- 键值换算成新的哈希值,根据哈希值定位
- 不适合范围查询检索
- 无法利用索引完成排序
- 不适合多列联合索引的最左匹配规则
- 最左匹配规则:复合索引,会首先对最左边的数据进行排序,一直向右匹配直到遇到范围查询
- 数据库事务:
- 作为单个逻辑工作单元执行的一系列操作
- 提供隔离方法,防止相互干扰
- 提供从失败恢复正常的方法
- ACID
- 数据库隔离级别:
- 脏读
- A读取B已经更新但是未提交的事务,B回滚后A读到的就是临时无效的内容
- 不可重复读
- A事务需要读取一个字段两次,两次读取过程中,B更新了字段,导致A两次读取的内容值不同
- 幻读
- A读取若干行数据,B插入或删除等方式修改A读取的结果集;与不可重复读的区别在于,幻读是增加或删除行,不可重复读是修改
- 四个隔离级别
- 读未提交(脏读)
- 读已提交(不可重复读)、语句级别的快照
- 可重复读(幻读)事务级别的快照
- 串行:事务一个接一个串行执行,不能并发
- 锁的种类
- 内容
- 表锁(MySQL)
- 页锁(BerkeleyDBA)
- 行锁(InnoDB)
- 性质
- 共享锁(S) :SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE
- 独占锁、排他锁(X):SELECT * FROM table_name WHERE ... FOR UPDATE
- 更新锁(意向锁)
- 悲观锁与乐观锁
- 悲观锁
- 数据处理过程中,数据处于锁定状态
- 依靠数据库的锁机制
- 举例:select * from xxx for update (for update相当于加排他锁)
- 乐观锁
- 悲观锁性能开销大(长事务)
- 基于数据版本
- 间隙锁GAP
- 对符合条件范围内的已有数据记录的索引项加锁,同时也会对间隙加锁
- 在可重复读隔离级别下使用
- 防止幻读
- 数据库范式:
- 第一范式:强调列的原子性,列不能拆分
- 第二范式:一个表有一个主键,没有包含在主键中的列完全依赖于主键
- 第三范式:非主键列必须直接依赖于主键,不能存在传递以来
- PrepareStatement & Statement区别
- PrepareStatement预编译后放在缓存中,下次执行无需编译,更加安全,避免SQL注入
- 优点:
- 防注入攻击
- 多次执行速度快
- 防止数据库缓冲区溢出
- 代码可维护性高
- 内连接(inner join)、左外连接(left outer join)、右外链接(right outer join)、自然连接
- 数据库缓存性能优化:
- 将磁盘IO转化为内存IO
- Query cache:
- 针对select,缓存ResultSet
- 对sql语句hash,在query cache中找缓存
- 数据变化频繁时效率低
- binlog cache size:
- 二进制日志记录
内容总结
以上是互联网集市为您收集整理的JAVA面试——数据库全部内容,希望文章能够帮你解决JAVA面试——数据库所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。