Этап 8 из 11 · ≈ 4 ч

Ввод-вывод и данные

Основа с Junior

Потоки ввода-вывода, NIO, сериализация и java.time.

Что важно знать

  • Байтовые и символьные потоки, буферизация, кодировка явно.
  • NIO: каналы, буферы, селекторы — основа Netty.
  • Встроенная Java-сериализация небезопасна и хрупка — JSON, protobuf.
  • java.time: Instant для моментов, ZonedDateTime для показа.

Критерии освоения

Junior ≈ 4 ч

  • Читает и пишет файлы с буферизацией и правильной кодировкой
  • Работает с датами через java.time и часовыми поясами

Практика. Обработать большой CSV построчно без загрузки в память и посчитать агрегаты.

Middle ≈ 4 ч

  • Объясняет неблокирующий ввод-вывод NIO
  • Выбирает формат сериализации (JSON, protobuf) и объясняет риски Java-сериализации

Практика. Реализовать хранение событий с датами в UTC и вывод в часовом поясе пользователя с тестами на переход времени.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Какая пара классов преобразует байтовые потоки в символьные и обратно?Junior

InputStreamReader декодирует байты в символы, OutputStreamWriter кодирует символы в байты. Кодировку указывают явно: new InputStreamReader(in, StandardCharsets.UTF_8).

Полный разбор
Чем IO отличается от NIO?Middle

IO (java.io) — потоки байт и символов, блокирующие: чтение держит поток, модель «поток на соединение». NIO (java.nio) — каналы и буферы, неблокирующий режим и Selector: один поток обслуживает тысячи соединений. Виртуальные потоки вернули простой блокирующий…

Полный разбор
Зачем нужны direct-буферы (ByteBuffer.allocateDirect) и в чём их минусы?Senior

Direct-буфер живёт вне кучи и передаётся ядру без промежуточного копирования (heap-буфер JVM копирует во временный нативный, потому что GC может переместить объект). Минусы: дорогое создание, освобождение недетерминировано (через GC), память не видна в -Xmx.

Полный разбор
Почему java.time (Java 8) предпочитают старым Date/Calendar?Junior

java.time (Java 8) неизменяем, потокобезопасен и с явной моделью: Instant, LocalDate, LocalTime, ZonedDateTime, Duration, Period. Date и Calendar изменяемы, месяцы с нуля, SimpleDateFormat не потокобезопасен, Date смешивает момент и представление.

Полный разбор
Зачем нужен serialVersionUID?Middle

serialVersionUID — версия класса для встроенной сериализации. При несовпадении версии в потоке и у локального класса — InvalidClassException. Если не объявить, JVM вычислит её из структуры класса, и любое изменение (даже новый метод) сломает совместимость.

Полный разбор
Что произойдёт при вызове date.plusDays(1) у объекта LocalDate?Junior

Вернётся новый объект, исходный не изменится — все типы java.time неизменяемы.

Полный разбор
Чем байтовые потоки отличаются от символьных?Junior

Байтовые потоки (InputStream/OutputStream) — для любых двоичных данных, символьные (Reader/Writer) — для текста и учитывают кодировку.

Полный разбор

Разборы темы

← Вся карта «Java»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования