• ,

Ответы на вопросы к собеседованию Level32

1 Зачем нужен RandomAccessFile?
RandomAccessFile — класс пакета Java IO API, он позволяет перемещаться по файлу, читать из него или писать в него, как вам будет угодно. Вы также сможете заменить существующие части файла, речь идет о обновлении содержимого файла, а точней о обновлении фрагмента файла. Это невозможно сделать с помощью FileInputStream или FileOutputStream, но RandomAccessFile даст вам эту возможность.
Ссылка: devcolibri.com/2989
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 и StringWriter. Только StringReader читал символы (char) из строки (String), а InputStream читает байты из массива байт (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:
javatutor.net/books/tiej/rmi
10 Объекты каких типов можно передавать по RMI?
Объекты должны имплементировать интерфейс Serializable
Remote method Invocation — механизм, который позволяет вызывать метод удалённого объекта. Согласно ему, все операции по подготовке и передаче данных инкапсулируются в вызываемом методе клиентского объекта-заглушки (stub). Сам же вызов метода ничем не отличается от вызова метода обычного локального объекта, за небольшим исключением:

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

6 комментариев

Sanakan
По вопросу №2, если в конструкторе «rw», то исключение не кинется, а так же создастся файл.
lichMax
Вообще-то это уже третий вопрос (чтение и запись). И если этот файл создать не удастся, то тоже будет выброшено исключение FileNotFoundException.
Appolinariy
во всей литературе(как и в данном случае, и в лекции курса по RMI) написано, что при работе с RMI передаваемые объекты должны быть Serializable, но нигде в коде я этого факта не наблюдал? Remote в свою очередь тоже не наследует от Serializable. Как так?
lichMax
не сам объект, а параметры удалённых методов и их возвращаемые значения. Именно так везде написано (по крайней мере — в лекции).
BondXXL
  • BondXXL
  • 0
  • Комментарий отредактирован 2017-05-02 16:19:42 пользователем BondXXL
В пункте 6 — ошибка, скопированная с лекции. Вместо InputStream должно быть ByteArrayInputStream.
MURS
  • MURS
  • 0
  • Комментарий отредактирован 2017-06-14 22:14:20 пользователем MURS
Remote Method Invokation — поправьте, пожалуйста. Думаю, для многих людей, чей уровень английского даже ниже среднего, такие строки читаются с душераздирающей болью
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.