微软2022校招STCA面经(持续更新(希望))

微软

  • 2021.09.14 模拟面试(Mock Interview)

    - 内容:群面,考算法题,每人举手回答,说思路

    - 好处:表现较好可跳过笔试,直通面试,几率比较大,建议尝试

  • 2021.11.12 一面

    - 前30分钟自我介绍,聊简历和项目。

    - 算法题:LeetCode295.数据流的中位数。

        - 给定一些坐标,求一点使得该点到这些坐标的距离之和最小。

            - 一开始我靠直觉答了求这些坐标的平均值,面试官说不对,随后告诉我是求中位数,即所有x坐标的中位数,以及所有y坐标的中位数。然后让我写数据流的中位数的代码。

class MedianFinder:

    def __init__(self):
        self.maxhp = []  # numbers smaller than median (included)
        self.minhp = []  # numbers larger than median

    def addNum(self, num: int) -> None:
        import heapq
        h1 = self.maxhp
        h2 = self.minhp
        if len(h1) == len(h2):
            heapq.heappush(h2, num)
            heapq.heappush(h1, -heapq.heappop(h2))
        else:
            heapq.heappush(h1, -num)
            heapq.heappush(h2, -heapq.heappop(h1))

    def findMedian(self) -> float:
        h1 = self.maxhp
        h2 = self.minhp
        return -h1[0] if len(h1) > len(h2) else (-h1[0]+h2[0]) / 2.

        - 如果要从堆中随机删除一个数据,用哪个元素代替原有元素,如何调整堆的结构(下沉还是上浮)

    - *题外话:本来应该11.01就面的,结果到最后一刻都没收到正式的面试链接。联系HR后安排到了11.12和11.15一二面。建议:如果是走直通面试的通道,确保自己收到带有正式面试链接的邮件,否则和HR沟通。微软面试本来就迟,早面试压力小点。

  • 2021.11.15二面

    - 做题

        1. 给定一个源字符串a,一个目标字符串b,一个替代字符串c。将a中的b更换为c。例:a="Hello, world", b=" ", c="%2b",则替换后a变为"Hello,%2bworld"

            - 最优解应该用KMP算法 ,我现场用了暴力双指针。

            - 面试官说考这道题的意义是数组扩容什么的,我没懂……

def string_search(text, keyword):
    """
    KMP Algorithm.
    >>> string_search("aaaabaaa", "aaabaaa")
    [1]
    """

    def build_lps_array(s):
        """
        lps: Longest Prefix which is also Suffix.
        >>> build_lps_array("aaabaaa")
        [0,1,2,0,1,2,3]
        """
        lps = [0] * len(s)
        i = 1  # point at origin string
        j = 0  # point at lps array
        while i < len(s):
            if s[lps[j]] == s[i]:
                lps[i] = lps[j] + 1
                i += 1
                j = i - 1
            elif lps[j]:
                j = lps[j-1]
            else:
                lps[i] = 0
                i += 1
                j = i - 1
        return lps

    lps = build_lps_array(keyword)
    s1, s2 = text, keyword
    p1, p2 = 0, 0
    res = []
    while p1 < len(s1):
        if s1[p1] == s2[p2]:
            p1 += 1
            p2 += 1
        elif p2:
            p2 = lps[p2-1]
        else:
            p1 += 1
        if p2 == len(s2):
            res.append(p1-len(s2))
            p2 = lps[p2-1]
    return res

def helper(src, tar, i):
        for j in range(len(tar)):
            if src[i+j] != tar[j]:
                return False
        return True

def replace(src, tar, rpl):
    """
    Replace TAR in SRC with RPL.
    >>> replace("He llo, wor ld", " ", "*")
    'He*llo,*wor*ld'
    """
    indexs = string_search(src, tar)
    res = []
    i, j = 0, 0
    while j < len(src):
        if j in indexs:  # 暴力法:if helper(src, tar, j):
            res.append(src[i:j])
            res.append(rpl)
            j += len(tar)
            i = j
        else:
            j += 1
    if i < j:
        res.append(src[i:j])
    return "".join(res)

        2. 在一个多叉树中找路径,使路径总和等于目标数,路径的定义为:根节点到叶节点。

            - 用最简单的dfs解法即可

def path_finder(root, target):
    def dfs(root, path, path_sum):
        if len(root.children) == 0:
            if path_sum == target:
                res.append(path[:])
            return
        for child in root.children:
            path.append(child.val)
            dfs(child, path, path_sum+child.val)
            path.pop()

    res = []
    dfs(root, [], 0)
    return res

    - 计算机基础

        1. 在浏览器中输入网址,按下Enter,到返回结果。描述这整个过程。

            - 开放题,把自己能想到的说出来就行。我计算机基础差,答得不好。

    - 项目

        - 碰到的最大的困难是什么

        - 问简历上的东西

#微软##面经##校招#
全部评论
一面 如果距离是欧几里得距离的话就是平均值吧,切比雪夫距离是中位数...难道是我错了嘛。。
2 回复 分享
发布于 2021-11-16 15:33
请问有收到后续面试通知消息吗?我时间和你差不多,二面面完就没有下文了😥
点赞 回复 分享
发布于 2021-11-24 19:10

相关推荐

威猛的小饼干正在背八股:挂到根本不想整理
点赞 评论 收藏
分享
评论
5
37
分享
牛客网
牛客企业服务