7.12突然收到腾讯的面试通知,当时以为还是找我实习(之前拿到过,但因为实验室项目没法去,后来陆陆续续有打电话过来叫我面试),就拒了。后来收到面试官短信说这是正式秋招,就接收了面试邀请。整个流程很快,一个星期走完三面+HR面,目前卡在录用评估,HR说等正式秋招通道开始之后再进行下一步安排。
(更一下,删除了一些从项目拓展的问题,对大家的参考意义不大...)
一面
算法:手撕LRU、非递归中序遍历二叉树
1.自我介绍
2.项目开始一个个问过来
3.跨线程通信、进程间通信、select、epoll、水平触发边缘触发
4.问论文细节
二面
1.leveldb源码怎么看的,看了哪些部分
2.memtable的实现、memtable如何实现无锁下的并发读写安全、为什么memtable选择跳表,innodb选择B+树?
3.如果你来优化leveldb,你会怎么优化
4.你刚才说到不同的存储介质,你知道ssd,hhd每秒的IO量级吗
5.说一下你所知道的leveldb、rocksdb的区别
6.如果你来实现多线程compaction,你会怎么实现
7.协程的底层实现方式;如何调度
8.10亿个敏感词过滤,设计系统
一开始回答布隆过滤器,被面试官连环追问:怎么设计哈希函数、布隆过滤器的大小怎么设计、如果还需要动态增添过滤词呢
后来给出的方法是使用前缀树保存在内存中,如果是100亿个敏感词,可以考虑对字符串分区,然后多台服务器负责不同的分区
9.聊了会设计模式(给了一些学习意见)
11.还看过哪些C++源码
三面
1.了解过几种异步模式;各自说一下他们的使用
2.协程的底层实现(第二次问到了)
3.有栈协程、无栈协程,协程、线程、进程三者的区别
4.详细说一下slub和伙伴系统
5.为什么slub里的object要做padding
6.direct_IO、page_cache
7.内存屏障、memory_order
8.malloc/free的底层原理
当时详细说了一下从malloc到一段虚拟内存到缺页中断到os进行物理内存分配的整个过程,面试官来了句:只有这些吗?后来觉得可能是希望我提到:libc的malloc单独在os和应用层做了内存管理
9.你刚才说到tcmalloc,jemalloc,知道他们怎么提升malloc的性能的吗?
10.内核对信号机制的实现;信号函数处理是否是线程安全的
11.开始闲聊,工作地点的选择意向等等
全部评论
(16) 回帖