微软中国校招一二三面面经

===12.14更新===
获得了feedback,一面Hire,二面三面No Hire。
反而是感觉良好的两轮No Hire.
一面:尝试多次且没要提示(good)。
二面:花了太多时间且没要提示(bad)。
三面:问题分析和系统思维not good,CS背景not good,coding过于复杂且有bug。

feedback尖锐深刻,是秋招获得的最有价值的信息和资料,等价于一个北京28w的offer。

===原帖===

一面leetcode 297       准hard
二面leetcode 1358     准hard
三面leetcode 4               hard
三轮全是hard,无提示撕出。三面hard只20分钟,撕出最优解,依然被吐槽,第二天收到感谢信。

虽然败了,但我是败的一点都不服的!

===11.28更新===
有老哥觉得我有点过于纠结于最优解了。
所以在此贴一下代码,从而表达为何我过于纠结:
20分钟白板撕出,34行处加上 '||' 可AC leetcode第四题。
复杂度O(log(min(m,n))). 算法导论解。
public int getKth(int[] arr1, int[] arr2, int k) {
    if (arr1 == null || arr2 == null) {
        throw new RuntimeException("Invalid Input Arrays");
    }
    int [] longArr = arr1.length > arr2.length ? arr1 : arr2;
    int [] shortArr = longArr == arr1 ? arr2 : arr1;
    int longLen = longArr.length, shortLen = shortArr.length;
    if (k < 1 || k > longLen + shortLen) {
        throw new RuntimeException("Invalid k");
    }
    if (shortLen == 0) return longArr[k - 1];
    if (k <= shortLen) {
        return getUpMedianOfTwoSortedEqualLenArrays(shortArr, 0, k - 1, longArr, 0, k - 1);
    } else if (k <= longLen) {
        if (longArr[k - shortLen - 1] >= shortArr[shortLen - 1]) {
            return longArr[k - shortLen - 1];
        }
        return getUpMedianOfTwoSortedEqualLenArrays(shortArr, 0, shortLen - 1, longArr, k - shortLen, k - 1);
    }
    // k > longLen && k < longLen + shortLen
    if (shortArr[k - longLen - 1] >= longArr[longLen - 1]) {
        return shortArr[k - longLen - 1];
    }
    if (longArr[k - shortLen - 1] >= shortArr[shortLen - 1]) {
        return longArr[k - shortLen - 1];
    }
    return getUpMedianOfTwoSortedEqualLenArrays(shortArr, k - longLen, shortLen - 1, longArr, k - shortLen, longLen - 1);
}

private int getUpMedianOfTwoSortedEqualLenArrays(int[] arr1, int s1, int e1, int[] arr2, int s2, int e2) {
    if (arr1 == null || arr2 == null) {
        throw new RuntimeException("Invalid Input Arrays");
    }
    if (s1 < 0 || e1 >= arr1.length || s1 > e1
        s2 < 0 || e2 >= arr2.length || s2 > e2) {
        throw new RuntimeException("Invalid input start end");
    }
    if (e1 - s1 != e2 - s2){
        throw new RuntimeException("Length not equal");
    }
    while (s1 < e1) {
        int mid1 = s1 + ((e1 - s1) >> 1);
        int mid2 = s2 + ((e2 - s2) >> 1);
        int offset = ((e1 - s1 + 1) & 1) ^ 1;
        if (arr1[mid1] == arr2[mid2]) {
            return arr1[mid1];
        } else if (arr1[mid1] > arr2[mid2]) {
            e1 = mid1;
            s2 = mid2 + offset;
        } else {    //arr1[mid1] < arr2[mid2]
            s1 = mid1 + offset;
            e2 = mid2;
        }
    }
    return Math.min(arr1[s1], arr2[s2]);
}


#微软##面试题目##秋招#
全部评论
这个两个有序数组找第k大写的过于复杂,建议去leetcode上找一些精简点的写法。 还有就是按微软历来的规则,给了两个不通过的话就不会有下一轮了。3面没通过的话,一二轮肯定是挂了一轮的
2 回复 分享
发布于 2020-12-03 22:38
太强了,面试官怕你进去把他干掉
2 回复 分享
发布于 2020-11-28 21:23
momo楼主,解题毕竟只是面试中的一个测试手段,如果只是谁的代码最好就录取谁,那就取消面试,全都拉到一个大房间里写代码,从AC的人里再检查检查谁是最优解就好了,省时省力多开心呀?如果楼主可以自己试图找一下可能存在的问题,万一找到了,对自己也是有很大帮助的呢。有些时候运气只是一方面吧,如果只是因为做过知道最优解是什么,然后当场写了出来,也不算是很特别的优秀能力足够让只要有hc就能进去下一轮啦~lz如果本着学习心态可以和HR要一下面试评价,可能会有收获呢!加油!
1 回复 分享
发布于 2020-12-09 13:44
楼主只是运气差了点,别的公司也一定能进的!可以发邮件给hr问一下面试官的feedback
1 回复 分享
发布于 2020-11-27 19:35
应该是有比你厉害的,过于自信了楼主
1 回复 分享
发布于 2020-11-27 15:16
patpat, lz很强了,同微软三面挂,挂的也不甘心,感觉这个时候hc很少了应该是优中择优了吧,anyway, move on了,一起加油!
1 回复 分享
发布于 2020-11-27 14:21
请问楼主feedback是直接问hr得到的吗?
点赞 回复 分享
发布于 2021-12-24 21:21
m
点赞 回复 分享
发布于 2021-10-27 01:39
感谢楼主的分享!
点赞 回复 分享
发布于 2021-09-28 11:13
虽然已经快过去一年了,看到楼主的分享忍不住去写了这道题,用递归确实可以写得更简洁一些,不过我是在放松环境下编写的,和楼主面试场景肯定不能做比较,这是我用 Typescript 写的 AC 代码(仅作分享): ```typescript function findMedianSortedArrays(   nums1: number[],   nums2: number[], ): number {   const N: number = nums1.length + nums2.length   const mid1: number = (N + 1) >> 1   const mid2: number = N + 1 - mid1   const v1: number = findK(0, 0, mid1)   if (mid1 === mid2) return v1   const v2: number = findK(0, 0, mid2)   return (v1 + v2) / 2   function findK(i: number, j: number, k: number): number {     if (i === nums1.length) return nums2[j + k - 1]     if (j === nums2.length) return nums1[i + k - 1]     if (k === 1) return Math.min(nums1[i], nums2[j])     const mid: number = k >> 1     const i2 = Math.min(nums1.length, i + mid)     const j2 = Math.min(nums2.length, j + mid)     return nums1[i2 - 1] < nums2[j2 - 1]       ? findK(i2, j, k - (i2 - i))       : findK(i, j2, k - (j2 - j))   } } ```
1 回复 分享
发布于 2021-09-11 10:49
一心想去微软,却没留学背景感觉很慌...多嘴问一句楼主最后去哪里了,MSRA吗?
点赞 回复 分享
发布于 2021-01-08 15:23
今年stca究竟啥情况啊 lz是三面全部白板撕的吗
点赞 回复 分享
发布于 2021-01-05 19:34
我能理解老哥,刚刚挂在了虚无缥缈的AA面上,多少有点难受。。
点赞 回复 分享
发布于 2021-01-01 13:37
澳洲留学生,四面撕过最难的题撑死medium...您这要求太高了
点赞 回复 分享
发布于 2020-12-21 13:40
我一直给补课的一个学生,也是撕的easy题,只有一道medium,可能因为他是JHU的,而且还是本科。基本随便聊聊就oc了😂
点赞 回复 分享
发布于 2020-12-16 16:43
想请问楼主如何知道feedback呀?直接问的hr么?感谢🙏
点赞 回复 分享
发布于 2020-12-16 13:59
淦 是苏州微软嘛?楼主这学历和这水准没过的话,我觉得我看了很心凉啊😢 不是说medium刷明白就行嘛
点赞 回复 分享
发布于 2020-12-15 23:53
不用太在意,还有很多好公司的
点赞 回复 分享
发布于 2020-12-09 23:38
请问楼主,微软面试只撕算法题吗?会不会聊项目背景细节啥的?
点赞 回复 分享
发布于 2020-12-03 23:59
题目好难..是bing还是365?
点赞 回复 分享
发布于 2020-11-28 22:11

相关推荐

评论
4
46
分享

创作者周榜

更多
牛客网
牛客企业服务