面试实战题-数据库及DAO层

数据库

左右内外连接

1.内连接,显示两个表中有联系的所有数据; 2.左链接,以左表为参照,显示所有数据; 3.右链接,以右表为参照显示数据;

https://www.cnblogs.com/cs071122/p/6753681.html

事务隔离

在MySQL数据库中,支持上面四种隔离级别,默认的为Repeatable read (可重复读);而在Oracle数据库中,只支持Serializable (串行化)级别和Read committed (读已提交)这两种级别,其中默认的为Read committed级别。 

https://www.cnblogs.com/fjdingsd/p/5273008.html

hibernate与mybatis的比较

Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。

https://www.cnblogs.com/inspurhaitian/p/4647485.html

mybatis的缓存机制,一级二级都放什么

1、1级缓存只是相对于同一个SqlSession而言。所以在参数和SQL完全一样的情况下,我们使用同一个SqlSession对象调用一个Mapper方法,往往只执行一次SQL。 2、SqlSessionFactory层面上的二级缓存默认是不开启的,要求返回的POJO必须是可序列化的,配置方法很简单,只需要在映射XML文件配置就可以开启缓存了

https://www.cnblogs.com/happyflyingpig/p/7739749.html

mybatis的#和$号代表什么

1、${}这种方式只会做简单的字符串替换 2、#{}传入的参数将会经过PreparedStatement方法的强制类型检查和安全检查等处理,最后作为一个合法的字符串传入,预处理之后可以预防SQL注入传入username 为 a‘or’1=1

https://segmentfault.com/a/1190000020643415?utm_source=tag-newest

存储过程几种类型

● 存储过程就是具有名字的一段代码,用来完成一个特定的功能。 ● 创建的存储过程保存在数据库的数据字典中。

https://www.cnblogs.com/geaozhang/p/6797357.html

乐观锁和悲观锁

1、悲观锁(Pessimistic Locking),悲观锁是指在数据处理过程,使数据处于锁定状态,一般使用数据库的锁机制实现。 2、利用数据版本号(version)机制是乐观锁最常用的一种实现方式。一般通过为数据库表增加一个数字类型的 “version” 字段,当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值+1

探索Mysql锁机制(一)——乐观锁&悲观锁 - 简书

Hibernate二级缓存

Hibernate的一级缓存是绑定Session的,当获取到一个Session对象,在执行Sessinon里面的方法都能使用Hibernate默认提供的一级缓存,执行完成Session对象消亡即缓存数据也跟着消亡(一级缓存的数据是放在栈中)。Hibernate的二级缓存是默认关闭的(二级缓存的数据是放在堆中),如果需要开启二级缓存则需要额外的配置。

https://segmentfault.com/a/1190000015454980  https://www.cnblogs.com/wangjintao-0623/p/9739757.html 

存储引擎对比

Innodb支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。

mysql--存储引擎介绍_mysql存储引擎介绍2018-CSDN博客

分库分表

垂直分库就是根据业务耦合性,将关联度低的不同表存储在不同的数据库。 垂直分表是基于数据库中的"列"进行,某个表字段较多,可以新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中 水平切分分为库内分表和分库分表,是根据表内数据内在的逻辑关系,将同一个表按不同的条件分散到多个数据库或多个表中

https://www.cnblogs.com/butterfly100/p/9034281.html

读写分离

数据库操作往往会成为一个系统的瓶颈所在,而且一般的系统“读”的压力远远大于“写”,因此我们可以通过实现数据库的读写分离来提高系统的性能。

数据库读写分离,主从同步实现方法_写操作会自动到主数据库-CSDN博客

索引

主键索引的叶子节点存的是整行数据。在 InnoDB 里,主键索引也被称为聚簇索引(clustered index)。非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为二级索引(secondary index)。 自增主键的插入数据模式,正符合了我们前面提到的递增插入的场景。每次插入一条新记录,都是追加操作,都不涉及到挪动其他记录,也不会触发叶子节点的分裂。

04 | 深入浅出索引(上)-MySQL实战45讲-极客时间

B树和B+树详解

B+树特点: 1.B+树有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。而b树中间节点也有卫星数据, 2.B+树所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。而B树查找的话需要不停的中序遍历 3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。

简单剖析B树(B-Tree)与B+树_b树b+树读盘和写盘的次数分析-CSDN博客  48 | B+树:MySQL数据库索引是如何实现的?-数据结构与算法之美-极客时间  (极客时间)

意向锁

InnoDB为了让表锁和行锁共存而使用了意向锁 。当一个事务在需要获取资源的锁定时,如果该资源已经被排他锁占用,则数据库会自动给该事务申请一个该表的意向锁。如果自己需要一个共享锁定,就申请一个意向共享锁。如果需要的是某行(或者某些行)的排他锁定,则申请一个意向排他锁。意向锁使得另一事务在请求对表加锁时无需去检测表中的每一行数据是否存在排他锁。

https://juejin.im/post/5b85124f5188253010326360

mongodb使用場景

由于MongoDB独特的数据处理方式,可以将热点数据加载到内存,故而对查询来讲,会非常快(当然也会非常消耗内存);同时由于采用了BSON的方式存储数据,故而对JSON格式数据具有非常好的支持性以及友好的表结构修改性,文档式的存储方式,数据友好可见;数据库的分片集群负载具有非常好的扩展性以及非常不错的自动故障转移(大赞)。 不足:数据库的查询采用了特有的查询方式,有一定的学习成本(不高);索引不咋滴;锁只能提供到collection级别,还做不到行级锁;没有事务机制(不能回滚啊);

https://www.cnblogs.com/williamjie/p/10416294.html  哪些场景下使用MongoDB_mongodb使用场景-CSDN博客 

innodb RR是否解决了幻读

● 在快照读读情况下,mysql通过mvcc实现了一致性不锁定读(Consistent Nonlocking Reads),从而避免了(非当前读下)幻读 ● 在当前读读情况下,mysql通过next-key来避免幻读 InnoDB的可重复读并不保证避免幻读

Mysql(Innodb)如何避免幻读_innodb 解决幻读问题-CSDN博客  mySQL数据库间隙锁(mysql是如何解决幻读的)_mysql 间隙锁-CSDN博客 

跨库分页

业界难题-“跨库分页”的四种方案

数据库索引失效条件

1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)  2.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

Mysql索引会失效的几种情况分析_mysql 加了if 不走索引了-CSDN博客

mysql的缓存机制

MySQL缓存机制简单的说就是缓存sql文本及查询结果,如果运行相同的SQL,服务器直接从缓存中取到结果,而不需要再去解析和执行SQL。如果表更改了,那么使用这个表的所有缓存查询将不再有效,查询缓存中值相关条目被清空。 ● 太大的result set不会被cache (< query_cache_limit) ● MySQL缓存在分库分表环境下是不起作用的 缓存的结果是通过sessions共享的,所以一个client查询的缓存结果,另一个client也可以使用

https://zhuanlan.zhihu.com/p/55947158

整形主键为什么比字符串类型查询速度快

delete和truncate的区别

delete删除的时候就是一条一条的删除记录,它可以配合事务,将删除掉的数据找回。 roolback truncate删除,它是将整个表摧毁,然后再创建一张一模一样的表,它删除的数据无法找回。

说说delete与truncate的区别?_truncat是删了重建吗-CSDN博客

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值