📅  最后修改于: 2023-12-03 15:09:53.639000             🧑  作者: Mango
本文介绍了一位程序员在微软实习面试中的经历,包括面试的流程、面试官提问的内容,以及应聘者的回答和思考过程。希望这些经验对准备面试的程序员有所帮助。
面试官:请你用任意语言实现一个二叉树,并实现前序遍历、中序遍历和后序遍历。
回答:
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')])
以上便是这位程序员在微软实习面试中的经历,包括面试的流程和面试官提问的内容。这些问题覆盖了程序员常用的算法和数据结构知识以及编程语言的实现。通过认真准备和练习,我们可以为面试增加成功的几率。