Что такое сериализация?
- Что такое Serializable и serialVersionUID?
- Почему встроенная сериализация Java считается опасной?
- Чем сериализовать объекты в современных системах?
Сериализация — преобразование объекта в байты для передачи или хранения и обратное восстановление.
- Встроенная: Serializable, ObjectOutputStream, serialVersionUID, transient
- Её избегают: опасна на недоверенных данных, обходит конструктор, привязана к структуре классов
А ещё В современных системах — JSON (Jackson), Protobuf, Avro
Подробно
Объект в памяти — это набор полей и ссылок. Чтобы отправить его по сети или сохранить, его нужно превратить в последовательность байтов, а на другой стороне — восстановить.
Встроенный механизм Java: класс помечается интерфейсом-меткой Serializable, запись — ObjectOutputStream, чтение — ObjectInputStream. Поля с transient не сериализуются. serialVersionUID — номер версии класса: если при чтении он не совпадает, будет InvalidClassException.
Почему его применение сегодня считают нежелательным:
- безопасность — десериализация недоверенных данных может выполнить произвольный код через цепочки классов (gadget chains); это класс реальных уязвимостей;
- объект создаётся в обход конструктора — проверки инвариантов не выполняются;
- формат жёстко связан со структурой классов и Java — переименовал поле, и старые данные не читаются; другой язык их не прочитает;
- формат громоздкий.
Поэтому для обмена данными используют независимые форматы: текстовый JSON (Jackson, Gson), бинарные со схемой — Protobuf, Avro (Kafka, gRPC). Они работают между языками и управляемо поддерживают эволюцию схемы.
Что хотят услышать
- Определение сериализации.
- Встроенный механизм: Serializable, serialVersionUID, transient.
- Почему его избегают, в первую очередь — безопасность.
- Современные альтернативы.
Частые ошибки
- Считать встроенный механизм рекомендуемым способом обмена данными.
- Восстанавливать объекты из данных, полученных из недоверенного источника.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Упорядочивание выполнения потоков по очереди
- ✗Сжатие объекта в куче, чтобы он занимал меньше памяти
- ✓Превращение объекта в байты и восстановление из них
- ✗Копирование объекта внутри одной программы
Что спросят дальше
- Почему встроенную сериализацию считают небезопасной?
- Что произойдёт с полем, помеченным как transient?
Разбор темы
- Сериализация и форматы данных
Java serialization и её механика, serialVersionUID, почему её опасно использовать и какие форматы выбирают вместо неё.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.