这些关于Java并发性的高级/不公平面试问题吗?[关闭]


12

这是我最近问过的受访者的一些问题,这些受访者说他们知道Java并发性:

  1. 解释“内存可见性”的危害-JVM可以对不受监视器保护且未声明的变量重新排序某些操作的方式volatile,以使一个线程可能看不到另一个线程所做的更改。通常,我通过显示存在此危害的代码来问这个问题(例如NoVisibility,Goetz等人的“ Java Concurrency in Practice”中的清单3.1中的示例),并询问出了什么问题。
  2. 说明不仅volatile影响声明的实际变量volatile,而且还影响线程在更改volatile变量之前对变量所做的任何更改。
  3. 为什么用volatile代替synchronized
  4. 使用wait()和实现条件变量notifyAll()。说明为什么要使用notifyAll()。说明为什么要使用while循环测试条件变量。

我的问题是-这些是适当的还是太高级了,无法问一个知道Java并发的人?

而当我们讨论它时,您是否认为应该期望从事Java并发工作的人员对Java垃圾回收的了解高于平均水平?


4
我唯一担心的想法是避免陷​​入“记忆的事实”而不是“技巧”的杂草中。
tylerl 2012年

5
对于任何需要高级别并发性的Java职位,这些问题似乎都是完全合理的。
钻机2012年

2
如果您正在招聘需要并发发展的职位,那么这仅仅是开始。但我想知道如果有人回答您的问题notifyAll()“我不相信要进行OS调度程序的工作,那么我会使用notify()
kdgregory 2012年

2
我还要添加有关水罐锁,数据结构,线程池和不安全的Q :-)
Martijn Verburg

2
其他人则谈到了问题的复杂性。假设他们与项目有关,请确保向他们提出一些更简单的问题,并放弃这一问题,如果候选人明显超出了他们的深度,那将是浪费时间和精力,这会浪费他们的精力面试。问你知道他们将无法回答的问题毫无意义。确保准备好在其他主题上进行类似的深入研究-仅仅是因为这里有些人软弱,并不意味着他们没有能力,无法通过其他优势证明自己。
肖恩·麦克索明

Answers:


11

这实际上取决于您问的是具有2年Java经验的候选人还是具有7年Java经验的候选人。对于建筑师/技术主管/高级人员来说,他们似乎是适当的问题,但对于初级或中级水平的人来说,他们似乎有点困难。

您还会问有关低级同步机制的问题,该机制java.util.concurrent在当今的Java开发中已被大部分取代;而不是wait()/notify() 是首选。您可以看到,Effective Java 2nd Edition删除了一章,详细解释了等待/通知机制,因为它不被认为有用。而且,在大多数情况下,容器可以在更高级别上处理多线程。EJB的方法是线程安全的,例如,程序员无需担心(这并不意味着程序员不应该知道多线程)。

我实际上看到多线程是操作系统的一部分,而不是编程语言的一部分。为了了解一个人是否真正了解多线程和并行编程中有关互斥,信号量或调度的问题,应首先(仅最终)提出有关特定编程语言实现的详细信息。


2
在wait()和notify()注释上+1-但是精通并发性的开发人员会知道Java在该领域的功能的历史和发展(包括Java 7中直到F&J的所有过程)。
Martijn Verburg

@ M3th:我问的最后一个人有10年的Java经验,并声称知道并发编程。感谢您发布lockvs.- wait/notifylock从Goetz的书中了解到,但是没有意识到现在比旧方法更受青睐。我确实同意@Martijn,尽管具有此类经验的人应该意识到较旧的方法。无论如何,我不是要再问这个问题(尤其是因为我已经将其标记为回答-您::)),但我认为具有10年经验的人应该能够回答这些问题,不是吗?
sparc_spread 2012年

1
@Martijn Verburg我同意你们两个;一个好的Java开发人员(尤其是说他/他知道并发性的开发人员)应该知道如何使用wait()/ notify();。至少是出于好奇,为什么它们会出现在Object类中。
m3th0dman

1
@sparc_spread一个程序员在他/她的简历中明确声明自己知道Java并发应该知道答案(至少最后3个)。关于经验级别,正如我所说,imo是一个声称/希望成为架构师/技术主管\高级开发人员,并且具有5+ Java经验(后端,而不是JSP和MVC框架)的程序员应该知道答案。关于lockvs wait/notify,当您确实需要低级别的功能时,首选锁,但在大多数情况下,可以使用更高级别的替代方法。BlockingQueue是一个特别有用的。
m3th0dman

14

这些是适当的还是太高级了,以致不能问那些知道Java并发性的人?

我会说这是相对高级的问题。但是,就它们不是骗人的问题而言,它们不是“不公平的”。

确实,“公平”并不是真正的相关标准。您(作为访调员)应该担心的是,问题和您对答案的解释是为面试选择最佳人选。(或者换一种说法,你拒绝的候选人,你应该真的是因为他们不回答“正确”这些问题给予更多的考虑吗?)

而当我们讨论它时,您是否认为应该期望从事Java并发工作的人员对Java垃圾回收的了解高于平均水平?

再次,这不是真正相关的问题。您应该问自己的问题是,您是否需要一个对Java垃圾回收有深入了解的人。


非常感谢您的回复。我真的希望我可以将两者都标记为答案。感谢您抽出宝贵的时间在这里提供帮助。
sparc_spread 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.