小红书+开发工程师+(一面/二面)面经
发面经接offer
一面(45分钟)
- 找两个数组的交集,要求先排序再遍历。
- 手写快速排序算法,包括测试和多种测试用例的考虑。
- 介绍五种排序算法的思路及其应用场景。
- 解释B+树删除元素后的节点合并问题。
- 最左匹配原则:为什么联合索引不遵循最左匹配原则就会失效?
- 原因:在联合索引的情况下,数据是按照索引的第一列排序,只有第一列数据相同时才会按照第二列排序。因此,查询条件中的各个列必须是联合索引中从最左边开始连续的列。如果仅按照第二列搜索,无法使用索引。
- 进程通信方式:共享内存和内存映射的区别。
二面(30分钟)
- 高并发技术:讨论了分库分表、集群、缓存和消息队列。
- 分库分表:用户ID取模100分成100张表,如果100张表的性能不够,如何不停机分成200张?
- 解决方案:首先评估需要扩充多少表以满足近期需求。扩展到200张表,按照用户ID取模200,如果结果在0~99则插入旧表,如果在100~199则插入新表。同时开启后台任务,遍历旧表,重新取模200,若结果在0~99则不变,若在100~199则复制到新表并删除旧表数据。
- Redis分布式锁挂掉的解决方案:
- 主从复制或集群模式提供高可用性和容错能力。当主节点故障时,从节点接管工作,避免分布式锁挂掉导致系统不可用。
- 例如在抢红包时,单独拉一台机器使用,不设置过期时间,活动结束后手动清除。
- MySQL性能优化:
- 索引优化、最左匹配原则、深度分页、主从复制等方法。