本人目前本科毕业1.8年,在某司存储相关部门工作1.6年。在脉脉上联系到微软HR后投递简历。投递的部门是上海Azure storage,经历六轮面试,最终拿到offer,title是sde,职级应该是60级。当前原部门已提离职。
六轮面试里,除了终面是英文没有算法题,前五面都是中文,有算法题。面试官都非常随和、开放,同时又乐于深入探讨。面试以项目经历和算法题为主,几乎没有八股文,考察知识点也会举出相应的情景。
问项目相关的问题,会让面试者自行介绍,然后再针对性地提问。面试官会关注所做的工作在系统整体中发挥的作用,或者面试者对系统整体的理解。对于我所涉及的存储系统,会提到IO流在各模块中的处理,我的工作在哪方面对IO效率进行了优化,为什么会有这样的影响。为什么选择这样的优化方法,甚至会提出另一种方法,问这样做可不可以,会有什么影响。
算法题大概都是中等水平,除了二叉搜索树可能难度高些。
开始写代码之前会先做讨论,如果思路并非最佳,面试官会做引导。思路确定后开始写代码。写代码时面试官不会打扰,写完不需要运行,主要由面试官看思路和正确性。(根据面试反馈,个人认为比较重要的指标:解题思路、编码速度、代码风格、特殊用例/异常输入的处理)
总体来说过程非常愉快,面试官理解速度很快,提出的问题也很有意义。这种开放探讨的态度和氛围非常nice,给我留下深刻印象。
1.问在公司里做过的项目。
2. LSM树、B+树。
算法题:
已知一 个矩阵,多次查询任意子矩阵的和。
算法题:
两个递增数组a[m]和b[n],求所有的(a[i]+b[j])中第k小的值。
(优先队列)
算法题:
在二维平面存在 n个点 x,y。进行k个查询,查询距离某个位置最近的三个点。
其中距离函数:Min(Abs(x1 - x2), Abs(y1 - y2))
(简单题)
设计一种有以下三种操作的数据结构:插入、删除、取最小值。
(比较坎坷的一道题)
先提出了两种方案:
面试官:不一定要让某种操作达到o(1)复杂度
我:(想不出来)
面试官:可以考虑二叉搜索树
我:为了防止失衡,那就得红黑树了(慌)
面试官:不用那么复杂,普通BST就行
所以最终这道题就是二叉搜索树的插入、删除、取最值。代码上以删除为主。
算法题:
存在一个巨大的SQL表,以string类型作为索引。索引可通过strcmp判断大小,且存在STR_MIN和STR_MAX,可作为区间的左右边界,但是不能指定为某一条目的索引(STR_MIN作为左边界,相当于左侧为负无穷)。
有多次扫描任务,随机对一个range的条目做扫描。
一个任务反映为一个左闭右开区间(左区间为STR_MIN则为开)。求经过多次任务后,剩余的未被扫描过的区间。(其实主要还是string定义域内的区间覆盖,和上面描述的表关系不大)
(简单状态机)