ในบทความนี้เราจะหารือเกี่ยวกับคำถามสัมภาษณ์ประเภทต่าง ๆ ในการสัมภาษณ์ Java ที่อนุญาตให้นายจ้างทดสอบ Java ของผู้สมัครและความสามารถในการเขียนโปรแกรมเชิงวัตถุทั่วไป บทต่อไปนี้แบ่งออกเป็นสองบทความก่อนหน้าและต่อไป บทความแรกจะหารือเกี่ยวกับการเขียนโปรแกรมเชิงวัตถุและลักษณะของมันคำถามทั่วไปเกี่ยวกับ Java และฟังก์ชั่นของมันคลาสคอลเลกชัน Java นักสะสมขยะและบทความที่สองจะหารือเกี่ยวกับการจัดการข้อยกเว้นส่วนใหญ่, Java Applets, Swing, JDBC, การโทรระยะไกล (RMI), Servlets และ JSP
เริ่ม!
สารบัญ
การเขียนโปรแกรมเชิงวัตถุ (OOP)
ปัญหา Java ทั่วไป
กระทู้ Java
คลาสคอลเลกชัน Java
เครื่องเก็บขยะ
การเขียนโปรแกรมเชิงวัตถุ (OOP)
Java เป็นภาษาการเขียนโปรแกรมคอมพิวเตอร์ที่รองรับการเกิดขึ้นพร้อมกันคลาสและเชิงวัตถุ ข้อดีของการพัฒนาซอฟต์แวร์เชิงวัตถุแสดงอยู่ด้านล่าง:
การเขียนโปรแกรมเชิงวัตถุมีคุณสมบัติที่สำคัญมากมายเช่น: การห่อหุ้ม, การสืบทอด, ความหลากหลายและนามธรรม ในบทต่อไปนี้เราจะวิเคราะห์คุณลักษณะเหล่านี้ทีละคน
บรรจุุภัณฑ์
การห่อหุ้มให้วัตถุที่มีความสามารถในการซ่อนคุณสมบัติและพฤติกรรมภายใน วัตถุมีวิธีการบางอย่างที่สามารถเข้าถึงได้โดยวัตถุอื่น ๆ เพื่อเปลี่ยนข้อมูลภายใน ใน Java มีตัวดัดแปลง 3 ตัว: สาธารณะส่วนตัวและได้รับการปกป้อง ตัวดัดแปลงแต่ละตัวให้สิทธิ์การเข้าถึงที่แตกต่างกันไปยังวัตถุอื่น ๆ ที่อยู่ในแพ็คเกจเดียวกันหรือภายใต้แพ็คเกจที่แตกต่างกัน
นี่คือประโยชน์บางอย่างของการใช้การห่อหุ้ม:
อ้างถึงเอกสารนี้สำหรับรายละเอียดเพิ่มเติมและตัวอย่างเกี่ยวกับการห่อหุ้ม
เกี่ยวกับความหลากหลาย
Polymorphism เป็นความสามารถในการเขียนโปรแกรมภาษาเพื่อแสดงให้เห็นถึงอินเทอร์เฟซเดียวกันสำหรับชนิดข้อมูลพื้นฐานที่แตกต่างกัน การดำเนินการในประเภท polymorphic สามารถนำไปใช้กับค่าประเภทอื่น ๆ
สืบทอด
มรดกให้วัตถุที่มีความสามารถในการรับฟิลด์และวิธีการจากคลาสฐาน มรดกให้รหัสที่นำกลับมาใช้ใหม่และยังสามารถเพิ่มคุณสมบัติใหม่ให้กับคลาสที่มีอยู่โดยไม่ต้องแก้ไข
เชิงนามธรรม
Abstraction เป็นขั้นตอนของการแยกความคิดออกจากอินสแตนซ์ที่เป็นรูปธรรมดังนั้นสร้างคลาสตามการทำงานของพวกเขามากกว่ารายละเอียดการใช้งาน Java รองรับการสร้างคลาสนามธรรมที่เปิดเผยอินเทอร์เฟซเท่านั้น แต่ไม่รวมถึงการใช้วิธีการ วัตถุประสงค์หลักของเทคนิคนามธรรมนี้คือการแยกพฤติกรรมของชั้นเรียนจากรายละเอียดการใช้งาน
ความแตกต่างระหว่างนามธรรมและการห่อหุ้ม
นามธรรมและการห่อหุ้มเป็นแนวคิดเสริม ในอีกด้านหนึ่งบทคัดย่อมุ่งเน้นไปที่พฤติกรรมของวัตถุ ในทางกลับกันการห่อหุ้มมุ่งเน้นไปที่รายละเอียดของพฤติกรรมของวัตถุ โดยทั่วไปการห่อหุ้มทำได้โดยการซ่อนข้อมูลสถานะภายในของวัตถุ ดังนั้นการห่อหุ้มจึงถือได้ว่าเป็นกลยุทธ์ในการจัดหาสิ่งที่เป็นนามธรรม
ปัญหา Java ทั่วไป
1. เครื่องเสมือน Java คืออะไร? เหตุใด Java จึงเรียกว่า "ภาษาการเขียนโปรแกรมที่ไม่ขึ้นกับแพลตฟอร์ม"
Java Virtual Machine เป็นกระบวนการเสมือนจริงที่สามารถเรียกใช้งาน Java bytecode ไฟล์ต้นฉบับ Java ถูกรวบรวมไว้ในไฟล์ bytecode ที่สามารถดำเนินการได้โดยเครื่องเสมือน Java
Java ได้รับการออกแบบมาเพื่อให้แอปพลิเคชันทำงานบนแพลตฟอร์มใด ๆ โดยไม่ต้องให้โปรแกรมเมอร์เขียนใหม่หรือคอมไพล์แต่ละแพลตฟอร์มแยกกัน เครื่องเสมือน Java ทำให้สิ่งนี้เป็นไปได้เพราะรู้ถึงความยาวคำสั่งและคุณสมบัติอื่น ๆ ของแพลตฟอร์มฮาร์ดแวร์พื้นฐาน
2. ความแตกต่างระหว่าง JDK และ JRE คืออะไร?
Java Runtime Environment (JRE) เป็นเครื่องเสมือน Java ที่จะเรียกใช้โปรแกรม Java นอกจากนี้ยังมีปลั๊กอินเบราว์เซอร์ที่จำเป็นในการดำเนินการแอปเพล็ต Java Development Toolkit (JDK) เป็นแพ็คเกจการพัฒนาซอฟต์แวร์ Java ที่สมบูรณ์ซึ่งรวมถึง JRE, คอมไพเลอร์และเครื่องมืออื่น ๆ (เช่น Javadoc, Java Debugger) ซึ่งช่วยให้นักพัฒนาพัฒนารวบรวมและดำเนินการแอปพลิเคชัน Java
3. คำหลัก“ คงที่” หมายถึงอะไร? ฉันสามารถแทนที่วิธีส่วนตัวหรือแบบคงที่ใน Java ได้หรือไม่?
คำหลัก "คงที่" ระบุว่าตัวแปรสมาชิกหรือวิธีการสมาชิกสามารถเข้าถึงได้โดยไม่ต้องใช้ตัวแปรอินสแตนซ์ของคลาสที่เป็นของมัน
วิธีการคงที่ใน Java ไม่สามารถเขียนทับได้เนื่องจากวิธีที่เขียนทับนั้นขึ้นอยู่กับการเชื่อมโยงแบบไดนามิกรันไทม์ในขณะที่วิธีการคงที่คือการเชื่อมต่อแบบคงที่ในเวลาที่รวบรวม วิธีการคงที่ไม่เกี่ยวข้องกับอินสแตนซ์ใด ๆ ของคลาสดังนั้นจึงไม่ใช้แนวคิด
4. เป็นไปได้หรือไม่ที่จะเข้าถึงตัวแปรที่ไม่คงที่ในสภาพแวดล้อมแบบคงที่?
ตัวแปรคงที่เป็นของคลาสใน Java และค่าของมันในทุกกรณีเหมือนกัน เมื่อคลาสถูกโหลดโดยเครื่องเสมือน Java ตัวแปรคงที่จะเริ่มต้น หากรหัสของคุณพยายามเข้าถึงตัวแปรที่ไม่คงที่โดยไม่มีอินสแตนซ์คอมไพเลอร์จะรายงานข้อผิดพลาดเนื่องจากตัวแปรเหล่านี้ยังไม่ได้สร้างและยังไม่ได้เชื่อมโยงกับอินสแตนซ์ใด ๆ
5. ประเภทข้อมูลที่รองรับโดย Java คืออะไร? การถอดชิ้นส่วนอัตโนมัติคืออะไร?
ประเภทข้อมูลพื้นฐานที่สนับสนุนโดยภาษา Java คือ:
การชกมวยอัตโนมัติเป็นการแปลงที่ทำโดยคอมไพเลอร์ Java ระหว่างประเภทข้อมูลพื้นฐานและประเภท wrapper วัตถุที่สอดคล้องกัน ตัวอย่างเช่น: แปลง int เป็นจำนวนเต็มสองเท่าเป็นสองเท่า ฯลฯ มิฉะนั้นจะเป็นการยกเลิกการบ็อกซ์อัตโนมัติ
6. วิธีการเอาชนะและวิธีการมากเกินไปใน Java หมายถึงอะไร?
วิธีการโอเวอร์โหลดใน Java เกิดขึ้นเมื่อสองวิธีขึ้นไปมีชื่อวิธีเดียวกัน แต่พารามิเตอร์ที่แตกต่างกันในคลาสเดียวกัน ในทางตรงกันข้ามวิธีการแทนที่หมายความว่าคลาสย่อยกำหนดวิธีการของคลาสแม่ วิธีการแทนที่จะต้องมีชื่อวิธีการเดียวกันรายการพารามิเตอร์และประเภทการส่งคืน ผู้ต่อต้านอาจไม่ จำกัด การเข้าถึงวิธีการที่ครอบคลุม
7. ตัวสร้างในชวาคืออะไร? ตัวสร้างมากเกินไปคืออะไร? ตัวสร้างสำเนาคืออะไร?
เมื่อมีการสร้างวัตถุใหม่ตัวสร้างจะถูกเรียก แต่ละชั้นเรียนมีตัวสร้าง เมื่อโปรแกรมเมอร์ไม่ได้ให้ตัวสร้างกับคลาสคอมไพเลอร์ Java จะสร้างตัวสร้างเริ่มต้นสำหรับคลาส
ตัวสร้างเกินพิกัดและวิธีการมากเกินไปใน Java นั้นคล้ายคลึงกันมาก สามารถสร้างตัวสร้างหลายตัวสำหรับชั้นเรียน ตัวสร้างแต่ละตัวจะต้องมีรายการพารามิเตอร์ที่ไม่ซ้ำกันของตัวเอง
Java ไม่สนับสนุนตัวสร้างสำเนาเช่นใน C ++ ความแตกต่างนี้เป็นเพราะถ้าคุณไม่ได้เขียนคอนสตรัคเตอร์ด้วยตัวเอง Java จะไม่สร้างตัวสร้างสำเนาเริ่มต้น
8. Java สนับสนุนการสืบทอดหลายครั้งหรือไม่?
ไม่รองรับ Java ไม่สนับสนุนการสืบทอดหลายครั้ง แต่ละคลาสสามารถสืบทอดคลาสเดียวเท่านั้น แต่สามารถใช้หลายอินเทอร์เฟซ
9. ความแตกต่างระหว่างอินเทอร์เฟซและคลาสนามธรรมคืออะไร?
Java ให้และสนับสนุนการสร้างคลาสนามธรรมและอินเทอร์เฟซ การใช้งานของพวกเขามีความคล้ายคลึงกันและความแตกต่างคือ:
นอกจากนี้คุณยังสามารถอ้างถึงความแตกต่างระหว่างคลาสนามธรรมและอินเทอร์เฟซใน JDK8
10. การส่งผ่านและการอ้างอิงผ่านการอ้างอิงคืออะไร?
วัตถุถูกส่งผ่านด้วยค่าซึ่งหมายความว่าสำเนาของวัตถุจะถูกส่งผ่าน ดังนั้นแม้ว่าการคัดลอกวัตถุจะมีการเปลี่ยนแปลงค่าของวัตถุต้นทางจะไม่ได้รับผลกระทบ
วัตถุถูกส่งผ่านโดยการอ้างอิงซึ่งหมายความว่ามันไม่ใช่วัตถุที่ผ่านมาจริง แต่เป็นการอ้างอิงของวัตถุ ดังนั้นการเปลี่ยนแปลงภายนอกไปยังวัตถุที่อ้างอิงจะสะท้อนให้เห็นในวัตถุทั้งหมด
กระทู้ Java
11. อะไรคือความแตกต่างระหว่างกระบวนการและเธรด?
กระบวนการคือแอปพลิเคชันการดำเนินการและเธรดเป็นลำดับการดำเนินการภายในกระบวนการ กระบวนการสามารถมีหลายเธรด เธรดเรียกอีกอย่างว่ากระบวนการที่มีน้ำหนักเบา
12. มีวิธีการสร้างเธรดที่แตกต่างกันกี่วิธี? คุณชอบอันไหน? ทำไม
มีสามวิธีในการสร้างเธรด:
การใช้อินเทอร์เฟซ Runnable นั้นเป็นที่นิยมมากขึ้นเพราะไม่จำเป็นต้องสืบทอดคลาสเธรด เมื่อวัตถุอื่น ๆ ได้รับการสืบทอดในการออกแบบแอปพลิเคชันสิ่งนี้ต้องการการสืบทอดหลายครั้ง (ในขณะที่ Java ไม่รองรับการสืบทอดหลายครั้ง) มันสามารถใช้อินเทอร์เฟซเท่านั้น ในเวลาเดียวกันพูลเธรดก็มีประสิทธิภาพและใช้งานง่ายและใช้งานง่าย
13. คำอธิบายสรุปของหลาย ๆ สถานะของเธรดที่มีอยู่
ในระหว่างการดำเนินการเธรดสามารถอยู่ในสถานะต่อไปนี้:
14. ความแตกต่างระหว่างวิธีการซิงโครไนซ์กับบล็อกรหัสการซิงโครไนซ์คืออะไร?
ในภาษา Java แต่ละวัตถุมีล็อค เธรดสามารถใช้คำหลักที่ซิงโครไนซ์เพื่อรับล็อคบนวัตถุ คำหลักที่ซิงโครไนซ์สามารถนำไปใช้ในระดับวิธี (ล็อคหยาบหยาบ) หรือที่ระดับบล็อกรหัส (ล็อคเนื้อละเอียด)
15. วิธีการซิงโครไนซ์เธรดภายในจอภาพ? โปรแกรมควรซิงโครไนซ์ระดับใด
จอภาพและล็อคใช้ร่วมกันในเครื่องเสมือน Java จอภาพตรวจสอบบล็อกรหัสแบบซิงโครนัสเพื่อให้แน่ใจว่ามีเพียงเธรดเดียวเท่านั้นที่เรียกใช้งานบล็อกรหัสแบบซิงโครนัสในแต่ละครั้ง จอภาพแต่ละตัวเชื่อมโยงกับการอ้างอิงวัตถุ เธรดไม่อนุญาตให้ใช้รหัสการซิงโครไนซ์ก่อนที่จะรับล็อค
16. การหยุดชะงักคืออะไร?
เมื่อกระบวนการทั้งสองกำลังรอให้อีกฝ่ายดำเนินการเสร็จสิ้นก่อนที่จะดำเนินการต่อไปการหยุดชะงักจะเกิดขึ้น ผลที่ได้คือกระบวนการทั้งสองติดอยู่ในการรอที่ไม่มีที่สิ้นสุด
17. จะตรวจสอบให้แน่ใจได้อย่างไรว่าเธรดสามารถเข้าถึงทรัพยากร n โดยไม่ทำให้เกิดการหยุดชะงัก?
เมื่อใช้มัลติเธรดวิธีง่าย ๆ ในการหลีกเลี่ยงการหยุดชะงักคือการระบุลำดับที่ล็อคจะได้มาและบังคับให้เธรดเพื่อรับล็อคตามลำดับที่ระบุ ดังนั้นหากเธรดทั้งหมดล็อคและปล่อยล็อคในลำดับเดียวกันจะไม่มีการหยุดชะงัก
คลาสคอลเลกชัน Java
18. อินเทอร์เฟซพื้นฐานของกรอบคลาส Java Collection คืออะไร?
คลาสคอลเลกชัน Java ให้ชุดอินเทอร์เฟซและคลาสที่ออกแบบมาอย่างดีที่สนับสนุนการดำเนินการในชุดของวัตถุ อินเทอร์เฟซพื้นฐานที่สุดในคลาสคอลเลกชัน Java คือ:
19. ทำไมคลาสคอลเลกชันจึงไม่ใช้อินเทอร์เฟซ cloneable และ serializable?
อินเตอร์เฟสคลาสคอลเลกชันระบุชุดของวัตถุที่เรียกว่าองค์ประกอบ แต่ละคลาสการใช้งานเฉพาะของอินเทอร์เฟซคลาสคอลเลกชันสามารถเลือกที่จะบันทึกและเรียงลำดับองค์ประกอบในแบบของตัวเอง คลาสคอลเลกชันบางคลาสอนุญาตให้มีปุ่มซ้ำในขณะที่คลาสอื่นไม่ได้
20. ตัววนซ้ำคืออะไร?
อินเทอร์เฟซตัววนซ้ำมีหลายวิธีในการทำซ้ำองค์ประกอบการรวบรวม แต่ละคลาสคอลเลกชันมีวิธีการวนซ้ำที่สามารถส่งคืนอินสแตนซ์ของตัววนซ้ำ ตัววนซ้ำสามารถลบองค์ประกอบของคอลเลกชันพื้นฐานในระหว่างการทำซ้ำ
ความหมายและความหมายของการโคลนนิ่งหรือการทำให้เป็นอนุกรมเกี่ยวข้องกับการใช้งานเฉพาะ ดังนั้นการใช้งานเฉพาะของคลาสคอลเลกชันควรกำหนดวิธีการโคลนหรืออนุกรม
21. อะไรคือความแตกต่างระหว่างตัววนซ้ำและผู้ฟัง
ความแตกต่างแสดงอยู่ด้านล่าง:
22. อะไรคือความแตกต่างระหว่างความล้มเหลวอย่างรวดเร็ว (ล้มเหลวอย่างรวดเร็ว) และความล้มเหลวอย่างปลอดภัย (ล้มเหลวอย่างปลอดภัย)?
ความล้มเหลวด้านความปลอดภัยของ Iterator ขึ้นอยู่กับการทำสำเนาของคอลเลกชันพื้นฐานดังนั้นจึงไม่ได้รับผลกระทบจากการปรับเปลี่ยนในการรวบรวมแหล่งที่มา คลาสคอลเลกชันทั้งหมดภายใต้แพ็คเกจ java.util ล้มเหลวอย่างรวดเร็วในขณะที่คลาสทั้งหมดภายใต้แพ็คเกจ java.util.concurrent ล้มเหลวอย่างปลอดภัย ตัววนซ้ำที่รวดเร็วจะโยนข้อยกเว้น Excession พร้อมกันในขณะที่ตัววนซ้ำที่ปลอดภัยจะไม่ทิ้งข้อยกเว้นดังกล่าว
23. หลักการทำงานของ Hashmap ใน Java คืออะไร?
HashMap ใน Java จัดเก็บองค์ประกอบในรูปแบบของคู่คีย์-ค่า HashMap ต้องการฟังก์ชันแฮชที่ใช้วิธีการ HashCode () และ Equals () ในการเพิ่มและดึงองค์ประกอบไปยัง/จากคอลเลกชัน เมื่อมีการเรียกวิธีการพัตต์ () HashMap จะคำนวณค่าแฮชของคีย์จากนั้นจัดเก็บคู่ค่าคีย์ในดัชนีที่เหมาะสมในชุด หากคีย์มีอยู่แล้วค่าจะได้รับการอัปเดตเป็นค่าใหม่ คุณสมบัติที่สำคัญบางประการของ HASHMAP คือความจุปัจจัยโหลดและการปรับขนาดเกณฑ์
24. ความสำคัญของ HashCode () และวิธีการเท่ากับ () สะท้อนให้เห็นถึงที่ไหน?
HashMap ใน Java ใช้วิธีการ HashCode () และ Equals () เพื่อกำหนดดัชนีของคู่คีย์-ค่า ทั้งสองวิธีนี้จะถูกใช้เมื่อได้รับค่าตามคีย์ หากวิธีการทั้งสองนี้ไม่ถูกต้องอย่างถูกต้องปุ่มสองปุ่มที่แตกต่างกันอาจมีค่าแฮชเดียวกันและดังนั้นจึงอาจถูกพิจารณาว่าเท่ากันโดยชุด ยิ่งไปกว่านั้นทั้งสองวิธีนี้ยังใช้เพื่อค้นหาองค์ประกอบที่ซ้ำกัน ดังนั้นการใช้วิธีการทั้งสองนี้จึงมีความสำคัญต่อความแม่นยำและความถูกต้องของ HASHMAP
25. อะไรคือความแตกต่างระหว่าง HashMap และ Hashtable?
26. อะไรคือความแตกต่างระหว่างอาร์เรย์ (อาร์เรย์) และรายการ (ArrayList)? ฉันควรใช้อาร์เรย์แทน ArrayList เมื่อใด
รายการต่อไปนี้แสดงความแตกต่างระหว่างอาร์เรย์และ ArrayList:
27. อะไรคือความแตกต่างระหว่าง ArrayList และ LinkedList?
ทั้ง ArrayList และ LinkedList ใช้งานอินเตอร์เฟสรายการและพวกเขามีความแตกต่างดังต่อไปนี้:
ArrayList เป็นอินเทอร์เฟซข้อมูลที่ใช้ดัชนีและเลเยอร์พื้นฐานเป็นอาร์เรย์ ช่วยให้สามารถเข้าถึงองค์ประกอบแบบสุ่มด้วยความซับซ้อนของเวลา O (1) LinkedList เก็บข้อมูลไว้ในรูปแบบของรายการองค์ประกอบแต่ละองค์ประกอบจะเชื่อมโยงกับองค์ประกอบก่อนหน้าและถัดไป ในกรณีนี้ความซับซ้อนของเวลาในการค้นหาองค์ประกอบคือ o (n)
เมื่อเทียบกับ ArrayList การแทรกการเพิ่มและการลบของ LinkedList นั้นเร็วกว่าเพราะเมื่อมีการเพิ่มองค์ประกอบลงในตำแหน่งใด ๆ ในคอลเลกชันไม่จำเป็นต้องคำนวณขนาดใหม่หรืออัปเดตดัชนีเช่นอาร์เรย์
LinkedList ใช้หน่วยความจำมากกว่า ArrayList เนื่องจาก LinkedList เก็บข้อมูลอ้างอิงสองรายการสำหรับแต่ละโหนดหนึ่งชี้ไปที่องค์ประกอบก่อนหน้าและหนึ่งชี้ไปที่องค์ประกอบถัดไป
นอกจากนี้คุณยังสามารถอ้างถึง ArrayList vs. LinkedList
28. อินเทอร์เฟซเปรียบเทียบและเปรียบเทียบทำอะไร? แสดงรายการความแตกต่าง
Java จัดเตรียมอินเทอร์เฟซที่เปรียบเทียบได้ซึ่งมีวิธีการเปรียบเทียบ () เพียงหนึ่งวิธีเท่านั้น วิธีนี้สามารถเรียงลำดับวัตถุสองวัตถุ โดยเฉพาะจะส่งคืนจำนวนลบ 0 และจำนวนบวกเพื่อระบุว่าวัตถุอินพุตน้อยกว่าเท่ากับและมากกว่าวัตถุที่มีอยู่แล้ว
Java จัดเตรียมอินเทอร์เฟซเปรียบเทียบที่มีสองวิธี: เปรียบเทียบ () และ Equals () วิธีการ Compare () ใช้ในการเรียงลำดับพารามิเตอร์อินพุตสองตัวส่งคืนจำนวนลบ 0 และจำนวนบวกระบุว่าพารามิเตอร์แรกน้อยกว่าเท่ากับและมากกว่าพารามิเตอร์ที่สอง วิธี Equals () ต้องการวัตถุเป็นพารามิเตอร์ซึ่งใช้เพื่อตรวจสอบว่าพารามิเตอร์อินพุตเท่ากับตัวเปรียบเทียบหรือไม่ วิธีนี้จะส่งคืนจริงเฉพาะเมื่อพารามิเตอร์อินพุตเป็นตัวเปรียบเทียบและพารามิเตอร์อินพุตและผลลัพธ์การเรียงลำดับเปรียบเทียบปัจจุบันจะเหมือนกัน
29. คิวลำดับความสำคัญของ Java คืออะไร?
PriorityQueue เป็นคิวที่ไม่มีขอบเขตตามกองลำดับความสำคัญและองค์ประกอบของมันจะถูกจัดเรียงตามลำดับตามธรรมชาติ เมื่อสร้างขึ้นเราสามารถให้มันมีตัวเปรียบเทียบที่รับผิดชอบในการเรียงลำดับองค์ประกอบ PriorityQueue ไม่อนุญาตค่า NULL เพราะไม่มีระเบียบตามธรรมชาติหรือไม่มีตัวเปรียบเทียบที่เกี่ยวข้อง ในที่สุด PriorityQueue ไม่ได้ปลอดภัยและความซับซ้อนของเวลาของการเข้าและ dequeueing คือ o (log (n))
30. คุณเข้าใจสัญลักษณ์ O บิ๊ก (สัญลักษณ์ใหญ่) หรือไม่? คุณสามารถยกตัวอย่างโครงสร้างข้อมูลที่แตกต่างกันได้หรือไม่?
สัญลักษณ์ O ใหญ่อธิบายว่าขนาดหรือประสิทธิภาพของอัลกอริทึมนั้นดีเพียงใดในสถานการณ์ที่เลวร้ายที่สุดเมื่อองค์ประกอบในโครงสร้างข้อมูลเพิ่มขึ้น
สัญลักษณ์ใหญ่ O สามารถใช้เพื่ออธิบายพฤติกรรมอื่น ๆ เช่นการใช้หน่วยความจำ เนื่องจากคลาสคอลเลกชันเป็นโครงสร้างข้อมูลจริง ๆ แล้วเราใช้สัญลักษณ์ O ขนาดใหญ่เพื่อเลือกการใช้งานที่ดีที่สุดตามเวลาหน่วยความจำและประสิทธิภาพ สัญลักษณ์ O ขนาดใหญ่สามารถให้คำอธิบายที่ดีเกี่ยวกับประสิทธิภาพของข้อมูลจำนวนมาก
31. วิธีการแลกเปลี่ยนว่าจะใช้อาร์เรย์ที่ไม่ได้เรียงลำดับหรืออาร์เรย์ที่สั่งซื้อ?
ข้อได้เปรียบที่ใหญ่ที่สุดของอาร์เรย์ที่สั่งซื้อคือความซับซ้อนของเวลาของการค้นหาคือ o (log n) ในขณะที่อาร์เรย์ที่ไม่ได้เรียงลำดับคือ O (n) ข้อเสียของอาร์เรย์ที่สั่งซื้อคือความซับซ้อนของเวลาของการดำเนินการแทรกคือ o (n) เนื่องจากองค์ประกอบที่มีค่าขนาดใหญ่ต้องถูกย้ายไปข้างหลังเพื่อให้มีที่ว่างสำหรับองค์ประกอบใหม่ ในทางตรงกันข้ามความซับซ้อนของเวลาแทรกของอาร์เรย์ที่ไม่ได้เรียงลำดับคือค่าคงที่ O (1)
32. แนวทางปฏิบัติที่ดีที่สุดสำหรับกรอบคลาสคอลเลกชัน Java คืออะไร?
การเลือกประเภทของคอลเลกชันที่จะใช้อย่างถูกต้องตามความต้องการของแอปพลิเคชันนั้นสำคัญมากสำหรับประสิทธิภาพ ตัวอย่างเช่น: หากขนาดขององค์ประกอบได้รับการแก้ไขและสามารถทราบได้ล่วงหน้าเราควรใช้อาร์เรย์แทน ArrayList
คลาสคอลเลกชันบางคลาสอนุญาตให้ระบุความจุเริ่มต้น ดังนั้นหากเราสามารถประเมินจำนวนองค์ประกอบที่เก็บไว้ได้เราสามารถตั้งค่าความสามารถเริ่มต้นเพื่อหลีกเลี่ยงการคำนวณค่าแฮชใหม่หรือขยาย
เพื่อความปลอดภัยประเภทความสามารถในการอ่านและความทนทานมีการใช้ยาสามัญเสมอ ในเวลาเดียวกันการใช้ยาชื่อสามัญสามารถหลีกเลี่ยง ClassCastException ได้ที่รันไทม์
การใช้คลาสที่ไม่เปลี่ยนรูปที่ JDK จัดทำขึ้นเป็นคีย์ไปยังแผนที่สามารถหลีกเลี่ยงการใช้วิธีการ HashCode () และ Equals () สำหรับคลาสของเราเอง
อินเทอร์เฟซดีกว่าการใช้งานเมื่อการเขียนโปรแกรม
เมื่อคอลเลกชันพื้นฐานว่างเปล่าจริง ๆ ให้กลับมาชุดหรืออาร์เรย์ที่มีความยาว 0 และอย่าส่งคืนค่า NULL
33. อะไรคือความแตกต่างระหว่างอินเทอร์เฟซการแจงนับและอินเทอร์เฟซตัววนซ้ำ?
การแจงนับเร็วกว่าตัววนซ้ำสองเท่าในขณะที่ใช้หน่วยความจำน้อยลง อย่างไรก็ตามตัววนซ้ำมีความปลอดภัยมากกว่าการแจงนับเนื่องจากเธรดอื่นไม่สามารถแก้ไขวัตถุในคอลเลกชันที่ถูกสำรวจโดยตัววนซ้ำ ในเวลาเดียวกัน Iterator อนุญาตให้ผู้โทรลบองค์ประกอบในคอลเลกชันพื้นฐานซึ่งเป็นไปไม่ได้สำหรับการแจงนับ
34. อะไรคือความแตกต่างระหว่าง Hashset และ Treeset?
HashSet ถูกนำไปใช้โดยตารางแฮชดังนั้นองค์ประกอบของมันจึงไม่ได้เรียงลำดับ ความซับซ้อนของเวลาของวิธีการเพิ่ม (), ลบ () และมี () วิธีการคือ o (1)
ในทางกลับกัน Treeset ถูกนำไปใช้โดยโครงสร้างรูปต้นไม้และองค์ประกอบภายในได้รับคำสั่ง ดังนั้นความซับซ้อนของเวลาของวิธีเพิ่ม (), ลบ () และมี () วิธีการคือ o (logn)
นักสะสมขยะ
35. จุดประสงค์ของการรวบรวมขยะในชวาคืออะไร? จะเก็บขยะเมื่อไหร่?
วัตถุประสงค์ของการรวบรวมขยะคือการระบุและทิ้งวัตถุที่แอปพลิเคชันไม่ได้ใช้เพื่อใช้ทรัพยากรฟรีและนำกลับมาใช้ใหม่อีกต่อไป
36. System.gc () และ runtime.gc () จะทำอะไร?
สองวิธีนี้ใช้เพื่อกระตุ้นให้ JVM ทำการรวบรวมขยะ อย่างไรก็ตามการเริ่มต้นทันทีหรือชะลอการรวบรวมขยะขึ้นอยู่กับ JVM
37. วิธีการสรุป () เรียกว่าเมื่อใด จุดประสงค์ของการทำลายล้างคืออะไร?
ก่อนที่จะปลดปล่อยหน่วยความจำที่ถูกครอบครองโดยวัตถุตัวเก็บขยะจะเรียกวิธีการสรุป () ของวัตถุ โดยทั่วไปขอแนะนำให้ปล่อยทรัพยากรที่จัดขึ้นโดยวัตถุในวิธีนี้
38. หากการอ้างอิงของวัตถุถูกตั้งค่าเป็นโมฆะตัวเก็บขยะจะปล่อยหน่วยความจำที่ถูกครอบครองโดยวัตถุทันทีหรือไม่?
ไม่วัตถุนี้จะรีไซเคิลได้ในรอบการรวบรวมขยะถัดไป
39. โครงสร้างกอง Java มีลักษณะอย่างไร? Perm Gen Space คืออะไร?
กอง JVM เป็นพื้นที่ข้อมูลรันไทม์และทุกกรณีและอาร์เรย์ของคลาสได้รับการจัดสรรหน่วยความจำบนกอง มันถูกสร้างขึ้นเมื่อ JVM เริ่มต้นขึ้น หน่วยความจำฮีปที่ครอบครองโดยวัตถุนั้นถูกรวบรวมโดยระบบการจัดการหน่วยความจำอัตโนมัตินั่นคือตัวเก็บขยะ
หน่วยความจำกองประกอบด้วยวัตถุที่อยู่รอดและตาย วัตถุที่รอดชีวิตสามารถเข้าถึงได้สำหรับแอปพลิเคชันและจะไม่ถูกเก็บรวบรวมขยะ วัตถุที่ตายแล้วเป็นวัตถุที่ไม่สามารถเข้าถึงได้สำหรับแอปพลิเคชันและยังไม่ได้รับการรีไซเคิลโดยนักสะสมขยะ พวกเขาจะครอบครองพื้นที่หน่วยความจำกองจนกว่าตัวเก็บขยะจะเรียกคืนวัตถุเหล่านี้
40. อะไรคือความแตกต่างระหว่างตัวสะสมอนุกรมและตัวเก็บปริมาณงาน?
ตัวสะสมปริมาณงานใช้รุ่นคู่ขนานของนักสะสมขยะรุ่นต่อไปซึ่งใช้สำหรับแอปพลิเคชันที่มีข้อมูลขนาดกลางและขนาดใหญ่ นักสะสมอนุกรมนั้นเพียงพอสำหรับแอปพลิเคชันขนาดเล็กส่วนใหญ่ (ต้องการหน่วยความจำประมาณ 100 เมตรสำหรับโปรเซสเซอร์ที่ทันสมัย)
41. ใน Java วัตถุจะถูกเก็บรวบรวมเมื่อไหร่?
เมื่อวัตถุไม่สามารถเข้าถึงได้กับแอปพลิเคชันที่ใช้วัตถุนี้ในปัจจุบันวัตถุสามารถรีไซเคิลได้
42. การรวบรวมขยะจะเกิดขึ้นในรุ่นถาวรของ JVM หรือไม่?
การรวบรวมขยะจะไม่เกิดขึ้นในรุ่นถาวร หากรุ่นถาวรเต็มหรือสูงกว่าค่าวิกฤตมันจะก่อให้เกิดการรวบรวมขยะเต็มรูปแบบ (เต็ม GC) หากคุณตรวจสอบข้อมูลผลลัพธ์ของตัวเก็บขยะอย่างระมัดระวังคุณจะพบว่ารุ่นถาวรนั้นถูกนำกลับมาใช้ใหม่ นี่คือเหตุผลที่ขนาดการสร้างถาวรที่ถูกต้องเป็นสิ่งสำคัญมากในการหลีกเลี่ยง GC เต็มรูปแบบ โปรดดู Java 8: จากรุ่นถาวรไปยังพื้นที่ข้อมูลเมตา
(หมายเหตุของนักแปล: รุ่นถาวรถูกลบออกใน Java 8 และพื้นที่หน่วยความจำดั้งเดิมที่เรียกว่าพื้นที่ข้อมูลเมตาได้รับการเพิ่ม)
ข้างต้นเป็นการรวบรวมข้อมูลสำหรับคำถามสัมภาษณ์ Java เราจะยังคงเพิ่มข้อมูลที่เกี่ยวข้องในอนาคต ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!