提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
面试常考题:
提示:以下是本篇文章正文内容,下面案例可供参考
谈谈arraylist和linklist区别
1.arraylist底层是顺序表,linklist底层是链表
2.arratlist具备随机访问的能力(根据下标)
一、谈谈如何理解索引:
1.索引是干啥的,解决啥问题
索引类似于目录,(书架,书籍,目录)索引存在的主要意义,是为了提高查询的效率。快速定位,检索数据,提高了数据库的性能。
2.索引付出的代价:
降低了增加,删除,修改的效率(插入的新的记录,既要插入数据,还要调整索引)
3.索引背后的数据结构:
b+树
先认识b树
b树是一个n×搜索树
每个结点肯会包含n-1个值,当然也可以更少,n-1个值就把区间化成了n份
这样分成n个×的意义就是表示同样元素的数据集合的时候,比二叉树的高度要小很多,io次数也就降低了不少
b+树
1.2个值,俩个区间,每个结点值重复出现
二、谈谈如何理解事务
1.事务是干啥的(原子性)
要么全部都执行,要么一个都不执行,事务就是用来保证原子性的
事务能保证执行过程中出现问题的时候,自动的吧前面的sql执行的效果进行缓缓,恢复如初—回滚
原子性事务根本所在,能够把sql打包成一个整体,要么都执行,要么一个都不执行(执行出错自动欧诺个回收)
2.其他特性:
一致性:事务执行前后,数据出在一致的状态(数据能对的上,合情合理)
持久性:事务进行的改动,都是写到硬盘里的,不会随着程序重启/主机重启而丢失
隔离性:并发执行的时候,事务之间能够保持隔离,不相互打扰(并发执性简单理解为同时做很多事情)
隔离性存在的意义,就是让并发执行的过程中,尽量不出问题,问题再可控的范围内
3.并发执行事务下会出现那些问题,和一些解决方案
- 脏读:
一个事务a在修改数据,提交之前,另一个事务b读取了数据,此时a极可能在提交的时候提交的是不同数据(后续又修改了)
解决方案:
写操作加锁:在提交之前,不能读,提交之后才能读(写完了才能读)
- 不可重复读
在一个事务a中,多次读取同一个数据,发现不一样(读的过程被修改了)
解决方案:
读加锁写完了才能读 - 幻读:
在读文件a的时候,修改/新增删除文件b,这样两次读虽然数据一样,但是结果集变了(串行化)
4.mysql隔离级别有哪些和上面的应对方案: - read uncommitted 允许读未提交的数据 并发max 隔离min 可能存在脏度/不可重复读/幻读
- read committed 只能读提交之后的数据 写加锁 解决了脏度
- repeatable read(默认)读和写都加锁 解决了脏度/不可重复读
- serializable 严格执行串行化,并发min,隔离max ,都解决,效率最低
jdbc
api应用程序编程接口
提供了一组类/方法,让程序直接调用
各种数据库,都会提供api方便编程语言来控制
java统一api 取名jdbc