Получить доступ

Что такое сериализация?

JuniorСериализация
Ещё спрашивают так:
  • Что такое Serializable и serialVersionUID?
  • Почему встроенная сериализация Java считается опасной?
  • Чем сериализовать объекты в современных системах?
Коротко

Сериализация — преобразование объекта в байты для передачи или хранения и обратное восстановление.

  • Встроенная: Serializable, ObjectOutputStream, serialVersionUID, transient
  • Её избегают: опасна на недоверенных данных, обходит конструктор, привязана к структуре классов

А ещё В современных системах — JSON (Jackson), Protobuf, Avro

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Объект в памяти — это набор полей и ссылок. Чтобы отправить его по сети или сохранить, его нужно превратить в последовательность байтов, а на другой стороне — восстановить.

Встроенный механизм Java: класс помечается интерфейсом-меткой Serializable, запись — ObjectOutputStream, чтение — ObjectInputStream. Поля с transient не сериализуются. serialVersionUID — номер версии класса: если при чтении он не совпадает, будет InvalidClassException.

Почему его применение сегодня считают нежелательным:

  • безопасность — десериализация недоверенных данных может выполнить произвольный код через цепочки классов (gadget chains); это класс реальных уязвимостей;
  • объект создаётся в обход конструктора — проверки инвариантов не выполняются;
  • формат жёстко связан со структурой классов и Java — переименовал поле, и старые данные не читаются; другой язык их не прочитает;
  • формат громоздкий.

Поэтому для обмена данными используют независимые форматы: текстовый JSON (Jackson, Gson), бинарные со схемой — Protobuf, Avro (Kafka, gRPC). Они работают между языками и управляемо поддерживают эволюцию схемы.

Что хотят услышать

  • Определение сериализации.
  • Встроенный механизм: Serializable, serialVersionUID, transient.
  • Почему его избегают, в первую очередь — безопасность.
  • Современные альтернативы.

Частые ошибки

  • Считать встроенный механизм рекомендуемым способом обмена данными.
  • Восстанавливать объекты из данных, полученных из недоверенного источника.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Преобразование объекта в последовательность байтов для передачи или хранения и обратное восстановление из неё
  • ✗Упорядочивание выполнения потоков по очереди
  • ✗Сжатие объекта для экономии памяти в куче
  • ✗Копирование объекта внутри одной программы

Что спросят дальше

  • Почему встроенную сериализацию считают небезопасной?
  • Что произойдёт с полем, помеченным как transient?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем