ต่อไปนี้เป็นคำถามที่ค่อนข้างก้าวหน้าและพวกเขามักจะถามไม่ค่อยระหว่างการสัมภาษณ์เพราะพวกเขาอาจทำให้ผู้สัมภาษณ์ออกไป แต่คุณสามารถหาเวลาฝึกฝนด้วยตัวเอง
1. System.Exit (0) จะข้ามการดำเนินการของบล็อกในที่สุด
System.SetSecurityManager (ใหม่ SecurityManager () {@Override โมฆะสาธารณะ checkexit (สถานะ int) {โยน threaddeath ใหม่ ();}}); ลอง {system.exit (0); } ในที่สุด {system.out.println ("ในบล็อกสุดท้าย"); - ทำไมรหัสนี้เอาต์พุตในบล็อกในที่สุด? เหตุใดข้อมูลการติดตามสแต็กจึงไม่พิมพ์?
2. String str = "Hello"; โดยที่ str เป็นวัตถุสตริง
ซึ่งแตกต่างจาก C ++ ตัวแปรใน Java เป็นประเภทพื้นฐานหรือการอ้างอิง ตัวแปรไม่สามารถเป็นวัตถุได้ นี่หมายถึงการแสดงออกเช่นนี้:
string str = "สวัสดี"; String text = "bye"; str == ข้อความ; // เปรียบเทียบการอ้างอิงสองรายการแทนเนื้อหา str = text; // กำหนดการอ้างอิงของข้อความเป็น str
ในกรณีส่วนใหญ่มีความแตกต่างไม่มากนัก แต่การเขียนแบบนี้อาจทำให้เกิดความสับสนได้อย่างง่ายดาย
สตริงสุดท้าย sb = new StringBuilder (); sb.append ("สวัสดี"); // การอ้างอิงนี้เป็นประเภทสุดท้ายไม่ใช่อินสแตนซ์นี้ วิธีการ (SB); // อินสแตนซ์นี้สามารถแก้ไขได้ผ่านวิธีการ แต่ตัวแปรนี้ไม่สามารถแก้ไขได้ 3. การรั่วไหลของหน่วยความจำ Java เหมือนกับโปรแกรมเมอร์ C ++ ที่เข้าใจ
คำจำกัดความของการรั่วไหลของหน่วยความจำบนวิกิพีเดียคือ "ในวิทยาศาสตร์คอมพิวเตอร์หากโปรแกรมไม่จัดการการจัดสรรหน่วยความจำอย่างถูกต้องการรั่วไหลของหน่วยความจำจะเกิดขึ้นในการเขียนโปรแกรมเชิงวัตถุหากวัตถุในหน่วยความจำไม่สามารถเข้าถึงได้ในรหัสนี่คือการรั่วไหลของหน่วยความจำ" อย่างไรก็ตามใน Java วัตถุสามารถเข้าถึงได้เสมอและผู้ที่ไม่มีการอ้างอิงที่แข็งแกร่งจะถูกล้างออก คำว่าการรั่วไหลของหน่วยความจำใน Java: มีวัตถุที่ไม่ควรมีอยู่ในหน่วยความจำและโดยปกติแล้วทรัพยากรบางอย่างที่ไม่ได้ใช้จะยังคงเก็บไว้ในคอลเลกชัน
4. การเขียนโปรแกรมแบบมัลติเธรดเป็นเรื่องยาก
หากคุณไม่มีประสบการณ์การเขียนโปรแกรมแบบมัลติเธรดเป็นเรื่องยาก หากคุณเพียงแค่โยนรหัสจำนวนหนึ่งลงในเธรดและดำเนินการแล้วปัญหาจะไม่สามารถแก้ไขได้เลยมันจะเป็นระเบียบ แต่ถ้าคุณสามารถทำการจัดสรรเธรดตามความต้องการการควบคุมการโต้ตอบระหว่างเธรดและใช้รูปแบบง่าย ๆ ที่สมาชิกบางคนของทีมสามารถเข้าใจได้ปัญหาจะง่ายขึ้นมาก แน่นอนว่ามีความท้าทายอีกประการหนึ่งที่คุณต้องทำให้ทุกคนในทีมปฏิบัติตามกฎของคุณ
5. ไม่สนใจการแสดงที่แตกต่างระหว่างการดำเนินการที่แตกต่างกัน
ฉันเพิ่งได้ยินว่ามีปัญหาซึ่งเกี่ยวข้องกับการเพิ่มจำนวนเต็มการเข้าถึงหน่วยความจำโมดูลัสและเอาต์พุตไปยังคอนโซล แม้ว่าการดำเนินการเหล่านี้แต่ละครั้งจะเป็นลำดับของขนาดช้ากว่าครั้งก่อน แต่ผู้ชายคนนี้ก็แค่ต้องการเพิ่มประสิทธิภาพการทำงานที่เร็วที่สุดนอกจากนี้และแทนที่ด้วยการดำเนินการที่มีราคาแพงกว่า หากคุณต้องการเพิ่มประสิทธิภาพประสิทธิภาพคุณควรเปลี่ยนการดำเนินงานที่มีราคาแพงเหล่านั้นด้วยการดำเนินการราคาถูก หากคอขวดของคุณอยู่ในฮาร์ดแวร์คุณต้องอ่านไฟล์จำนวนมากจากฮาร์ดดิสก์การแก้ไขรหัสของซอฟต์แวร์นั้นไร้ประโยชน์เพราะปัญหาไม่ได้เกิดขึ้นเลย
6. ตัวเลขสุ่มเป็นแบบสุ่ม
ชุดตัวเลขสุ่มเฉพาะนั้นเหมือนตัวเลขของรูปแบบบางอย่าง ฉันได้พูดคุยเกี่ยวกับปัญหานี้ในบทความนี้แล้ว หลายคนไม่เชื่อว่าตัวเลขที่สร้างโดยเครื่องกำเนิดตัวเลขแบบสุ่มนั้นไม่ได้สุ่ม
7. ควรหลีกเลี่ยงจุดลอยตัวเนื่องจากจะสร้างข้อผิดพลาดแบบสุ่ม
สำหรับการดำเนินการเดียวกันหมายเลขจุดลอยตัวจะสร้างข้อผิดพลาดเดียวกันในแต่ละครั้ง ข้อผิดพลาดสามารถคาดการณ์ได้และสามารถควบคุมได้ หากคุณรู้ว่าคุณกำลังจะทำอะไรและยึดติดกับกฎง่ายๆบางอย่างเช่นการปัดเศษผลลัพธ์ตัวเลขจุดลอยตัวจะไม่ทำผิดพลาดมากกว่า bigdecimal นอกจากนี้ยังสามารถอ่านได้มากขึ้นและเร็วกว่าร้อยเท่า (และมีวัตถุขยะน้อยลงที่สร้างขึ้นในเวลาเดียวกัน)
8. โซนเวลาเป็นนิรันดร์
เหตุผลสำหรับความเข้าใจผิดนี้คือเมื่อเวลาเปลี่ยนแปลงเขตเวลากำลังเปลี่ยนแปลง ซึ่งหมายความว่ายุโรป/ลอนดอนคือ 1970/1/1 01:00 แทนที่จะเป็น 00:00 ทำไม เพราะลอนดอนใช้เวลาออมแสงในช่วงสองปีตั้งแต่ปี 2511 ถึง 2514
ในช่วงไม่กี่ปีที่ผ่านมาโซนเวลามีการเปลี่ยนแปลงเช่นกัน มอสโกเคยเป็นเขตตะวันออกที่สาม (GMT+3) แต่ตอนนี้มันเป็นเขตที่สี่ตะวันออก (GMT+4) (เริ่มตั้งแต่วันที่ 27 มีนาคม 2011) หากคุณดูเวลาของปี 2010 คุณจะพบว่ามันคือ East 3 และ East 4
มีบางสิ่งที่คุณอาจฟังดูแปลกใจ:
กุมภาพันธ์ของสวีเดนในปี 1721 มี 30 วัน
วันแรกในอังกฤษในปี 1751 คือ 25 มีนาคมซึ่งเป็น 11 วันหลังฝรั่งเศส
หลังจากที่สหรัฐอเมริกาใช้ปฏิทินเกรกอเรียนมันจะย้อนกลับไปหลายร้อยปีเพื่อให้วันที่บันทึกเดิมสามารถแสดงในสองปฏิทิน (โดยปกติจะมีสองวันที่มีให้ในเวลาเดียวกันเพื่อความแม่นยำมากขึ้น) ตัวอย่างเช่นวันเกิดของจอร์จวอชิงตันเปลี่ยนไปตั้งแต่วันที่ 11 กุมภาพันธ์ ค.ศ. 1731 เป็น 22 กุมภาพันธ์ 2275
9. เมื่อคุณอ่านตัวแปรที่ไม่ระเหยในเธรดคุณสามารถอ่านค่าที่อัปเดตได้ในที่สุด
ปัญหานี้ปรากฏขึ้นสองครั้งใน Stackoverflow เมื่อไม่กี่วันที่ผ่านมา โดยทั่วไปเมื่อคอมไพเลอร์ JIT ปรับรหัสให้เหมาะสมมันจะอินไลน์ฟิลด์ของประเภทที่ไม่ระเหยที่ไม่ได้รับการแก้ไขในเธรดนี้ เมื่อรวบรวมรหัสนี้ (คุณสามารถดูได้ด้วย -xx:+PrintCompilation) เป็นไปได้ว่ามันจะไม่สามารถมองเห็นได้หากคุณแก้ไขฟิลด์นี้ในเธรดอื่น การเพิ่มบล็อกการซิงโครไนซ์แบบสุ่มหรือคำสั่งการพิมพ์สามารถชะลอการดำเนินการของการเพิ่มประสิทธิภาพนี้หรือขัดขวางคอมไพเลอร์ JIT เพื่อไม่ให้มีการเพิ่มประสิทธิภาพนี้
10. คำถามสัมภาษณ์ Java ถูกต้อง
มีคำถามสัมภาษณ์ Java มากมายที่ล้าสมัย (ไม่ได้รับการปรับปรุงมานานกว่า 10 ปีและไม่ได้ติดต่อกับเวอร์ชัน Java ปัจจุบัน) หรือพวกเขาทำให้เข้าใจผิดหรืออาจผิด น่าเสียดายที่ไม่มีคำตอบเหล่านี้ผ่านไปโดยไม่ตรวจสอบ
ฉันจะอ้างถึงคำตอบของ Stackoverflow ด้านบนเพราะการตรวจสอบโดยเพื่อนที่นี่ทำงานได้ดีกว่าในการตรวจสอบคำตอบ โดยทั่วไปอย่าไปที่เว็บไซต์เช่น Rose India คำตอบข้างต้นมีคุณภาพไร้สาระ หากคุณต้องการไปที่ด้านล่างของมันคุณสามารถตรวจสอบจำนวนข้อผิดพลาดในการสะกดคำ (ชื่อคลาสและคำศัพท์มืออาชีพ) หรือข้อสังเกตที่ไม่ถูกต้องในบทความข้างต้น เหตุผลหนึ่งสำหรับปัญหาเหล่านี้คือไม่มีกลไกการตอบรับที่มีประสิทธิภาพในการแก้ไขข้อผิดพลาดเหล่านี้
ฉันอยากจะแนะนำคำถามสัมภาษณ์ Java:
คำถามสัมภาษณ์ Java ที่มีค่ามากที่สุด 50 ข้อเหมาะสำหรับการเข้าร่วมโปรแกรม Java
10 คำถามสัมภาษณ์หลัก Java คลาสสิก
อภิปรายคำถามสัมภาษณ์ที่พบบ่อยที่สุดสิบข้อใน Java (Super Classic)
10 คำถามสัมภาษณ์ XML สำหรับโปรแกรมเมอร์ Java ได้รับการปล่อยตัว
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น