您的位置:首页 > 产品设计 > UI/UE

Top 10 Java Serialization Interview Questions and Answers

2013-11-17 21:44 537 查看
What is Serialization in Java
Java Serialization is one of important concept but it’s been rarely used as persistencesolution and developer mostly overlooked Java serialization API. As per my
experience Java Serialization is quite an important topic in anycore Java interview, In almost all the
interview I have faced there is one or twoJava serialization questions and I have seen interview where after
few question on serialization candidate start feeling uncomfortable because of lack of experience in this area. They don’t know
How to serialize object in Java or they are not familiar with anyJava Serialization example to explain, forget about questions like

Difference between transient and volatile variable or
Difference between Externalizable and Serializable in Java. In this article we will question from bothbeginner and advanced level, which can be equally beneficial to freshers, new
comers and senior Java developers with some years of Java development experience.

10 Interview questions on Serialization in Java

Most commercial project uses either
database or
memory mapped file or simply
flat file for there persistence requirement and only few of them rely on serialization process in Java. Anyway this post is not a Java serializationtutorial or how to serialize object
in java but about interview questions around serialization mechanism and Serialization API, Which is worth to have a look before going for any Java or

J2EE interview and surprising yourself with some unknown contents. for those who are not familiar about java Serialization"Java serialization is the process which is used to serialize object in java by storing object’s state into a file
with extension.ser and recreating object's state from that file, this reverse process is called deserialization.

The Java Serialization API provides a standard mechanism for developers to handle object serialization using Serializable and Externalizable interface. By the way this article is in continuation of my previous articleTop
20 design pattern interview questions,
Top 15 multi-threading interview question in Java and
10 Interview questions on Singleton Pattern in Java So here we go.

What is Serialization in Java



Object Serialization in Java is a process used to convert Object into a binary format which can be persisted into disk or sent over network to any other runningJava
virtual machine; the reverse process of creating object from binary stream is called deserialization in Java. Java provides Serialization API for serializing and deserializing object which includes java.io.Serializable, java.io.Externalizable, ObjectInputStream
and ObjectOutputStream etc. Java programmers are free to use default Serialization mechanism which Java uses based upon structure of class but they are also free to use there own custom binary format, which is often advised as Serialization best practice,
Because serialized binary format becomes part of Class's exported API and it can potentially breakEncapsulation in Java provided
by private and
package-private fields. This pretty much answer the question What is Serialization in Java.

How to make a Java class Serializable?
Making a class Serializable in Java is very easy, Your Java class just needs to implements java.io.Serializable interface and JVM will take care of serializing object in default format. Decision to making aClass
Serializable should be taken concisely because though near term cost of making a Class Serializable is low, long term cost is substantial and it can potentially limit your ability to further modify and change its implementation because like any public API,
serialized form of an object becomes part of public API and when you change structure of your class by implementing addition interface, adding or removing any field can potentially break default serialization, this can be minimized by using a custom binary
format but still requires lot of effort to ensure backward compatibility. One example of How Serialization can put constraints on your ability to change class is SerialVersionUID. If you don't explicitly declare SerialVersionUID then JVM generates its based
upon structure of class which depends upon interfaces a class implements and several other factors which is subject to change. Suppose you implement another interface thanJVM
will generate a different SerialVersionUID for new version of class files and when you try to load old object object serialized by old version of your program you will get InvalidClassException.

1) What is the difference between Serializable and Externalizable interface in Java?
This is most frequently asked question in Java serialization interview. Here is my version Externalizable provides us writeExternal() and readExternal() method which gives us flexibility to control java serialization mechanism instead of relying on Java's
default serialization. Correct implementation of Externalizable interface can
improve performance of application drastically.

2) How many methods Serializable has? If no method then what is the purpose of Serializable interface?
Serializable interface exists in java.io package and forms core of java serialization mechanism. It doesn't have any method and also calledMarker
Interface in Java. When your class implements java.io.Serializable interface it becomes Serializable in Java and gives compiler an indication that use Java Serialization mechanism to serialize this object.

3) What is serialVersionUID? What would happen if you don't define this?
One of my favorite question interview qu
4000
estion on Java serialization. SerialVersionUID is an ID which is stamped on object when it get serialized usuallyhashcode
of object, you can use tool serialverto see serialVersionUIDof a serialized object . SerialVersionUID is used for version control of object. you can specify serialVersionUIDin your

class file also. Consequence of not specifying serialVersionUID is that when you add or modify any field in class then already serialized class will not be able to recover because serialVersionUID generated for new class and forold serialized object
will be different. Java serialization process relies on correctserialVersionUID
for recovering state of serialized object and throws java.io.InvalidClassException in case of serialVersionUID mismatch.

4) While serializing you want some of the members not to serialize? How do you achieve it?
Another frequently asked Serialization interview question. This is sometime also asked as what is the use oftransient variable,
does transient and
static variable gets serialized or not etc. so if you don't want any field to be part of object's state then declare it either static or transient based on your need and it will not be included during Java serialization process.

5) What will happen if one of the members in the class doesn't implement Serializable interface?
One of the easy question about Serialization process in Java. If you try to
serialize an object of a class which implements Serializable, but the object includes a reference to an non- Serializable class then aNotSerializableException’ will be thrown at

runtime and this is why I always put a SerializableAlert (comment section in my code) , one of thecode comment best practices,
to instruct developer to remember this fact while adding a new field in a Serializable class.

6) If a class is Serializable but its super class in not, what will be the state of the instance variables inherited from super class after deserialization?
Java serialization process only continues in object hierarchy till the class is Serializable i.e. implements Serializableinterface
in Java and values of the instance variables inherited from super class will be initialized by calling constructor of Non-Serializable Super class duringdeserialization process. Once the

constructor chaining will started it wouldn't be possible to stop that , hence even if classes higher in hierarchy implements Serializable interface , there constructor will be executed. As you see from thestatement
this Serialization interview question looks very tricky and tough but if you are familiar with key concepts its not that difficult.

7) Can you Customize Serialization process or can you override default Serialization process in Java?
The answer is yes you can. We all know that for serializing an objectObjectOutputStream.writeObject (saveThisobject) is invokedand for reading object ObjectInputStream.readObject() is invoked but there is one more thing which Java VirtualMachine
provides you is to define these two method in your class. If you define these two methods in your class then JVM will invoke these two methods instead of applying default serialization mechanism. You can customize behavior of object serialization and deserialization
here by doing any kind of pre or post processing task. Important point to note is making these methodsprivate to avoid being inherited,

overridden or overloaded. Since only Java Virtual Machine can call private method integrity of your class will remain andJava Serialization will work as normal. In my opinion this is one of the best question one can ask in any Java Serialization
interview, a good follow-up question is why should you provide custom serialized form for your object?

8) Suppose super class of a new class implement Serializable interface, how can you avoid new class to being serialized?
One of the tricky interview question in Serialization in Java. If Super Class of a Class already implements Serializable interface in Java then its already Serializable in Java, since you can not unimplemented an interface its not really possible to make
it Non Serializable class but yes there is a way to avoid serialization of new class.To avoid java serialization you need to implement writeObject() and readObject() method in your Class and need to throw NotSerializableException from those
method. This is another benefit ofcustomizing java serialization process as described in above

Serialization interview question and normally it asked as follow-up question as interview progresses.

9) Which methods are used during Serialization and DeSerialization process in java?
This is very common interview question in Serialization basically interviewer is trying to know; Whether you are familiar with usage of readObject(), writeObject(), readExternal() and writeExternal () or not. Java Serialization is done by java.io.ObjectOutputStream
class. That class is a filter stream which is wrapped around a lower-level byte stream to handle the serialization mechanism. To store any object via serialization mechanism we call ObjectOutputStream.writeObject(saveThisobject) and to deserialize that object
we call ObjectInputStream.readObject() method. Call to writeObject() method trigger serialization process in java. one important thing to note about readObject() method is that it is used to read bytes from the persistence and to create object from those bytes
and its return an
Object which needs to be casted on correct type.

10) Suppose you have a class which you serialized it and stored in persistence and later modified that class to add a new field. What will happen if you deserialize the object already serialized?
It depends on whether class has its own
serialVersionUID or not. As we know from above question that if we don't provide serialVersionUID in our code java compiler will generate it and normally it’sequal
to hashCode of object. by adding any new field there is chance that new serialVersionUID generated for that class version is not the same of already serialized object and in this case Java Serialization API willthrow
java.io.InvalidClassException and this is the reason its recommended to have your own serialVersionUID in code and make sure to keep it same always for a single class.

11) What are the compatible changes and incompatible changes in Java Serialization Mechanism?
The real challenge lies with change in class structure by adding any field, method or removing any field or method is that with already serialized object.As per Java Serialization specification adding any field or method comes
under compatible changeand changing class hierarchy or UN-implementing Serializable interfaces some undernon compatible changes. For complete list of compatible and non compatible changes I would advise reading Java serialization specification.

12) Can we transfer a Serialized object vie network?
Yes you can transfer a Serialized object via network because java serialized object remains in form of bytes which can be transmitter via network. You can also store serialized object in Disk or database as Blob.

13) Which kind of variables is not serialized during Java Serialization?
This question asked sometime differently but the purpose is same whether Java developer knows specifics aboutstatic
and transient variable
or not. Sincestatic variables belong to the class and not to an object they are not the part of the state of object so they are not saved during Java Serialization process. As Java Serialization only persist
state of object and not object itself. Transient variables are also not included in java serialization process and are not the part of the object’s serialized state. After this question sometime interviewer ask a follow-up if you don't store values of these
variables then what would be value of these variable once you deserialize and recreate those object? This is for you guys to think about :)

Read more: http://javarevisited.blogspot.com/2011/04/top-10-java-serialization-interview.html#ixzz2ki0gt2ij
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: