Вопрос с собеседования · Java

Зачем нужен serialVersionUID?

MiddleСериализация
Коротко

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

  • Объявляют явно: private static final long serialVersionUID = 1L
  • Меняют, когда изменение несовместимо
  • transient — исключить поле из сериализации

А ещё Для обмена данными лучше JSON или Protobuf

Подробно

Если serialVersionUID у потока и локального класса не совпадает, десериализация падает InvalidClassException. transient исключает поле из стандартной сериализации.

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

  • Назначение и поведение при несовпадении.
  • Почему объявлять явно.

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

  • Десериализовать непроверенные данные.
  • Думать, что static поля сериализуются как состояние объекта.

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

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

Показать варианты и ответ
  • ✗Это уникальный идентификатор объекта
  • ✗Он шифрует сериализованные данные
  • ✗Без него сериализация не работает вовсе и бросает NotSerializableException
  • ✓Это версия класса: при несовпадении — InvalidClassException

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

  • Что делает transient?
  • Чем Externalizable отличается от Serializable?

Разбор темы

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

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

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

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

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