我讨厌编码面试已经不是什么秘密了。
他们是一种糟糕的招聘方式并且容易出现误报(也就是不必要地拒绝优秀候选人)。对于大多数公司来说,提出白板式的问题并不符合他们的最大利益。
不幸的是,它们是行业标准。作为一名软件工程师,您必须在求职过程中回答白板上的问题。
所以,这是我如何擅长于它们的框架。
这个框架依赖于我在数十次面试过程中发现的一些能力触发器。我还看到这些技巧对我指导的工程师很有用。
我所说的“能力触发器”是指您可以展示的一种做法或可以说出的短语,可以清楚地表明您知道自己在说什么。向面试官发出信号的小而轻松的时刻:这个人明白了。
坐在桌子的两边,我知道最好的候选人在编码面试中会做一些关键的事情:
这是我回答面试问题的过程。我在面试的任何时候都使用这个框架,每次几乎完全一样:
假设您被问及经典的fizzbuzz 问题。
def fizzbuzz(stop: int)
。初始化一个空列表result = []
。开始一个循环for i in range(stop):
。在循环中,我需要一些逻辑,但我们先不要深入。在循环中的某个时刻,我需要result.append(i)
. 然后,用 结束函数return result
。这肯定还没有解决问题,但它给了我工作的结构。让我们运行它!print(fizzbuzz(3))
,只是手动查看它是否打印出来[1, 2, 'fizz']
。我可以python fizzbuzz.py
从命令行运行它。但我们需要更全面的测试,所以我可能会创建一组test_cases
并迭代它们以查看我的代码产生的结果。fizzbuzz
是一个线性问题,因为您需要为每个整数打印一些东西。fizzbuzz(0)
or时会发生什么fizzbuzz(-1)
?我是否需要处理无效输入的情况,例如fizzbuzz('a')
or fizzbuzz(None)
?昨晚我和一位教练客户一起完成了这个练习。这是我们在短短几分钟内使用该框架得出的结论:
def fizzbuzz(stop: int):
"""On multiples of 3, print 'fizz'
On multiples of 5, print 'buzz'
On multiples of both, print 'fizzbuzz'
For all other numbers, print the number
"""
result = []
for x in range(1, stop+1):
if x % 15 == 0:
result.append('fizzbuzz')
elif x % 3 == 0:
result.append('fizz')
elif x % 5 == 0:
result.append('buzz')
else:
result.append(x)
return result
test_cases = (
(-1, []),
(0, []),
(1, [1]),
(3, [1, 2, 'fizz']),
(15, [1, 2, 'fizz', 4, 'buzz', 'fizz', 7, 8, 'fizz', 'buzz', 11, 'fizz', 13, 14, 'fizzbuzz']),
)
for stop, expected in test_cases:
actual = fizzbuzz(stop)
try:
assert actual == expected
print('PASS!')
except:
print(actual, expected)
在像面试这样压力很大的情况下,有一个可以依靠的框架是非常有价值的。当你觉得自己陷入困境时,只需按照步骤设置你需要的工具——脚手架、单元测试,以及你可以从面试官那里得到的任何提示。
希望这会有所帮助!关于面试还有其他问题或意见吗?给我回信。
我每天早上都会为软件开发人员写一些新东西。
如果你喜欢我的文章,点赞,关注,转发!