Preguntas y respuestas de la entrevista de serialización de Java [para principiantes y experimentados]
Publicado: 2020-09-25Java es uno de los mejores lenguajes de programación que existen en el mundo. Hemos tenido la suerte de ver cómo Java se desarrolla con el tiempo y se convierte en el lenguaje masivamente popular que conocemos hoy. Estas mejoras, que se realizaron en Java, llevaron a la inclusión de algunas características realmente cruciales que definen cómo escribimos programas hoy. Una de esas características es la serialización.
En esencia, la serialización es solo un mecanismo utilizado para almacenar un objeto en la memoria. Entonces, cuando decimos que estamos serializando un objeto, queremos decir que estamos convirtiendo el objeto en cuestión del estado en el que se encontraba en un flujo de bytes. Esta conversión de su estado nativo al flujo de bytes hace que escribir este objeto en un archivo sea muy fácil.
Este archivo se puede transportar a cualquier lugar que deseemos, y para acceder al objeto y sus características, todo lo que tenemos que hacer es deserializar el objeto. La deserialización, como sugiere el nombre, es lo opuesto a la serialización. Aquí, convertimos el flujo de bytes al estado nativo del objeto para usar el objeto.
La serialización permite a los desarrolladores escribir su código con un cierto nivel de flexibilidad. La capacidad de tomar el objeto y usarlo con su propiedad nativa en otro lugar es crucial en el flujo de trabajo actual. No es de extrañar que los reclutadores quieran que sus empleados potenciales sepan más sobre la serialización de objetos en Java.
Ya sea que haya utilizado la serialización en sus proyectos o no, no puede simplemente dejar pasar la importancia de la misma. Por lo tanto, para ayudarlo en su esfuerzo por convertirse en un desarrollador de Java profesional, hemos recopilado algunas preguntas fascinantes de la entrevista de serialización de Java, que encontrará a continuación.
Preguntas de la entrevista de serialización de Java
Q1. ¿Qué quiere decir con Serialización en el contexto del lenguaje de programación Java?

Respuesta La definición de serialización es quizás la más básica pero una de las preguntas más frecuentes en el contexto de la serialización de Java. Tendrás que responder a esta pregunta en casi todas las entrevistas. Por lo tanto, debe tener una buena definición de serialización de Java inculcada en su mente. Entonces, la serialización no es más que cómo un objeto escrito en Java se convierte en un flujo de bytes.
El objetivo principal de esto es permitir que el objeto se transfiera a otra máquina o guardar el estado del objeto en un archivo o guardar el estado del objeto en una base de datos. Una vez que el objeto se serializa con éxito, podemos recuperar rápidamente el objeto en su antiguo esplendor simplemente deserializando el objeto.
Q2. ¿Cuál es la forma en que podemos serializar un objeto en Java? Escriba un programa para serializar y deserializar el objeto.
Respuesta En una entrevista, si puede aumentar su conocimiento teórico con la capacidad de escribir un programa, las posibilidades de su selección aumentan automáticamente. También se da que en cualquier entrevista, se le pedirá que escriba un programa básico (al menos un programa básico), que demuestre cómo se produce la serialización y la deserialización. Antes de ir y escribir este programa usted mismo, debe recordar una cosa clave sobre la serialización de objetos en Java.
Para serializar un objeto, debe escribir el objeto que usa la interfaz de clase java.io.Serializable. Debe asegurarse de que está utilizando una interfaz Marker para el objeto de la clase, que desea serializar. Lo que significa que la clase en cuestión no debe tener ningún método escrito en la clase. Esta clase también necesita decirle a la máquina virtual de Java que el objeto resultante tendrá que cambiar de forma y dar forma a un flujo de bytes.
El código para la serialización se escribe a continuación.
OutputStream fout = new FileOutputStream(“ser.txt”);
ObjectOutput salida = new ObjectOutputStream(fout);
Sistema. out .println(“El proceso de serialización ha comenzado, serializando objetos de empleados…”);
oout.writeObject(objeto1);
El código para la deserialización se escribe a continuación.
InputStream fin= new FileInputStream(“ser.txt”);
ObjectInput oin= new ObjectInputStream(fin);
Sistema. out .println(“El proceso de deserialización ha comenzado, mostrando los objetos de los empleados…”);
Empleado emp;
emp=(Empleado) oin.readObject();
Aprenda: Asignación de memoria en Java: todo lo que necesita saber
Q3. ¿Cuál es la diferencia entre las interfaces para Serialización y Externalizable?
Respuesta Esta pregunta podría significar la diferencia entre que te seleccionen para el trabajo o no. Suponga que logra responder a esta pregunta de una manera muy completa. En ese caso, el entrevistador seguramente quedará impresionado con su conocimiento de este tema, y las posibilidades de que lo seleccionen para el trabajo se dispararán automáticamente. Encontrará todas las diferencias críticas en la siguiente tabla:
| Las propiedades en las que estamos comparando ambos métodos. | SERIALIZABLE | EXTERNALIZABLE |
| Métodos que están presentes en las clases de estas dos interfaces diferentes | Esto pasa a ser una interfaz de marcador. Las interfaces de marcador no pueden tener ninguna función miembro. Deben estar vacíos, excepto que deben tener una instrucción presente en ellos, que le dice a la Máquina Virtual Java que el objeto de esta clase debe convertirse en un flujo de bytes. | Esta no es una interfaz de fabricante, lo que significa que tiene algunos métodos de miembros. Tiene métodos llamados writeExternal() y readExternal() |
| ¿Cuál es su forma predeterminada de serialización? | Para serializable, encontrará una forma predeterminada en la que puede serializar los objetos que escribe. Todo lo que tendría que hacer como programador sería encontrar una manera de integrar esta interfaz en su programa. | No encontrará una forma predeterminada en la que pueda implementar la serialización. Deberá escribir sus propios métodos o anular los existentes. |
| ¿Cuál es la forma en que implementan el proceso de serialización? | Puede personalizar la forma en que se implementa la serialización en esta interfaz. Sin embargo, no puede anular los métodos existentes. Deberá implementar estos métodos en su propia clase para obtener el grado de libertad que desea. | En este método, deberá anular los métodos predeterminados. Entonces, si desea implementar una forma personalizada de serializar el objeto, debe elegir esta interfaz en lugar de la forma predeterminada de Serializable. |
| ¿Cuál es el grado de control que ofrecen en el proceso de serialización, | Encontrará un pequeño margen de maniobra cuando utilice esta interfaz. También debe escribir las funciones predeterminadas en su clase para aprovechar al máximo este método. Sin embargo, no es obligatorio que lo haga, lo que significa que aún podrá serializar objetos con esta interfaz sin escribir las funciones predeterminadas en su clase personalizada. | Esta interfaz proporciona un excelente control sobre todo el proceso. Solo por esa razón, si está utilizando esta interfaz, será obligatorio que escriba los dos métodos en su clase personalizada. |
| ¿Cuál es el constructor utilizado al usar la deserialización, | No hay ningún constructor al que se llame durante el proceso de serialización. | Se realiza una llamada al contratista al serializar los objetos mediante esta interfaz. |
Q4. Escriba un programa en el que implemente el proceso personalizado de serialización y deserialización.

Respuesta Aquí viene la parte difícil. Esta es la pregunta a través de la cual puede mostrar todo el conocimiento de la pregunta anterior a través de un escenario de caso de uso práctico. La capacidad para que pueda escribir estos programas demostrará claramente su experiencia y lo ayudará a obtener el trabajo que desea.
Escrito a continuación, encontrará la forma personalizada de escribir el método writeObject().
escribirObjeto privado vacío (ObjectOutputStream os) {
Sistema. out .println(“In, método writeObject().”);
prueba {
os.writeInt( este .id);
os.writeObject( este .nombre );
} captura (Excepción e) {
e.printStackTrace();
}
}
Escrito a continuación, encontrará la implementación personalizada de deserliasation.
privado vacío readObject (ObjectInputStream ois) {
Sistema. out .println(“Entrada, método readObject().”);
prueba {
id=ois.readInt();
nombre=(Cadena)ois.readObject();
} captura (Excepción e) {
e.printStackTrace();
}
}
P5. ¿Cómo implementará la serialización y la deserialización mediante la interfaz externalizable?
Respuesta Para implementar la serialización y la deserialización mediante la interfaz externalizable, deberá escribir la función writeExternal() y readExternal() por su cuenta. Encontrará el código para ambos escrito a continuación.
Personalizando el método writeExternal()
público vacío writeExternal (ObjectOutput oo) lanza IOException {
Sistema. out .println(“en escribirExterno()”);
oo.writeInt(id);
oo.writeObject(nombre);
}
Personalización del método readExternal()
público vacío readExternal (ObjectInput in) lanza IOException, ClassNotFoundException {
Sistema. out .println(“in readExternal()”);
este .id=in.readInt();
este .name=(String)in.readObject();
}
Lea sobre: Python vs Java en 2020: ¿Cuál debería elegir?
P6. Digamos que no desea serializar una variable específica. ¿Qué hará para evitar que se serialicen las variables miembro que no desea?
Respuesta Es una pregunta muy conceptual. Debe tener conocimiento de variables estáticas y no estáticas para poder responder esta pregunta rápidamente. Suponga que desea que una variable en particular no se serialice. En ese caso, tendrá que hacerlos estáticos ya que el valor de cualquier variable estática no se puede cambiar y, por lo tanto, por este motivo, tampoco se serializarán.
P7. ¿Qué quiere decir con serialVersionUID?
Respuesta Para cada clase que queremos serializar, se les dará un número de clase. Este número, que se asigna a cada clase que se va a serializar, se denomina serialVersionUID. Este ID es esencial porque, al momento de recuperar el objeto en su forma nativa, la Máquina Virtual Java busca el ID asociado con el objeto.
Luego, se refiere rápidamente a la ID de las clases que se suponía que debían serializarse. Cuando encuentra la clase correspondiente a la que pertenece este objeto, comienza el proceso de deserialización.
P8. Digamos que olvidamos mencionar o definir serialVersionUID. ¿Cuál será el impacto de esta acción en el programa que hemos escrito?
Respuesta Esta pregunta es otra pregunta fundamental. Necesitaría un conocimiento sólido para poder responder esta pregunta correctamente. Lo primero que debemos aclarar es que serialVersionUID se usa para hacer el control de versiones del objeto en cuestión. Digamos que no hay una ID definida para la clase, por lo que el compilador de Java no sabría a qué clase pertenece el objeto. En el tiempo de ejecución o cuando esté serializando el objeto, no habrá ningún error porque no hay necesidad per se de definir ninguna ID.

Sin embargo, cuando queremos que el flujo de datos se convierta en el objeto, el compilador de Java arrojará un error. El compilador no sabrá a qué clase pertenece el objeto y, por lo tanto, no podrá encontrar y conectar todas las funciones miembro y las variables asociadas con este objeto. Debido a que el compilador se atascará en este paso, generará un error de discrepancia serialVersionUID (java.io.InvalidClassException).
P9. En caso de que no podamos serializar, o el método de serialización no esté disponible, ¿hay algún otro método por el cual podamos transferir el objeto que escribimos a través de una red?
Respuesta Hay algunos métodos en los que podríamos transferir el objeto que escribimos a través de una red. Encontrará algunos de ellos enumerados a continuación.
- Puede intentar convertir el objeto en un archivo JSON. No es tan difícil convertir el objeto en una cadena JSON, y cuando haya escrito el archivo JSON, la conversión al archivo de código tampoco es muy difícil. Entonces, puede transferir la cadena JSON, que escribió a través de la red.
- También puede usar la herramienta Hibernate (esta es una herramienta ORM). Esta herramienta permite que el objeto persista en la base de datos. Entonces, el objeto que se escribe también se puede leer muy fácilmente más adelante.
- También puede utilizar la tecnología de XML. Puede intentar convertir el objeto en un archivo XML y luego puede transferir rápidamente ese archivo a través de la red.
Debe leer: Las 24 mejores preguntas y respuestas de entrevistas de Java
Terminando
Si está interesado en obtener más información sobre Java, OOP y desarrollo de software de pila completa, consulte el Diploma PG de upGrad & IIIT-B en desarrollo de software de pila completa, que está diseñado para profesionales que trabajan y ofrece más de 500 horas de formación rigurosa, 9 + proyectos y asignaciones, estado de ex alumnos de IIIT-B, proyectos finales prácticos y asistencia laboral con las mejores empresas.
