首页 > shopee 二面面经及答案
头像
interviewtop
发布于 2021-07-29 08:26
+ 关注

shopee 二面面经及答案

写在前面

大家好,我是小牛, 微软程序员一枚,之前经常看见大家在 牛客上有 面经分享,但大多数没有答案。由于小牛和几个BAT小伙伴整理了相关八股文题库,这次就当一回工具人,把题目和对应的答案奉上。

这次面经基本都被我之前整理的大厂面试八股文涵盖了,有兴趣的同学可以到我之前的讨论贴查看我之前整理的八股文

mysql为什么要用自增id作为主键

直接原因是其存储机制。MySQL采用数据页进行数据存储。如果采用自增主键,在原先数据页写满的情况下,MySQL对于新数据,直接开辟新页进行写操作。如果不采用自增主键,为保障索引有序,新数据需插入到合适位置上,由此针对页数据满的情况下,MySQL需要申请新页,并将一部分之前的页数据挪到新页上,保证按索引有序存储,相对自增主键IO开销更大。

索引覆盖了解吗

覆盖索引指一个索引包含或覆盖了所有需要查询的字段的值,不需要回表查询,即索引本身存了对应的值。

大数据量的分页查询怎么优化

定位对应索引id所处的偏移位置,之后进行查询。

select * from table where num = 8 limit 100000,1;

变为

select * from table where num = 8 and id >= (
    select id from table where num = 8 limit 100000,1
) limit 100;

由于id走了索引,因此速度会有一定提升。

分库分表怎么做

对于分库,即将一个数据库拆分为多个库。

可以通过水平拆分(按行拆分),或者垂直拆分(按列字段重新拆分多表)的方式,将表进行拆分。

一般可以采用中间件Sharding-JDBC进行分库分表。

分布式事务解决方案

两阶段提交:在这个过程中,有两个角色,分别为master和slave 表决阶段:对于所有slave都将本事务能否成功的信息反馈发给master;执行阶段:master根据所有slave的反馈,通知所有slave,步调一致地在所有分支上提交或者回滚;

简述MySQL主从复制

MySQL提供主从复制功能,可以方便的实现数据的多处自动备份,不仅能增加数据库的安全性,还能进行读写分离,提升数据库负载性能。

主从复制流程:

在事务完成之前,主库在binlog上记录这些改变,完成binlog写入过程后,主库通知存储引擎提交事物 从库将主库的binlog复制到对应的中继日志,即开辟一个I/O工作线程,I/O线程在主库上打开一个普通的连接,然后开始binlog dump process,将这些事件写入中继日志。从主库的binlog中读取事件,如果已经读到最新了,线程进入睡眠并等待ma主库产生新的事件。读写分离:即只在MySQL主库上写,只在MySQL从库上读,以减少数据库压力,提高性能。

简述Redis过期策略

  1. 定期删除,redis默认是每100ms就随机抽取一些设置了过期时间的key,并检查其是否过期,如果过期就删除。因此该删除策略并不会删除所有的过期key。

  2. 惰性删除,在客户端需要获取某个key时,redis将首先进行检查,若该key设置了过期时间并已经过期就会删除。

实际上redis结合上述两种手段结合起来,保证删除过期的key。

简述缓存穿透

缓存穿透指缓存和数据库均没有需要查询的数据,攻击者不断发送这种请求,使数据库压力过大

简述缓存击穿

缓存击穿指缓存中没有数据,但数据库中有该数据。一般这种情况指特定数据的缓存时间到期,但由于并发用户访问该数据特别多,因此去数据库去取数据,引起数据库访问压力过大

简述缓存雪崩

缓存雪崩指缓存中一大批数据到过期时间,而从缓存中删除。但该批数据查询数据量巨大,查询全部走数据库,造成数据库压力过大。

原题出处: https://www.nowcoder.com/discuss/687891

更多模拟面试

全部评论

(7) 回帖
加载中...
话题 回帖

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

热门推荐