我的2022年秋招后端数据库内核面经(微软蚂蚁猿辅导等)
目录
前情提要
蔚来(二面挂 数字化后端研发工程师)
米哈游(一面挂 米哈游社区服务器端研发工程师)
猿辅导(三面挂 服务器端研发工程师)
滴滴(白菜offer 运力供给生态后端研发工程师)
美团(三面挂 存储系统研发工程师)
微软(跨组转正面挂 Azure for Mysql软件开发工程师)
百度(一面挂 管控面数据库内核研发工程师)
StarRocks(一面挂 数据库内核研发工程师)
蚂蚁(二面挂 Oceanbase数据库内核研发工程师)
总结
前情提要
126天21投19面1offer结合个人条件量化2023秋招
最近完成了毕业答辩,提交了学位申请书,终于有时间(再次)盘一盘秋招了。之前有很多小伙伴说没看到面经在哪,所以这里将面经一次性发出,交于有缘人。阿弥陀佛,去年开始我佛不渡硕士以下,阿门
TIPS:
- 本文前面为后端开发岗位,后面为数据库内核研发岗位
- 华为要求不公开面试内容,故略去
蔚来(二面挂 数字化后端研发工程师)
- 笔试
- 牛客系统
- 20道选择题
- 最大子段和 100%
- 树最小路径和 100%
- 矩阵最小路径和 100%
- 一面
- 介绍Raft
- Raft和Paxos有什么区别
- 介绍一下MVCC
- 你实现的MVCC和Mysql有什么区别
- 你可以对MVCC实现什么改进
- 介绍一下你在字节的工作
- 介绍一下做的缺陷跟踪
- 介绍一下你在微软的工作
- 算法:手撕快排
- 二面
- 自己介绍有亮点的工作
- 字节工作
- 微软工作
- 接口怎么优化的
- 白名单怎么实现的
- Miniob LRU实现
- ABCD四个字段 A主键 BC索引 B>20 and C<10 SQL执行全流程解释
- 索引失效几种情况
- raft和zk的区别
- CAP理论
- 算法:LRU
- 总结
- 蔚来的笔试面试难度较低,且两轮面试均在一天内完成,二面为主管面,没有HR面,发offer较早,且挺多的, 属于是比较好拿的offer
- 目测挂的原因:主管面反问的时候说有没有底层一点的岗位,然后这是个业务部门,不搞基架
米哈游(一面挂 米哈游社区服务器端研发工程师)
- 笔试
- 选择题
- 签到题忘了 100%
- 设计一个回合制游戏 4.67%
- 忘了 7%
- 一面 68min
- 自我介绍
- Java栈堆
- new对象的过程
- 什么时候可以栈上分配
- 栈和堆开销
- hashmap原理
- 线程安全的hashmap
- sync和lock
- 可重入锁原理
- volatile原理
- 用户态内核态
- 如何进入内核态
- 中断开销
- 浏览器访问https的过程
- select xx and xx and xx怎么建立索引
- 循环数组 输出第一个比自己大的数
- 设计一个限流器(老哥吐槽说大多数人都不知道啥是限流器,还要解释一下)
- 反问米哈游技术栈
- 全程没写代码
- 总结
- 限流器的设计没有做到最优,只想到了搞个令牌桶,一秒钟投入n个,没有解决性能毛刺问题,最优解是每(1/n)s投放一个令牌
- 因为是做社区的,所以问的东西偏八股
- 目测挂的原因:反问问有没有中间件,基架岗位,面试官说有,目测实际没有
猿辅导(三面挂 服务器端研发工程师)
- 笔试
- 选择题
- 什么字符的数量 100%
- 双拼和全拼转换 20%
- 忘了 跑去做米哈游了 0%
- 一面
- 自我介绍
- 介绍一下你常用的数据库
- 介绍一下MVCC
- 介绍一下隔离级别
- pg的可重复读怎么实现的
- mysql和pg怎么选
- mongodb了解吗
- 为什么pg会更快
- 介绍一下raft
- 介绍一下共识的那部分
- 笔试题错了的一个SQL问题关于left join和right join
- 算法:LC369 给单链表+1
- 二面
- 74min 两个面试官
- 自我介绍
- raft讲一下
- raft怎么读
- 可以从机读吗
- 如果要线性一致性怎么读
- 分区怎么办
- 如何解决commit read的效率问题
- 如果lease read会出现什么问题
- 想问乱序apply被我糊弄过去了
- 有什么提高并发读能力的工程措施
- 换人
- leveldb介绍一下
- memtable的结构
- 跳表的层数增长
- 跳表无锁插入怎么实现的
- memtable落盘过程
- 跳表无锁插入怎么实现的
- mysql client和server 的connect断了会发生什么
- 不是想问连接池 问的是TCP的FIN
- 为什么要有2MSL
- 一个mysql client给server发包的中间的网络流程 系统调用级别
- io有些什么
- 你觉得mysql用的什么io
- 问一下go 线程和协程
- java讲一下内存结构
- 主要讲一下堆这边
- map是线程安全的吗
- 介绍一下线程安全的map
- 算法:单例
- 算法:往一个数字字符串加三个点,能生成多少个合法的IP
- 换人
- 介绍团队
- 反问:猿辅导的业务现在如何
- 反问:团队的人数大概是?
- 反问:工作时间是?
- 换人
- 研究生专业是
- 工作中影响深刻的事儿
- 和团队融入有没有问题
- 换人
- 你未来的发展是什么,想搞哪个方向
- 总结
- 二三面合在一起,但是目测女面试官不是特别懂技术问题,有可能是hr?
- 并发读可能是想问读写分离,从机Read Index机制
- 目测挂的原因:不知道
滴滴(白菜offer 运力供给生态后端研发工程师)
- 一面
- 自我介绍
- 白名单怎么实现的
- 介绍一下你们的生命周期框架
- 白名单信息是存在哪的
- 什么东西放zk什么放mysql
- java锁用过哪些
- volatile讲一下
- 讲一下索引
- 联合索引
- a=0 b>0 c=0怎么扫描
- B+树上面怎么存储的
- 如何顺序遍历结果用的什么数据结构
- 主从同步如何实现
- 分布式锁
- mysql redis缓存一致性
- bio nio
- select poll epoll
- 算法:二分法查找
- 算法:z字形打印树
- 二面
- 业务和基架你怎么看的
- 高可用有哪些实现
- 除了冗余还有什么
- 全年稳定性99.99%是多少时间
- 高并发限流方面有什么方法
- 除了负载均衡还有什么
- 一个系统如何保证自己的高可用 从存储到操作系统内核到应用到服务
- 缓存 存储如何保证高可用
- redis和mysql的缓存一致性详细说说
- 你前面说的都要写mysql 用缓存的意义在哪
- HTTP1.0 2.0 3.0
- 为什么3.0用udp
- TCP的可靠性怎么保证的
- 发送方发送seq的作用是什么
- 算法:单行有序二维数组向量化成有序一维
- 场景设计:停车场
- 三面
- 字节这边介绍一下
- 生命周期框架介绍一下
- 白名单介绍一下
- ingress介绍一下
- ingress和zk一致性怎么保证
- 你对性能有什么优化吗
- 接口的优化是怎么做的
- 讲一下微软这边的工作
- 对标一下airflow和其他的产品
- 算法:判断是否为合法二叉搜索树
- 场景设计:秒杀系统
- 前端
- 网关
- 限流
- 服务层
- 存储
- 缓存等
- 总结
- 笔试面试较为简单,偏业务,多八股
- 滴滴一天完成三面,没有hr面,效率很高,然后到11月直接开始发offer
- 并不是第一批被发的offer,是前面拒了一大堆人才给到的我
美团(三面挂 存储系统研发工程师)
- 笔试
- 队列模拟 100%
- 扫地机器人 100%
- 栈模拟 100%
- 复杂Three sum 100%
- 完全二叉树最大路径和 100%
- 一面 65min
- pingcap的这个是个实习吗
- 常用语言
- 线程池介绍一下
- 三个核心参数介绍一下
- 实战怎么设置
- CPU密集 IO密集
- 队列有哪些队列
- 频繁GC可以是什么原因
- 频繁GC怎么排查
- 详细介绍垃圾回收算法
- 介绍聚簇索引
- 聚簇索引有什么好处
- B+树
- 聚簇索引有什么缺点
- MVCC怎么实现的
- B+树 和 B树的区别
- 隔离级别
- LevelDB的写流程
- LevelDB的读流程
- Level0会有重叠吗
- memtable宕机怎么办
- 加速读的操作
- 布隆过滤器
- B+树 VS LSM树
- 四次挥手
- 为什么2MSL
- 介绍raft选举流程
- 会不会出现选错leader
- 算法:前序中序重建二叉树
- 二面 52min
- 介绍一下你们的mysql shard
- shard的扩容怎么做的
- 进程线程协程
- 哪些东西是线程私有的
- gmp介绍
- 共享内存怎么加锁
- 页表大小
- 虚拟地址到物理地址转换
- 多级页表
- 快表
- 定义中断
- CPU中断流程
- select poll epoll
- epoll用到哪些数据结构
- tcp可靠性
- 不能两次握手吗
- 为什么要2MSL
- volatile
- 锁升级
- 为什么要锁升级
- 和JUC Lock区别
- 四种引用什么时候回收
- CPU用占用过高 怎么去看是哪段代码
- 算法:二叉树最大路径和
- 三面 65min 美团到家
- 介绍白名单
- 介绍Thrift
- 设计RPC
- 介绍IO模型
- tcp三次握手
- 介绍raft
- mysql事务实现
- 隔离性实现
- Java用过哪些
- hashmap
- arraylist 和 linkedlist
- go协程模型
- go并发操作
- 线程池
- waitgroup
- 算法:快慢指针找入环点
- 总结
- 对频繁GC排查这个问题回答的不太好,没有什么经验,只有说用jstack一类的工具看堆栈情况
- 目测挂的原因:反问问的一般加班到几点
微软(跨组转正面挂 Azure for Mysql软件开发工程师)
- aa面 50min
- 介绍自己的项目
- 自己在里面的角色
- Linux系统 intel CPU只能写代码不能写脚本,测试出L1 L2 L3大小
- 好,那么现在,你要考虑可能有多个系统内的调用不定期的污染缓存,怎么测试出大小
- 算法题:判断平衡二叉树
- 反问
- 总结
- cache大小测试,没考虑到缓存预热,没有用最优的数组测试,用的是矩阵增加了复杂程度
- 目测挂的原因:有一个美帝留学哥最后拿到了这个offer
百度(一面挂 管控面数据库内核研发工程师)
- 一面
- 介绍一下tinykv
- tinykv在生产环境还有什么问题
- 脑裂怎么处理
- 写请求apply时机
- 什么时候调用callback
- 可不可以提前callback
- 可不可以propose之后直接callback
- 量化percolator对性能的影响
- 介绍raft
- 讲一下airflow
- 讲一下火山引擎这边的工作
- 讲一下白名单
- 为什么要用zk
- 手里几个offer了
- 工作地点有选择吗
- 反问:工作时间
- 反问:百度数据库内核做什么
- 反问:您是什么部门的
- 正式批笔试
- 字符串匹配100%
- 01字符串翻转 0%
- 迷宫剪枝 53%
- 总结
- 量化percolator对性能的影响这个问题没有太多的概念,理论上这是一个改进的2PC,如果系统中有参数开启或者关闭分布式事务,那可以对比两次性能,但是一般是没有这个参数的,要去改系统源代码就麻烦了一点
- 目测挂的原因:反问的时候我说以后不想搞管控面,顺便问了下面试官的业务是什么,面试官:管控面负责人。寄
StarRocks(一面挂 数据库内核研发工程师)
- 一面 78分钟
- 介绍一下raft
- raft和paxos解决的是一样的问题吗
- 共识是什么意思?怎么体现在raft的
- commitIndex如果出现分歧该信任谁的?
- follower如何判断自己的commitIndex应该上推到多少?
- 是min(leaderCommitIndex, len(Entry)-1)吗?
- 成员变更说一下
- 成员变更如果是leader自己被删除有什么风险?
- TinyKV和大论文进行对标?
- 讲了一下paxos是没有实现这些成员变更的,所以raft实现的是更大的问题
- 讲一下mysql shard产品
- shard是什么级别的(库,表?)
- airflow介绍一下 科普了一下流式计算用的多
- 算法
- 删除数组中值等于x的节点,返回最后一个不等于x的值(O(n))
- 总结
- SR的问题确实比较难,原因是老哥确实很懂分布式一致性协议
- 成员变更的时候只说了一个个变更的实现(因为这是Tinykv中实现了的),没有考虑到论文原文中的newConf和oldConf共存的情况,被喷了
- 目测被挂的原因:确实答的不好
- 吐槽一下:StarRocks的面试体验是最差的,说了不了解Paxos的情况,老哥还继续问Paxos和Raft的区别,反问让老哥介绍一下StarRocks的时候,老哥很不耐烦的说自己去网上查
蚂蚁(二面挂 Oceanbase数据库内核研发工程师)
- 笔试
- 类似一个栈的1024游戏最后剩几个数 100%
- 多叉树 每次操作子树的权值加一 最少操作多少次可以让所有结点的权值=序号 70%
- 字符串字母单数的个数为1 其他字母都是双数成为好串 统计字符串有多少子串是好串 20%
- 一面 60min
- 介绍一个项目 体现出你的学习到的东西
- 介绍tinykv miniob airflow 字节数据库团队
- ACID
- 隔离级别
- 乐观锁悲观锁
- hash和B+树索引
- LSM介绍
- LSM和B+树的对比
- 算法
- 不重复的Threesum=0的三元组
- 反问
- 追加
- 如果给你ob等几个offer你想去哪
- 二面 40min
- 自我介绍
- ob介绍
- ob做了什么
- 白名单做了什么
- airflow做了什么
- ob的架构是什么
- 介绍一下LSM Tree
- 反问
- 总结
- ob的面试难度在数据库内核岗位中算低的,面试官一直都比较nice
- 目测挂的原因:投的大佬太多了,那肯定不要华师大的,要清北复交浙的
总结
这是最坏的一年,也是最好的一年
青山不改,绿水长流,若是有缘,下一篇再见
#数据库##校招##秋招##面经##笔试#