JavaRush /จาวาบล็อก /Random-TH /คำถาม 13 อันดับแรกเกี่ยวกับการทำให้เป็นอนุกรมในการสัมภาษณ...
Dmitry Vasilyev
ระดับ
Саратов

คำถาม 13 อันดับแรกเกี่ยวกับการทำให้เป็นอนุกรมในการสัมภาษณ์

เผยแพร่ในกลุ่ม
การแปลบทความhttps://javarevisited.blogspot.com/2011/04/top-10-java-serialization-interview.html Serialization ใน Java คืออะไร? การทำให้เป็นอนุกรมเป็นหนึ่งในแนวคิดสำคัญที่ไม่ค่อยมีใครใช้เป็นวิธีแก้ปัญหาในการบันทึกสถานะของโปรแกรม ดังนั้น API นี้จึงมักถูกมองข้ามโดยนักพัฒนา อย่างไรก็ตาม จากประสบการณ์ของผม การทำให้เป็นอนุกรมเป็นหัวข้อที่สำคัญมากในการสัมภาษณ์ Java ขั้นพื้นฐาน เกือบทุกการสัมภาษณ์ที่ฉันพบจะมีคำถามหนึ่งหรือสองข้อเกี่ยวกับการทำให้เป็นอนุกรม และฉันเห็นผู้สมัครรู้สึกอึดอัดกับการขาดประสบการณ์ในด้านนี้หลังจากถามคำถามสองสามข้อในหัวข้อนี้ พวกเขาไม่ทราบวิธีทำให้วัตถุเป็นอนุกรมใน Java พวกเขาไม่คุ้นเคยกับตัวอย่างใด ๆ ของการทำให้เป็นอนุกรมและไม่สามารถอธิบายกลไกการทำงานของมันได้ ความแตกต่างระหว่างตัวแปรชั่วคราวและตัวแปรระเหย พวกเขาไม่รู้ว่าอินเทอร์เฟซแบบอนุกรมมีกี่วิธี มี. อินเทอร์เฟซของมาร์กเกอร์คืออะไร? จุดประสงค์ของมันคืออะไร? อะไรคือความแตกต่างระหว่างการใช้งาน Externalizable และ Serializable ใน Java? เหตุใด java จึงไม่แทนที่ Serializable ด้วย @Serializable หลังจากแนะนำคำอธิบายประกอบ ในบทความนี้ เราจะครอบคลุมคำถามสำหรับทั้งนักพัฒนามือใหม่และนักพัฒนาขั้นสูง ซึ่งอาจมีประโยชน์สำหรับทุกคนเท่าเทียมกัน ตั้งแต่นักพัฒนารุ่นเยาว์ไปจนถึงนักพัฒนาระดับสูง โครงการเชิงพาณิชย์ส่วนใหญ่ใช้ฐานข้อมูลไฟล์ที่แมปหน่วยความจำหรือไฟล์ธรรมดาเพื่อให้มีความทนทานมากขึ้น แต่มีเพียงไม่กี่รายเท่านั้นที่พึ่งพากระบวนการซีเรียลไลซ์ของ Java ไม่ว่าในกรณีใด โพสต์นี้ไม่ใช่บทช่วยสอน แต่เป็นคำถามที่ควรค่าแก่การชี้แจงให้ตัวเองก่อนที่จะไปสัมภาษณ์ Java และรู้สึกประหลาดใจกับคำศัพท์ที่คุณไม่รู้จัก สำหรับผู้ที่ไม่คุ้นเคยกับการทำให้เป็นอนุกรมของ Java เลย: “การทำให้เป็นอนุกรมใน Java เป็นกระบวนการที่ใช้ในการทำให้วัตถุเป็นอนุกรมใน Java โดยการจัดเก็บสถานะของวัตถุในไฟล์ที่มีนามสกุล .ser และสร้างสถานะของวัตถุขึ้นใหม่ จากไฟล์นี้ กระบวนการย้อนกลับนี้เรียกว่าดีซีเรียลไลเซชัน Sepulka Java Serialization API ช่วยให้นักพัฒนามีกลไกมาตรฐานสำหรับการทำให้อ็อบเจ็กต์เป็นอนุกรมโดยใช้อินเทอร์เฟซแบบอนุกรมและแบบภายนอกได้ อย่างไรก็ตาม บทความนี้เป็นความต่อเนื่องของบทความก่อนหน้าของฉัน ( ไม่ใช่ของฉัน ผู้แปล แต่เป็นผู้เขียนต้นฉบับภาษาอังกฤษ) : คำถามสัมภาษณ์ 20 ข้อเกี่ยวกับรูปแบบการออกแบบและคำถามสัมภาษณ์ 10 ข้อเกี่ยวกับรูปแบบซิงเกิลตันใน Java งั้นไปกัน! การทำให้เป็นอนุกรมใน Java คืออะไร? การทำให้เป็นอนุกรมของวัตถุใน Java เป็นกระบวนการที่ใช้ในการแปลงวัตถุเป็นรูปแบบไบนารี่ที่สามารถบันทึกลงในดิสก์หรือส่งผ่านเครือข่ายไปยังเครื่องเสมือน Java อื่น ๆ ที่ทำงานอยู่ กระบวนการย้อนกลับของการสร้างวัตถุจากกระแสไบนารีเรียกว่าดีซีเรียลไลเซชัน Java จัดเตรียม API ซึ่งรวมถึง java.io.Serializable, java.io.Externalizable, ObjectInputStream และ ObjectOutputStream เป็นต้น โปรแกรมเมอร์มีอิสระในการใช้กลไกการทำให้เป็นอนุกรมเริ่มต้นที่ Java ใช้ตามโครงสร้างคลาส แต่พวกเขายังสามารถใช้รูปแบบไบนารี่แบบกำหนดเองของตนเองได้ ซึ่งมักจะแนะนำให้ใช้เป็นแนวทางปฏิบัติที่ดีที่สุดในการทำให้เป็นอนุกรมเนื่องจากรูปแบบไบนารี่ที่ทำให้เป็นอนุกรมกลายเป็นส่วนหนึ่งของ API ที่ส่งออกของคลาส และอาจทำลายการห่อหุ้มใน Java ที่จัดทำโดยฟิลด์ ส่วนตัวและ แพ็คเกจส่วนตัว โดยทั่วไปข้อมูลนี้จะเพียงพอสำหรับการเริ่มต้น จะทำให้คลาส Java สามารถทำให้เป็นอนุกรมได้อย่างไร? มันง่ายมาก ๆ. คลาสของคุณเพียงแค่ต้องใช้อินเทอร์เฟซ java.io.Serializable และ JVM จะดูแลการทำให้ซีเรียลไลซ์อ็อบเจ็กต์ในรูปแบบเริ่มต้น การตัดสินใจสร้างคลาสแบบซีเรียลไลซ์ควรทำในเวลาสั้นๆ เนื่องจากแม้ว่าต้นทุนระยะสั้นในการสร้างคลาสแบบซีเรียลไลซ์จะต่ำ แต่ต้นทุนระยะยาวก็มีนัยสำคัญและอาจจำกัดความสามารถของคุณในการปรับเปลี่ยนการใช้งานเพิ่มเติม สิ่งนี้เกิดขึ้นเพราะเช่นเดียวกับ API สาธารณะอื่นๆ รูปแบบที่ทำให้ซีเรียลไลซ์ของออบเจ็กต์กลายเป็นส่วนหนึ่งของ API สาธารณะ และเมื่อคุณเปลี่ยนโครงสร้างของคลาสโดยใช้อินเทอร์เฟซเพิ่ม การเพิ่มหรือลบฟิลด์ใดๆ อาจทำให้การทำให้ซีเรียลไลซ์เริ่มต้นเสียหายได้ อย่างไรก็ตาม สามารถย่อให้เล็กสุดได้โดยใช้รูปแบบไบนารีที่กำหนดเอง แต่ก็ยังต้องใช้ความพยายามอย่างมากเพื่อให้แน่ใจว่ามีความเข้ากันได้แบบย้อนหลัง ตัวอย่างหนึ่งของวิธีที่การทำให้เป็นอนุกรมสามารถจำกัดความสามารถของคุณในการแก้ไขคลาสได้คือฟิลด์ SerialVersionUID หากคุณไม่ประกาศ SerialVersionUID อย่างชัดเจน เครื่องเสมือนจะสร้างมันขึ้นมาตามโครงสร้างคลาส ซึ่งขึ้นอยู่กับอินเทอร์เฟซที่ใช้งานโดยคลาสและปัจจัยอื่น ๆ หลายประการที่สามารถเปลี่ยนแปลงได้ สมมติว่าคุณใช้อินเทอร์เฟซอื่นซึ่งตรงข้ามกับ JVM ซึ่งจะสร้าง SerialVersionUID ที่แตกต่างกันสำหรับเวอร์ชันใหม่ของไฟล์คลาส และเมื่อคุณพยายามโหลดอ็อบเจ็กต์เก่าที่ทำให้เป็นอนุกรมโดยเวอร์ชันเก่าของโปรแกรมของคุณ คุณจะได้รับ ClassException ไม่ถูกต้อง คำถามที่ 1) อะไรคือความแตกต่างระหว่างอินเทอร์เฟซแบบอนุกรมและแบบภายนอกใน Java? นี่เป็นคำถามสัมภาษณ์การทำให้เป็นอนุกรมของ Java ที่ถูกถามบ่อยที่สุด อินเทอร์เฟซ Externalizable ให้วิธีการ writeExternal() และ readExternal() แก่เรา ซึ่งทำให้เรามีความยืดหยุ่นในการควบคุมการทำให้เป็นอนุกรมแทนที่จะอาศัยกลไกเริ่มต้น การใช้งานอินเทอร์เฟซภายนอกได้อย่างเหมาะสมสามารถปรับปรุงประสิทธิภาพของแอปพลิเคชันได้อย่างมาก คำถามที่ 2) Serializable มีกี่วิธี? หากไม่มีวิธีการ แล้วจุดประสงค์ของอินเทอร์เฟซ Serializable คืออะไร? อินเทอร์เฟซแบบอนุกรมมีอยู่ในแพ็คเกจ java.io และสร้างแกนหลักของกลไกการทำให้เป็นอนุกรมของ Java ไม่มีวิธีการใดๆ และเรียกอีกอย่างว่าmarker interfaceใน Java เมื่อคลาสของคุณใช้อินเทอร์เฟซ java.io.Serializable คลาสนั้นจะกลายเป็นซีเรียลไลซ์ได้ มันง่ายมาก คำถามที่ 3) serialVersionUID คืออะไร จะเกิดอะไรขึ้นถ้าคุณไม่กำหนดมัน? หนึ่งในคำถามสัมภาษณ์การทำให้เป็นอนุกรม Java ที่ฉันชื่นชอบ SerialVersionUID คือตัวระบุที่วางอยู่บนออบเจ็กต์เมื่อมีการซีเรียลไลซ์ โดยปกติแล้วจะเป็นรหัสแฮชของออบเจ็กต์ คุณสามารถใช้เครื่องมือ serialver เพื่อรับ serialVersionUID ของวัตถุที่ทำให้ซีเรียลไลซ์ได้ SerialVersionUID ใช้สำหรับการควบคุมเวอร์ชันของออบเจ็กต์ คุณยังสามารถระบุ serialVersionUID ในไฟล์คลาสของคุณได้ด้วยตนเอง ผลที่ตามมาของการไม่ระบุ serialVersionUID คือ หากคุณเพิ่มหรือเปลี่ยนแปลงฟิลด์ใดๆ ในคลาส คลาสที่ทำให้ซีเรียลไลซ์แล้วจะไม่สามารถกู้คืนได้ เนื่องจาก serialVersionUID ที่สร้างขึ้นสำหรับคลาสใหม่จะแตกต่างจากฟิลด์เดียวกันของอ็อบเจ็กต์ซีเรียลไลซ์เก่า กระบวนการทำให้เป็นอนุกรมของ Java อาศัย serialVersionUID ที่ถูกต้องเพื่อเรียกคืนสถานะของอ็อบเจ็กต์ที่ทำให้เป็นอนุกรม และส่ง java.io.InvalidClassException หากมีข้อมูลที่ไม่ตรงกัน หากต้องการเรียน รู้ เพิ่มเติมเกี่ยวกับ serialversionuid ดูที่นี่ คำถามที่ 4) เมื่อซีเรียลไลซ์ คุณต้องการให้สมาชิกบางคนไม่ถูกซีเรียลไลซ์หรือไม่? จะบรรลุเป้าหมายนี้ได้อย่างไร? คำถามสัมภาษณ์การทำให้เป็นอนุกรมที่ถูกถามบ่อยอีกข้อหนึ่ง บางครั้งผู้คนยังถามถึงวิธีการใช้ตัวแปรชั่วคราว ไม่ว่าตัวแปรชั่วคราวและตัวแปรคงที่จะถูกทำให้เป็นอนุกรมหรือไม่ เป็นต้น ดังนั้นหากคุณไม่ต้องการให้ฟิลด์ใดๆ เป็นส่วนหนึ่งของสถานะของอ็อบเจ็กต์ ให้ประกาศให้เป็นค่าคงที่หรือชั่วคราว ขึ้นอยู่กับ ตามความต้องการของคุณ และจะไม่รวมอยู่ในกระบวนการซีเรียลไลซ์ Java คำถามที่ 5) จะเกิดอะไรขึ้นหากสมาชิกคลาสคนใดคนหนึ่งไม่ได้ใช้อินเทอร์เฟซแบบอนุกรมได้ หนึ่งในคำถามง่ายๆ เกี่ยวกับกระบวนการทำให้เป็นอนุกรมใน Java หากคุณพยายามทำให้วัตถุเป็นอนุกรมของคลาสที่ใช้ Serializable แต่วัตถุนั้นมีการอ้างอิงถึงคลาสที่ไม่สามารถทำให้เป็นอนุกรมได้ ดังนั้น NotSerializableException จะถูกส่งไปที่รันไทม์ และนั่นคือสาเหตุที่ฉันมักจะใส่ SerializableAlert (ส่วนความคิดเห็นใน รหัส) หนึ่งในเทคนิคการแสดงความคิดเห็นโค้ดที่ดีที่สุดคือการแนะนำให้นักพัฒนาจดจำข้อเท็จจริงนี้เมื่อเพิ่มฟิลด์ใหม่ให้กับคลาส Serializable คำถามที่ 6) หากคลาสสามารถซีเรียลไลซ์ได้ แต่ซูเปอร์คลาสนั้นไม่ได้ สถานะของตัวแปรอินสแตนซ์ที่สืบทอดมาจากซูเปอร์คลาสหลังจากการดีซีเรียลไลซ์จะเป็นอย่างไร กระบวนการซีเรียลไลซ์เซชันของ Java ดำเนินต่อไปในลำดับชั้นของอ็อบเจ็กต์เท่านั้น ตราบใดที่คลาสใช้อินเทอร์เฟซแบบซีเรียลไลซ์ได้ และค่าของตัวแปรที่สืบทอดมาจากซูเปอร์คลาสจะถูกเตรียมใช้งานโดยการเรียกคอนสตรัคเตอร์ของซูเปอร์คลาสที่ไม่ทำให้ซีเรียลไลซ์ได้ในระหว่างกระบวนการดีซีเรียลไลเซชัน เมื่อ Constructor Chain เริ่มต้นแล้ว จะไม่มีทางหยุดมันได้ ดังนั้นแม้ว่าคลาสที่สูงกว่าในลำดับชั้น (ไม่) จะใช้ Serializable interface ตัวConstructor ก็จะถูกดำเนินการ คำถามสัมภาษณ์การจัดลำดับนี้อาจดูยากมาก แต่หากคุณคุ้นเคยกับแนวคิดหลักๆ ก็ไม่ยาก คำถามที่ 7) คุณสามารถปรับแต่งกระบวนการซีเรียลไลซ์หรือแทนที่กระบวนการซีเรียลไลซ์เริ่มต้นใน Java ได้หรือไม่? คำตอบคือใช่ คุณทำได้ เราทุกคนรู้ดีว่าในการทำให้วัตถุเป็นอนุกรมนั้น ObjectOutputStream.writeObject(saveThisObject) จะถูกเรียก และเพื่ออ่านวัตถุนั้น ObjectInputStream.readObject() จะถูกเรียก แต่มีอีกสิ่งหนึ่งที่ Java Virtual Machine มอบให้คุณ - การกำหนดวิธีการทั้งสองนี้ ในชั้นเรียนของคุณ หากคุณกำหนดไว้ในคลาสของคุณ JVM จะเรียกทั้งสองวิธีนี้แทนการใช้กลไกการทำให้เป็นอนุกรมดีฟอลต์ ที่นี่คุณสามารถกำหนดค่าพฤติกรรมการทำให้เป็นอนุกรมและดีซีเรียลไลซ์ของออบเจ็กต์ได้โดยดำเนินการงานก่อนการประมวลผลหรือหลังการประมวลผล สิ่งสำคัญคือต้องทราบว่าวิธีการเหล่านี้ต้องเป็นส่วนตัวเพื่อหลีกเลี่ยงการสืบทอด การแทนที่ หรือการโอเวอร์โหลด เนื่องจากมีเพียง Java Virtual Machine เท่านั้นที่สามารถเรียกใช้เมธอดส่วนตัวได้ ความสมบูรณ์ของคลาสของคุณจะถูกรักษาไว้ และการทำให้ซีเรียลไลซ์จะทำงานได้ตามปกติ ในความคิดของฉัน นี่เป็นหนึ่งในคำถามที่ดีที่สุดที่สามารถถามได้ในการสัมภาษณ์ Java Serialization คำถามติดตามผลที่ดีคือ: เหตุใดคุณจึงต้องจัดทำแบบฟอร์มซีเรียลไลซ์ที่กำหนดเองสำหรับออบเจ็กต์ของคุณ คำถามที่ 8) สมมติว่าซูเปอร์คลาสของคลาสใหม่ใช้อินเทอร์เฟซแบบซีเรียลไลซ์ได้ เราจะหลีกเลี่ยงการซีเรียลไลซ์คลาสใหม่ได้อย่างไร หนึ่งในคำถามสัมภาษณ์ยากๆ เกี่ยวกับการทำให้เป็นอนุกรมใน Java หากซูเปอร์คลาสของคลาสใช้อินเทอร์เฟซ Serializable ใน Java อยู่แล้ว คลาสสืบทอดก็สามารถทำให้เป็นอนุกรมได้ เนื่องจากคุณไม่สามารถใช้อินเทอร์เฟซของพาเรนต์ได้ และเป็นไปไม่ได้เลยที่จะทำให้เป็นคลาส Non Serializable อย่างไรก็ตาม มีวิธีหลีกเลี่ยงการทำให้เป็นอนุกรมสำหรับคลาสใหม่นี้ เมื่อต้องการทำเช่นนี้ คุณต้องใช้เมธอด writeObject() และ readObject() และโยน NotSerializableException จากเมธอดเหล่านี้ คำถามนี้มักจะถูกถามเป็นคำถามเพิ่มเติมเมื่อการสัมภาษณ์ดำเนินไป คำถามที่ 9) วิธีการที่ใช้ในกระบวนการซีเรียลไลเซชันและดีซีเรียลไลเซชันใน Java คืออะไร? นี่เป็นคำถามที่พบบ่อยมากในการทำให้เป็นอนุกรม ผู้สัมภาษณ์พยายามค้นหาอะไรในกรณีนี้? ไม่ว่าคุณจะคุ้นเคยกับการใช้ readObject(), writeObject(), readExternal() และ writeExternal() หรือไม่ก็ตาม การทำให้เป็นอนุกรม Java ทำได้โดยคลาส java.io.ObjectOutputStream คลาสนี้เป็นสตรีมที่ถูกกรองซึ่งพันรอบสตรีมไบต์ระดับต่ำกว่าเพื่อจัดการกลไกการทำให้ซีเรียลไลซ์ ในการบันทึกอ็อบเจ็กต์ใดๆ โดยใช้กลไกการทำให้เป็นอนุกรม เราจะเรียก ObjectOutputStream.writeObject(saveThisObject) และในการดีซีเรียลไลซ์อ็อบเจ็กต์นั้น เราเรียกเมธอด ObjectInputStream.readObject() การเรียกเมธอด writeObject() จะเริ่มต้นกระบวนการซีเรียลไลซ์ สิ่งสำคัญประการหนึ่งที่ควรทราบเกี่ยวกับเมธอด readObject() คือมันใช้ในการอ่านไบต์และสร้างและส่งคืนอ็อบเจ็กต์จากไบต์เหล่านั้น ซึ่งจะต้องแปลงเป็นประเภทที่ถูกต้อง คำถามที่ 10) สมมติว่าคุณมีคลาสที่คุณได้ซีเรียลไลซ์และบันทึกไว้ แล้วคุณแก้ไขคลาสนั้นเพื่อเพิ่มฟิลด์ใหม่ จะเกิดอะไรขึ้นหากคุณดีซีเรียลไลซ์อ็อบเจ็กต์ซีเรียลไลซ์แล้ว? ขึ้นอยู่กับว่าคลาสนั้นมี serialVersionUID ของตัวเองหรือไม่ ดังที่เราทราบจากคำถามข้างต้น หากเราไม่ได้ระบุ serialVersionUID ในโค้ดของเรา คอมไพเลอร์ java จะสร้างมันขึ้นมาเอง และโดยปกติแล้วจะเท่ากับโค้ดแฮชของอ็อบเจ็กต์นั้น หลังจากเพิ่มฟิลด์ใหม่ อาจมีโอกาสที่ serialVersionUID ใหม่ที่สร้างขึ้นสำหรับเวอร์ชันของคลาสนั้นไม่ตรงกับอ็อบเจ็กต์ที่ทำให้ซีเรียลไลซ์แล้ว ซึ่งในกรณีนี้ API จะส่ง java.io.InvalidClassException ด้วยเหตุนี้ จึงขอแนะนำให้มี serialVersionUID ของคุณเองในโค้ดของคุณ ซึ่งจะเหมือนกันเสมอสำหรับคลาสเดียวกัน คำถามที่ 11) การเปลี่ยนแปลงที่เข้ากันได้และเข้ากันไม่ได้ในกลไกการทำให้เป็นอนุกรมของ Java คืออะไร? ปัญหาที่แท้จริงคือการเปลี่ยนโครงสร้างของคลาสโดยการเพิ่มฟิลด์ เมธอด หรือการลบฟิลด์หรือเมธอดใดๆ ที่มีอ็อบเจ็กต์ซีเรียลไลซ์อยู่แล้ว ตามข้อกำหนด Java Serialization การเพิ่มฟิลด์หรือเมธอดใดๆ จะอยู่ภายใต้การเปลี่ยนแปลงและการเปลี่ยนแปลงที่เข้ากันได้ ลำดับชั้นของคลาสหรืออินเทอร์เฟซแบบอนุกรมที่ปรับใช้ UN บางส่วนภายใต้การเปลี่ยนแปลงที่ไม่เข้ากัน สำหรับรายการการเปลี่ยนแปลงที่เข้ากันได้และเข้ากันไม่ได้ทั้งหมด ฉันขอแนะนำให้อ่าน Java Serialization Specification คำถามที่ 12) เราสามารถถ่ายโอนอ็อบเจ็กต์ซีเรียลไลซ์ผ่านเครือข่ายได้หรือไม่? ใช่ คุณสามารถส่งผ่านอ็อบเจ็กต์ซีเรียลไลซ์ผ่านเครือข่ายได้ เนื่องจากอ็อบเจ็กต์ซีเรียลไลซ์ Java คือชุดของไบต์ที่สามารถส่งผ่านไปด้วยวิธีใดก็ได้ คุณยังสามารถจัดเก็บอ็อบเจ็กต์ซีเรียลไลซ์บนดิสก์หรือในฐานข้อมูลในรูปแบบ Blob ได้ คำถามที่ 13) ตัวแปรประเภทใดบ้างที่ไม่ทำให้เป็นอนุกรมระหว่างการทำให้เป็นอนุกรมของ Java บางครั้งคำถามนี้อาจถูกถามแตกต่างออกไป แต่เป้าหมายก็เหมือนกัน: เพื่อค้นหาว่านักพัฒนา Java รู้ข้อมูลเฉพาะของการทำให้อนุกรมตัวแปรคงที่และชั่วคราวหรือไม่ เนื่องจากตัวแปรสแตติกเป็นของคลาสและไม่ใช่อ็อบเจ็กต์ ตัวแปรเหล่านั้นจึงไม่ได้เป็นส่วนหนึ่งของสถานะของอ็อบเจ็กต์ ดังนั้นจึงไม่มีการคงอยู่ในระหว่างกระบวนการทำให้เป็นอนุกรม Java เนื่องจากการทำให้เป็นอนุกรมของ Java จะจัดเก็บเฉพาะสถานะของอ็อบเจ็กต์เท่านั้น ไม่ใช่ตัววัตถุเอง ตัวแปรชั่วคราวจึงไม่รวมอยู่ในกระบวนการทำให้เป็นอนุกรม และไม่ได้เป็นส่วนหนึ่งของสถานะทำให้เป็นอนุกรมของอ็อบเจ็กต์ หลังจากคำถามนี้ บางทีผู้สัมภาษณ์จะถามว่า: ถ้าคุณไม่เก็บค่าของตัวแปรเหล่านี้ แล้วค่าของตัวแปรเหล่านี้จะเป็นอย่างไรหลังจากการดีซีเรียลไลซ์และสร้างอ็อบเจ็กต์นี้ขึ้นมาใหม่? และเพื่อนร่วมงานลองคิดดูเอง :) บทความต้นฉบับอยู่ที่นี่ .
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION