滴滴存储一二面
背景:
211本985硕非科班,项目一个NoSQL内核实现(6000行左右),一个15445通关(代码量等同);华为无关方向两个月实习;一篇无关SCI一区;
7.28投递
8.15一面,隔15分钟二面
一面
1. 自我介绍
2. 详细介绍NoSQL的项目(滴滴做的RocksDB二次开发?)
3. 讲讲LSM-Tree
4. MemTable直接到SST吗?(中间还有个immutable)
5. 你写的SST多大?大小怎么权衡
6. 还有一些项目问题想不起来了,问的还是比较多的,但是基本上都没问题,到这里大概20分钟
7. 手撕跳表(感谢赛码网平台过于简陋,不用Debug了)20到30分钟
8. vector的扩容策略
9. 智能指针,可以无脑shared_ptr吗?(不行,效率有问题,适时用unique_ptr或者普通指针)
10. 移动语义有什么用,怎么用?左移和右移语义(这还真是第一次听说,不过也答上来了,指的是std::forward和“右值引用本身是个左值”的问题)
11. explicit用过吗怎么用
12. 内存泄漏怎么解决
13. 看你用了lock_guard给跳表上锁,lock_guard基于什么机制实现?具体呢?(构造上锁析构解锁)有没有粒度更细的策略?(不会,忘了复习了,没追问)
大约一小时结束,10分钟约二面立即开始(但是面试官迟了差不多20分钟)
内存泄漏经典,每次都问。个人觉得这几个点要说到(即使没用过也要硬编):
1. 日志排查(我的项目自己做了一个小日志库集成进去了)
2. core dump可以用gdb打开,恢复现场状态;再说几个gdb命令,b(breakpoint),r(run),s(step in)等等
3. 内存泄漏检查工具(但是好像面试官不太爱听这个),Linux我用的Valgrind,g++12自带AddressSanitizer,Windows也有其他的工具
二面
项目问的很细
1. 自我介绍
2. 依然详细介绍NoSQL的项目
3. 布隆过滤器介绍一下,如果每个SST有一个BloomFilter,读盘还是有很大的开销,怎么办?(我说的全局BF,但是要考虑数据量大的时候BF的大小还有命中率)
4. 缓存粒度多大?DataBlock,KV还是SST,这几种粒度又各有什么问题,你为什么这么选择?
5. 并发策略的粒度,MVCC是针对KV还是SST
6. MemTable转Immutable没落盘时怎么读的?(糟了没考虑到,可能是整个面试里比较有问题的地方了,现场思考应对了一下)
7. 手撕链表题:123456->162534,思路是快慢指针断链,后半段倒序,然后和前半段归并即可,想了几分钟,面试官提示“前半段是正序,后半段是倒序”然后我就有思路了,但是!先写了快慢指针断链,面试官说只要写到倒序后半段就行不用归并,等我写完倒序(有bug的,他还看都没看),面试官直接:你还有什么问题吗我没什么问题了。我也没写5分钟啊?
面完很快发感谢信,寄了。不会是KPI吧
#滴滴信息集散地##本周投递记录#