r0u*_*u1i 6 language-agnostic multithreading
在面试毕业生时,我经常向他们询问有关数据结构,算法和复杂性理论的问题.我真的想问一个问题,使他们能够展示他们对多线程概念的熟悉程度,而不必考虑语言特定的问题.
有什么好问题吗?我能想到的唯一问题是如何编写支持多线程访问的Singleton.
我发现经典的“给我写一个消费者-生产者队列”问题非常好。您可以提前用五分钟左右的时间以轻松的方式讨论同步(例如,以“做什么Object.wait()
?它与其他哪些方法Object
相关?您能给我一个何时使用这些方法的示例吗?还有哪些其他并发技术”开始)您可能会在实践中使用[因为实际上,实际使用等待/通知原语是最好的方法是非常罕见的]?”)。确保候选人解决(或至少表明他知道)原子性(“错过的更新”)和波动性(其他线程上新值的可见性)
然后,在你们讨论了这些理论之后,让他们花几分钟实际为原始生产者-消费者队列编写代码。对于任何真正理解上面所讨论内容的人来说,这应该是直截了当的,但它会淘汰那些可以“说说而已”但在实践中实际上不理解的人(可以说是最危险的群体)。
我喜欢这些迷你编码练习的原因是它们通常很容易扩展。例如,如果候选人轻松完成任务,您可以询问他们如何将其扩展到情况 XXX - 发明您知道将突破您所要求的 noddy 解决方案极限的要求。这不仅可以让您调整所问问题的深度,还可以深入了解候选人处理需求澄清和现有设计修改的能力(这在这个行业中非常重要)。