Java Serileştirme Mülakat Soruları ve Cevapları [Yeni Başlayanlar ve Deneyimliler İçin]
Yayınlanan: 2020-09-25Java, dünyadaki en iyi programlama dillerinden biridir. Java'nın zaman içinde geliştiğini ve bugün bildiğimiz kitlesel popüler dil haline geldiğini görecek kadar şanslıyız. Java'da yapılan bu iyileştirmeler, günümüzde programları nasıl yazdığımızı tanımlayan gerçekten çok önemli bazı özelliklerin dahil edilmesine yol açtı. Bu özelliklerden biri de Serileştirmedir.
Özünde, serileştirme sadece bir nesneyi belleğe depolamak için kullanılan bir mekanizmadır. Yani, bir nesneyi seri hale getirdiğimizi söylediğimizde, söz konusu nesneyi olduğu durumdan bir bayt akışına dönüştürüyoruz demektir. Yerel durumundan bayt akışına bu dönüşüm, bu nesneyi bir dosyaya yazmayı çok kolay hale getirir.
Bu dosya daha sonra istediğimiz yere taşınabilir ve nesneye ve özelliklerine erişmek için tek yapmamız gereken nesneyi seri hale getirmektir. Serileştirme, adından da anlaşılacağı gibi, serileştirmenin tersidir. Burada, nesneyi kullanmak için bayt akışını nesnenin yerel durumuna dönüştürüyoruz.
Serileştirme, geliştiricilerin kodlarını belirli bir esneklik düzeyiyle yazmasına olanak tanır. Nesneyi alma ve yerel özelliğiyle başka bir yerde kullanma yeteneği, günümüzün iş akışında çok önemlidir. İşverenlerin potansiyel çalışanlarının Java'da nesne serileştirme hakkında daha fazla bilgi sahibi olmasını istemelerine şaşmamalı.
Projelerinizde serileştirme kullanmış olsanız da olmasanız da, sadece öneminin kaymasına izin veremezsiniz. Bu nedenle, profesyonel bir java geliştiricisi olma çabanızda size yardımcı olmak için, aşağıda bulacağınız bazı büyüleyici java serileştirme mülakat soruları topladık.
Java Serileştirme Mülakat Soruları
S1. Java programlama dili bağlamında Serileştirme ile ne demek istiyorsunuz?

Ans. Serileştirmenin tanımı belki de Java serileştirme bağlamında en temel ancak en sık sorulan sorulardan biridir. Bu soruya hemen hemen tüm röportajlarda cevap vermeniz gerekecek. Bu nedenle, zihninizde iyi bir Java serileştirme tanımına sahip olmalısınız. Dolayısıyla serileştirme, Java ile yazılmış bir nesnenin bir bayt akışına dönüştürülmesinden başka bir şey değildir.
Bunun temel amacı, nesnenin başka bir makineye aktarılmasını sağlamak veya nesnenin durumunu bir dosyaya kaydetmek veya nesnenin durumunu bir veritabanına kaydetmektir. Nesne başarılı bir şekilde serileştirildikten sonra, yalnızca nesnenin serisini kaldırarak nesneyi eski ihtişamına geri döndürebiliriz.
S2. Java'da bir nesneyi seri hale getirmenin yolu nedir? Nesneyi seri hale getirmek ve seri hale getirmek için bir program yazın.
Ans. Bir röportajda, teorik bilginizi program yazma yeteneği ile zenginleştirebilirseniz, seçim şansınız otomatik olarak artar. Ayrıca, herhangi bir röportajda, serileştirme ve serileştirmenin nasıl gerçekleştiğini gösteren temel bir program (en azından temel bir program) yazmanız istenecektir. Gidip bu programı kendiniz yazmadan önce, Java'da nesne serileştirme hakkında önemli bir şeyi hatırlamanız gerekir.
Bir nesneyi seri hale getirmek için Java.io.Serializable interface sınıfını kullanan nesneyi yazmanız gerekir. Serileştirmek istediğiniz sınıfın nesnesi için bir Marker arabirimi kullandığınızdan emin olmanız gerekir. Yani söz konusu sınıfın sınıfta herhangi bir yazılı yöntemi olmamalıdır. Bu sınıfın ayrıca Java Sanal Makinesi'ne, takip eden nesnenin formları değiştirmesi ve bir bayt akışı şekillendirmesi gerektiğini söylemesi gerekir.
Serileştirme kodu aşağıda yazılmıştır.
OutputStream fout = new FileOutputStream(“ser.txt”);
ObjectOutput oout = new ObjectOutputStream (fout);
Sistem. out .println(“Serileştirme işlemi başladı, çalışan nesneleri seri hale getirildi…”);
oout.writeObject(object1);
Serileştirme için kod aşağıda yazılmıştır.
InputStream fin= new FileInputStream(“ser.txt”);
ObjectInput oin= new ObjectInputStream(fin);
Sistem. out .println(“Serileştirme işlemi başladı, çalışan nesneleri görüntüleniyor…”);
Çalışan ems;
emp=(Çalışan) oin.readObject();
Öğrenin: Java'da Bellek Tahsisi: Bilmeniz Gereken Her Şey
S3. Serileştirme ve Haricileştirilebilir için arabirimler arasındaki fark nedir?
Ans. Bu soru, iş için seçilmeniz ile seçilmemeniz arasındaki fark anlamına gelebilir. Diyelim ki bu soruyu çok kapsamlı bir şekilde cevaplamayı başardınız. Bu durumda, görüşmeci bu konudaki bilginizden etkilenecektir ve iş için seçim şansınız otomatik olarak fırlayacaktır. Aşağıdaki tabloda tüm kritik farklılıkları bulacaksınız:
Bu yöntemlerin her ikisini de karşılaştırdığımız özellikler. | SERİLEŞTİRİLEBİLİR | HARİCİLEŞTİRİLEBİLİR |
Bu iki farklı arayüzün sınıflarında bulunan yöntemler | Bu bir işaretleyici arayüzü olur. İşaretleyici arayüzleri herhangi bir üye işlevine sahip olamaz. İçlerinde Java Sanal Makinesi'ne bu sınıfın nesnesinin bir bayt akışına dönüştürülmesi gerektiğini söyleyen bir talimat olması dışında boş olmaları gerekir. | Bu, bazı üye yöntemlerine sahip olduğu anlamına gelen bir üretici arabirimi değildir. WriteExternal() ve readExternal() adında bir yöntemi vardır. |
Varsayılan serileştirme yöntemi nedir? | Serileştirilebilir için, yazdığınız nesneleri seri hale getirebileceğiniz varsayılan bir yol bulacaksınız. Bir programcı olarak yapmanız gereken tek şey, bu arayüzü programınıza entegre etmenin bir yolunu bulmak olacaktır. | Serileştirmeyi uygulayabileceğiniz varsayılan bir yol bulamazsınız. Kendi yöntemlerinizi yazmanız veya mevcut olanları geçersiz kılmanız gerekecektir. |
Serileştirme sürecini uyguladıkları yol nedir? | Bu arabirimde serileştirmenin uygulanma şeklini özelleştirebilirsiniz. Ancak, mevcut yöntemleri geçersiz kılamazsınız. Arzu ettiğiniz özgürlük derecesini elde etmek için bu yöntemleri kendi sınıfınıza uygulamanız gerekecektir. | Bu yöntemde, varsayılan yöntemleri geçersiz kılmanız gerekir. Bu nedenle, nesneyi seri hale getirmek için özelleştirilmiş bir yol uygulamak istiyorsanız, Serileştirilebilir'in varsayılan yolu yerine bu arabirimi seçmelisiniz. |
Serileştirme sürecinde sundukları kontrolün derecesi nedir, | Bu arayüzü kullanırken küçük bir kıpırdama odası bulacaksınız. Bu yöntemden en iyi şekilde yararlanmak için varsayılan işlevleri de sınıfınıza yazmanız gerekir. Ancak, bunu yapmanız zorunlu değildir, yani varsayılan işlevleri özel sınıfınıza yazmadan nesneleri bu arabirimle seri hale getirebilirsiniz. | Bu arayüz, tüm süreç üzerinde mükemmel kontrol sağlar. Sırf bu nedenle, eğer bu arayüzü kullanıyorsanız, iki yöntemi de özel sınıfınıza yazmanız zorunlu olacaktır. |
Serileştirmeyi kullanırken kullanılan yapıcı nedir, | Serileştirme işlemi sırasında çağrılan bir kurucu yoktur. | Bu arabirim kullanılarak nesneler serileştirilirken yükleniciye yapılan bir çağrı vardır. |
S4. Özel serileştirme ve serileştirmeden çıkarma işlemini uyguladığınız bir program yazın.

Ans. İşte zor kısım geliyor. Bu, önceki tüm soru bilgilerini pratik bir kullanım senaryosu aracılığıyla gösterebileceğiniz sorudur. Bu programları yazabilmeniz, uzmanlığınızı açıkça gösterecek ve istediğiniz işi almanıza yardımcı olacaktır.
Aşağıda yazılanlar, writeObject() yöntemini yazmanın özel yolunu bulacaksınız.
özel geçersiz writeObject(ObjectOutputStream işletim sistemi) {
Sistem. out .println(“İçeride, writeObject() yöntemi.”);
denemek {
os.writeInt( bu .id);
os.writeObject( bu .name);
} yakalama (İstisna e) {
e.printStackTrace();
}
}
Aşağıda yazılı olarak, de-serliasation'ın özel uygulamasını bulacaksınız.
özel geçersiz readObject(ObjectInputStream ois) {
Sistem. out .println(“In, readObject() yöntemi.”);
denemek {
id=ois.readInt();
isim=(String)ois.readObject();
} yakalama (İstisna e) {
e.printStackTrace();
}
}
S5. Haricileştirilebilir arabirimi kullanarak Serileştirmeyi ve serileştirmeyi kaldırmayı nasıl uygulayacaksınız?
Ans. Haricileştirilebilir arabirimi kullanarak serileştirme ve serileştirmeyi kaldırmak için, writeExternal() ve readExternal() işlevlerini kendi başınıza yazmanız gerekir. Her ikisi için de aşağıda yazılı kodu bulacaksınız.
writeExternal() yöntemini özelleştirme
halka açık geçersiz writeExternal (ObjectOutput oo) IOException { 'yi atar
Sistem. out .println(“writeExternal()”);
oo.writeInt(id);
oo.writeObject(isim);
}
readExternal() yöntemini özelleştirme
halka açık geçersiz readExternal (ObjectInput in) , IOException, ClassNotFoundException { 'yi atar
Sistem. out .println(“readExternal()”);
bu .id=in.readInt();
bu .name=(String)in.readObject();
}
Aşağıdakileri okuyun: 2020'de Python vs Java: Hangisini Seçmelisiniz?
S6. Diyelim ki belirli bir değişkenin serileştirilmesini istemiyorsunuz. Serileştirilmesini istemediğiniz üye değişkenleri engellemek için ne yapacaksınız?
Ans. Bu oldukça kavramsal bir sorudur. Bu soruyu hızlı bir şekilde cevaplayabilmek için statik ve statik olmayan değişkenler hakkında bilgi sahibi olmanız gerekir. Belirli bir değişkenin serileştirilmemesini istediğinizi varsayalım. Bu durumda, herhangi bir statik değişkenin değeri değiştirilemeyeceği için onları statik hale getirmeniz gerekecektir ve bu nedenle serileştirilmeyeceklerdir.
S7. serialVersionUID ile ne demek istiyorsunuz?
Ans. Serileştirilmesini istediğimiz her sınıf için bir sınıf numarası verilecektir. Seri hale getirilecek her sınıfa verilen bu numaraya serialVersionUID adı verilir. Bu kimlik önemlidir, çünkü nesneyi yerel biçiminde geri alırken, Java Sanal Makinesi nesneyle ilişkili kimliği arar.
Ardından, serileştirilmesi gereken sınıfların kimliğine hızlı bir şekilde atıfta bulunur. Bu nesnenin ait olduğu ilgili sınıfı bulduğunda serileştirme işlemi başlar.
S8. serialVersionUID'den bahsetmeyi veya tanımlamayı unuttuk diyelim. Bu eylemin yazdığımız programa etkisi ne olacak?
Ans. Bu soru başka bir temel sorudur. Bu soruyu doğru cevaplayabilmek için bir parça sağlam bilgiye ihtiyacınız olacak. Açıklığa kavuşturmamız gereken ilk şey, söz konusu nesnenin sürüm kontrolünü yapmak için serialVersionUID'nin kullanılmasıdır. Diyelim ki sınıf için tanımlanmış bir ID yok, bu yüzden Java derleyicisi nesnenin hangi sınıfa ait olduğunu bilemez. Çalışma zamanında veya nesneyi seri hale getirirken, herhangi bir ID'nin tanımlanmasına gerek olmadığı için herhangi bir hata olmayacaktır.

Ancak, veri akışının nesneye dönüştürülmesini istediğimizde, Java derleyicisi bir hata verecektir. Derleyici, nesnenin hangi sınıfa ait olduğunu bilemeyecek ve bu nedenle, bu nesneyle ilişkili tüm üye işlevleri ve değişkenleri bulamayacak ve bağlayamayacaktır. Derleyici bu adımda takılacağı için serialVersionUID uyuşmazlığı (java.io.InvalidClassException) hatası verecektir.
S9. Serileştirme yapamıyorsak veya serileştirme yöntemi mevcut değilse, yazdığımız nesneyi bir ağ üzerinden aktarabileceğimiz başka bir yöntem var mı?
Ans. Yazdığımız nesneyi bir ağ üzerinden transfer edebileceğimiz birkaç yöntem var. Aşağıda listelenen bazılarını bulacaksınız.
- Nesneyi bir JSON dosyasına dönüştürmeyi deneyebilirsiniz. Nesneyi bir JSON dizgisine dönüştürmek o kadar zor değil ve JSON dosyasını yazdığınızda onu kod dosyasına dönüştürmek de çok zor değil. Böylece yazdığınız JSON dizisini ağ üzerinden aktarabilirsiniz.
- Hazırda Beklet aracını da kullanabilirsiniz (bu bir ORM aracıdır). Bu araç, nesnenin veritabanında kalmasını sağlar. Sonra yazılan nesne daha sonra da çok kolay okunabilir.
- XML teknolojisini de kullanabilirsiniz. Nesneyi bir XML dosyasına dönüştürmeyi deneyebilir ve ardından bu dosyayı ağ üzerinden hızlı bir şekilde aktarabilirsiniz.
Mutlaka Okuyun: En İyi 24 Java Mülakat Sorusu ve Yanıtı
toparlamak
Java, OOP'ler ve tam yığın yazılım geliştirme hakkında daha fazla bilgi edinmek istiyorsanız, upGrad & IIIT-B'nin çalışan profesyoneller için tasarlanmış ve 500 saatten fazla sıkı eğitim sunan Tam Yığın Yazılım Geliştirme PG Diplomasına göz atın, 9 + projeler ve görevler, IIIT-B Mezun statüsü, pratik uygulamalı bitirme projeleri ve en iyi firmalarla iş yardımı.