1. 行锁和表锁的区别是什么?什么时候会上行锁?什么时候会上表锁?
- 行锁和表锁的区别是什么?
- 从几个维度来对比
- 加锁粒度:行锁加锁粒度针对到某一行,而表锁是锁整张表
- 加锁性能:加表锁的速度要比加行锁的速度快
- 并发性能:由于行锁的粒度比较小,并发度比表锁要高
- 什么时候会上行锁?什么时候会上表锁?
- 我们讨论在innodb存储引擎的基础上,where后边的多个条件只要有一个是带索引的,那就是加行锁,一个都没有就加表锁
- 行锁锁的是什么?
- 行锁其实锁的就是b+树叶子节点的那一行数据
- 增删改分别上什么锁?
- 删除和修改一般都会带where条件,那就取决于where的所有条件中有没有带索引的条件,有就加行锁,否则加表锁
- 增加是加插入意向锁,注意不是行锁
2. 你说一下前后端实现上传文件的步骤
-
前端部分
- 创建表单,设置提交方式为post
- 设置form表单属性enctype="multipart/form-data"
- 输入控件的类型要设置为file
-
后端部分
- 接口使用@PostMapping接收上传请求,参数用MultipartFile接口类型来接收文件对象
3. ## 说一下事务的隔离级别有哪些?分别解决了什么问题?那脏读、不可重复读和幻读分别是什么?mysql和oracle分别是什么隔离级别?既然读已提交和可重复读分别都还有未解决的问题,为什么成熟的商业数据库mysql和oracle还是选择它们作为默认的隔离级别呢?
-
说一下事务的隔离级别有哪些?
- 隔离级别从低到高:
- 读未提交
- 读已提交
- 可重复读
- 串行化
-
分别解决了什么问题?
- 读未提交:会出现脏读,不可重复读和幻读问题
- 读已提交:解决了脏读问题,但是会出现不可重复读和幻读的问题
- 可重复读:解决了脏读和不可重复读问题,但是会出现幻读问题
- 串行化:前三种隔离级别是读写可以同时并发,但是串行化是读写需要互斥,可解决脏读、不可重复度和幻读问题, 但由于底层使用了锁,导致并发性能较低,适用于对数据一致性要求极高且对性能要求不高的场景(一般数据库都不用这种隔离级别)
-
那脏读、不可重复读和幻读分别是什么?
- 脏读:一个事务读取了其他事务还没提交的数据,这就是脏读
- 不可重复读:同一个事务内多次执行相同的读sql要读取某一行数据,多次读取之间出现了其他事务要对该行要读取的数据进行了修改,导致多次查询的结果不一致,不可重复读更多针对的是某一行数据的修改,这就是不可重复读
- 幻读:同一个事务内多次执行相同的读sql要读取多行的数据,多次读取之间出现了其他事务对多行要读取的数据进行了插入或者删除,导致多次查询的结果不一致,幻读更多针对的是行数的修改,这就是幻读
-
mysql和oracle分别默认是什么隔离级别?
- mysql是可重复读
- oracle是读已提交
-
既然读已提交和可重复读分别都依然存在不可重复读和幻读问题,为什么成熟的商业数据库mysql和oracle还是选择它们作为默认的隔离级别呢?
- 因为在实际项目开发中,我们是很少说在同一个事务执行两次相同的读取sql的场景,这个是可以通过我们在开发中人为规避的,这样就不会出现不可重复读和幻读问题了
4. 你对现在找的这份工作有什么要求?
我希望有一个良好的工作氛围,同事之间能友好的相处,有一个良性的竞争,同时希望有薪资的涨幅吧