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
Спасибо. Читателям предлагаю не воспринимать ответы на 8 и 10 вопросы. Они неполны и не отвечают на суть вопросов. 8. вспоминаем что DynamicProxy способен расширять функциональность методов стороннего класса. 10. вспоминаем про интерфейс Remote и нафига он нужен в RMI
Dregid Уровень 40
1 ноября 2022
Гений, тебя спросили зачем НУЖНЫ классы из пунктов 4, 5, 6, а ты просто ответил что ЭТО за классы...
misha_lazarev Уровень 34
7 июня 2022
Спасибо всем за ответы.
Евгений Уровень 35
31 марта 2022
Немного поумничаю) Пункт 4 ------------ The Java.io.StringReader class is a character stream whose source is a string. Представляет собой поток символов, чей источник называется строкой ------------- Если дословно, то должно быть так: The Java.io.StringReader class есть символьный поток, чей источник есть строка.
LuneFox Уровень 41 Expert
24 декабря 2021
7. Зачем нужен класс PrintStream? Назовите места, где он используется? Не увидел ответа на вопрос. (Самый простой пример использования - переменная System.out, являющаяся экземпляром этого класса, которую мы испольуем для печати информации в консоль.) 10. Объекты каких типов можно передавать по RMI? Я здесь ответил по-другому, судя из лекций, которые я прочитал. По RMI можно передавать (публиковать) объекты, поддерживающие интерфейс Remote. При этом аргументы вызываемых методов у этих объектов должны поддерживать интерфейс Serializable, чтобы их можно было упаковать и распаковать при передаче по сети.
Pavel Soros Уровень 34
27 июля 2021
По 8 вопросу Dynamic Proxy малова-то написано. Всё таки там тема пошире будет.
barracuda Уровень 41 Expert
28 января 2021
Спасибо.
Kex Уровень 38 Expert
30 июня 2020
Ну на вопросы зачем тут ответили словами из лекции, которые в свою очередь вообще ни как не ответили на этот вопрос...(
MURS Уровень 35
14 июня 2017
Remote Method Invokation — поправьте, пожалуйста. Думаю, для многих людей, чей уровень английского даже ниже среднего, такие строки читаются с душераздирающей болью
Appolinariy Уровень 35
5 апреля 2017
во всей литературе(как и в данном случае, и в лекции курса по RMI) написано, что при работе с RMI передаваемые объекты должны быть Serializable, но нигде в коде я этого факта не наблюдал? Remote в свою очередь тоже не наследует от Serializable. Как так?