📜  微软面试经历|第94集(实习)(1)

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

微软面试经历|第94集(实习)

简介

本文介绍了一位程序员在微软实习面试中的经历,包括面试的流程、面试官提问的内容,以及应聘者的回答和思考过程。希望这些经验对准备面试的程序员有所帮助。

流程
  1. 自我介绍:应聘者需要介绍自己的背景和技能;
  2. 技术面试:面试官会就应聘者的技能和经验提问,包括编程语言、数据结构、算法等;
  3. 项目经验:面试官会要求应聘者介绍自己参与过的项目,包括项目的描述、实现、测试、部署等;
  4. 解决问题:面试官会给应聘者一个问题,要求应聘者在规定时间内解决。
面试内容
问题一

面试官:请你用任意语言实现一个二叉树,并实现前序遍历、中序遍历和后序遍历。

回答:

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


class BinaryTree:
    def __init__(self):
        self.root = None

    def add(self, val):
        if not self.root:
            self.root = Node(val)
        else:
            self._add(val, self.root)

    def _add(self, val, node):
        if val < node.val:
            if not node.left:
                node.left = Node(val)
            else:
                self._add(val, node.left)
        else:
            if not node.right:
                node.right = Node(val)
            else:
                self._add(val, node.right)

    def preorder(self):
        res = []

        def _preorder(node):
            if not node:
                return
            res.append(node.val)
            _preorder(node.left)
            _preorder(node.right)

        _preorder(self.root)
        return res

    def inorder(self):
        res = []

        def _inorder(node):
            if not node:
                return
            _inorder(node.left)
            res.append(node.val)
            _inorder(node.right)

        _inorder(self.root)
        return res

    def postorder(self):
        res = []

        def _postorder(node):
            if not node:
                return
            _postorder(node.left)
            _postorder(node.right)
            res.append(node.val)

        _postorder(self.root)
        return res


# test
tree = BinaryTree()
for val in [7, 3, 10, 12, 5, 1, 9]:
    tree.add(val)
print(tree.preorder())  # [7, 3, 5, 1, 10, 9, 12]
print(tree.inorder())  # [1, 3, 5, 7, 9, 10, 12]
print(tree.postorder())  # [1, 5, 3, 9, 12, 10, 7]
问题二

面试官:请你用 Python 实现一个 LRU Cache。

回答:

from collections import OrderedDict


class LRUCache:
    def __init__(self, capacity: int):
        self.cache = OrderedDict()
        self.capacity = capacity

    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        value = self.cache.pop(key)
        self.cache[key] = value
        return value

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            self.cache.move_to_end(key)
        self.cache[key] = value
        if len(self.cache) > self.capacity:
            self.cache.popitem(last=False)


# test
cache = LRUCache(3)
cache.put(1, 'a')
cache.put(2, 'b')
cache.put(3, 'c')
print(cache.cache)  # OrderedDict([(1, 'a'), (2, 'b'), (3, 'c')])
cache.put(4, 'd')
print(cache.cache)  # OrderedDict([(2, 'b'), (3, 'c'), (4, 'd')])
cache.get(2)
print(cache.cache)  # OrderedDict([(3, 'c'), (4, 'd'), (2, 'b')])
总结

以上便是这位程序员在微软实习面试中的经历,包括面试的流程和面试官提问的内容。这些问题覆盖了程序员常用的算法和数据结构知识以及编程语言的实现。通过认真准备和练习,我们可以为面试增加成功的几率。