是否有一些资源可以解决多线程问题?如果可能的话,想向受访者提出这些建议。厌倦了询问相同的等待通知问题,这些问题现在每个人都做对了,但无法想象出采用多线程的真实场景。
答案 0 :(得分:11)
问题在于并发编程是一个难题。如果你(面试官)没有完全掌握,你很难判断受访者是否知道他/她的东西。很容易找到具有微妙缺陷的并发问题的解决方案。相反,如果你拒绝他,那对候选人来说是不公平的 1 ,因为你认为他们的答案在他们真正正确时是错误的。
1 - 对您的组织不利。如果候选人实际上比你更了解多线程,那么你可以说需要雇用他。当然,其他因素相同。
答案 1 :(得分:9)
Java Concurrency In Practice。我想知道候选人是否理解数据竞争,CAS,Michael Scott Queue和其他并发数据结构以及并发线程安全如何随着核心数量的增加而变得非常重要。
答案 2 :(得分:1)
好吧,如果你想和那个可怜的闷棍玩得开心,可以问他关于Dekker的算法(和Peterson的变体)。如果你感觉很讨厌,请问他是否在真正的多处理器硬件上使用过任何一个。
如果你感到特别讨厌,请让他向你展示一种适合无锁真正并发单读者单写入器单向通信的技术,在具有共享内存的两个处理器之间,其中唯一的原子操作是单字读写。两侧都没有读 - 修改 - 写指令,处理器架构也不必相同。 (是的,存在这样的技术。)
答案 3 :(得分:1)
我不会问太具体/详细的问题。但是上面提到的“实践中的并发”这本书是一个很好的帮手。只需逐章进行,然后读出引脚点,例如:
答案 4 :(得分:1)
首先你 试着找到真实的场景 它,然后问求职者。 为此你应该提出一个问题,比如什么是多线程的真实场景? 希望它会对你有所帮助。
答案 5 :(得分:0)
我最近在接受采访时得到了一个。让候选人编写一个Servlet,它实现了一个由URL索引的精确内存命中计数器(在一些网页上提供一个javascript风格的命中计数器)。试试吧,它并不像听起来那么容易。该解决方案是Concurrency in Practice的Memoizer模式的简化实现。
答案 6 :(得分:0)
由于多线程是 hard (正如其他人所指出的那样)我建议在实际的编程会话中使用这个,在这个会话中潜在的员工会受到编程问题的影响,而这个问题最好是基于实际发生的事情。您经验丰富的程序员之一,因此您可以实际查看问题是如何解决的,经验丰富的程序员可以评估发生的事情。
一定不能太复杂,但要足够复杂,以至于你的程序员能够获得足够的信息。