أسئلة وأجوبة مقابلة Java Serialization [للمبتدئين وذوي الخبرة]

نشرت: 2020-09-25

تعد Java واحدة من أفضل لغات البرمجة الموجودة في العالم. لقد كنا محظوظين بما يكفي لرؤية Java تتطور بمرور الوقت وأصبحت اللغة الشعبية على نطاق واسع التي نعرفها اليوم. أدت هذه التحسينات ، التي تم إجراؤها في Java ، إلى تضمين بعض الميزات المهمة حقًا التي تحدد كيفية كتابة البرامج اليوم. واحدة من هذه الميزات هي التسلسل.

التسلسل في جوهره هو مجرد آلية تستخدم لتخزين كائن في الذاكرة. لذلك ، عندما نقول إننا نقوم بتسلسل كائن ، فإننا نعني أننا نقوم بتحويل الكائن المعني من الحالة ، التي كانت إلى تيار من البايت. هذا التحويل من حالته الأصلية إلى دفق البايت يجعل كتابة هذا الكائن إلى ملف أمرًا في غاية السهولة.

يمكن بعد ذلك نقل هذا الملف إلى أي مكان نرغب فيه ، وللوصول إلى الكائن وميزاته ، كل ما نحتاج إليه هو إلغاء تسلسل الكائن. إزالة التسلسل ، كما يوحي الاسم ، هو عكس التسلسل. هنا ، نقوم بتحويل دفق البايت إلى الحالة الأصلية للكائن لاستخدام الكائن.

يتيح التسلسل للمطورين كتابة التعليمات البرمجية الخاصة بهم بمستوى معين من المرونة. تعد القدرة على أخذ الكائن واستخدامه مع ملكيته الأصلية في مكان آخر أمرًا بالغ الأهمية في سير العمل اليوم. لا عجب أن المجندين يريدون من موظفيهم المحتملين معرفة المزيد عن تسلسل الكائنات في جافا.

سواء كنت قد استخدمت التسلسل في مشاريعك أم لا ، لا يمكنك فقط أن تدع أهميتها تنزلق. لذلك ، لمساعدتك في سعيك لأن تصبح مطور جافا محترفًا ، قمنا بجمع بعض أسئلة مقابلات تسلسل جافا الرائعة ، والتي ستجدها أدناه.

أسئلة مقابلة Java Serialization

س 1. ماذا تقصد بالتسلسل في سياق لغة برمجة جافا؟

الجواب. ربما يكون تعريف التسلسل هو أبسط الأسئلة ولكنه أحد أكثر الأسئلة شيوعًا في سياق تسلسل Java. سوف تضطر للإجابة على هذا السؤال في جميع المقابلات تقريبًا. ومن ثم ، يجب أن يكون لديك تعريف جيد لتسلسل Java مغروس في ذهنك. لذلك ، التسلسل ليس سوى كيفية تحويل كائن مكتوب في Java إلى تدفق بايت.

الهدف الرئيسي من ذلك هو تمكين نقل الكائن إلى جهاز آخر أو حفظ حالة الكائن في ملف أو حفظ حالة الكائن في قاعدة بيانات. بمجرد أن يتم إجراء تسلسل للكائن بنجاح ، يمكننا إعادة الكائن بسرعة إلى مجده السابق بمجرد إلغاء تسلسل الكائن.

س 2. ما هي الطريقة التي يمكننا بها تسلسل كائن في Java؟ اكتب برنامجًا لتسلسل الكائن وإلغاء تسلسله.

الجواب. في مقابلة ، إذا كنت قادرًا على زيادة معرفتك النظرية بالقدرة على كتابة برنامج ، فإن فرص اختيارك تزداد تلقائيًا. من المسلم به أيضًا أنه في أي مقابلة ، سيتم تكليفك بكتابة برنامج أساسي (على الأقل برنامج أساسي) ، والذي يوضح كيفية حدوث التسلسل وإلغاء التسلسل. قبل أن تكتب هذا البرنامج بنفسك ، عليك أن تتذكر شيئًا أساسيًا واحدًا عن تسلسل الكائنات في جافا.

لتسلسل كائن ، ستحتاج إلى كتابة الكائن الذي يستخدم واجهة الفئة java.io.Serializable. تحتاج إلى التأكد من أنك تستخدم واجهة Marker لكائن الفصل الذي تريد إجراء تسلسل له. المعنى لا ينبغي أن يكون للفصل المعني أي طرق مكتوبة في الفصل. تحتاج هذه الفئة أيضًا إلى إخبار Java Virtual Machine أن الكائن التالي سيتعين عليه تغيير النماذج وتشكيل دفق من البايت.

رمز التسلسل مكتوب أدناه.

OutputStream fout = new FileOutputStream (“ser.txt”)؛

ObjectOutput oout = new ObjectOutputStream (fout) ؛

نظام. out .println ("بدأت عملية التسلسل ، تسلسل كائنات الموظف ...") ؛

oout.writeObject (object1) ؛

رمز إلغاء التسلسل مكتوب أدناه.

InputStream fin = new FileInputStream (“ser.txt”)؛

ObjectInput oin = new ObjectInputStream (fin) ؛

نظام. out .println ("بدأت عملية DeSerialization ، عرض كائنات الموظف ...") ؛

الموظف إمبراطورية؛

emp = (الموظف) oin.readObject () ؛

تعلم: تخصيص الذاكرة في Java: كل ما تحتاج إلى معرفته

س 3. ما هو الفرق بين واجهات التسلسل و Externalizable؟

الجواب. قد يعني هذا السؤال الفرق بين اختيارك للوظيفة أم لا. لنفترض أنك تمكنت من الإجابة على هذا السؤال بطريقة شاملة للغاية. في هذه الحالة ، لا بد أن يتأثر القائم بإجراء المقابلة بمعرفتك بهذا الموضوع ، وستزداد فرص اختيارك للوظيفة تلقائيًا. ستجد جميع الاختلافات الجوهرية في الجدول أدناه:

الخصائص التي نقارن عليها كلتا الطريقتين.
تسلسلي
قابل للتصدير
الطرق الموجودة في فئات هاتين الواجهتين المختلفتين يحدث هذا ليكون واجهة علامة. لا يمكن أن تحتوي واجهات العلامات على أي وظائف للعضو. يجب أن تكون فارغة إلا أنها بحاجة إلى وجود تعليمات بها ، والتي تخبر Java Virtual Machine أنه يجب تحويل كائن هذه الفئة إلى دفق من البايت. هذه ليست واجهة صانع مما يعني أن لديها بعض أساليب الأعضاء.

لها أسلوب يسمى writeExternal () و readExternal ()

ما هي طريقتهم الافتراضية في التسلسل؟ للتسلسل ، ستجد طريقة افتراضية يمكنك من خلالها إجراء تسلسل للأشياء التي تكتبها. كل ما عليك فعله كمبرمج هو إيجاد طريقة يمكنك من خلالها دمج هذه الواجهة في برنامجك. لن تجد طريقة افتراضية يمكنك من خلالها تنفيذ التسلسل. ستحتاج إلى كتابة الأساليب الخاصة بك أو تجاوز الأساليب الموجودة.
ما هي الطريقة التي ينفذون بها عملية التسلسل؟ يمكنك تخصيص طريقة تنفيذ التسلسل في هذه الواجهة. ومع ذلك ، لا يمكنك تجاوز الطرق الموجودة. ستحتاج إلى تطبيق هذه الأساليب في صفك للحصول على درجة الحرية التي تريدها. في هذه الطريقة ، قد تحتاج إلى تجاوز الطرق الافتراضية. لذلك إذا كنت ترغب في تنفيذ طريقة مخصصة لتسلسل الكائن ، فيجب عليك اختيار هذه الواجهة على الطريقة الافتراضية لـ Serializable.
ما هي درجة التحكم التي يقدمونها في عملية التسلسل ، ستجد مساحة صغيرة للمناورة عند استخدام هذه الواجهة. تحتاج أيضًا إلى كتابة الوظائف الافتراضية في فصلك لتحقيق أقصى استفادة من هذه الطريقة. ومع ذلك ، ليس من الضروري القيام بذلك ، مما يعني أنك ستظل قادرًا على تسلسل الكائنات باستخدام هذه الواجهة دون كتابة الوظائف الافتراضية في فئتك المخصصة. توفر هذه الواجهة تحكمًا ممتازًا في العملية بأكملها. لهذا السبب وحده ، إذا كنت تستخدم هذه الواجهة ، فسيكون من الضروري لك كتابة الطريقتين في الفصل المخصص الخاص بك.
ما هو المُنشئ المستخدم أثناء استخدام إزالة التسلسل ، لا يوجد مُنشئ يتم استدعاؤه أثناء عملية التسلسل. يتم إجراء مكالمة إلى المقاول عند إجراء تسلسل للكائنات باستخدام هذه الواجهة.

س 4. اكتب برنامجًا تقوم فيه بتنفيذ عملية مخصصة للتسلسل وإلغاء التسلسل.

الجواب. هنا يأتي الجزء الصعب. هذا هو السؤال الذي يمكنك من خلاله إظهار جميع المعارف السابقة عن الأسئلة من خلال سيناريو حالة الاستخدام العملي. ستظهر قدرتك على كتابة هذه البرامج بوضوح خبرتك وتساعدك في الحصول على الوظيفة التي تريدها.

مكتوبًا أدناه ستجد الطريقة المخصصة لكتابة طريقة writeObject ().

writeObject باطلة خاصة (ObjectOutputStream نظام التشغيل) {

نظام. out .println ("أسلوب الإدخال ، writeObject ().") ؛

حاول {

os.writeInt ( this .id) ؛

os.writeObject ( هذا الاسم ) ؛

} catch (استثناء هـ) {

e.printStackTrace () ،

}

}

مكتوبًا أدناه ستجد التنفيذ المخصص لإلغاء التسلسل.

readObject الخاص باطل (ObjectInputStream ois) {

نظام. out .println ("In، readObject () method.") ؛

حاول {

معرف = ois.readInt () ؛

الاسم = (سلسلة) ois.readObject () ،

} catch (استثناء هـ) {

e.printStackTrace () ،

}

}

س 5. كيف ستنفذ عملية التحويل التسلسلي وإلغاء التسلسل باستخدام الواجهة الخارجية؟

الجواب. لتنفيذ التسلسل وإلغاء التسلسل باستخدام الواجهة الخارجية ، ستحتاج إلى كتابة الوظيفة writeExternal () و readExternal () بنفسك. ستجد رمز كلاهما مكتوبًا أدناه.

تخصيص طريقة writeExternal ()

عامة فارغ يطرح writeExternal (ObjectOutput oo) IOException {

نظام. out .println (“in writeExternal ()”) ؛

oo.writeInt (معرف) ؛

oo.writeObject (الاسم) ؛

}

تخصيص طريقة readExternal ()

عامة فارغ يطرح readExternal (ObjectInput in) IOException و ClassNotFoundException {

نظام. out .println (“in readExternal ()”) ؛

هذا معرف = in.readInt () ؛

هذا الاسم = (سلسلة) in.readObject () ؛

}

اقرأ عن: Python vs Java في 2020: أيهما يجب أن تختار؟

س 6. لنفترض أنك لا تريد أن يتم إجراء تسلسل لمتغير معين. ماذا ستفعل لمنع المتغيرات العضو التي لا ترغب في أن تكون متسلسلة؟

الجواب. إنه سؤال مفاهيمي للغاية. تحتاج إلى معرفة المتغيرات الثابتة وغير الثابتة لتتمكن من الإجابة على هذا السؤال بسرعة. افترض أنك تريد متغيرًا معينًا لا يتم تسلسله. في هذه الحالة ، سيتعين عليك جعلها ثابتة نظرًا لأنه لا يمكن تغيير قيمة أي متغير ثابت ، وبالتالي ، لهذا السبب ، لن يتم تسلسلها أيضًا.

س 7. ماذا تقصد ب serialVersionUID؟

الجواب. لكل فئة نريد أن تكون متسلسلة ، سيتم إعطاؤهم رقم فئة. يُطلق على هذا الرقم ، الذي يُعطى لكل فئة ، والذي سيتم إجراء تسلسل له ، اسم serialVersionUID. هذا المعرف ضروري لأنه في وقت استعادة الكائن في شكله الأصلي ، يبحث Java Virtual Machine عن المعرف المرتبط بالكائن.

ثم يشير بسرعة إلى معرف الفئات التي كان من المفترض أن تكون متسلسلة. عندما يعثر على الفئة المقابلة التي ينتمي إليها هذا الكائن ، تبدأ عملية إلغاء التسلسل.

س 8. لنفترض أننا نسينا ذكر أو تعريف serialVersionUID. ماذا سيكون تأثير هذا الإجراء على البرنامج الذي كتبناه؟

الجواب. هذا السؤال هو سؤال أساسي آخر. ستحتاج إلى جزء من المعرفة السليمة لتتمكن من الإجابة على هذا السؤال بشكل صحيح. أول شيء نحتاج إلى توضيحه هو أن serialVersionUID يُستخدم للتحكم في إصدار الكائن في السؤال. لنفترض أنه لا يوجد معرف محدد للفئة ، لذلك لن يعرف مترجم Java الفئة التي ينتمي إليها الكائن. في وقت التشغيل أو عند إجراء تسلسل للكائن ، لن تكون هناك أية أخطاء لأنه لا توجد حاجة بحد ذاتها لتحديد أي معرف.

ومع ذلك ، عندما نريد تحويل دفق البيانات إلى كائن ، فإن برنامج التحويل البرمجي Java سوف يتسبب في حدوث خطأ. لن يعرف المترجم الفئة التي ينتمي إليها الكائن ، وبالتالي لن يتمكن من العثور على جميع وظائف الأعضاء والمتغيرات المرتبطة بهذا الكائن وتوصيلها. لأن المحول البرمجي سيظل عالقًا في هذه الخطوة ، فسيتم طرح خطأ عدم تطابق serialVersionUID (java.io.InvalidClassException).

س 9. في حالة عدم قدرتنا على التسلسل ، أو عدم توفر طريقة التسلسل ، فهل هناك أي طريقة أخرى يمكننا من خلالها نقل الكائن الذي كتبناه عبر الشبكة؟

الجواب. هناك عدة طرق يمكننا من خلالها نقل الكائن الذي كتبناه عبر الشبكة. ستجد بعضها مدرجًا أدناه.

  1. يمكنك محاولة تحويل الكائن إلى ملف JSON. ليس من الصعب تحويل الكائن إلى سلسلة JSON ، وعندما تكون قد كتبت ملف JSON ، فإن تحويله إلى ملف الكود ليس بالأمر الصعب أيضًا. لذلك ، يمكنك نقل سلسلة JSON التي كتبتها عبر الشبكة.
  2. يمكنك أيضًا استخدام أداة Hibernate (هذه أداة ORM). تسمح هذه الأداة للكائن بالاستمرار في قاعدة البيانات. ثم يمكن أيضًا قراءة الكائن المكتوب بسهولة في وقت لاحق.
  3. يمكنك أيضًا استخدام تقنية XML. يمكنك محاولة تحويل الكائن إلى ملف XML ، وبعد ذلك يمكنك نقل هذا الملف بسرعة عبر الشبكة.

يجب أن تقرأ: أفضل 24 أسئلة وأجوبة مقابلة جافا

تغليف

إذا كنت مهتمًا بمعرفة المزيد حول Java و OOPs وتطوير البرامج الكاملة ، تحقق من upGrad & IIIT-B's دبلوم PG في تطوير البرامج الكامل المكدس المصمم للمهنيين العاملين ويقدم أكثر من 500 ساعة من التدريب الصارم ، 9 + المشاريع ، والتعيينات ، وحالة خريجي IIIT-B ، ومشاريع التخرج العملية العملية والمساعدة في العمل مع الشركات الكبرى.

استعد لمهنة المستقبل

تعلم موثوق به في الصناعة - شهادة معترف بها في الصناعة.
سجل اليوم