微软面试题刷题

一面:

  • 介绍一下实习经历
  • 算法题, 反转链表, 写了个O(1)空间的
  • 智力题, 不用写代码, 二维平面上有一个点集P, 另外点集外有一个点P0, 现在令P中的所有点绕P0旋转,求旋转的角度为多少时, P中的所有点能与原位置重合. 我的答案是将P中的点按照与P0的距离划分成一些子集, 每个子集分别枚举可能的旋转角度, 判断是否与初始位置重合, 最后各个子集的答案求一个最小公倍数即可
  • 无限位数大整数加法, 写了个大整数类, 面试官顺着我的实现问了一些基础知识, 比如vector拷贝的原子性等

 

二面:

  • 介绍了一个简历上的项目
  • 算法题: 一个元素数目不断增长的数组, 动态求数组的中位数, 用一个大顶堆和一个小顶堆实现(剑指offer原题)
  • 写代码实现一个Cache, 面试官顺着我的实现问了一些操作系统和系统架构的知识

三面:

  • 又是介绍了一个简历上的项目
  • 算法题: 一个整数数组, 将这个数组划分为一些连续的子数组, 将各个子数组内部元素进行排序后,整个数组是有序的,问最多能切成多少个子数组. 这题确实没见过, 不知道是不是leetcode上的, 我先是用dp写了个O(n^2)的, 面试官在看我的代码, 我趁这个时间又思考了几分钟, 发现这题可以用O(n)的贪心解决(对于每个缝隙, 如果前缀的最大值小于等于后缀的最小值, 那么就可以在这里切), 于是修改了答案, 面试官比较满意
  • 之后问我最有把握的课程, 我说数据结构, 于是问了问二叉堆的合并问题, 回答的一般(最后得知一般的二叉堆就是难以高效合并的...)

四面:

  • 最后一面是和部门leader聊天, 介绍了部门的情况, 问了一些软技能和学校表现, 自己的长处与职业规划之类的

从我经历过的十几场面试来看, 微软面试可以说是体验最好的了, 面试官的态度以及对面试者的引导方面都相当不错

 

你可能感兴趣的:(算法)