JavaRush/Java блог/Архив info.javarush/Уровень 32. Ответы на вопросы к собеседованию по теме уро...
DefNeo
36 уровень

Уровень 32. Ответы на вопросы к собеседованию по теме уровня

Статья из группы Архив info.javarush
участников
Уровень 32. Ответы на вопросы к собеседованию по теме уровня - 1
  1. Зачем нужен RandomAccessFile?

    RandomAccessFile — класс пакета Java IO API, он позволяет перемещаться по файлу, читать из него или писать в него, как вам будет угодно. Вы также сможете заменить существующие части файла, речь идет о обновлении содержимого файла, а точней о обновлении фрагмента файла. Это невозможно сделать с помощью FileInputStream или FileOutputStream, но RandomAccessFile даст вам эту возможность.

    Ссылка: RandomAccessFile и его возможности

  2. Что будет если файл, откуда читает RandomAccessFile, не существует?

    Будет FileNotFoundException

  3. Что будет если файл, куда пишет RandomAccessFile, не существует?

    Создаст новый и запишет в него.

  4. Зачем нужен класс StringReader?

    The Java.io.StringReader class is a character stream whose source is a string.

    Представляет собой поток символов, чей источник называется строкой

  5. Зачем нужен класс StringWriter?

    public class StringWriter
    extends Writer

    A character stream that collects its output in a string buffer, which can then be used to construct a string.

    Closing a StringWriter has no effect. The methods in this class can be called after the stream has been closed without generating an IOException.

    Поток символов, собирающий свой поток в буфер строк, которые затем могут быть использованы для создания строки.

  6. Зачем нужен класс ByteArrayStream?

    Итак, ByteArrayInputStream и ByteArrayOutputStream.

    Эти классы по сути чем-то похожи на StringReader и . Только StringReader читал символы (char) из строки (String), а ByteArrayInputStream читает байты из массива байт (ByteArray).

    StringWriter писал символы (char) в строку, а ByteArrayOutputStream пишет байты в массив байт у него внутри. При записи в StringWriter строка внутри него удлинялась, а при записи в ByteArrayOutputStream его внутренний массив байт тоже динамически расширяется.

  7. Зачем нужен класс PrintStream? Назовите места, где он используется?

    Класс PrintStream был придуман для читабельного вывода информации. Он практически весь состоит из методов print и println.

  8. Зачем нужен DynamicProxy?

    В Java есть специальный класс (java.lang.reflect.Proxy), с помощью которого фактическиможно сконструировать объект во время исполнения программы (динамически), не создавая для него отдельного класса.

  9. Как работает RMI?

    RMI расшифровывается Remote Method Invokation – удаленный вызов методов. Или другими словами RMI – это механизм, который позволяет объекту в одной Java-машине вызывать методы объекта в другой Java-машине, даже если они находятся на разных компьютерах, в разных странах, на разных сторонах земного шара.

    Традиционный подход к выполнению кода на других машинах, разнесенных по сети может смутить из-за своей нудной и склонной к ошибкам реализации. Лучший способ рассмотреть эту проблему состоит в предположении, что некоторые объекты располагаются на другой машине, и что вы можете посылать сообщения этим удаленным объектам и получать результат, как будто они располагаются на вашей локальной машине. Это упрощение в точности является тем, что позволяет делать Удаленный Вызов Методов (RMI) в Java.

    Вот статья по созданию собственной реализации RMI: Удаленный вызов методов (RMI)

  10. Объекты каких типов можно передавать по RMI?

    Объекты должны имплементировать интерфейс Serializable

    Remote method Invocation — механизм, который позволяет вызывать метод удалённого объекта. Согласно ему, все операции по подготовке и передаче данных инкапсулируются в вызываемом методе клиентского объекта-заглушки (stub). Сам же вызов метода ничем не отличается от вызова метода обычного локального объекта, за небольшим исключением:

    • локальные объекты передаются по значению (копии);
    • при передаче удалённого (Remote) объекта, если он экспортирован, передаётся stub этого объекта;
    • передаваемые объекты должны быть Serializable;
    • кроме всех прочих исключительных ситуаций, при вызове удалённого метода может возбуждаться исключение RemoteException (ошибки маршализации/демаршализации, передачи данных и другие возможные ошибки протокола);

    Так же нужно отметить, что при вызове метода мы работаем с удалённым интерфейсом, а не с удалённым классом.

Комментарии (15)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
24 января 2023, 13:57
Спасибо. Читателям предлагаю не воспринимать ответы на 8 и 10 вопросы. Они неполны и не отвечают на суть вопросов. 8. вспоминаем что DynamicProxy способен расширять функциональность методов стороннего класса. 10. вспоминаем про интерфейс Remote и нафига он нужен в RMI
Dregid Backend Developer в Сбербанк
1 ноября 2022, 12:35
Гений, тебя спросили зачем НУЖНЫ классы из пунктов 4, 5, 6, а ты просто ответил что ЭТО за классы...
misha_lazarev
Уровень 34
7 июня 2022, 16:43
Спасибо всем за ответы.
Евгений
Уровень 35
31 марта 2022, 17:31
Немного поумничаю) Пункт 4 ------------ The Java.io.StringReader class is a character stream whose source is a string. Представляет собой поток символов, чей источник называется строкой ------------- Если дословно, то должно быть так: The Java.io.StringReader class есть символьный поток, чей источник есть строка.
LuneFox Java Developer в BIFIT Expert
24 декабря 2021, 12:00
7. Зачем нужен класс PrintStream? Назовите места, где он используется? Не увидел ответа на вопрос. (Самый простой пример использования - переменная System.out, являющаяся экземпляром этого класса, которую мы испольуем для печати информации в консоль.) 10. Объекты каких типов можно передавать по RMI? Я здесь ответил по-другому, судя из лекций, которые я прочитал. По RMI можно передавать (публиковать) объекты, поддерживающие интерфейс Remote. При этом аргументы вызываемых методов у этих объектов должны поддерживать интерфейс Serializable, чтобы их можно было упаковать и распаковать при передаче по сети.
Pavel Soros
Уровень 34
27 июля 2021, 11:41
По 8 вопросу Dynamic Proxy малова-то написано. Всё таки там тема пошире будет.
barracuda
Уровень 41
Expert
28 января 2021, 21:56
Спасибо.
Kex
Уровень 38
Expert
30 июня 2020, 13:47
Ну на вопросы зачем тут ответили словами из лекции, которые в свою очередь вообще ни как не ответили на этот вопрос...(
MURS
Уровень 35
14 июня 2017, 22:14
Remote Method Invokation — поправьте, пожалуйста. Думаю, для многих людей, чей уровень английского даже ниже среднего, такие строки читаются с душераздирающей болью
Павел Х. Team Lead в Иннотех Expert
13 декабря 2018, 23:24
Думаю, для многих людей, чей уровень английского даже ниже среднего, нет будущего в программировании.
PaiMei in J# Grand Master в Eagles' Claw
19 октября 2021, 19:24
Постараюсь продолжить мысль: "...так что возьмите свои мечты и засуньте их себе в..." Но справедливости ради скажу, что если под средним уровнем мы понимаем intermediate, то это, как бы, достаточно хороший и плотный фундамент, т.е. когда я еще будучи школьником гонял в Англию по обмену на 2 недели и жил в чисто аутентичной англиканской семье, то этого уровня с лихвой хватало на общение + на посещение и активное прослушивание всех топчик экскурсий Лондиниума, конечно читать Дикенса в оригинале будет трудновато, но думаю для разраба pre-intermediate тоже будет достаточно хорошо.
Appolinariy
Уровень 35
5 апреля 2017, 11:55
во всей литературе(как и в данном случае, и в лекции курса по RMI) написано, что при работе с RMI передаваемые объекты должны быть Serializable, но нигде в коде я этого факта не наблюдал? Remote в свою очередь тоже не наследует от Serializable. Как так?
lichMax
Уровень 40
3 июля 2017, 19:36
не сам объект, а параметры удалённых методов и их возвращаемые значения. Именно так везде написано (по крайней мере — в лекции).