社招一年:微软Bing团队面经(算法方向)
写在前面
微软的面试整体偏向基础,英语能力考察仅限于个人简介和项目描述,如果运气好的话都是中国的面试官,没有英文面试。
投递简历之后会有hr先和你聊一轮,要求做一个一分钟的英文自我介绍,然后会对英文能力做一个整体评估,告诉你应该怎么准备可能的英文面试。
下面是技术干货部分
电话面试
微软的社招面试通常是先进行一轮电话面试,面试通过的话才会邀请进行现场面试
- 什么是死锁,造成死锁的原因有哪些
- 数据库的索引有了解过吗,有哪些优缺点
- 算法题:rotate一次的数组,找target,例如 [3,4,0,1,2] 找4所在的位置,如果不存在返回-1,要求logn时间 (LeetCode medium原题,直接二分即可,写代码之前记得问有没有重复元素这类二分可能会遇到坑,面试官很nice 很乐意多交流,另外ms的面试风格,一定要自己想test case,尽可能的覆盖所有边界条件)
现场面试
电话面试之后会约现场面试,通常会安排5-6轮的面试,每轮一小时,前3轮是基础面,面试结束后面试官商量决定要不要进行后续的面试,当然如果表现比较差,也可能在某一轮直接结束。
1面
- 算法题:最大子数组和 (LeetCode原题,n时间1空间)
- 算法题:两个长度为m的无序数组A,B,对于任意不相交的区间ab和cd,val[ab]=sum(A,a,b)- sum(B,a,b),val[cd] = sum(B,c,d)- sum(A,c, d)
求abcd,使val[ab] + val[cd]最大 (这题比较难,先写了个暴力解法,然后和面试官逐步讨论优化,没有给出最优解法) - n个准确率为50%的分类器,可以通过什么方式提升准确吗?60%呢?如果可以,提升到96%需要多少个?(这题在台大林轩田的机器学习课程里有提到过)
- xgb和gbdt的区别 (几乎必问的题目,提前准备一下,说的要有条理,有哪些算法优化,哪些工程实现优化,可以适当扩展提一下lgb)
- 前序遍历 中序遍历 后序遍历 知道那些可以恢复二叉树,只知道前序和后序可以吗?原因?
2面
- 无序数组找第k大的数 (经典题目了,这类题目可以表现一下思考过程,比如最开始最直观的做法是排序,然后优化的思路,不需要全部排序,部分有序就可以了,最后能给《算法导论》里的n时间解法当然最好了,给不到的话给个nlogn的解法也还可以吧)
- 一个字符串 切分成多个回文串,返回所有可能,如aab要返回 [[aa,b],[a,a,b]] (印象里应该是LeetCode原题)
3面
- 实现atoi 考虑所有情况 (LeetCode medium,记得考虑所有异常情况,包括溢出)
- 实际业务问题,如何屏蔽搜索结果的成人内容展示 (面试官一直提示说各种方法都可以,当时的思路被局限在了模型上。这类业务问题的通用套路:先考虑简单的规则,把所有可能覆盖的规则描述一遍;然后拓展到模型,想一些规则cover不到的case,但是模型有能力cover)
4面
- 细聊项目,里面的bad case怎么解,具体的优化方向 (这里主要考察的还是对自己项目的思考深度,面试官可能会挑战,你这个项目用一个简单的规则就可以解决,为什么要用模型。需要准备好可以应对挑战的典型case,能说服面试官。另外就是项目收益的评估问题,怎么评估模型正向,模型怎么上线)
5面 aa
- 聊人生聊理想 (对未来要做的方向的考虑,为什么工作了一年就想跳槽,需要准备一个合适的跳槽理由,然后说一下目前的想法,一定要主动去询问面试官,怎么样合理的做职业规划,面试官会很耐心的解答)
- 估算北京地铁有多少司机 (《编程珠玑》里有一章专门讲估算的)
转广告推荐 加面aa
面完bing搜索之后,hr告知面试通过但是组内没有HC了,帮我转了bing的推荐组
- 汉字数字转数字,如 一百二十转化成120
- 聊简历上的项目,比较宏观,为什么做这个项目,有没有什么数据支撑