it-swarm.cn

高级开发人员/设计师职位的C#多线程面试问题

我想知道关于多线程的高级面世或技术顾问会问什么样的面试问题。

请为我提供一些在多线程面试中提出的面试问题,如果可能的话,请将基于场景的问题与一些理论问题结合在一起。在与一些人讨论之后,我知道一段时间的面试官可能会给您一个方案,并要求您实施它?

@请在面试中向其他人添加您曾经遇到或问过的特定问题,而不是仅仅提及概念,因为人们会经历这些概念,但仍然难以处理面试问题。因此,请尽一切努力来添加特定的问题这个问题实际上可以帮助人们在d天抢先一步

7
Mohit Bhandari

我可能会要求应聘者描述至少两种或三种不同的方法来在C#中创建多线程应用程序。

  • 明确使用Thread类

  • 线程池

  • 任务并行库

  • 带lambda函数的动作类

  • BeginInvoke

  • 后台工作者

我还想问一问,在没有显式创建线程的情况下,如何最终获得多线程应用程序。

  • 事件处理程序可以在另一个线程中运行(我想到了SerialPort.DataReceived,.Net中的三个Timer中的一个或两个)。

您可能还希望讨论创建重入代码的方法。

  • Monitor.Wait和Monitor.Pulse

  • ManualResetEvent

  • 静态类/方法

更多信息可能来自我写的文章 here

最后,我可能会要求从中汲取教训的经验,而不仅仅是从书本上倾脑。高级开发人员将拥有丰富的经验,应提供有关其发现和解决问题能力的见识。

6
Nate

我最喜欢的问题之一:

  1. 如何在不使用线程的情况下创建响应式UI。预期的答案:将工作分成几小部分,并在UI的消息循环中排队。 (埃里克·利珀特(Eric Lippert)对如何做到这一点做了很好的解释 http://blogs.msdn.com/b/ericlippert/archive/2010/10/25/continuation-passing-style-revisited-part-three- musings-about-coroutines.aspx

当前未在另一个答案中列出的一个有趣的问题:

  1. 说明在TPL中的工作偷窃行为。它是如何工作的,为什么?预期答案:说明拥有队列的核心如何从一侧提取项目,而不拥有队列的核心如何从另一侧“窃取”以保留CPU缓存行。
2
Stilgar

除了所有其他答案外,我还将向候选人介绍几个线程示例,并让他指出可能出现问题的地方。

一些例子包括比赛条件,联锁或让他面对将问题从单线程转换为多线程的问题。我特别喜欢在最后一篇文章中回顾他的设计,让他解释为什么,如何以及如何提高性能。

2
Jorge Córdoba

我一直喜欢这个矩阵: http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm

它没有为您提供现成的问题框,但确实提供了相当详尽的字段集,您可以从中(应该)选择问题来对申请人进行排名。

GJ

1
gjvdkamp

我发现一种好方法是创建一些需要各种形式的多线程的模拟类,例如使用Invoke,WaitHandles,Semiphores等,然后打印出分类并与候选者讨论选项。它为受访者提供了有关候选人的想法的更多反馈,并为候选人提供了有关先前项目等的参考。

0
Lloyd