今日头条实习面试题解析

题目来源:https://www.nowcoder.com/discuss/79937?type=2&order=3&pos=20&page=1
1,数据库的隔离级别:
read uncommitted
read committed
repeatable read(MySQL数据库默认级别)
Serializable

√: 可能出现 ×: 不会出现

                                          脏读              不可反复读	             幻读

Read uncommitted √ √ √
Read committed × √ √
Repeatable read × × √
Serializable × × ×
2,各个级别存在什么问题以及如何解决的?
对数据进行加锁,悲观,乐观锁(对这方面不太了解,希望了解的给小弟解说一下,谢谢)
3,Redis哪些数据结构?(是value可以为哪几种数据类型吗?)
String字符串
List列表
Set集合
Hash散列
Zset有序集合
4,5均和Redis有关,技术有限,后期再补充
(题目:4.SortSet底层数据结构是什么?
5.跳表和B树区别?)
6,B+和B树的区别?
结构上

B树中关键字集合分布在整棵树中,叶节点中不包含任何关键字信息,而B+树关键字集合分布在叶子结点中,非叶节点只是叶子结点中关键字的索引;
B树中任何一个关键字只出现在一个结点中,而B+树中的关键字必须出现在叶节点中,也可能在非叶结点中重复出现;
性能上(也即为什么说B+树比B树更适合实际应用中操作系统的文件索引和数据库索引?)

不同于B树只适合随机检索,B+树同时支持随机检索和顺序检索;
B+树的磁盘读写代价更低。B+树的内部结点并没有指向关键字具体信息的指针,其内部结点比B树小,盘块能容纳的结点中关键字数量更多,一次性读入内存中可以查找的关键字也就越多,相对的,IO读写次数也就降低了。而IO读写次数是影响索引检索效率的最大因素。
B+树的查询效率更加稳定。B树搜索有可能会在非叶子结点结束,越靠近根节点的记录查找时间越短,只要找到关键字即可确定记录的存在,其性能等价于在关键字全集内做一次二分查找。而在B+树中,顺序检索比较明显,随机检索时,任何关键字的查找都必须走一条从根节点到叶节点的路,所有关键字的查找路径长度相同,导致每一个关键字的查询效率相当。
(数据库索引采用B+树的主要原因是,)B-树在提高了磁盘IO性能的同时并没有解决元素遍历的效率低下的问题。B+树的叶子节点使用指针顺序连接在一起,只要遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作(或者说效率太低)。
7.数据库InnoDB下如何加锁?
在mysql 的 InnoDB引擎支持行锁,与Oracle不同,mysql的行锁是通过索引加载的,即是行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描
行锁则无法实现,取而代之的是表锁。
表锁:不会出现死锁,发生锁冲突几率高,并发低。
行锁:会出现死锁,发生锁冲突几率低,并发高。
锁冲突:例如说事务A将某几行上锁后,事务B又对其上锁,锁不能共存否则会出现锁冲突。(但是共享锁可以共存,共享锁和排它锁不能共存,排它锁和排他锁也不可以)
死锁:例如说两个事务,事务A锁住了15行,同时事务B锁住了610行,此时事务A请求锁住610行,就会阻塞直到事务B施放610行的锁,而随后事务B又请求锁住15行,事务B也阻塞直到事务A释放15行的锁。死锁发生时,会产生Deadlock错误。
锁是对表操作的,所以自然锁住全表的表锁就不会出现死锁。
2.行锁的类型
行锁分 共享锁 和 排它锁。
共享锁又称:读锁。当一个事务对某几行上读锁时,允许其他事务对这几行进行读操作,但不允许其进行写操作,也不允许其他事务给这几行上排它锁,但允许上读锁。
排它锁又称:写锁。当一个事务对某几个上写锁时,不允许其他事务写,但允许读。更不允许其他事务给这几行上任何锁。包括写锁。
89两题数据库语句分析,索引,不太熟悉,以后加强补充(题目:8.分析 delect from table where user_id=“1”;这句话怎么加锁的?
9.如果user_id使用单列索引,联合索引,又是怎么加锁的?)
10,算法题:

算法题目
待续

展开阅读全文

没有更多推荐了,返回首页