DefNeo
36 уровень

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

Пост из группы Архив info.javarush.ru
3269 участников
1 Зачем нужен RandomAccessFile? RandomAccessFile — класс пакета Java IO API, он позволяет перемещаться по файлу, читать из него или писать в него, как вам будет угодно. Вы также сможете заменить существующие части файла, речь идет о обновлении содержимого файла, а точней о обновлении фрагмента файла. Это невозможно сделать с помощью FileInputStream или FileOutputStream, но RandomAccessFile даст вам эту возможность. Ссылка: http://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: http://javatutor.net/books/tiej/rmi 10 Объекты каких типов можно передавать по RMI? Объекты должны имплементировать интерфейс Serializable Remote method Invocation — механизм, который позволяет вызывать метод удалённого объекта. Согласно ему, все операции по подготовке и передаче данных инкапсулируются в вызываемом методе клиентского объекта-заглушки (stub). Сам же вызов метода ничем не отличается от вызова метода обычного локального объекта, за небольшим исключением: локальные объекты передаются по значению (копии); при передаче удалённого (Remote) объекта, если он экспортирован, передаётся stub этого объекта; передаваемые объекты должны быть Serializable; кроме всех прочих исключительных ситуаций, при вызове удалённого метода может возбуждаться исключение RemoteException (ошибки маршализации/демаршализации, передачи данных и другие возможные ошибки протокола); Так же нужно отметить, что при вызове метода мы работаем с удалённым интерфейсом, а не с удалённым классом.
Комментарии (6)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизироваться
MURS 35 уровень, Киев
14 июня 2017, 22:14
Remote Method Invokation — поправьте, пожалуйста. Думаю, для многих людей, чей уровень английского даже ниже среднего, такие строки читаются с душераздирающей болью
BondXXL 8 уровень
2 мая 2017, 16:19
В пункте 6 — ошибка, скопированная с лекции. Вместо InputStream должно быть ByteArrayInputStream.
Appolinariy 35 уровень
5 апреля 2017, 11:55
во всей литературе(как и в данном случае, и в лекции курса по RMI) написано, что при работе с RMI передаваемые объекты должны быть Serializable, но нигде в коде я этого факта не наблюдал? Remote в свою очередь тоже не наследует от Serializable. Как так?
lichMax 40 уровень, Санкт-Петербург
3 июля 2017, 19:36
не сам объект, а параметры удалённых методов и их возвращаемые значения. Именно так везде написано (по крайней мере — в лекции).
Sanakan 39 уровень, Маунтин-Вью
5 декабря 2016, 13:15
По вопросу №2, если в конструкторе «rw», то исключение не кинется, а так же создастся файл.
lichMax 40 уровень, Санкт-Петербург
3 июля 2017, 19:33
Вообще-то это уже третий вопрос (чтение и запись). И если этот файл создать не удастся, то тоже будет выброшено исключение FileNotFoundException.