Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是对象发布?我们为什么需要它?_Java - Fatal编程技术网

Java 什么是对象发布?我们为什么需要它?

Java 什么是对象发布?我们为什么需要它?,java,Java,在一次Java Developer的面试中,我被问到一个问题: 什么是对象发布?我们为什么需要它? 我不确定我是否知道正确的答案: 我认为对象发布是当对象(变量)状态被放入堆内存时。线程之间共享对象(变量)也需要它 我说得对吗?如果我错了,请纠正我。我一直在搜索Java语言规范,但没有找到明确回答这个问题的答案 提示:这个问题是故意以非严格和精确的方式形成的——这就是问题的症结所在。发布对象基本上就是创建一个对象的实例,因此该对象可供相应的引用使用。 通常是指对象应该安全发布,这意味着没有人能够

在一次Java Developer的面试中,我被问到一个问题:

什么是对象发布?我们为什么需要它?

我不确定我是否知道正确的答案:

我认为对象发布是当对象(变量)状态被放入堆内存时。线程之间共享对象(变量)也需要它

我说得对吗?如果我错了,请纠正我。我一直在搜索Java语言规范,但没有找到明确回答这个问题的答案


提示:这个问题是故意以非严格和精确的方式形成的——这就是问题的症结所在。

发布对象基本上就是创建一个对象的实例,因此该对象可供相应的引用使用。 通常是指对象应该安全发布,这意味着没有人能够看到处于不一致状态的对象。在未完全建造之前,不得使用

但从定义的角度来看,它只是实例化了一个对象,这再次意味着对象被发布了。

“对象发布”并不是一个既定的技术术语,在Java生态系统中肯定不是。它似乎是Python web框架名称的一部分


我的猜测是,你的面试官要么在公司内部使用这个词,而不知道这一点,要么这个问题是为了过滤掉那些不能承认自己不知道的事情,而会编造一些东西的人。

你的答案非常接近。我将对象发布定义为一个线程对另一个线程可见的对象进行引用的行为。通常,这与对象创建有关:您需要确保发布新创建的对象时,其他线程将看到它处于初始化状态


关于这一点(以及许多其他与线程相关的问题)的经典文本是。如果你没有那本书的副本,也懒得用谷歌搜索盗版PDF,我并不建议你这样做,事实上,即使你这样做了,你也应该听从强大的CERT-Oracle Java安全编码标准的建议。

我知道这个问题并不严格和准确。但那次采访的问题就是这样形成的。问题的关键是看候选人是否能在只给出问题内容的提示的情况下理解问题的背景。这对我来说似乎是一个问题,但我仍然无法清楚地了解这一问题的上下文。-1,因为“发布”(通常是“发布”)是Java世界中一个既定的技术术语,通常用于“”和“对象发布”的上下文中非常接近,我希望知道它的人会把它当成同义词。我认为这个词的广泛使用源于它在中的使用,但我怀疑它是在那里创造的。事实上,维基百科上的Zope文章是我来到这里的原因。它声称Zope是“第一个使用现在通用的Web对象发布方法的系统”。我发现OP在Web上是“通用”的说法相当可疑,所以我开始用谷歌搜索这个主题。这显然是不同的。不要误以为用同一个词描述的两件事一定是同一件事。谢谢。来自,第3章,第3.2段:发布对象意味着使其可用于其当前范围之外的代码,例如通过将对它的引用存储在其他代码可以找到它的位置,从非私有方法返回它,或将它传递给另一个类中的方法。我接受你的答案,因为它给了我最准确的答案。再次感谢。好吧,这不一定是关于一个线程发布到另一个线程,它更一般。它主要是在并发上下文中进行讨论的,但这是因为它可能是一个特别重要的事件。我相信您不会认为它是“发布”的,除非当前范围之外的东西可以访问它。JCIP-3.2发布和转义-发布对象意味着使其可供当前范围之外的代码使用,例如通过在其他代码可以找到它的地方存储对它的引用,Bloch,Joshua;戈茨,布莱恩;佩尔斯,蒂姆;约瑟夫·鲍比尔;福尔摩斯,大卫;道格·利亚(2006-05-09)。实践中的Java并发(Kindle位置1230-1231)。培生教育(美国)。Kindle版。