分布式存储研发 --- 2年经验 面试总结

文章目录

        • 深信服(ceph存储研发)
        • 旷世科技(ceph存储研发)
        • 百度 基础架构部(分布式存储研发工程师)
        • 快手(基础架构:分布式存储研发工程师)
        • 金山云(分布式文件系统研发)
        • 阿里云(polardb 分布式存储研发)

本人从2.16号疫情期间开始投递简历到3.30结束找工作,基本面试了所有的大厂(互联网公司/科技公司)。面试的过程很艰辛,发现了很多不足,但是也收获到了满意的offer,特此做一轮总结,方便后续的伙伴参考借鉴。

面试的公司包括 深信服、旷世科技、滴滴 、百度 (基础架构部)、阿里(polardb 分布式存储研发)、金山云、快手、BIGO、头条、华为(公有云)

岗位:分布式存储研发工程师,我个人毕业后两年内从事的是ceph存储系统的运维和开发(其实水平远远达不到开发的程度,毕竟只有不到两年,都没有向社区commit过代码)

深信服(ceph存储研发)

深信服一面(深信服有较强的ceph研发背景,如果各位没有深入到底层代码,建议不要轻易尝试,否则会被怼)

  • 自我介绍
  • 项目介绍 --30分钟
  • bluestore状态机的实现
  • bluestore如何保证数据一致性;bluestore的有那些回调,分别是用来做什么的
  • bluestore wal事务都具体包括哪一些内容(详细信息)
  • 当数据落盘 但是元数据还未落盘,存储下电是否会对数据一致性有影响(考察bluestore的写流程:数据和元数据的写)
  • 当数据未落盘,客户端触发针对改对象的读请求,是否能正常读出
  • pg状态机用来做什么,为什么要有状态机
  • pg状态机中post_event(),discard_event分别是用来做什么的
  • bluefs 元数据文件的保存方式,存储在哪里,加载方式
  • db分区中的.log和.sst文件分别保存了什么
  • cache-tier有哪一些模式,各自功能是什么,有遇到什么问题吗(他们提交的一个cache tier的bug-fix,好像在write-back模式下有数据一致性问题)
  • 在EC 模式下,数据怎么分片;EC 和 副本模式区别是什么
  • 操作系统IO栈简单讲一下,每一层都是做什么的
  • sync和direct有什么区别
  • 如果对同一个设备文件分别使用direct和sync方式打开会有什么影响
  • 线程间同步方式
  • 多线程 条件变量中pthread_cond_wait参数为什么要传入一个mutex互斥变量

一面的话整体还是能感觉到深信服ceph做的还是比较深入,毕竟有不少参与社区贡献的人员。

深信服二面(leader面)

  • 自我介绍
  • 项目介绍 – 20分钟
  • bluestore 状态机有哪一些线程,每个线程都在做什么(感觉他们非常看重ceph底层核心实现)
  • 社区源码贡献了多少行
  • 自己修改源码多少行,做了哪些改动,核心功能是什么

整体感觉他们还是更看重CEPH的核心研发经验,对底层编码以及操作系统基础并未关注太多

旷世科技(ceph存储研发)

旷世一面

  • 自我介绍+项目介绍 30分钟
  • bluestore写机制(simple + deferr 分别描述一下)
  • bluestore怎么保证数据一致性
  • pglog的作用
  • peering的过程,每一个状态都在做什么
  • ceph整体可靠性的体现
  • 操作系统IO栈优化思路(我简历写了熟悉IO栈的优化)
  • 通用块层做什么,有哪一些调度算法,每个调度算法讲讲,分别用在哪一些场景

旷世二面

  • 自我介绍+项目介绍 10分钟
  • 写算法:给定一个数,求其2进制中1的个数 (位运算)
  • 写算法:求一个无序数列中第K大的数,时间复杂度要求O(n)。 开始想了最小堆O(nlogk),后来提示快排可以,写出来了
  • ceph 的可靠性怎么体现(正常写时的可靠性,出现节点冗余时的可靠性)
  • ceph 负载均衡怎么实现(crush算法)

旷世三面

  • 自我介绍+项目问题 30分钟
  • Linux IO栈 架构讲讲
  • ext4文件系统介绍一下,inode,dentry的管理方式
  • 虚拟进程内存分布
  • 物理内存和虚拟内存怎么进行映射(内存管理中的页表实现)
  • 写算法:给定一个无序字符串“aa.b…c/.d” ,将其组合成linux可以访问的目录输出(只要输出一个即可)

旷世四面(leader面)

  • 项目题问 20分钟
  • linux内存管理机制(进程虚拟内存–》页表–》物理内存,高速缓冲区(buffer,page cache),内存分配机制,回收机制)
  • 熟悉内存优化是吧,讲讲内存问题怎么排查,常用的工具,有哪些优化思路
  • 怎么获取这一些知识的,有线上实践过吗,举个例子
  • 。。。一堆技术无关的

旷世有四轮技术面试,这还是让我很惊讶,总体感觉旷世的CEPH积累显然没有深信服足,毕竟他们的存储只是给他们深度学习平台做数据处理和加工的,并没有相关的存储产品。

百度 基础架构部(分布式存储研发工程师)

百度一面

  • 项目介绍+ 提问30分钟
  • CEPH的负载均衡实现(crush算法的实现)
  • 有什么方式能追踪一个IO从客户端到磁盘过程
  • ceph怎么保证高可靠性(主要问 集群有节点异常时数据的恢复方式 ,是否能对外提供正常的读写请求)
  • EC 和 副本的区别
  • Linux内存管理机制
  • 段式内存管理和页式内存管理区别
  • 进程内存分布
  • cache是怎么实现的,用什么数据结构(read系统调用的实现过程)
  • buffer cache和page cache的区别
  • 讲讲你的内存优化思路
  • C++ static关键字的作用
  • C++类实例化的过程,构造函数压栈都有哪一些参数
  • 多态怎么实现的
  • 智能指针有哪些,分别用在什么场景,shared_ptr循环引用问题怎么解决
  • 写算法:Z字型打印二叉树(二叉树的层序遍历做一些修改)
  • 有什么想问的吗,简单介绍了一下百度基础架构部的自研文件系统架构,规模,发展方向

百度二面

  • 项目介绍 + 提问 30分钟
  • bluestore写方式,元数据包括哪一些
  • bluestore cache怎么实现的,管理哪一些内容
  • CEPH怎么保证数据一致性
  • CephFs的实现(mds的inode,dentry管理方式,mds的负载均衡实现)
  • cephfs怎么保证数据一致性(IO正在落盘,但是mds所在节点异常时)
  • Linux IO栈优化思路讲讲
  • 写算法:合并k个有序链表
  • 写代码:根据实际场景出的一个类的设计代码(主要是考察map)

百度三面(leader)

  • 项目+提问 20分钟
  • Linux IO瓶颈分析使用哪一些工具,怎么分析
  • 通用块层的作用?哪一些调度算法,分别做什么?怎么做IO合并
  • 项目中遇到哪一些问题,怎么解决的,难点是什么?
  • 职业规划。。。期望薪资,什么时候能入职

百度的面试体验很不错,面试的过程比较专业,而且效率也很高

只是技术面之后的HR面流程太长,效率太低了。

快手(基础架构:分布式存储研发工程师)

快手面了两个岗位,第一个是高级研发(后面因为能力不匹配被拒了,自己失误,显然能力不匹配呀),第二个是比较契合的研发工程师岗位

高级研发岗位(ceph方向)

一面

  • 项目+提问 20分钟

  • ceph-fuse 和 fuse的区别

  • 数据从cephfs 到落盘的 过程,ceph-fuse怎么处理

  • cephfs 元数据管理机制

  • mds的active+active模式 和 active+stand by模式的区别,当有主mds所在节点异常时怎么保证cephfs的正常服务,数据可靠性怎么保证

  • read系统调用的实现

  • 简单讲讲 linux内存管理机制

  • malloc和free的区别

  • 大页表的实现,用在什么场景

  • OOM机制 讲讲

  • ext4文件系统懂吗?讲讲(只能说一下inode和dentry的管理方式)

  • inode,dentry,superblock 各自有什么用,有什么联系?怎么查看以上三者?

  • 写算法:非递归后序遍历二叉树

二面

  • 项目+提问 20分钟
  • 觉得ceph有什么问题?
  • cephfs使用的时候有什么问题?ceph-fuse实现
  • cephfs处理大量小文件写的时候是否有性能问题?卡在了哪里?是否尝试过优化?
  • peering过程说一下,主要哪几个状态,每个状态做什么事情
  • 数据库的ACID 属性 讲讲
  • B+树了解吗,基本原理是什么
  • linux 文件系统IO流程
  • 写算法 :给定一个数组,求其中三数之积最大的值 (leetcode原题)。要求:时间复杂度优于O(n^3)

二面之后就因为个人面试中并没有太突出的表现,约了三面,后面因为面试官较忙,同时综合评估能力未达到高级的程度就拒了,接下来内推了快手的中级别研发岗位:分布式存储研发工程师

分布式存储研发 岗位

一面、二面、三面基本和之前的技术方向接近 差异的问题如下:

  • 写算法:给定一个无序的数组,有正有负,求最大的子序和,以及该子序的起始下标。–简单动态规划,可以看leetcode的动态子序和
  • 写算法:层序遍历二叉树
  • C++ const 关键字的用法,修饰类的成员函数有什么作用
  • 内联函数和define宏定义的函数有什么区别
  • new的过程,new的返回值,malloc的内核态过程,malloc的返回值(成功返回什么,失败返回什么),new和malloc的区别
  • 设计模式了解吗?单例模式和懒汉模式的区别,工厂模式用在什么场景(建议23种设计模式都过一遍)
  • 一台设备,1G的内存,怎么实现10G数据的排序(我能想到的就是分治了)

快手整体面试效率很高,如果你时间充足,可能就是连续的三轮技术面试。

面试官也很nice,对于一时回答不上来的会给你提示,并且会和你一起探讨解决办法,并不会表现出不屑或者不耐烦的情绪。后续的HR沟通反馈效率也非常高,有问必答那种。

PS:快手福利待遇相当不错!

金山云(分布式文件系统研发)

金山云 一面

  • 项目+提问 20分钟
  • cephfs实现原理
  • cephfs元数据管理方式,inode和dentry是怎么管理的,如果主mds所在节点异常了cephfs怎么保证高可靠性
  • ceph mds负载均衡怎么实现
  • TCP连接可靠性的体现(3次握手、4次挥手),怎么实现数据包的保序,流量控制和拥塞控制的区别
  • DHCP 服务的作用
  • arp协议的作用,网络通信中什么时候会用到arp协议
  • 怎么检测网络是否达到瓶颈(netperf、ifstat)
  • 常用的路由算法有哪些,各自怎么实现最短路由的
  • linux内存管理讲讲,怎么确定内存瓶颈?怎么进行优化?swap的作用是什么,什么时候会用到swap,优劣是什么
  • 数据库了解吗?(分布式存储基本没接触过数据库,表示只知道ACID属性)
  • ACID中 隔离性是怎么实现的(这里脏读、幻读之类的描述了一下,从熟知的ceph bluestore层描述了一下隔离性的实现)
  • 写算法:给定一个链表,两辆反转,输出反转后的结果
  • 思考题:如何证明连续的三个数之积能够被6整除(数学归纳法)

金山云 二面(现场面–好像直接就leader面了)

  • 项目+题问 20分钟
  • ceph高性能,高可靠性的体现(从集群正常、集群节点异常两个场景说明)
  • Linux IO栈优化思路讲一下(性能指标–》性能工具–》性能瓶颈–》IO栈每一层的基本优化方法)
  • IO调度算法有哪些,分别用在什么场景
  • 数据库有了解吗?(ACID属性)
  • B树和B+树的区别(不了解)
  • 后面介绍了一下部门情况,业务发展之类的

金山云 的公有云 市场份额在不断被阿里云,华为云,腾讯云 大头挤压,竞争力不是很强。

个人感觉金山云技术还行,但是还没有快手、百度这种互联网公司的基础技术雄厚,分布存储也是比不过阿里、深信服这种专门买存储系统的,个人建议。

阿里云(polardb 分布式存储研发)

阿里云一面 (凉凉,总结下来就是no zuo no die,在真正的大佬面前还是规规矩矩的好)

  • 项目介绍 + 提问 20分钟(讲项目的过程中会打断,题问感兴趣的点)
  • 快照的原理是什么,快照过程中都有哪一些数据做备份,元数据在快照过程中起什么作用(自己当时根本不了解快照的,),悲剧就此展开
  • EC原理是什么,EC和副本的区别,EC可靠性和副本可靠性的差异(都得实现6个9及以上的可靠性),为什么你们会选择副本模式做cache tier
  • 你们代码架构的都是怎么设计的,怎么实现功能的添加修改而不影响其他功能(代码设计模式)
  • CEPH可靠性的实现(bluestore层),正常接收IO时节点异常,ceph怎么保证可靠性
  • 你负责的最有挑战性的任务时什么,遇到过哪一些困难,怎么解决的,完成计划是如何安排的
  • 这个时候其实已经感觉凉凉了(阿里一面主要是部门内部的研发人员面试,这次面试因为作了一下,完全将自己的劣势体现出来,而面试官感知能力极强,立即发现自己讲的有一些不太清楚,接下来就穷追问底,真是极大的失误)。

总体总结下来自己还有很多方面不足:

  1. 分布式存储系统底层实现细节还差很多(快照、数据一致性在存储引擎bluestore的实现)—如果有机会接触自研存储系统,需长时间的积累沉淀,挖掘系统内部核心技术(流控,负载均衡,数据可靠性。。。)的实现
  2. 编码:设计模式欠缺较多(23种设计模式得一点一点梳理,熟悉,应用),算法能力需持续提高(需后期的工作中刻意练习)
  3. 操作系统各个子模块实现
  4. 网络协议应用—实现

路漫漫兮其修远,分布式存储技术 仅仅是分布式技术中的一个分支,仍需加油努力,用鲁棒的基础搭配庞大且结构化的知识,持续精进总结,一定能够登顶分布式高峰。

你可能感兴趣的:(分布式存储:ceph技能树)