คำถามและคำตอบสัมภาษณ์ Java ในปี 2022
เผยแพร่แล้ว: 2022-08-03คุณเป็นโปรแกรมเมอร์หรือไม่? และคุณได้เลือกภาษาการเขียนโปรแกรม Java เป็นช่องทางที่คุณต้องการเพื่อสร้างอาชีพหรือไม่? ยินดีด้วย! คุณได้เลือกอย่างถูกต้อง ตามสถิติ โปรแกรมเมอร์ในสหรัฐฯ มีรายได้เฉลี่ย 105,801 ดอลลาร์ต่อปี นั่นคือค่าเฉลี่ย 50.87 ดอลลาร์ต่อชั่วโมง, 2,035 ดอลลาร์ต่อสัปดาห์และ 8,817 ดอลลาร์ต่อเดือน ไม่น่าประทับใจเหรอ?
แต่การได้โอกาสลงเอยกับงานในฝันของคุณในฐานะโปรแกรมเมอร์ Java นั้นเกินความคาดหมาย จากจำนวนโปรแกรมเมอร์ Java 8 ล้านคนทั่วโลก มีเพียง 56,585 คนเท่านั้นที่ได้รับการจ้างงานในสหรัฐอเมริกา ทำให้การหางานในฐานะโปรแกรมเมอร์ Java มีการแข่งขันค่อนข้างสูง หากคุณต้องได้งานในฝันนั้น คุณต้องมีความพร้อมทั้งในด้านพื้นฐานและด้านที่ซับซ้อนของภาษาการเขียนโปรแกรม Java
ตอนนี้คุณรู้แล้วว่าการได้งานในฐานะโปรแกรมเมอร์ Java เป็นอย่างไร และข้อกำหนดสำหรับการมีสิทธิ์ที่จะเป็นหนึ่งในไม่กี่คนที่จะได้งานเป็นโปรแกรมเมอร์ Java จำไว้ว่า ความสำเร็จเป็นหน้าที่ของการเตรียมพร้อมในการประชุมตามโอกาส ในขณะที่เราก้าวหน้า เราได้ออกแบบคู่มือคำถามและคำตอบเพื่อช่วยให้คุณขยายช่วงการสัมภาษณ์และอาจได้งานในฝันของคุณ รายการนี้รวบรวมด้วยความช่วยเหลือของบทความ – การเตรียมความพร้อมสำหรับคำถามสัมภาษณ์ Java และคำตอบเกี่ยวกับ Apollotechnical มาเริ่มกันเลย
คำถามสัมภาษณ์ Java ขั้นพื้นฐานสำหรับน้องใหม่
คุณเข้าใจอะไรโดย Java?
Java เป็นภาษาโปรแกรมอเนกประสงค์เชิงวัตถุและข้ามแพลตฟอร์มที่ใช้กับอุปกรณ์ 3 พันล้านเครื่องทั่วโลกสำหรับงานต่างๆ เช่น แอปพลิเคชันเครือข่ายสังคม โปรแกรมเสียงและวิดีโอ เกม การประมวลผลข้อมูลขนาดใหญ่ อุปกรณ์ฝังตัว และอื่นๆ
เปรียบเทียบระหว่าง Java และ Python
ในความเรียบง่าย Java เป็นภาษาการเขียนโปรแกรมเชิงวัตถุวัตถุประสงค์ทั่วไปตามคลาส แต่มีข้อกำหนดเฉพาะน้อยกว่า เนื่องจากมีชื่อเสียงในด้านความรวดเร็ว เชื่อถือได้ และขับเคลื่อนด้วยผลลัพธ์ ภาษาจึงเป็นภาษาโปรแกรมที่ใช้งานได้จริงสำหรับการพัฒนาแอปพลิเคชันในโทรศัพท์มือถือ เกมคอนโซล แล็ปท็อป คอมพิวเตอร์วิทยาศาสตร์ระดับไฮเอนด์ ฯลฯ ในทางกลับกัน Python คือ ภาษาโปรแกรมที่มีโครงสร้างแบบไดนามิกที่แปล เน้นวัตถุ และยกระดับ Python อำนวยความสะดวกในความยืดหยุ่นของโปรแกรมและการใช้โค้ดซ้ำโดยเปิดใช้งานโมดูลและแพ็คเกจ
สรุปคุณสมบัติของ Java ที่สำคัญ
- Java เน้นวัตถุ
- Java เป็นแพลตฟอร์มไม่เชื่อเรื่องพระเจ้า
- มีการใช้งานมัลติเธรดที่ยอดเยี่ยม
- ใช้ภาษาง่ายๆ
- และเป็นสถาปัตยกรรมที่เป็นกลาง
คุณหมายถึงอะไรโดยวัตถุใน Java
ใน Java อ็อบเจ็กต์คือส่วนประกอบ (หรือที่เรียกว่า “อินสแตนซ์”) ของการจัดกลุ่ม Java อื่นที่เรียกว่า 'คลาส' ทุกอ็อบเจ็กต์มีสถานะ พฤติกรรม/การกระทำ และเอกลักษณ์เฉพาะตัว ฟิลด์ (ตัวแปร) จัดเก็บสถานะของอ็อบเจ็กต์ ในขณะที่เมธอดโลยี (การดำเนินการ) แสดงการกระทำของอ็อบเจ็กต์ ในขณะรันไทม์ อ็อบเจ็กต์จะถูกสร้างขึ้นจากเฟรมเวิร์กที่ระบุว่าเป็นคลาส
ออบเจ็กต์อาจเป็นองค์ประกอบพื้นฐานของ Object-Based Programming ที่แสดงถึงเอนทิตีในโลกแห่งความเป็นจริง
แยกแยะระหว่าง Stringbuffer และ Stringbuilder ในการเขียนโปรแกรม Java
StringBuffer และ StringBuilder แตกต่างกันในพารามิเตอร์สี่ตัวหลัก: ประสิทธิภาพ/ความเร็ว ความปลอดภัยของเธรด ความพร้อมใช้งาน และการซิงโครไนซ์ StringBuilder เป็นตัวแปรคลาส StringBuffer ที่ไม่ซิงโครไนซ์
ความแตกต่างอีกประการระหว่าง StringBuffer และ StringBuilder ก็คือ อันแรกนั้นปลอดภัยสำหรับเธรด ในขณะที่อันหลังนั้นไม่ปลอดภัย
แยกความแตกต่างระหว่าง JDK, JRE และ JVM
Java Development Kit (JDK) ประกอบด้วยการเขียน การแก้ไขปัญหา และการวิเคราะห์เครื่องมือการเขียนโปรแกรม Java JRE คือชุดของคลาสและอ็อบเจ็กต์ และไฟล์ประกอบอื่นๆ ที่ JVM จำเป็นต้องใช้เพื่อรันแอปพลิเคชัน JVM ไม่มีเครื่องมือในการพัฒนาซอฟต์แวร์ใดๆ
Java Development Kit (JDK) เป็นผลิตภัณฑ์ซอฟต์แวร์สำหรับสร้างแอปพลิเคชัน Java JRE เป็นแพ็คเกจซอฟต์แวร์ที่มีไลบรารีคลาส Java และส่วนประกอบอื่นๆ ที่จำเป็นในการรันการเขียนโปรแกรม Java Java Virtual Machine (JVM) แปลภาษา Java byte และสร้างบรรยากาศที่เหมาะสมสำหรับการดำเนินการ JDK เป็นแบบเฉพาะแพลตฟอร์ม JRE ขึ้นอยู่กับแพลตฟอร์ม และ JVM นั้นขึ้นอยู่กับแพลตฟอร์มในระดับที่สูงกว่า
กำหนดมรดก
ใน Java การสืบทอดเป็นหลักการที่ถ่ายโอนคุณสมบัติของคลาสหนึ่งไปยังอีกคลาสหนึ่ง เป็นเฟรมเวิร์กใน Java โดยที่คลาสหนึ่งได้รับคุณสมบัติจากอีกคลาสหนึ่งหรืออนุญาตให้คลาสหนึ่งมีคุณสมบัติ (เมธอดและแอตทริบิวต์) ของอีกคลาสหนึ่ง
คลาสใน Java คืออะไร?
คลาสเป็นองค์ประกอบพื้นฐานในการเขียนโปรแกรมเชิงวัตถุ เป็นรูปแบบที่กำหนดสถานะและฟังก์ชันที่มาจากการสร้างอินสแตนซ์ของคลาส คลาสยังเป็นเทมเพลตแบบลอจิคัลเนื่องจากใช้ในการสร้างแบบจำลองที่มีคุณลักษณะและวิธีการที่คล้ายคลึงกัน
เปรียบเทียบการโอเวอร์โหลดและการแทนที่ใน Java
โอเวอร์โหลดหมายถึงมีเมธอดของคลาสเดียวกันที่มีชื่อเหมือนกัน แต่แต่ละอันมีเกณฑ์ต่างกันหรือเกณฑ์เดียวกันกับประเภทและคำสั่งต่างๆ ในขณะที่การแทนที่หมายถึงการมีคลาสย่อยที่มีเทคนิคเดียวกันภายใต้ชื่อเดียวกันกับซูเปอร์คลาสและมีเกณฑ์ประเภทเดียวกันและค่าที่ส่งคืน
นอกจากนี้ การโอเวอร์โหลดเป็นพหุสัณฐานของบรรทัดคำสั่งที่มีพันธะสถิตและการโอเวอร์โหลดเมธอดสแตติกมากเกินไป ในขณะที่การแทนที่เป็นความแตกต่างของการเรียกใช้โปรแกรมด้วยพันธะที่ยืดหยุ่นและไม่สามารถแทนที่วิธีการแบบคงที่ได้
อธิบายการสร้าง singleton ที่ปลอดภัยต่อเธรดใน Java โดยใช้การล็อกแบบ double-checked
รูปแบบซิงเกิลตันคือรูปแบบการออกแบบที่รู้จักกันดี ซึ่งคลาสถูกจำกัดเพียงอินสแตนซ์เดียวตลอดชีวิต และไคลเอนต์หลายรายแชร์อินสแตนซ์นั้น รูปแบบซิงเกิลตันประกอบด้วยความรับผิดชอบหลักสองประการ: ประการแรกคือเพื่อให้แน่ใจว่ามีการสร้างอินสแตนซ์ของคลาสเดียวเท่านั้น ประการที่สองคือการจัดเตรียมวิธีการที่ทุกคนสามารถเข้าถึงอินสแตนซ์เฉพาะนั้นได้ทั่วโลก
ความท้าทายประการหนึ่งที่การออกแบบ Singleton เผชิญในโปรแกรมมัลติเธรดดิ้งคือการทำให้มั่นใจว่ามีการสร้างอินสแตนซ์เพียงหนึ่งอินสแตนซ์ของคลาส แม้ว่าผู้ใช้หลายคนจะเรียกใช้เทคนิค getInstance() พร้อมกัน ระบบล็อคที่ตรวจสอบซ้ำแล้วซ้ำอีกแก้ไขภาวะที่กลืนไม่เข้าคายไม่ออกนี้โดยทำให้แน่ใจว่าการซิงโครไนซ์จะใช้เฉพาะเมื่อมีการสร้างเคสเดี่ยวของ Singleton ทุกครั้งที่มีการเรียกใช้ฟังก์ชัน getInstance() เป็นครั้งแรก และอินสแตนซ์เดียวกันนั้นถูกนำกลับมาอีกครั้งโดยไม่มีการซิงโครไนซ์ด้านบน กรณีอื่นๆ ทั้งหมด
คำถามสัมภาษณ์ Java ระดับกลาง
JDK คืออะไร? พูดถึงรุ่นต่างๆ ของ JDK?
JDK ย่อมาจาก Java Development Kit Java Development Kit (JDK) เป็นซอฟต์แวร์ที่นำไปใช้ในระหว่างการพัฒนาแอปพลิเคชัน Java Java Development Kit (JDK) ประกอบด้วยการเขียน การแก้ไขปัญหา และการวิเคราะห์เครื่องมือการเขียนโปรแกรม Java
โดยพื้นฐานแล้ว JDK คือการใช้งาน Java Standard Edition หรือ Java Enterprise Edition Java ถูกเปลี่ยนชื่อเป็น Java 2 (ย่อเป็น Java 2 SDK หรือ J2SDK) ในปี 1998 เนื่องจากการอัปเกรดแพลตฟอร์มที่สำคัญ ได้พัฒนา Java เวอร์ชันแยกกันสามเวอร์ชันเพื่อรองรับแอปพลิเคชันต่างๆ
- J2SE ย่อมาจาก Java 2 Platform รุ่น Basic และ Usual และมีไว้สำหรับบริบทเดสก์ท็อปและเซิร์ฟเวอร์
- J2EE ย่อมาจาก Java 2 Platform, Corporate Edition ซึ่งออกแบบมาสำหรับแอปพลิเคชันทางธุรกิจและรวมถึงความสามารถต่างๆ เช่น การจัดเก็บข้อมูลบนคลาวด์และการสนับสนุนบริการออนไลน์
- J2ME (แพลตฟอร์ม Java 2, Micro Edition) ได้รับการจัดสรรสำหรับอุปกรณ์หรือแพลตฟอร์มที่ติดตั้งและอุปกรณ์พกพา
อย่างไรก็ตาม ในปี 2547 ป้ายกำกับของตัวแปรได้รับการแก้ไขเป็น Java ME (รุ่น Micro ของแพลตฟอร์ม Java), Java EE (รุ่น Enterprise ของแพลตฟอร์ม Java) และ Java SE (รุ่นมาตรฐานของแพลตฟอร์ม Java) ตามลำดับ ชื่อเล่นของชุดพัฒนาก็เปลี่ยนจาก “Java 2 SDK” เป็น “JDK” ด้วย นอกจากนี้ บริบทการดำเนินงานได้เปลี่ยนชื่อเป็น "JRE" แทนที่จะเป็น "J2RE" ตัวแปรที่มีเวอร์ชัน Java SE 6 และ Java EE 5 ยังคงใช้งานอยู่

ตัวสร้างสามารถคืนค่าได้หรือไม่?
การเข้าใจว่าคอนสตรัคเตอร์ไม่เหมือนกับเทคนิคทั่วไปที่ใช้ระหว่างการเขียนโปรแกรมใน Java มันไม่ส่งคืนหรือนำผลลัพธ์ที่ระบุใดๆ กลับมา ซึ่งอาจทำให้เกิดผลกระทบหรือผลกระทบที่สำคัญต่อโค้ด ตัวสร้างสามารถรวมคำสั่งได้ไม่จำกัด แต่ไม่สามารถนำกลับมาหรือคืนค่าหรือผลลัพธ์ของคำสั่งได้
อธิบายคีย์เวิร์ด 'THIS' ใน Java
'This' เป็นคำเฉพาะใน Java ที่ระบุเอนทิตีที่โปรแกรมเมอร์กำลังทำงานอยู่ คีย์เวิร์ดถูกนำหน้าด้วยพารามิเตอร์ที่แตกต่างกันที่เกี่ยวข้องกับการใช้ตัวดำเนินการ – คาบ (.) ซึ่งอาจใช้จากด้านในของเมธอดหรือคอนสตรัคเตอร์ คำหลัก 'This' ไม่ได้ใช้บ่อยนัก เนื่องจากแอปพลิเคชันส่วนใหญ่มีจุดประสงค์เพื่อหลีกเลี่ยงสถานการณ์ที่อาจจำเป็น การเข้าถึงตัวแปรอินสแตนซ์มีให้ผ่านคำว่า 'สิ่งนี้'
อธิบายคำหลัก 'SUPER' ใน Java
ใน Java คำพูดติดปาก 'super' เป็นพารามิเตอร์สัมพันธ์ที่เกี่ยวข้องกับแนวคิดของการสืบทอดที่อ้างถึงอินสแตนซ์ของคลาสพาเรนต์ สมมติว่าคลาสที่ได้รับมีพารามิเตอร์ในกลุ่มหรือเมธอดที่มีชื่อเดียวกับคลาสพาเรนต์ คำนี้ส่วนใหญ่จะใช้เมื่อคลาสย่อยจำเป็นต้องเข้าถึงพารามิเตอร์ ฟังก์ชัน หรือตัวสร้างในคลาสพื้นฐาน
อธิบายวิธีการโอเวอร์โหลดใน Java
ใน Java การโอเวอร์โหลดหมายถึงเมธอดที่มีชื่อและคลาสเหมือนกัน แต่มีเกณฑ์ที่หลากหลาย และในทางกลับกัน เทคนิคตั้งแต่สองอย่างขึ้นไปมีชื่อและคลาสเหมือนกัน แต่มีลายเซ็นที่แตกต่างกันในการโอเวอร์โหลด การโอเวอร์โหลดเป็นพหุสัณฐานของบรรทัดคำสั่งที่ขยายพฤติกรรมของเมธอด ทำให้เกิดโอเวอร์โหลด
เราสามารถโอเวอร์โหลดเมธอดแบบสแตติกใน Java ได้หรือไม่?
ใน Java วิธีสแตติกทำงานคล้ายกับวิธีการทั่วไปของการโอเวอร์โหลด ดังนั้นจึงอาจโอเวอร์โหลดได้ อย่างไรก็ตาม จะต้องเสนอวิธีการแบบคงที่เพิ่มเติมที่มีชื่อเดียวกันแต่ต้องมีลายเซ็นของระเบียบวิธีที่แตกต่างกัน หากจุดมุ่งหมายคือการโอเวอร์โหลดวิธีการแบบคงที่
กำหนดการเชื่อมโยงล่าช้า
การเชื่อมโยงล่าช้าเป็นรูปแบบที่ระบุว่าคอมไพเลอร์ไม่ควรทำการตรวจสอบประเภทในการเรียกใช้เมธอด ไม่มีการตรวจสอบอาร์กิวเมนต์ และควรปล่อยให้ทุกอย่างเป็นรันไทม์ (อินสแตนซ์อยู่ในการเขียนโปรแกรม COM)
กำหนดวิธีการจัดส่งแบบไดนามิก
การส่งเมธอดแบบไดนามิกหมายถึงการแก้ไขหรือแก้ไขการเรียกเมธอดที่ถูกแทนที่ ณ รันไทม์ แทนที่จะเป็นในเวลาคอมไพล์
เหตุใดฟังก์ชันการลบจึงเร็วกว่าในรายการที่เชื่อมโยงมากกว่าอาร์เรย์
การดำเนินการลบ LinkedList จะคืนค่า O(1) แต่การดำเนินการลบ ArrayList จะคืนค่า O(n) ในกรณีที่เลวร้ายที่สุด เช่น เมื่อลบรายการแรกและ O(1) ในสถานการณ์ที่ดีที่สุดในขณะที่ลบองค์ประกอบสุดท้าย เมื่อเปรียบเทียบกับ ArrayList การลบองค์ประกอบ LinkedList ทำได้เร็วกว่า เหตุผลก็คือองค์ประกอบ LinkedList แต่ละองค์ประกอบมีตัวชี้ (ที่อยู่) สองตัวที่ชี้ไปที่สมาชิกที่อยู่ใกล้เคียงทั้งสองในรายการ ด้วยเหตุนี้ การลบโหนดจึงเกี่ยวข้องกับการแก้ไขตำแหน่งอ้างอิงในส่วนประกอบที่อยู่ติดกันสองโหนดของโหนด
คำถามสัมภาษณ์ Java ขั้นสูงสำหรับผู้มีประสบการณ์
แม้ว่าการสืบทอดเป็นแนวคิด oops ที่ได้รับความนิยม แต่ก็มีประโยชน์น้อยกว่าการจัดองค์ประกอบ อธิบาย!
คลาส Java สามารถมีได้เพียงหนึ่งซูเปอร์คลาส เนื่องจากไม่มีการรองรับการสืบทอดหลายรายการในภาษา ในฟังก์ชันต่างๆ เช่น การอ่านและเขียนไฟล์ โครงสร้างการคอมไพล์จะดีกว่า คุณสามารถเปรียบเทียบกับความสามารถในการเขียนและผู้อ่านของสมาชิกส่วนตัว ด้วยความช่วยเหลือขององค์ประกอบ จึงสามารถป้องกันการห่อหุ้มที่แตกได้ในขณะที่ยังมีความยืดหยุ่นสูง การทดสอบหน่วยซึ่งเป็นไปไม่ได้เนื่องจากการสืบทอดสามารถทำได้ด้วยความช่วยเหลือขององค์ประกอบ
การสร้างสตริงโดยใช้ new() แตกต่างจากตัวอักษรอย่างไร
เมื่อเราใช้ new() เพื่อสร้างสตริง วัตถุใหม่จะถูกสร้างขึ้นในหน่วยความจำฮีป ใช้เวลาในการดำเนินการนานกว่าและล้าหลังเมื่อเทียบกับ String literal อย่างไรก็ตาม เมื่อมีข้อมูลที่สร้างไว้แล้วในสตริงสำหรับสตริงที่สร้างโดยใช้สตริงตามตัวอักษร จะมีการเชื่อมโยงข้อมูลเดียวกันกับตัวแปรสตริงในพูลสตริง และสิ่งนี้สามารถทำได้โดยไม่ต้องสร้าง String ใหม่ทั้งหมดด้วยข้อมูลที่สร้างแบบเดียวกัน
เป็นไปได้หรือไม่ที่หน่วยความจำจะเกินขีดจำกัดในโปรแกรมทั้งๆ ที่มีตัวรวบรวมขยะ
ใช่. การมีอยู่ของตัวรวบรวมขยะไม่ได้หยุดหรือขัดขวางโปรแกรมไม่ให้หน่วยความจำหมด
ทำไมการซิงโครไนซ์จึงจำเป็น? อธิบายด้วยความช่วยเหลือของตัวอย่างที่เกี่ยวข้อง
การซิงโครไนซ์เป็นกลไกที่ทำให้แน่ใจว่าเธรดที่ตรงกันทั้งหมดทำงานพร้อมกัน การซิงโครไนซ์ป้องกันปัญหาความสอดคล้องของหน่วยความจำที่เกิดจากมุมมองหน่วยความจำแบบประสานกันที่ไม่สอดคล้องกัน ในวิธีการซิงโครไนซ์ อ็อบเจ็กต์จะถูกมอนิเตอร์และเก็บไว้ที่เธรด หากเธรดอื่นกำลังดำเนินการตามวิธีการซิงโครไนซ์ เธรดปัจจุบันจะหยุดจนกว่าเธรดเดิมจะปล่อยมอนิเตอร์
สมมติว่า ในสถานการณ์ที่จำเป็นต้องค้นหาจำนวนคำขอที่ส่งไปยัง URL หนึ่งๆ การมีคำขอที่ทำงานอยู่มากกว่าหนึ่งรายการจะถูกผูกไว้เพื่อให้นับไม่แน่นอน พูดหัวข้อที่ 1 เห็นนับเป็น 12; มันจะเพิ่มขึ้นเป็น 13 โดยการเพิ่มหนึ่ง พร้อมกัน อีกเธรดที่ 2 ยังเห็นการนับเป็น 12 และในแนวเดียวกัน เพิ่มขึ้นเป็น 13 โดยการเพิ่ม 1 ความไม่แน่นอนในค่าการนับนี้เกิดขึ้นเพราะแทนที่จะเป็นค่าสุดท้ายที่คาดการณ์ไว้ที่ 14 สิ่งที่จะได้รับเป็นค่าสุดท้าย ค่าจะเป็น 13 นี่คือจุดเริ่มต้นของการซิงโครไนซ์เมื่อฟังก์ชันเพิ่มขึ้น () ดังนั้นจึงป้องกันการเข้าถึงการนับพร้อมกัน
คุณช่วยอธิบายวงจรชีวิตของเธรด Java ได้ไหม
ใน Java วัฏจักรชีวิตของเธรดถูกกำหนดให้เป็นการแปลงสถานะของเธรดตั้งแต่แรกเกิดถึงตาย เมื่ออินสแตนซ์ของเธรดถูกสร้างขึ้น และฟังก์ชัน start() ของคลาสเธรดถูกเรียก เธรดจะเข้าสู่สถานะที่รันได้ เมื่อคลาส Thread เรียกใช้เมธอด sleep() หรือ wait() เธรดจะไม่สามารถรันได้
อะไรคือข้อแลกเปลี่ยนระหว่างการใช้อาร์เรย์ที่ไม่เรียงลำดับกับการใช้อาร์เรย์ที่สั่งซื้อ
ข้อดีอย่างหนึ่งที่สำคัญของอาร์เรย์ที่สั่งซื้อคือ ความซับซ้อนของเวลาในการค้นหาเป็น O(log n) การดำเนินการแทรกในอาร์เรย์ที่สั่งซื้อมีความซับซ้อนชั่วคราวของ O(n) เนื่องจากสมาชิกที่มีคะแนนมากกว่าจะต้องถูกเลื่อนเพื่อสร้างตัวแปรใหม่ ในทางกลับกัน การแทรกอาร์เรย์ที่ไม่เรียงลำดับต้องใช้เวลา O(1) อย่างสม่ำเสมอ
เป็นไปได้ไหมที่จะนำเข้าคลาสหรือแพ็คเกจเดียวกันสองครั้งใน java และเกิดอะไรขึ้นกับมันระหว่างรันไทม์?
ใช่. ไม่ว่าจะนำเข้าคลาสหรือแพ็คเกจบ่อยเพียงใด JVM จะโหลดภายในครั้งเดียวระหว่างรันไทม์
บล็อก "สุดท้าย" จะถูกดำเนินการหรือไม่หากระบบรหัส ออก (o) ถูกเขียนไว้ที่ส่วนท้ายของบล็อกการลอง
ไม่ บล็อก 'สุดท้าย' จะไม่ทำงานในสถานการณ์นี้ เนื่องจากเมื่อเปิดใช้งาน System.exit (0) ตัวควบคุมจะออกจากโปรแกรมทันที ดังนั้น "ในที่สุด" จะไม่ทำงาน ถ้าระบบ. exit(0) ถูกเรียกใช้โดยไม่มีข้อยกเว้น โปรแกรมจะไม่ทำงาน
คุณเข้าใจอะไรจากส่วนต่อประสานตัวทำเครื่องหมายใน Java
อินเทอร์เฟซที่ไม่มีค่าคงที่หรือเมธอดเรียกว่าอินเทอร์เฟซตัวทำเครื่องหมายหรืออินเทอร์เฟซการติดแท็ก เนื่องจากจะให้ข้อมูลคอมไพเลอร์และ JVM เกี่ยวกับประเภทของรันไทม์สำหรับอ็อบเจ็กต์ อินเทอร์เฟซระยะไกล Serializable และ Cloneable เป็นตัวอย่างของอินเทอร์เฟซตัวทำเครื่องหมาย และอินเทอร์เฟซทั้งหมดเหล่านี้ว่างเปล่า
อธิบายคำว่า "การเริ่มต้นวงเล็บปีกกาคู่" ใน Java
ใน Java การเริ่มต้นวงเล็บปีกกาคู่เป็นส่วนผสมของ 2 กระบวนการที่แยกจากกัน สองวงเล็บปีกกา ({) มีความเกี่ยวข้องในสถานการณ์นี้ การกำหนดค่าเริ่มต้นของวงเล็บปีกกาคู่เกิดขึ้นเมื่อวงเล็บปีกกาสองอันที่ต่อเนื่องกันแสดงในโค้ดจาวา
การสร้างคลาสภายในที่ไม่มีชื่อคือวงเล็บปีกกาแรก ในขณะที่บล็อกการเริ่มต้นคือวงเล็บปีกกาที่สอง การกำหนดค่าเริ่มต้น Java Double Brace เกิดขึ้นเมื่อคลาสภายในที่ไม่มีชื่อใช้บล็อกการกำหนดค่าเริ่มต้น
บทสรุป
ในฐานะที่เป็นโปรแกรมเมอร์มือใหม่หรือแม้แต่โปรแกรมเมอร์ที่มีประสบการณ์ คำถามสัมภาษณ์เหล่านี้อาจดูยุ่งยากเล็กน้อย แต่ถ้าคุณมุ่งมั่นที่จะฝึกฝนคำถามเหล่านี้ คุณต้องแน่ใจว่าจะได้รับโอกาสครั้งต่อไปที่คุณได้รับ