คำถามและคำตอบสำหรับการสัมภาษณ์ Serialization Java [สำหรับผู้เริ่มต้นและผู้มีประสบการณ์]
เผยแพร่แล้ว: 2020-09-25Java เป็นหนึ่งในภาษาโปรแกรมที่ดีกว่าในโลก เราโชคดีที่ได้เห็นการพัฒนาของ Java เมื่อเวลาผ่านไปและกลายเป็นภาษาที่ได้รับความนิยมอย่างล้นหลามที่เรารู้จักในทุกวันนี้ การปรับปรุงเหล่านี้ซึ่งสร้างขึ้นใน Java นำไปสู่การรวมคุณลักษณะที่สำคัญบางอย่างซึ่งกำหนดวิธีที่เราเขียนโปรแกรมในปัจจุบัน หนึ่งในคุณสมบัติเหล่านั้นคือการทำให้เป็นอนุกรม
ในสาระสำคัญ การทำให้เป็นอนุกรมเป็นเพียงกลไกที่ใช้ในการเก็บอ็อบเจ็กต์ไว้ในหน่วยความจำ ดังนั้น เมื่อเราบอกว่าเรากำลังทำให้อ็อบเจกต์เป็นอนุกรม เราหมายความว่าเรากำลังแปลงอ็อบเจ็กต์ที่เป็นปัญหาจากสถานะ ซึ่งเป็นสตรีมของไบต์ การแปลงจากสถานะดั้งเดิมไปเป็นสตรีมไบต์ทำให้การเขียนวัตถุนี้ไปยังไฟล์เป็นเรื่องง่าย
ไฟล์นี้สามารถเคลื่อนย้ายได้ทุกที่ที่เราต้องการ และเพื่อเข้าถึงออบเจกต์และคุณสมบัติของไฟล์ สิ่งที่เราต้องทำคือยกเลิกการซีเรียลของอ็อบเจกต์ การดีซีเรียลไลซ์เซชั่นตามที่ชื่อบอกนั้นเป็นสิ่งที่ตรงกันข้ามกับการทำให้เป็นอนุกรม ที่นี่ เราแปลงสตรีมของไบต์เป็นสถานะดั้งเดิมของวัตถุเพื่อใช้วัตถุ
การทำให้เป็นอนุกรมช่วยให้นักพัฒนาเขียนโค้ดของตนได้อย่างยืดหยุ่นในระดับหนึ่ง ความสามารถในการนำวัตถุมาใช้กับคุณสมบัติดั้งเดิมของวัตถุในที่อื่นๆ เป็นสิ่งสำคัญในเวิร์กโฟลว์ในปัจจุบัน ไม่น่าแปลกใจที่นายหน้าต้องการให้พนักงานที่มีศักยภาพของตนทราบข้อมูลเพิ่มเติมเกี่ยวกับการจัดลำดับวัตถุใน java
ไม่ว่าคุณจะเคยใช้ serialization ในโครงการของคุณหรือไม่ คุณไม่สามารถปล่อยให้ความสำคัญของมันเลื่อนลอยไป ดังนั้น เพื่อช่วยคุณในการเป็นนักพัฒนา Java มืออาชีพ เราได้รวบรวมคำถามสัมภาษณ์เกี่ยวกับการทำ Serialization Java ที่น่าสนใจ ซึ่งคุณจะพบด้านล่าง
คำถามสัมภาษณ์ Java Serialization
ไตรมาสที่ 1 คุณหมายถึงอะไรโดย Serialization ในบริบทของภาษาการเขียนโปรแกรม Java?

ตอบ คำจำกัดความของการทำให้เป็นอันดับอาจเป็นคำถามพื้นฐานที่สุด แต่เป็นหนึ่งในคำถามที่พบบ่อยที่สุดในบริบทของการทำให้เป็นอันดับ Java คุณจะต้องตอบคำถามนี้เป็นบทสัมภาษณ์เกือบทั้งหมด ดังนั้น คุณต้องมีคำจำกัดความที่ดีของการทำให้เป็นอันดับ Java ฝังอยู่ในใจของคุณ ดังนั้นการทำให้เป็นอันดับไม่ใช่อะไรนอกจากวิธีที่วัตถุที่เขียนใน Java ถูกแปลงเป็นสตรีมไบต์
วัตถุประสงค์หลักของสิ่งนี้คือเพื่อให้วัตถุสามารถถ่ายโอนไปยังเครื่องอื่นหรือเพื่อบันทึกสถานะของวัตถุลงในไฟล์หรือบันทึกสถานะของวัตถุลงในฐานข้อมูล เมื่อวัตถุได้รับการจัดลำดับสำเร็จแล้ว เราก็สามารถรับวัตถุนั้นกลับคืนสู่ความรุ่งเรืองในอดีตได้อย่างรวดเร็วโดยเพียงแค่ยกเลิกการจัดลำดับวัตถุ
ไตรมาสที่ 2 วิธีที่เราสามารถทำให้เป็นอันดับวัตถุใน Java คืออะไร? เขียนโปรแกรมเพื่อทำให้เป็นอนุกรมและยกเลิกการซีเรียลไลซ์วัตถุ
ตอบ ในการสัมภาษณ์ หากคุณสามารถเสริมความรู้เชิงทฤษฎีด้วยความสามารถในการเขียนโปรแกรม โอกาสในการเลือกของคุณจะเพิ่มขึ้นโดยอัตโนมัติ นอกจากนี้ ในการสัมภาษณ์ใดๆ คุณจะได้รับมอบหมายให้เขียนโปรแกรมพื้นฐาน (อย่างน้อยที่สุดโปรแกรมพื้นฐาน) ซึ่งแสดงให้เห็นว่าการซีเรียลไลซ์เซชั่นและการดีซีเรียลไลซ์เซชั่นเกิดขึ้นได้อย่างไร ก่อนที่คุณจะไปเขียนโปรแกรมนี้เอง คุณต้องจำสิ่งสำคัญหนึ่งประการเกี่ยวกับการทำให้เป็นอนุกรมอ็อบเจ็กต์ในจาวา
ในการทำให้อ็อบเจ็กต์เป็นอนุกรม คุณจะต้องเขียนอ็อบเจ็กต์ที่ใช้อินเตอร์เฟสคลาส java.io.Serializable คุณต้องตรวจสอบให้แน่ใจว่าคุณใช้อินเทอร์เฟซ Marker สำหรับอ็อบเจ็กต์ของคลาส ซึ่งคุณต้องการทำให้เป็นอนุกรม หมายความว่าชั้นเรียนที่เป็นปัญหาไม่ควรมีวิธีการเขียนใดๆ ในชั้นเรียน คลาสนี้ยังต้องบอก Java Virtual Machine ว่าอ็อบเจ็กต์ที่ตามมาจะต้องเปลี่ยนรูปแบบและกำหนดรูปร่างของสตรีมไบต์
รหัสสำหรับซีเรียลไลซ์เซชั่นเขียนไว้ด้านล่าง
OutputStream fout = ใหม่ FileOutputStream (“ser.txt”);
ObjectOutput oout = ObjectOutputStream ใหม่ (fout);
ระบบ. out .println("กระบวนการซีเรียลไลซ์เซชั่นเริ่มต้นขึ้น การทำให้เป็นอนุกรมอ็อบเจกต์ของพนักงาน…”);
oout.writeObject(object1);
รหัสสำหรับการลบซีเรียลไลซ์เซชันเขียนอยู่ด้านล่าง
InputStream fin = FileInputStream ใหม่ (“ser.txt”);
ObjectInput oin= ใหม่ ObjectInputStream(fin);
ระบบ. out .println(“กระบวนการ DeSerialization เริ่มต้นขึ้น โดยแสดงวัตถุของพนักงาน…”);
พนักงาน emp;
emp=(พนักงาน) oin.readObject();
เรียนรู้: การจัดสรรหน่วยความจำใน Java: ทุกสิ่งที่คุณต้องการรู้
ไตรมาสที่ 3 อะไรคือความแตกต่างระหว่างอินเทอร์เฟซสำหรับ Serialization และ Externalizable?
ตอบ คำถามนี้อาจหมายถึงความแตกต่างระหว่างคุณได้รับเลือกให้ทำงานหรือไม่ สมมติว่าคุณสามารถตอบคำถามนี้ได้อย่างครอบคลุม ในกรณีนั้น ผู้สัมภาษณ์จะต้องประทับใจในความรู้ของคุณเกี่ยวกับเรื่องนี้ และโอกาสในการเลือกงานของคุณจะเพิ่มขึ้นอย่างรวดเร็วโดยอัตโนมัติ คุณจะพบความแตกต่างที่สำคัญทั้งหมดในตารางด้านล่าง:
คุณสมบัติที่เรากำลังเปรียบเทียบทั้งสองวิธีนี้ | ซีเรียลไลซ์ได้ | ภายนอกได้ |
เมธอดที่มีอยู่ในคลาสของอินเทอร์เฟซที่แตกต่างกันทั้งสองนี้ | นี่เป็นส่วนต่อประสานเครื่องหมาย อินเทอร์เฟซของ Marker ไม่สามารถมีฟังก์ชันของสมาชิกได้ ต้องว่างเปล่ายกเว้นว่าพวกเขาต้องมีคำสั่งอยู่ในนั้นซึ่งบอก Java Virtual Machine ว่าอ็อบเจ็กต์ของคลาสนี้ต้องถูกแปลงเป็นสตรีมไบต์ | นี่ไม่ใช่อินเทอร์เฟซสำหรับผู้ผลิต ซึ่งหมายความว่ามีวิธีการสำหรับสมาชิก มันมีเมธอดที่ชื่อ writeExternal() และ readExternal() |
วิธีเริ่มต้นในการทำให้เป็นอันดับของพวกเขาคืออะไร? | สำหรับการทำให้เป็นอนุกรมได้ คุณจะพบวิธีเริ่มต้นซึ่งคุณสามารถทำให้เป็นอนุกรมของวัตถุที่คุณเขียนได้ สิ่งที่คุณต้องทำในฐานะโปรแกรมเมอร์ก็คือการหาวิธีที่คุณสามารถรวมอินเทอร์เฟซนี้เข้ากับโปรแกรมของคุณได้ | คุณจะไม่พบวิธีเริ่มต้นในการปรับใช้การทำให้เป็นอนุกรม คุณจะต้องเขียนวิธีการของคุณเองหรือแทนที่วิธีการที่มีอยู่ |
วิธีที่พวกเขาใช้กระบวนการของการทำให้เป็นอันดับคืออะไร? | คุณสามารถปรับแต่งวิธีใช้งานการทำให้เป็นอนุกรมในอินเทอร์เฟซนี้ได้ อย่างไรก็ตาม คุณไม่สามารถแทนที่วิธีการที่มีอยู่ได้ คุณจะต้องใช้วิธีการเหล่านี้ในชั้นเรียนของคุณเองเพื่อให้ได้ระดับอิสระที่คุณต้องการ | ในวิธีนี้ คุณจะต้องแทนที่วิธีการเริ่มต้น ดังนั้น หากคุณต้องการใช้วิธีที่กำหนดเองเพื่อทำให้เป็นอนุกรมของวัตถุ คุณควรเลือกอินเทอร์เฟซนี้แทนวิธีเริ่มต้นของการทำให้เป็นอนุกรม |
ระดับการควบคุมที่พวกเขาเสนอในกระบวนการซีเรียลไลซ์เซชันคืออะไร | คุณจะพบห้องเลื้อยเล็ก ๆ เมื่อคุณใช้อินเทอร์เฟซนี้ คุณต้องเขียนฟังก์ชันดีฟอลต์ลงในคลาสของคุณเพื่อใช้ประโยชน์สูงสุดจากวิธีนี้ อย่างไรก็ตาม คุณไม่จำเป็นต้องทำเช่นนั้น หมายความว่า คุณจะยังคงสามารถทำให้วัตถุเป็นอนุกรมด้วยอินเทอร์เฟซนี้โดยไม่ต้องเขียนฟังก์ชันเริ่มต้นลงในคลาสที่กำหนดเองของคุณ | อินเทอร์เฟซนี้ให้การควบคุมที่ดีเยี่ยมสำหรับกระบวนการทั้งหมด ด้วยเหตุผลดังกล่าวเพียงอย่างเดียว หากคุณใช้อินเทอร์เฟซนี้ คุณจะต้องเขียนทั้งสองวิธีลงในคลาสที่คุณกำหนดเอง |
คอนสตรัคเตอร์ใช้อะไรในขณะที่ใช้การดีซีเรียลไลเซชัน | ไม่มีคอนสตรัคเตอร์ที่ถูกเรียกในระหว่างกระบวนการซีเรียลไลซ์เซชั่น | มีการโทรหาผู้รับเหมาเมื่อมีการจัดลำดับวัตถุโดยใช้อินเทอร์เฟซนี้ |
ไตรมาสที่ 4 เขียนโปรแกรมที่คุณใช้กระบวนการกำหนดเองของการทำให้เป็นอนุกรมและการลบซีเรียลไลซ์เซชัน

ตอบ มาถึงส่วนที่ยุ่งยาก นี่คือคำถามซึ่งคุณสามารถแสดงความรู้ของคำถามก่อนหน้าทั้งหมดผ่านสถานการณ์กรณีการใช้งานจริง ความสามารถในการเขียนโปรแกรมเหล่านี้จะแสดงให้เห็นอย่างชัดเจนถึงความเชี่ยวชาญของคุณและช่วยให้คุณได้งานที่ต้องการ
เขียนด้านล่างคุณจะพบวิธีการเขียนเมธอด writeObject() แบบกำหนดเอง
โมฆะส่วนตัว writeObject (ObjectOutputStream ระบบปฏิบัติการ) {
ระบบ. ออก .println("ในเมธอด writeObject()");
ลอง {
os.writeInt ( .id นี้ );
os.writeObject ( .name นี้ );
} จับ (ข้อยกเว้น จ) {
e.printStackTrace();
}
}
คุณจะพบกับการนำ de-serliasation ไปใช้งานที่เขียนไว้ด้านล่าง
โมฆะส่วนตัว readObject (ObjectInputStream ois) {
ระบบ. out .println("ในวิธี readObject()");
ลอง {
id=ois.readInt();
name=(สตริง)ois.readObject();
} จับ (ข้อยกเว้น จ) {
e.printStackTrace();
}
}
Q5. คุณจะใช้งาน Serialization และ de-serialization โดยใช้อินเทอร์เฟซ Externalizable ได้อย่างไร?
ตอบ หากต้องการใช้การทำให้เป็นอนุกรมและยกเลิกการซีเรียลไลซ์เซชันโดยใช้อินเทอร์เฟซภายนอก คุณจะต้องเขียนฟังก์ชัน writeExternal() และ readExternal() ด้วยตัวเอง คุณจะพบรหัสสำหรับทั้งสองที่เขียนไว้ด้านล่าง
การปรับแต่งเมธอด writeExternal() เอง
สาธารณะ โมฆะ writeExternal (ObjectOutput oo) พ่น IOException {
ระบบ. ออก .println("ใน writeExternal()");
oo.writeInt(id);
oo.writeObject(ชื่อ);
}
การปรับแต่งเมธอด readExternal()
สาธารณะ โมฆะ readExternal (ObjectInput ใน) พ่น IOException, ClassNotFoundException {
ระบบ. ออก .println("ใน readExternal()");
.id =in.readInt(); .id=in.readInt();
.name =(สตริง)in.readObject();
}
อ่านเกี่ยวกับ: Python vs Java ในปี 2020: อันไหนที่คุณควรเลือก?
Q6. ให้เราบอกว่าคุณไม่ต้องการให้ตัวแปรเฉพาะถูกทำให้เป็นอนุกรม คุณจะทำอย่างไรเพื่อป้องกันตัวแปรสมาชิกที่คุณไม่ต้องการให้เป็นอนุกรม?
ตอบ เป็นคำถามที่มีแนวคิดสูง คุณต้องมีความรู้เกี่ยวกับตัวแปรสแตติกและไม่คงที่เพื่อให้สามารถตอบคำถามนี้ได้อย่างรวดเร็ว สมมติว่าคุณต้องการให้ตัวแปรบางตัวไม่ถูกทำให้เป็นอนุกรม ในกรณีนั้น คุณจะต้องทำให้มันคงที่เนื่องจากค่าของตัวแปรสแตติกไม่สามารถเปลี่ยนแปลงได้ และด้วยเหตุนี้ พวกมันจะไม่ได้รับการทำให้เป็นอนุกรมด้วย
Q7. คุณหมายถึงอะไรโดย serialVersionUID?
ตอบ สำหรับทุกคลาสที่เราต้องการให้ซีเรียลไลซ์ พวกเขาจะได้รับหมายเลขคลาส หมายเลขนี้ ซึ่งมอบให้กับทุกคลาส ซึ่งจะถูกทำให้เป็นอนุกรม เรียกว่า serialVersionUID ID นี้จำเป็นเพราะในขณะที่ดึงอ็อบเจ็กต์กลับมาในรูปแบบดั้งเดิม Java Virtual Machine จะมองหา ID ซึ่งเชื่อมโยงกับอ็อบเจ็กต์
จากนั้นจะอ้างถึง ID ของคลาสที่ควรจะถูกจัดลำดับอย่างรวดเร็ว เมื่อพบคลาสที่เกี่ยวข้องกับวัตถุนี้ กระบวนการยกเลิกการทำให้เป็นอนุกรมเริ่มต้น
Q8. ให้เราบอกว่าเราลืมพูดถึงหรือกำหนด serialVersionUID อะไรคือผลกระทบของการกระทำนี้ต่อโปรแกรมที่เราได้เขียนไว้?
ตอบ คำถามนี้เป็นคำถามพื้นฐานอีกคำถามหนึ่ง คุณจะต้องมีความรู้ที่ถูกต้องเพื่อให้สามารถตอบคำถามนี้ได้อย่างถูกต้อง สิ่งแรกที่เราต้องชี้แจงคือ serialVersionUID ถูกใช้เพื่อควบคุมเวอร์ชันของอ็อบเจกต์ในคำถาม ให้เราบอกว่าไม่มี ID ที่กำหนดไว้สำหรับคลาส ดังนั้น Java compiler จะไม่รู้ว่าอ็อบเจกต์นั้นเป็นของคลาสใด ที่รันไทม์หรือเมื่อคุณกำลังทำให้อ็อบเจ็กต์เป็นอนุกรม จะไม่มีข้อผิดพลาดใดๆ เนื่องจากไม่จำเป็นต้องระบุ ID ใดๆ ต่อ se

อย่างไรก็ตาม เมื่อเราต้องการให้สตรีมข้อมูลถูกแปลงเป็นอ็อบเจ็กต์ คอมไพเลอร์ Java จะส่งข้อผิดพลาด คอมไพเลอร์จะไม่ทราบว่าวัตถุเป็นของคลาสใด และด้วยเหตุนี้ จะไม่สามารถค้นหาและเชื่อมต่อฟังก์ชันสมาชิกทั้งหมดและตัวแปรที่เกี่ยวข้องกับอ็อบเจ็กต์นี้ เนื่องจากคอมไพเลอร์จะติดค้างอยู่ในขั้นตอนนี้ จึงจะแสดงข้อผิดพลาดของ serialVersionUID ไม่ตรงกัน (java.io.InvalidClassException)
Q9. ในกรณีที่เราไม่สามารถซีเรียลไลซ์ได้ หรือวิธีการซีเรียลไลซ์เซชั่นไม่พร้อมใช้งาน มีวิธีอื่นใดที่เราจะสามารถถ่ายโอนอ็อบเจ็กต์ที่เราเขียนผ่านเครือข่ายได้หรือไม่?
ตอบ มีบางวิธีที่เราจะสามารถถ่ายโอนวัตถุที่เราเขียนผ่านเครือข่ายได้ คุณจะพบบางรายการด้านล่าง
- คุณสามารถลองแปลงวัตถุเป็นไฟล์ JSON การแปลงอ็อบเจ็กต์เป็นสตริง JSON นั้นไม่ยากนัก และเมื่อคุณเขียนไฟล์ JSON แล้ว การแปลงเป็นไฟล์โค้ดก็ไม่ยากเช่นกัน ดังนั้น คุณสามารถโอนสตริง JSON ที่คุณเขียนผ่านเครือข่ายได้
- คุณยังสามารถใช้เครื่องมือไฮเบอร์เนต (นี่คือเครื่องมือ ORM) เครื่องมือนี้อนุญาตให้วัตถุคงอยู่ในฐานข้อมูล จากนั้นวัตถุที่เขียนก็สามารถอ่านได้ง่ายในภายหลัง
- คุณยังสามารถใช้เทคโนโลยีของ XML คุณสามารถลองแปลงวัตถุเป็นไฟล์ XML จากนั้นคุณสามารถถ่ายโอนไฟล์นั้นผ่านเครือข่ายได้อย่างรวดเร็ว
ต้องอ่าน: คำถามและคำตอบสัมภาษณ์ Java 24 อันดับแรก
ห่อ
หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ Java, OOP และการพัฒนาซอฟต์แวร์ฟูลสแตก โปรดดูประกาศนียบัตร PG ของ upGrad & IIIT-B ด้านการพัฒนาซอฟต์แวร์ฟูลสแตก ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 500 ชั่วโมง 9 + โครงการและการมอบหมาย สถานะศิษย์เก่า IIIT-B โครงการหลักในทางปฏิบัติและความช่วยเหลือด้านงานกับ บริษัท ชั้นนำ