Что такое публикация объектов и зачем она нам нужна?
Во время одного из моих собеседований для Java Developer мне задали вопрос:
Что такое публикация объектов и зачем она нам нужна?
И я не уверен, что знаю правильный ответ:
Я думаю, что публикация объектов - это когда состояние объекта (переменной) помещается в кучу памяти. И это необходимо для обмена объектами (переменными) между потоками.
Я прав? Пожалуйста, поправьте меня, если я ошибаюсь. Я искал спецификацию языка Java, но не нашел ничего, что бы однозначно ответить на этот вопрос.
Подсказка: Вопрос намеренно формируется не строгим и точным способом - это его улов.
Ответы
Ответ 1
Ваш ответ был довольно близким. Я бы назвал публикацию объекта в качестве действия одним потоком ссылки на объект, видимый для другого потока. Обычно это связано с созданием объекта: вам нужно убедиться, что вновь созданный объект опубликован таким образом, что другой поток увидит его в инициализированном состоянии.
Классический текст этого (и многих других связанных с потоком вопросов) Java Concurrency на практике. Если у вас нет такой копии, и вы не можете беспокоиться о том, чтобы google создать пиратский PDF, не то, что я предлагаю вам это сделать, и даже если вы это сделаете или можете, вы должны прислушаться к могущественному CERT Oracle Secure Стандарт кодирования для Java советует вам Не публиковать частично инициализированные объекты.
Ответ 2
Публикация объекта в основном представляет собой создание экземпляра объекта и, следовательно, этот объект доступен для использования по соответствующей ссылке.
Обычно это передается в том смысле, что объекты должны быть безопасно опубликованы, а это значит, что никто не должен видеть этот объект в несогласованном состоянии. т.е. он не должен быть доступен для использования до тех пор, пока он не будет полностью построен.
Но в определении точки зрения это ничего, кроме экземпляра объекта, который снова означает публикацию объекта
Ответ 3
"Публикация объектов" не является установленным техническим термином, конечно, не в экосистеме Java. Это похоже на имя Zope, веб-рамки Python.
Я предполагаю, что ваши интервьюеры используют этот термин в своей компании и не знают об этом, или вопрос должен был отфильтровывать людей, которые не могут признать, что есть что-то, чего они не знают, и вместо этого будут составлять материал.