当我聘请开发人员进行一般的中高级Web应用程序开发职位时,我通常希望他们了解核心并发编程概念,例如活动与安全,竞争条件,线程同步和死锁。我不确定是否考虑主题如fork / join,等待/通知,锁定顺序,内存模型基础(只是基础知识)等等,以成为每个经验丰富的开发人员应该知道的内容,或者这些是否是主题这对于半专业人士来说更为重要(即开发人员有意识地决定比平均开发人员更多地了解并发编程)。
我很想听听你的想法。
答案 0 :(得分:8)
我倾向于认为,此时并发编程在任何严重的深度仍然是一项专业技能。许多人会声称通过学习了解它,但是当他们来申请时,许多人也会把它弄得一团糟。
除了列出的考虑因素外,我还将研究资源含义以及使用进程,线程和光纤的各种开销。在某些情况下,例如移动设备,过度多线程可能会产生严重的性能影响。这可能导致多线程代码的可移植性问题。
我想如果我在这种情况下面试候选人,我会使用一个真实世界的例子而不是更多的一般性主题,可以从教科书中逐字逐句引用。我说这是我自己做了一些多线程的工作,并记住我在前几次搞砸了多少。很多人可以谈谈......;)
答案 1 :(得分:4)
我知道所有这些话题,但我研究过它们。我也认识很多不懂的高级程序员。因此,除非您希望这些程序员积极地使用这些概念,否则没有理由拒绝一个非常好的候选者,因为他们不了解并发的每个方面
答案 2 :(得分:2)
真正的问题是:
他们将以何种方式开发代码?
您应该知道您正在招聘的发展职位需要知道哪些概念能够处理他们将负责的项目。
与编程世界中的任何东西一样......魔鬼在细节中,你无法知道一切。如果你正在招聘Java职位,你会期望他们知道Perl吗?
此外,在这个阶段,并发性虽然在广义理论中得到了很好的描述,但它在很大程度上依赖于实现和平台。 AIX框中Perl的并发性与C ++ Winforms应用程序中的并发性不同。他们可以拥有世界上所有的理论,但如果这项工作是必需的,那么他们应该对他们期望使用它的平台有深入的了解。
答案 3 :(得分:2)
我经常与人们讨论与并发相关的职位,我寻找三个方面:
我认为#1是一个要求(对于我的职位)。我认为#2很不错。如果他们理解它并且可以用pthreads或其他任何库来描述它,那么学习最新的Java并发库(这些概念很难)并不是什么大问题。 #3倾向于将雇佣人员与可能雇用的人员分开。
根据您的问题,我不会认为几乎所有人都知道fork / join,特别是某人申请网络应用程序开发人员职位。我希望开发人员能够获得一些(但不是全部)主题的经验。我采访过的大多数开发人员都没有使用Java 5+并发库,但他们通常可以描述数据竞争或死锁等内容。