Интервью по сериализации Java Вопросы и ответы [для начинающих и опытных]

Опубликовано: 2020-09-25

Java — один из лучших языков программирования в мире. Нам посчастливилось видеть, как Java развивается с течением времени и становится широко популярным языком, каким мы его знаем сегодня. Эти улучшения, внесенные в Java, привели к включению некоторых действительно важных функций, определяющих то, как мы пишем программы сегодня. Одной из таких функций является сериализация.

По своей сути сериализация — это всего лишь механизм, используемый для сохранения объекта в памяти. Итак, когда мы говорим, что сериализуем объект, мы имеем в виду, что мы конвертируем рассматриваемый объект из состояния, в котором он был, в поток байтов. Это преобразование из исходного состояния в поток байтов упрощает запись этого объекта в файл.

Затем этот файл можно переместить куда угодно, и для доступа к объекту и его функциям все, что нам нужно сделать, это десериализовать объект. Десериализация, как следует из названия, противоположна сериализации. Здесь мы преобразуем поток байтов в собственное состояние объекта, чтобы использовать объект.

Сериализация позволяет разработчикам писать свой код с определенным уровнем гибкости. Возможность взять объект и использовать его вместе с его исходным свойством в другом месте имеет решающее значение в современном рабочем процессе. Неудивительно, что рекрутеры хотят, чтобы их потенциальные сотрудники знали больше о сериализации объектов в java.

Независимо от того, использовали ли вы сериализацию в своих проектах или нет, вы не можете игнорировать ее важность. Итак, чтобы помочь вам стать профессиональным Java-разработчиком, мы собрали несколько увлекательных вопросов для собеседования по сериализации Java, которые вы найдете ниже.

Вопросы на собеседовании по сериализации Java

Q1. Что вы подразумеваете под сериализацией в контексте языка программирования Java?

Ответ Определение сериализации, возможно, является самым основным, но одним из наиболее часто задаваемых вопросов в контексте сериализации Java. На этот вопрос вам придется отвечать почти во всех интервью. Следовательно, у вас должно быть хорошее представление о сериализации Java. Итак, сериализация — это не что иное, как преобразование объекта, написанного на Java, в поток байтов.

Основная цель этого состоит в том, чтобы позволить объекту быть переданным на другой компьютер или сохранить состояние объекта в файле или сохранить состояние объекта в базе данных. Как только объект будет успешно сериализован, мы можем быстро вернуть объекту его прежнюю славу, просто десериализовав объект.

Q2. Как мы можем сериализовать объект в Java? Напишите программу для сериализации и десериализации объекта.

Ответ На собеседовании, если вы сможете дополнить свои теоретические знания умением написать программу, шансы на ваш выбор автоматически возрастут. Также дается, что на любом собеседовании вам поручат написать базовую программу (в крайнем случае базовую программу), которая демонстрирует, как происходит сериализация и десериализация. Прежде чем вы приступите к самостоятельному написанию этой программы, вам нужно запомнить одну ключевую вещь о сериализации объектов в java.

Чтобы сериализовать объект, вам нужно написать объект, использующий интерфейс класса java.io.Serializable. Вам нужно убедиться, что вы используете интерфейс Marker для объекта класса, который вы хотите сериализовать. Это означает, что рассматриваемый класс не должен иметь никаких письменных методов в классе. Этот класс также должен сообщить виртуальной машине Java, что полученный объект должен будет изменить форму и сформировать поток байтов.

Код для сериализации написан ниже.

ВыходнойПоток fout = новый FileOutputStream("ser.txt");

ObjectOutput oout = новый ObjectOutputStream(fout);

Система. out .println("Начался процесс сериализации, сериализация объектов сотрудников...");

oout.writeObject(object1);

Код для десериализации написан ниже.

InputStream fin = новый FileInputStream («ser.txt»);

ObjectInput oin = новый ObjectInputStream (fin);

Система. out .println("Начался процесс десериализации, отображаются объекты сотрудников...");

Сотрудник

emp=(Сотрудник) oin.readObject();

Узнайте: Распределение памяти в Java: все, что вам нужно знать

Q3. В чем разница между интерфейсами Serialization и Externalizable?

Ответ Этот вопрос может означать разницу между тем, вас выберут на работу или нет. Предположим, вам удастся ответить на этот вопрос весьма исчерпывающе. В этом случае интервьюер обязательно будет впечатлен вашим знанием предмета, и шансы на то, что вас примут на работу, автоматически возрастут. Все критические отличия вы найдете в таблице ниже:

Свойства, по которым мы сравниваем оба этих метода.
СЕРИАЛИЗУЕМЫЙ
ВНЕШНИЙ
Методы, присутствующие в классах этих двух разных интерфейсов Это интерфейс маркера. Интерфейсы маркеров не могут иметь никаких функций-членов. Они должны быть пустыми, за исключением того, что в них должна присутствовать инструкция, которая сообщает виртуальной машине Java, что объект этого класса должен быть преобразован в поток байтов. Это не интерфейс создателя, что означает, что у него есть некоторые методы-члены.

У него есть методы, называемые writeExternal() и readExternal().

Каков их способ сериализации по умолчанию? Для сериализуемых вы найдете способ по умолчанию, которым вы можете сериализовать объекты, которые вы пишете. Все, что вам нужно сделать как программисту, это найти способ интегрировать этот интерфейс в вашу программу. Вы не найдете стандартного способа реализации сериализации. Вам нужно будет написать свои собственные методы или переопределить существующие.
Как они реализуют процесс сериализации? Вы можете настроить способ реализации сериализации в этом интерфейсе. Однако вы не можете переопределить существующие методы. Вам нужно будет реализовать эти методы в своем собственном классе, чтобы получить желаемую степень свободы. В этом методе вам нужно будет переопределить методы по умолчанию. Поэтому, если вы хотите реализовать настраиваемый способ сериализации объекта, вам следует выбрать этот интерфейс вместо способа Serializable по умолчанию.
Какова степень контроля, которую они предлагают в процессе сериализации, При использовании этого интерфейса вы найдете крошечную комнату для маневра. Вам также необходимо записать функции по умолчанию в свой класс, чтобы получить максимальную отдачу от этого метода. Однако делать это не обязательно, то есть вы по-прежнему сможете сериализовать объекты с помощью этого интерфейса без записи функций по умолчанию в свой пользовательский класс. Этот интерфейс обеспечивает превосходный контроль над всем процессом. Только по этой причине, если вы используете этот интерфейс, вам будет необходимо написать два метода в свой пользовательский класс.
Какой конструктор используется при десериализации, Нет конструктора, который вызывается в процессе сериализации. При сериализации объектов с помощью этого интерфейса выполняется вызов подрядчика.

Q4. Напишите программу, в которой вы реализуете пользовательский процесс сериализации и десериализации.

Ответ А вот и сложная часть. Это вопрос, с помощью которого вы можете продемонстрировать все знания предыдущего вопроса в практическом сценарии использования. Возможность написания этих программ наглядно продемонстрирует ваш опыт и поможет вам получить работу, которую вы хотите.

Ниже вы найдете собственный способ написания метода writeObject().

частный недействительный writeObject (ОС ObjectOutputStream) {

Система. out .println("Вход, метод writeObject().");

попробуй {

os.writeInt( этот .id);

os.writeObject( это .имя);

} поймать (Исключение e) {

e.printStackTrace();

}

}

Ниже вы найдете пользовательскую реализацию десерлиации.

private void readObject(ObjectInputStream ois) {

Система. out .println("Вход, метод readObject().");

попробуй {

идентификатор = ois.readInt();

имя = (строка) ois.readObject ();

} поймать (Исключение e) {

e.printStackTrace();

}

}

Q5. Как вы будете реализовывать сериализацию и десериализацию с помощью интерфейса Externalizable?

Ответ Для реализации сериализации и десериализации с помощью внешнего интерфейса вам потребуется написать функции writeExternal() и readExternal() самостоятельно. Вы найдете код для обоих, написанных ниже.

Настройка метода writeExternal()

публичный пустота writeExternal (ObjectOutput oo) выдает IOException {

Система. out .println («in writeExternal()»);

оо.writeInt (идентификатор);

оо.writeObject(имя);

}

Настройка метода readExternal()

публичный пустота readExternal (входящий ObjectInput) выдает IOException, ClassNotFoundException {

Система. out .println («in readExternal ()»);

этот .id=in.readInt();

это .name=(String)in.readObject();

}

Читайте о: Python против Java в 2020 году: что выбрать?

Q6. Допустим, вы не хотите сериализовать конкретную переменную. Что вы будете делать, чтобы предотвратить сериализацию переменных-членов, которые вы не хотите?

Ответ Это очень концептуальный вопрос. Вам необходимо иметь представление о статических и нестатических переменных, чтобы быстро ответить на этот вопрос. Предположим, вы хотите, чтобы конкретная переменная не сериализовалась. В этом случае вам придется сделать их статическими, поскольку значение любой статической переменной не может быть изменено, и, следовательно, по этой причине они также не будут сериализованы.

Q7. Что вы подразумеваете под serialVersionUID?

Ответ Каждому классу, который мы хотим сериализовать, будет присвоен номер класса. Этот номер, присваиваемый каждому классу, подлежащему сериализации, называется serialVersionUID. Этот идентификатор необходим, потому что во время получения объекта в исходной форме виртуальная машина Java ищет идентификатор, связанный с объектом.

Затем он быстро обращается к идентификатору классов, которые должны быть сериализованы. Когда он находит соответствующий класс, к которому принадлежит этот объект, начинается процесс десериализации.

Q8. Допустим, мы забыли упомянуть или определить serialVersionUID. Как это действие повлияет на программу, которую мы написали?

Ответ Этот вопрос является еще одним фундаментальным вопросом. Чтобы правильно ответить на этот вопрос, вам потребуются определенные знания. Первое, что нам нужно уточнить, это то, что serialVersionUID используется для контроля версий объекта в вопросе. Допустим, для класса не определен идентификатор, поэтому компилятор Java не будет знать, к какому классу принадлежит объект. Во время выполнения или при сериализации объекта не будет никаких ошибок, потому что нет необходимости определять какой-либо идентификатор как таковой.

Однако, когда мы хотим, чтобы поток данных был преобразован в объект, компилятор Java выдаст ошибку. Компилятор не будет знать, к какому классу принадлежит объект, и, следовательно, не сможет найти и подключить все функции-члены и переменные, связанные с этим объектом. Поскольку компилятор застрянет на этом шаге, он выдаст ошибку несоответствия serialVersionUID (java.io.InvalidClassException).

Q9. В случае, если мы не можем сериализовать или метод сериализации недоступен, есть ли какой-либо другой метод, с помощью которого мы могли бы передать объект, который мы написали, по сети?

Ответ Есть несколько методов, с помощью которых мы могли бы передать объект, который мы написали, по сети. Некоторые из них вы найдете в списке ниже.

  1. Вы можете попробовать преобразовать объект в файл JSON. Преобразовать объект в строку JSON не так уж сложно, а когда вы написали файл JSON, преобразовать его в файл кода также не очень сложно. Итак, вы можете передать строку JSON, которую вы написали по сети.
  2. Вы также можете использовать инструмент Hibernate (это инструмент ORM). Этот инструмент позволяет объекту сохраняться в базе данных. Тогда объект, который записывается, также может быть очень легко прочитан позже.
  3. Вы также можете использовать технологию XML. Вы можете попробовать преобразовать объект в файл XML, а затем быстро передать этот файл по сети.

Обязательно к прочтению: 24 лучших вопроса и ответа на собеседовании по Java

Подведение итогов

Если вам интересно узнать больше о Java, ООП и разработке программного обеспечения с полным стеком, ознакомьтесь с дипломом PG upGrad и IIIT-B по разработке программного обеспечения с полным стеком, который предназначен для работающих профессионалов и предлагает более 500 часов тщательного обучения, 9 + проекты и задания, статус выпускника IIIT-B, практические практические проекты и помощь в трудоустройстве в ведущих фирмах.

Подготовьтесь к карьере будущего

ПРОМЫШЛЕННОЕ ОБУЧЕНИЕ, ПРИЗНАННОЕ В ПРОМЫШЛЕННОСТИ.
Зарегистрируйтесь сегодня