📜  微软面试经历 |设置 41(校内)(1)

📅  最后修改于: 2023-12-03 15:09:53.485000             🧑  作者: Mango

微软面试经历 |设置 41(校内)

本文将分享我的微软面试经历,并针对设置 41 的校内面试场景,分享一些备战方式和注意事项。

面试经历

我的微软面试总计经历了三轮,每轮均为技术面试,时间约1小时左右。整个过程中,面试官们以问题和场景模拟的方式考察我的算法和数据结构基础、编程能力和项目经验等。

以下是我在面试过程中遇到的几个比较具体的问题:

  1. 实现一个 LRU 缓存淘汰算法
class LRUCache:

    def __init__(self, capacity: int):
        self.capacity = capacity
        self.cache = {}
        self.order = []

    def get(self, key: int) -> int:
        if key in self.cache:
            self.order.remove(key)
            self.order.insert(0, key)
            return self.cache[key]
        else:
            return -1

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            self.order.remove(key)
        elif len(self.cache) >= self.capacity:
            k = self.order.pop()
            del self.cache[k]
        self.order.insert(0, key)
        self.cache[key] = value
  1. 实现一个二叉搜索树并支持查找、插入和删除操作
class TreeNode:

    def __init__(self, val: int):
        self.val = val
        self.left = None
        self.right = None

class BinarySearchTree:

    def __init__(self):
        self.root = None

    def search(self, val: int) -> bool:
        node = self.root
        while node:
            if val == node.val:
                return True
            elif val < node.val:
                node = node.left
            else:
                node = node.right
        return False

    def insert(self, val: int) -> None:
        node = self.root
        if not node:
            self.root = TreeNode(val)
            return
        while node:
            if val < node.val:
                if not node.left:
                    node.left = TreeNode(val)
                    return
                else:
                    node = node.left
            else:
                if not node.right:
                    node.right = TreeNode(val)
                    return
                else:
                    node = node.right

    def delete(self, val: int) -> None:
        node = self.root
        while node:
            if val == node.val:
                if not (node.left and node.right):
                    child = node.left or node.right
                    node = None
                    return child
                else:
                    succ = node.right
                    while succ.left:
                        succ = succ.left
                    node.val = succ.val
                    node.right = delete(succ.val, node.right)
                    return node
            elif val < node.val:
                node.left = delete(val, node.left)
            else:
                node.right = delete(val, node.right)
        return node
  1. 给定一个有序数组,返回数组中相邻两个数之差的最大值
def diff_max(nums: List[int]) -> int:
    n = len(nums)
    if n == 0:
        return 0
    res = nums[1] - nums[0]
    for i in range(2, n):
        res = max(res, nums[i] - nums[i-1])
    return res
面试备战

校内面试往往比较简短,所以关键在于如何有效利用有限的时间提升自己的技能和信心。

以下是我在备战微软校内面试过程中采用的一些方法和注意事项:

  1. 多刷算法题和刻意练习。可以选择一些经典的算法书籍进行学习,并利用LeetCode等在线平台练习,及时记录收获和不足,并进行总结和反思。

  2. 建立自己的代码库。可以将一些比较优雅且经过自己思考和理解的代码收录进来,形成自己的代码库。这样不仅可以方便自己复习和搜索,还可以对收录代码进行梳理和优化,提升编码能力和代码质量。

  3. 注意时间和节奏掌控。面试时间往往比较宝贵,所以在面试过程中要尽量把握时间和节奏,合理安排和分配时间和精力,不要过度纠结和拖沓,及时和面试官进行沟通和交流。

总结

微软面试是一个比较有挑战性的过程,需要应聘者具备一定的技术储备和应对能力。但只要认真备战,积极总结和反思,及时调整和优化,相信每个人都能在面试中收获不少。

以上就是我的微软面试经历和备战方式,希望能够对大家有所启发和帮助。