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

#Java开发##面经##Shopee#
全部评论
2 回复 分享
发布于 2021-07-29 11:20
这么优秀,对贝壳感兴趣么?可以内推
1 回复 分享
发布于 2021-07-29 20:48
厉害
点赞 回复 分享
发布于 2021-07-29 16:36
这也太细心了吧,还附参考答案的
点赞 回复 分享
发布于 2021-07-29 11:20
干货,码起来,感谢楼主!
点赞 回复 分享
发布于 2021-07-29 11:19
大佬总结的太到位了吧
点赞 回复 分享
发布于 2021-07-29 11:02
说得很好啊666
点赞 回复 分享
发布于 2021-07-29 10:41

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
人间雪:简历最好只要一页,除非你牛逼到一页都写不下了
点赞 评论 收藏
分享
评论
49
275
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务