Perguntas e respostas da entrevista de serialização Java [para iniciantes e experientes]
Publicados: 2020-09-25Java é uma das melhores linguagens de programação do mundo. Tivemos a sorte de ver o Java se desenvolver ao longo do tempo e se tornar a linguagem massivamente popular que conhecemos hoje. Essas melhorias, que foram feitas em Java, levaram à inclusão de alguns recursos realmente cruciais que definem como escrevemos programas hoje. Um desses recursos é a serialização.
Em sua essência, a serialização é apenas um mecanismo usado para armazenar um objeto na memória. Então, quando dizemos que estamos serializando um objeto, queremos dizer que estamos convertendo o objeto em questão do estado que estava em um fluxo de bytes. Essa conversão de seu estado nativo para o fluxo de bytes facilita muito a gravação desse objeto em um arquivo.
Este arquivo pode então ser transportado para qualquer lugar que desejarmos, e para acessar o objeto e seus recursos, tudo o que precisamos fazer é desserializar o objeto. A desserialização, como o nome sugere, é o oposto da serialização. Aqui, convertemos o fluxo do byte no estado nativo do objeto para usar o objeto.
A serialização permite que os desenvolvedores escrevam seu código com um certo nível de flexibilidade. A capacidade de pegar o objeto e usá-lo com sua propriedade nativa em outro lugar é crucial no fluxo de trabalho atual. Não é à toa que os recrutadores querem que seus funcionários em potencial saibam mais sobre a serialização de objetos em java.
Se você usou serialização em seus projetos ou não, você não pode simplesmente deixar a importância dela passar. Portanto, para ajudá-lo em seu esforço de se tornar um desenvolvedor java profissional, coletamos algumas perguntas fascinantes da entrevista de serialização java, que você encontrará abaixo.
Perguntas da entrevista de serialização Java
Q1. O que você quer dizer com serialização no contexto da linguagem de programação Java?

Resp. A definição de serialização é talvez a mais básica, mas uma das perguntas mais frequentes no contexto da serialização Java. Você terá que responder a esta pergunta é quase todas as entrevistas. Portanto, você deve ter uma boa definição de serialização Java incutida em sua mente. Assim, a serialização nada mais é do que como um objeto escrito em Java é convertido em um fluxo de bytes.
O objetivo principal disso é permitir que o objeto seja transferido para outra máquina ou salvar o estado do objeto em um arquivo ou salvar o estado do objeto em um banco de dados. Uma vez que o objeto é serializado com sucesso, podemos obter rapidamente o objeto de volta à sua antiga glória simplesmente desserializando o objeto.
Q2. Qual é a maneira pela qual podemos serializar um objeto em Java? Escreva um programa para serializar e desserializar o objeto.
Resp. Em uma entrevista, se você conseguir aumentar seu conhecimento teórico com a capacidade de escrever um programa, as chances de sua seleção aumentam automaticamente. Também é dado que em qualquer entrevista, você será encarregado de escrever um programa básico (no mínimo um programa básico), que demonstre como ocorre a serialização e a desserialização. Antes de escrever este programa você mesmo, você precisa se lembrar de uma coisa importante sobre a serialização de objetos em java.
Para serializar um objeto, você precisa escrever o objeto que usa a interface da classe java.io.Serializable. Você precisa ter certeza de que está usando uma interface Marker para o objeto da classe, que deseja serializar. Ou seja, a classe em questão não deve ter nenhum método escrito na classe. Essa classe também precisa informar à Java Virtual Machine que o objeto resultante terá que mudar de forma e moldar um fluxo de bytes.
O código para serialização está escrito abaixo.
OutputStream fout = new FileOutputStream(“ser.txt”);
ObjectOutput oout = new ObjectOutputStream(fout);
Sistema. out .println("O processo de serialização foi iniciado, serializando objetos de funcionário...");
oout.writeObject(objeto1);
O código para desserialização está escrito abaixo.
InputStream fin= new FileInputStream(“ser.txt”);
ObjectInput oin= new ObjectInputStream(fin);
Sistema. out .println("Processo de deserialização iniciado, exibindo objetos de funcionário...");
Empregador;
emp=(Funcionário) oin.readObject();
Aprenda: alocação de memória em Java: tudo o que você precisa saber
Q3. Qual é a diferença entre as interfaces para Serialização e Externalizável?
Resp. Esta pergunta pode significar a diferença entre você ser selecionado para o trabalho ou não. Suponha que você consiga responder a essa pergunta de uma maneira muito abrangente. Nesse caso, o entrevistador certamente ficará impressionado com o seu conhecimento sobre o assunto, e as chances de sua seleção para o trabalho aumentarão automaticamente. Você encontrará todas as diferenças críticas na tabela abaixo:
As propriedades nas quais estamos comparando esses dois métodos. | SERIALIZÁVEL | EXTERNALIZÁVEL |
Métodos que estão presentes nas classes dessas duas interfaces diferentes | Isso acontece de ser uma interface de marcador. As interfaces de marcador não podem ter nenhuma função de membro. Eles precisam estar vazios, exceto que precisam ter uma instrução presente neles, que informa à Java Virtual Machine que o objeto dessa classe deve ser convertido em um fluxo de bytes. | Esta não é uma interface maker, o que significa que possui alguns métodos de membro. Tem métodos chamados writeExternal() e readExternal() |
Qual é a maneira padrão de serialização? | Para serializável, você encontrará uma maneira padrão de serializar os objetos que você escreve. Tudo o que você precisaria fazer como programador seria encontrar uma maneira de integrar essa interface em seu programa. | Você não encontrará uma maneira padrão de implementar a serialização. Você precisará escrever seus próprios métodos ou substituir os existentes. |
Qual é a maneira pela qual eles implementam o processo de serialização? | Você pode personalizar a maneira como a serialização é implementada nessa interface. No entanto, você não pode substituir os métodos existentes. Você precisará implementar esses métodos em sua própria classe para obter o grau de liberdade desejado. | Nesse método, você precisaria substituir os métodos padrão. Portanto, se você deseja implementar uma maneira personalizada de serializar o objeto, deve escolher essa interface em vez da maneira padrão de Serializable. |
Qual é o grau de controle que eles oferecem no processo de serialização, | Você encontrará uma pequena margem de manobra quando estiver usando esta interface. Você também precisa escrever as funções padrão em sua classe para obter o máximo desse método. No entanto, não é obrigatório fazer isso, o que significa que você ainda poderá serializar objetos com essa interface sem escrever as funções padrão em sua classe personalizada. | Essa interface oferece excelente controle sobre todo o processo. Por esse motivo, se você estiver usando essa interface, será obrigatório escrever os dois métodos em sua classe personalizada. |
Qual é o construtor usado ao usar a desserialização, | Não há construtor que é chamado durante o processo de serialização. | Há uma chamada feita ao contratante ao serializar os objetos usando esta interface. |
Q4. Escreva um programa no qual você implemente o processo personalizado de serialização e desserialização.

Resp. Aqui vem a parte complicada. Esta é a questão através da qual você pode mostrar todo o conhecimento da questão anterior através de um cenário de caso de uso prático. A capacidade de você poder escrever esses programas demonstrará claramente sua experiência e o ajudará a conseguir o emprego que deseja.
Escrito abaixo, você encontrará a maneira personalizada de escrever o método writeObject().
private void writeObject(ObjectOutputStream os) {
Sistema. out .println(“In, método writeObject().”);
tente {
os.writeInt( this .id);
os.writeObject( this .name);
} catch (Exceção e) {
e.printStackTrace();
}
}
Escrito abaixo, você encontrará a implementação personalizada de deserliasação.
private void readObject(ObjectInputStream ois) {
Sistema. out .println(“In, método readObject().”);
tente {
id=ois.readInt();
name=(String)ois.readObject();
} catch (Exceção e) {
e.printStackTrace();
}
}
Q5. Como você implementará a serialização e a desserialização usando a interface Externalizável?
Resp. Para implementar serialização e desserialização usando a interface externalizável, você precisará escrever a função writeExternal() e readExternal() por conta própria. Você encontrará o código para ambos escrito abaixo.
Personalizando o método writeExternal()
público vazio writeExternal (ObjectOutput oo) lança IOException {
Sistema. out .println(“em writeExternal()”);
oo.writeInt(id);
oo.writeObject(nome);
}
Personalizando o método readExternal()
público vazio readExternal (ObjectInput in) lança IOException, ClassNotFoundException {
Sistema. out .println(“in readExternal()”);
este .id=in.readInt();
this .name=(String)in.readObject();
}
Leia sobre: Python vs Java em 2020: qual você deve escolher?
Q6. Digamos que você não deseja que uma variável específica seja serializada. O que você fará para evitar que as variáveis de membro que você não deseja que sejam serializadas?
Resp. É uma questão altamente conceitual. Você precisa ter conhecimento de variáveis estáticas e não estáticas para poder responder a essa pergunta rapidamente. Suponha que você queira que uma variável específica não seja serializada. Nesse caso, você terá que torná-los estáticos, pois o valor de qualquer variável estática não pode ser alterado e, portanto, por esse motivo, eles também não serão serializados.
Q7. O que você quer dizer com serialVersionUID?
Resp. Para cada classe que queremos serializar, eles recebem um número de classe. Esse número, que é dado a cada classe, que deve ser serializada, é chamado serialVersionUID. Esse ID é essencial porque, no momento de recuperar o objeto em sua forma nativa, a Java Virtual Machine procura o ID, que está associado ao objeto.
Em seguida, ele rapidamente se refere ao ID das classes que deveriam ser serializadas. Ao encontrar a classe correspondente à qual este objeto pertence, inicia-se o processo de desserialização.
Q8. Digamos que esquecemos de mencionar ou definir o serialVersionUID. Qual será o impacto desta ação no programa que escrevemos?
Resp. Esta questão é outra questão fundamental. Você precisaria de um bom conhecimento para ser capaz de responder a esta pergunta corretamente. A primeira coisa que precisamos esclarecer é que serialVersionUID é usado para fazer o controle de versão do objeto na pergunta. Digamos que não há um ID definido para a classe, então o compilador Java não saberia a qual classe o objeto pertence. Em tempo de execução ou quando você estiver serializando o objeto, não haverá erros, pois não há necessidade de definir nenhum ID propriamente dito.

No entanto, quando queremos que o fluxo de dados seja convertido no objeto, o compilador Java lançará um erro. O compilador não saberá a qual classe o objeto pertence e, portanto, não poderá localizar e conectar todas as funções-membro e as variáveis associadas a esse objeto. Como o compilador ficará preso nesta etapa, ele lançará um erro de incompatibilidade serialVersionUID (java.io.InvalidClassException).
Q9. Caso não possamos serializar, ou o método de serialização não esteja disponível, existe algum outro método pelo qual poderíamos transferir o objeto que escrevemos em uma rede?
Resp. Existem alguns métodos nos quais poderíamos transferir o objeto que escrevemos em uma rede. Você encontrará alguns deles listados abaixo.
- Você pode tentar converter o objeto em um arquivo JSON. Não é tão difícil converter o objeto em uma string JSON e, quando você escreve o arquivo JSON, a conversão para o arquivo de código também não é muito difícil. Assim, você pode transferir a string JSON, que escreveu na rede.
- Você também pode usar a ferramenta Hibernate (esta é uma ferramenta ORM). Essa ferramenta permite que o objeto persista no banco de dados. Então o objeto que está escrito também pode ser lido facilmente mais tarde.
- Você também pode usar a tecnologia de XML. Você pode tentar converter o objeto em um arquivo XML e, em seguida, transferir esse arquivo rapidamente pela rede.
Deve ler: As 24 principais perguntas e respostas da entrevista sobre Java
Empacotando
Se você estiver interessado em aprender mais sobre Java, OOPs e desenvolvimento de software full-stack, confira o PG Diploma in Full-stack Software Development da upGrad & IIIT-B, projetado para profissionais que trabalham e oferece mais de 500 horas de treinamento rigoroso, 9 + projetos e atribuições, status de ex-alunos do IIIT-B, projetos práticos práticos e assistência de trabalho com as principais empresas.