หากคุณเคยเตรียมตัวสำหรับการสัมภาษณ์ ตำแหน่ง โปรแกรมเมอร์ Javaหรือผ่านการสอบใบรับรองใด ๆ (ไม่จำเป็นต้องเกี่ยวกับการเขียนโปรแกรม) คุณอาจสังเกตเห็นแล้วว่าคำถามที่ถามนั้นมีความเฉพาะเจาะจงมาก หลายคนบังคับให้คุณคิดเกี่ยวกับการออกแบบของภาษา บางส่วนได้รับการออกแบบมาเพื่อตรวจสอบความลึกของความรู้ของคุณ มีคำถามที่ดูเหมือนปริศนามากกว่าคำถามอื่นๆ ในขณะที่คำถามอื่นๆ เกี่ยวข้องกับความแตกต่างของภาษาที่เข้าใจได้ยากมากโดยไม่ต้องฝึกฝน ในบทความนี้ ผู้พัฒนาSarans Singนำเสนอคำถามสองสามข้อเกี่ยวกับ Java พร้อมคำตอบแน่นอน
1. จะเกิดอะไรขึ้นถ้าฉันใส่ return statement หรือ System.exit() ในบล็อก try/catch? นี่เป็นคำถาม Java ที่ได้รับความนิยมและละเอียดอ่อน เคล็ดลับคือโปรแกรมเมอร์หลายคนเชื่อว่า

finally
บล็อกนั้นทำงานอยู่เสมอ โดยการวางreturn
คำสั่งในtry/catch
บล็อกหรือโทรSystem.exit()
จากภายในtry/catch
บล็อก คำถามจะคลายความสงสัยในความเชื่อนี้ คำตอบสำหรับคำถามที่ยุ่งยากนี้คือ:บล็อกfinally
จะถูกดำเนินการเมื่อreturn
มีการวางคำสั่งในtry/catch
บล็อก แต่จะไม่ถูกดำเนินการเมื่อSystem.exit()
ถูกเรียกจากภายในtry/catch
บล็อก 2. Java รองรับการสืบทอดหลายรายการหรือไม่ นี่เป็นคำถามที่ยุ่งยากมาก ผู้สัมภาษณ์มักจะถามว่า "ถ้า C ++ รองรับการสืบทอดโดยตรงหลายรายการ แล้วทำไม Java จะทำไม่ได้" คำตอบค่อนข้างซับซ้อนกว่าที่คิด เนื่องจาก Java รองรับการสืบทอดหลายประเภท ท้ายที่สุดแล้ว อินเทอร์เฟซ Java สามารถขยายอินเทอร์เฟซอื่นๆ ได้ ที่กล่าวว่า Java ไม่สนับสนุนการสืบทอดการใช้งานหลายรายการ 3. หากเมธอดในคลาสพาเรนต์โยน s เมธอดที่โยน s NullPointerException
จะถูกแทนที่ด้วยวิธีนี้ หรือไม่ RuntimeException
นี่เป็นอีกคำถามที่ยุ่งยากที่เกี่ยวข้องกับการโอเวอร์โหลดและการเอาชนะ คำตอบ:เมธอดที่ถูกแทนที่สามารถโยนNullPointerException
คลาสพาเรนต์ของ RuntimeException ได้อย่างปลอดภัย แต่คุณไม่สามารถทำเช่นเดียวกันกับประเภทข้อยกเว้นที่ตรวจสอบได้ เช่นException
. 4. คุณจะรับประกันได้อย่างไรว่าN
เธรดสามารถเข้าถึงN
ทรัพยากรโดยไม่มีการหยุดชะงัก? หากการเขียนโค้ดแบบมัลติเธรดไม่ใช่สิ่งที่คุณถนัด คุณอาจสะดุดกับคำถามนี้ อาจเป็นเรื่องยากแม้แต่กับโปรแกรมเมอร์ที่มีประสบการณ์ซึ่งไม่เคยพบกับการหยุดชะงักและสภาวะการแข่งขัน เคล็ดลับทั้งหมดนี้เป็นไปตามลำดับ:คุณสามารถป้องกันการหยุดชะงักได้โดยการปล่อยทรัพยากรในลำดับย้อนกลับที่ได้รับมา 5. ความแตกต่างระหว่าง the StringBuffer
และStringBuilder
class ใน Java คืออะไร? นี่เป็นคำถามภาษา Java แบบคลาสสิกที่นักพัฒนาบางคนพบว่ายุ่งยากและคำถามอื่น ๆ ก็ง่ายมาก ชั้นStringBuilder
เรียนปรากฏใน JDK 1.5 ข้อแตกต่างเพียงอย่างเดียวระหว่างคลาสเหล่านี้คือStringBuffer
เมธอดต่างๆ เช่นlength()
, capacity()
และappend()
จะถูกซิงโครไนซ์ ในขณะที่เมธอดที่เกี่ยวข้องในStringBuilder
ไม่ได้ ความแตก ต่างพื้นฐานนี้หมายความว่าการต่อสตริงจะเร็วกว่าStringBuilder
ด้วย ที่จริงแล้ว ไม่แนะนำให้ StringBuffer
ใช้ เนื่องจากการต่อสตริงจะดำเนินการในเธรดเดียวกัน 99% ของเวลาทั้งหมด 6. ผลลัพธ์ของการประเมินนิพจน์ 1.0/0.0 คืออะไร? มันจะทำให้เกิดข้อยกเว้นหรือข้อผิดพลาดในการคอมไพล์หรือไม่? นี่เป็นอีกหนึ่งคำถามที่ยุ่งยากเกี่ยวกับชั้นเรียน นักพัฒนา Java ตระหนักถึงการมีอยู่ของประเภทข้อมูลคู่ดั้งเดิมและคลาสแต่เมื่อทำการดำเนินการทศนิยม พวกเขาไม่ได้ให้ความสนใจเพียงพอกับ, , และกฎที่ควบคุมการคำนวณทางคณิตศาสตร์ที่เกี่ยวข้อง คำตอบสำหรับคำถามนี้ง่ายมาก :StringBuffer

Double
Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
NaN
-0.0
ArithmeticException
จะไม่ถูกโยนทิ้ง นิพจน์ประเมินDouble.POSITIVE_INFINITY
เป็น 7. จะเกิดอะไรขึ้นหากคุณพยายามใส่คีย์ลงในคีย์HashMap
ที่มีคีย์นั้นอยู่แล้ว คำถามที่ยุ่งยากนี้เป็นส่วนหนึ่งของคำถามที่พบบ่อย: HashMap
Java ทำงาน อย่างไร HashMap
เป็นแหล่งยอดนิยมของคำถามที่สับสนและซับซ้อนเกี่ยวกับ Java นี่คือคำตอบ:หากคุณพยายามใส่คีย์ใหม่ใน a HashMap
คีย์เก่าจะถูกแทนที่ เนื่องจากHashMap
คลาสไม่อนุญาตให้ใช้คีย์ซ้ำ และคีย์เดียวกันจะได้รับรหัสแฮชเดียวกัน ซึ่งหมายความว่ามันจะจบลงที่ตำแหน่งเดียวกันในถังแฮช ขึ้นอยู่กับวัสดุ Quora
GO TO FULL VERSION