📅  最后修改于: 2023-12-03 14:54:09.490000             🧑  作者: Mango
最近,我参加了 VMWare 的面试,申请的是 MTS(Member of Technical Staff)的职位。在这篇文章中,我想记录一下我的面试经验以及分享一些有用的技巧。
VMWare 的面试流程大致分为以下阶段:
初步电面:此阶段是由 HR 进行的,主要目的是了解您的背景、技能和职业目标。
技术电面:如果您在第一轮面试中成功通过,VMWare 将进一步安排一轮技术电面。在这一轮面试中,您将与一位VMWare 专业人员进行直接交流,并检查您的基本编程和计算机科学知识。
面对面或远程面试:如果你在前两轮面试中通过,你将被安排去 VMWare 的办公室参加面对面或远程面试。在这一轮面试中,您将与团队领导者或高级团队成员交谈,并解决复杂的技术问题。
VMWare 的技术面试中,人们通常会问一些基本的编程问题,如数据结构、算法、编码规范等等。以下是我在面试中遇到的一些问题:
实现一个 LRU (最近最少使用)算法,在使用缓存时删除最不常用的数据。要求使用链表实现。
class Node:
def __init__(self, key, val):
self.key = key
self.val = val
self.prev = None
self.next = None
class LRUCache:
def __init__(self, capacity: int):
self.capacity = capacity
self.dic = dict()
self.head, self.tail = Node(0, 0), Node(0, 0)
self.head.next, self.tail.prev = self.tail, self.head
def get(self, key: int) -> int:
if key not in self.dic:
return -1
node = self.dic[key]
self.remove(node)
self.add(node)
return node.val
def put(self, key: int, value: int) -> None:
if key in self.dic:
self.remove(self.dic[key])
node = Node(key, value)
self.dic[key] = node
self.add(node)
if len(self.dic) > self.capacity:
node = self.head.next
self.remove(node)
del self.dic[node.key]
def remove(self, node):
prev, next = node.prev, node.next
prev.next, next.prev = next, prev
def add(self, node):
prev = self.tail.prev
prev.next = node
node.prev = prev
node.next = self.tail
self.tail.prev = node
给定一个未排序的整数数组,找出最长连续序列(不重复)。例如,[100, 4, 200, 1, 3, 2] 的最长连续序列为 [1, 2, 3, 4]。
def longestConsecutive(nums: List[int]) -> int:
num_set = set(nums)
max_length = 0
for num in num_set:
if num - 1 not in num_set:
current_num = num
current_length = 1
while current_num + 1 in num_set:
current_num += 1
current_length += 1
max_length = max(max_length, current_length)
return max_length
使用全局变量可以引入复杂性和错误,使程序更难调试和维护。应该尽量避免使用全局变量,并使用参数和返回值实现跨函数通信。
变量名应该清晰、简洁、有意义,并使用小写字母和下划线组合,例如 my_list
、result_dict
等。
VMWare 的面试难度较大,需要准备好编程基础、数据结构、算法和编程规范等方面的知识。在面试过程中,应该保持积极、自信和耐心,并善于沟通和解决问题。