1.介绍一下智能指针智能指针是 c基于 RAII 方式管理资源管理动态对象的方法包括 unqie ptrshared ptrweak_ptruniqueptr 不能被拷贝只能被移动sharedptr 维护一个引用计数只有所有的变量都生命周期结束才会释放指针指向的资源weakptr 是和 sharedptr 结合起来使用的不增加引用计数能解决循环引用的问题。2.介绍一下 b树的插入过程首先根据 key 去逐层向下查找定位到 key 应该在的叶节点如果页内有空余位置就直接插入并维护索引的有序性如果页满则需要分裂一个新的页并在父节点添加索引和指针指向新的叶要把原来的数据的一部分移动到新的页如果父节点也满了就需要再分裂依次递推最终根节点分裂树的高度会加 1。3.write 的过程介绍一下首先 write 系统调用CPU 从用户态切换到内核态数据从用户空间被拷贝到内核空间然后就直接返回不需要等待刷盘成功可以使用 fsync 同步刷盘。4.MySQL 事务的隔离级别事务的隔离级别分别是读未提交读提交可重复读和串行化它们针对三个问题分别是脏读不可重复读和幻读去解决读提交通过 MVCC 解决脏读可重复读通过 MVCC 和临键锁基本解决了幻读和不可重复读的问题当快照读和当前读混合出现的时候仍然有问题。5.设计一个分布式限流器的方式首先使用 redis然后用令牌桶的方式redis 存储桶容量当前 token令牌生成速率和 token 更新时间然后使用 lua 脚本判断数量并扣减。6.为什么析构函数需要写虚函数使用基类的指针释放子类的对象需要调用正确的析构函数所以需要析构函数是虚函数7.什么是布隆过滤器布隆过滤器可以用来判断某个 key 是否存在通过对一个 key 计算多个哈希函数对多个位置 1如果某个本应该置 1 的位不是 1就一定不存在但是可能误判想解决误判可以使用分布式的布隆过滤器或增大布隆过滤器。8.什么是 capc 是一致性a 是可用性p 是分区容错性不能同时保证这三个就是 cap 理论。总结 这些都是之前面试答的不好的答的错误的八股感觉 write 这个完全没有解答的思路当时其实不难。