1. คำถาม: หากวัตถุ A และ B ถูกอ้างอิงเป็นวงกลมพวกเขาสามารถเป็น GC ได้หรือไม่?
คำตอบ: ใช่เครื่องเสมือนจริงในปัจจุบันใช้อัลกอริทึมการวิเคราะห์การเข้าถึงเพื่อตรวจสอบว่าวัตถุมีชีวิตอยู่หรือไม่แทนที่จะอ้างถึงการนับวัตถุ อัลกอริทึมการวิเคราะห์การเข้าถึงใช้ชุดของวัตถุ "GC Roots" (วัตถุที่อ้างอิงในสแต็กเครื่องเสมือนจริงวัตถุอ้างอิงแอตทริบิวต์คงที่) เป็นจุดเริ่มต้น เส้นทางที่โหนดเหล่านี้ค้นหาลงมาเรียกว่าโซ่อ้างอิง เมื่อวัตถุไม่มีการเชื่อมต่อห่วงโซ่อ้างอิงใด ๆ กับราก GC วัตถุจะได้รับการพิสูจน์ว่าวัตถุนั้นไม่สามารถใช้งานได้
2. หน่วยความจำล้นในชวาเกิดขึ้นได้อย่างไร?
OutofMemoryError:
(1) โปรแกรม Pergern Space ใช้ขวดหรือคลาสจำนวนมากซึ่งทำให้เครื่องเสมือน Java ไม่โหลดพื้นที่คลาสไม่เพียงพอ
การแก้ไข: ปรับพารามิเตอร์ XX: Permsize และ XX: Maxpermsize ลดแพ็คเกจ JAR และลดการโหลดซ้ำของคลาส
(2) Java Heap Space Java Virtual Machine สร้างวัตถุมากเกินไป
วิธีแก้ปัญหา: ปรับพารามิเตอร์ XMS (ขนาดฮีปเริ่มต้น) XMX (ขนาดฮีปสูงสุด) ตรวจสอบลูปที่ตายแล้วหรือวัตถุซ้ำที่ไม่จำเป็น
(3) ไม่สามารถสร้างเธรดเนทีฟใหม่ JVM ใช้พื้นที่หน่วยความจำมากเกินไปและการสร้างเธรดใน JVM ยังต้องมีการสร้างเธรดในระบบปฏิบัติการ
วิธีแก้ปัญหา: ปรับขนาดเธรดใน JVM
3. สตริง s = "123"; มีการสร้างวัตถุกี่ชิ้นในคำสั่งนี้?
หากไม่มี "123" ในพูลสตริงวัตถุจะถูกสร้างและวางไว้ในพูลคงที่ หากมี "123" จะมีการสร้างวัตถุ 0
ถ้า String s = new String("123") หากไม่มีในพูลคงที่ให้สร้างหนึ่งในพูลคงที่แล้วสร้างหนึ่งในหน่วยความจำฮีป
4. ความแตกต่างระหว่างข้อผิดพลาดข้อยกเว้นและ RuntimeException คืออะไร?
ข้อผิดพลาดและข้อยกเว้นเป็นทั้ง subclasses ของ throwable และ runtimeException เป็น subclass ของข้อยกเว้น
ข้อผิดพลาดถูกใช้เพื่อระบุว่าแอปพลิเคชันที่สมเหตุสมผลไม่ควรพยายามจับข้อผิดพลาด
ข้อยกเว้นชี้ให้เห็นเงื่อนไขที่แอปพลิเคชันที่สมเหตุสมผลจำเป็นต้องจับภาพ มันถูกแบ่งออกเป็นข้อยกเว้นที่ตรวจสอบและข้อยกเว้นที่ไม่ได้ตรวจสอบ
RuntimeException เป็นข้อยกเว้นที่ไม่ได้ตรวจสอบไม่จำเป็นต้องลองจับหรือประกาศเกี่ยวกับวิธีการ คลาสย่อยหลัก: nullpointer, arithmatic, arrayIndexoutofbounds, classcast
5. อะไรคือความแตกต่างระหว่างผู้อ่านและอินพุตสตรีม?
พวกเขาทั้งหมดเป็นคลาสที่เป็นนามธรรมผู้อ่านจะใช้ในการอ่านสตรีมอักขระ (ถ่านหรือสตริง) และใช้อินพุทสตรีมเพื่ออ่านสตรีมไบต์ (อาร์เรย์ไบต์)
6. บทบาทของ HashCode คืออะไร?
HashCode ส่วนใหญ่ใช้สำหรับการค้นหาอย่างรวดเร็วเช่นในโครงสร้าง HashMap ซึ่งใช้เพื่อค้นหาตำแหน่งของคู่คีย์-ค่า หากวัตถุสองชิ้นเหมือนกัน HashCode จะต้องเหมือนกันในขณะที่วัตถุ HashCode ที่มี hashcode เดียวกันอาจไม่เหมือนกันซึ่งเทียบเท่ากับการวางไว้ในกล่องเดียวกัน
7. อะไรคือความแตกต่างระหว่าง HashMap และ Hashtable?
ความปลอดภัยของเธรด, คีย์ค่า NULL, ประสิทธิภาพ, HASHMAP (Iterator Fast Failure Iterator), hashtable (enumerator iterator) และตำแหน่งองค์ประกอบ HASHMAP จะเปลี่ยนไปตามกาลเวลา
8. วัตถุใดใน HashMap สามารถใช้เป็นคีย์ได้หรือไม่? มีข้อกำหนดใด ๆ สำหรับวัตถุที่ผู้ใช้กำหนดเป็นคีย์หรือไม่?
ใช่ แต่วัตถุสำคัญจะต้องเป็นวัตถุที่ไม่เปลี่ยนรูป มิฉะนั้นหลังจากแทรกรายการลงในแผนที่การเปลี่ยนค่าคีย์จะทำให้ค่าคีย์ปัจจุบันไม่สอดคล้องกับค่าแฮชนั่นคือมันไม่ตรงกับดัชนีอาร์เรย์และจะไม่พบ
9. ฉันควรใช้ Run () หรือ start () เพื่อเริ่มต้นเธรดหรือไม่?
วิธีแก้ปัญหาการซิงโครไนซ์และการเกิดขึ้นพร้อมกันในมัลติเธรด? ด้าย Daemon คืออะไร? ด้าย Daemon คืออะไร? วิธีการใช้เธรด daemon (ความหมายของ thread.setDeamon ()) คืออะไรจะหยุดเธรดได้อย่างไร? อธิบายความปลอดภัยของด้ายคืออะไร? ยกตัวอย่างของเธรดที่ไม่ปลอดภัย อธิบายบทบาทของคำหลักที่ซิงโครไนซ์ เมื่อเธรดเข้าสู่วิธีการซิงโครไนซ์ของวัตถุเธรดอื่น ๆ สามารถป้อนวิธีการอื่นของวัตถุนี้ได้หรือไม่?
(1) เริ่มต้น
(2) สืบทอดคลาสเธรดใช้อินเทอร์เฟซ Runnable และใช้ ExectUorService, Future และ Callable เพื่อใช้เธรดที่ส่งคืนค่า
(3) วิธีการซิงโครไนซ์บล็อกรหัสการซิงโครไนซ์ล็อค
(4) เธรด Damon ให้บริการสำหรับการทำงานของเธรดอื่น ๆ เช่น GC และเธรด setDeamon (จริง)
(5) ไม่แนะนำให้ใช้เธรด () (ทรัพยากรจะไม่ถูกปล่อยออกมาอย่างถูกต้อง) และใช้การขัดจังหวะเพื่อหยุดเธรด
(6) เมื่อหลายเธรดเข้าถึงวัตถุหากไม่จำเป็นต้องมีการกำหนดเวลาและการดำเนินการสลับของเธรดเหล่านี้ในสภาพแวดล้อมรันไทม์ไม่จำเป็นต้องมีการซิงโครไนซ์เพิ่มเติมหรือการดำเนินการประสานงานอื่น ๆ จะดำเนินการกับผู้โทรและผลลัพธ์ที่ถูกต้องสามารถรับได้โดยการเรียกวัตถุนี้
(7) ตั๋วถูกขายซ้ำ ๆ
(8) ซิงโครไนซ์คำหลัก เมื่อแก้ไขวิธีการคงที่คลาสจะใช้เป็นวัตถุล็อคและมีเพียงเธรดเดียวเท่านั้นที่สามารถเข้าถึงวิธีการซิงโครไนซ์แบบนี้ได้ เมื่อแก้ไขวิธีการทั่วไปวัตถุจะใช้เป็นวัตถุล็อคและมีเพียงเธรดเดียวเท่านั้นที่สามารถเข้าถึงวิธีการซิงโครไนซ์ประเภทนี้ได้ นอกจากนี้คุณยังสามารถปรับแต่งบล็อกรหัสการซิงโครไนซ์วัตถุล็อค
(9) วิธีการซิงโครไนซ์ไม่สามารถป้อนได้และสามารถป้อนไม่ได้ซิงโครไนซ์
10. คุณสมบัติใหม่ของ JDK8 คุณได้เรียนรู้และอธิบายคุณสมบัติที่สอดคล้องกันพร้อมตัวอย่าง?
(1) Lambda Expression: การเขียนโปรแกรมที่ใช้งานได้, การอ้างอิงวิธีการ
(2) สตรีม API
(3) วิธีการเริ่มต้นของอินเทอร์เฟซ
(4) การปรับปรุงวันที่และเวลา API เพิ่มวิธีการ datetimeformatter
11. อะไรคือหลักการสำหรับการปรับ SQL ให้เหมาะสม?
สำหรับรายละเอียดโปรดดูบล็อกในการจำแนกฐานข้อมูลของฉัน
12. ความแตกต่างระหว่าง Serlvet และ CGI ในวงจรชีวิตของ Servlet คืออะไร?
วงจรชีวิต: การโหลดคลาส, อินสแตนซ์ (การสร้างวัตถุ), การเริ่มต้น (init), บริการ (บริการ) และทำลาย
CGI: อินเทอร์เฟซเกตเวย์ทั่วไป, อินเทอร์เฟซเกตเวย์ทั่วไปเขียนด้วยภาษา Perl สร้างวัตถุ CGI สำหรับแต่ละคำขอ
Servlet: จำเป็นต้องมีการสร้างอินสแตนซ์และการเริ่มต้นเพียงครั้งเดียวและมัลติเธรด
13. อะไรคือข้อดีของ StringBuffer? ทำไมต้องเร็ว?
เนื่องจาก StringBuffer ไม่จำเป็นต้องมีการสร้างวัตถุสตริงซ้ำ ๆ แต่นี่ไม่ใช่กรณี
ตัวอย่างเช่น String S = "A" + "B" + "C" Compiler จะปรับให้เหมาะสมและกลายเป็น String S = "ABC"
คอมไพเลอร์สตริง S = S1 + S2 + S3 จะได้รับการปรับให้เหมาะสมและกลายเป็นการดำเนินการต่อท้าย StringBuilder อย่างไรก็ตามหากไม่ได้รับการประกบในครั้งเดียว + การดำเนินการวัตถุสตริงและวัตถุสตริงจะถูกสร้างขึ้นซ้ำ ๆ ซึ่งจะต่ำมาก
14. คุณเข้าใจอัลกอริทึมการเข้ารหัสและถอดรหัสหรือไม่?
อัลกอริทึมบทคัดย่อ: MD5 (128 บิต), SHA1 (160 บิต) เป็นกระบวนการที่กลับไม่ได้ ไม่ว่าข้อมูลจะมีขนาดใหญ่แค่ไหนข้อมูลที่มีความยาวเท่ากันจะถูกสร้างขึ้นหลังจากอัลกอริทึมการย่อย มันสามารถแตกผ่านพจนานุกรมเท่านั้น
อัลกอริทึมการเข้ารหัสแบบสมมาตร: DES, AES, คีย์ลับเดียวกันถูกใช้เมื่อเข้ารหัสและถอดรหัส
อัลกอริทึมการเข้ารหัสแบบไม่สมมาตร: RSA ใช้คีย์ลับที่แตกต่างกันเมื่อเข้ารหัสและถอดรหัสและใช้ RSA2 เมื่อเชื่อมต่อกับ Alipay
15. แก้ปัญหาการเกิดขึ้นพร้อมกันสูงและโหลดสูง?
(1) การบริโภคเพจแบบคงที่น้อยที่สุด HTML จะคงที่ให้มากที่สุดเท่าที่จะเป็นไปได้และระบบการเผยแพร่ข้อมูล CMS ใช้เพื่อสร้างหน้าคงที่โดยอัตโนมัติในการป้อนข้อมูลและข้อมูลแคชแบบไดนามิกที่ไม่ได้เปลี่ยนไปที่ส่วนหน้า
(2) CDN แจกจ่ายทรัพยากรเช่น CSS/JS บนเซิร์ฟเวอร์ที่แตกต่างกัน
(3) โหลดบาลานซ์ (nginx)
(4) ข้อมูลแคชที่ไม่ได้เปลี่ยนแปลงบ่อยครั้ง (redis, memcache)
(5) เซิร์ฟเวอร์อิมเมจถูกคั่นจากแอปพลิเคชันเซิร์ฟเวอร์
(6) คลัสเตอร์
16. จำนวนเต็มภายในแคช?
มีอาร์เรย์จำนวนเต็มแบบคงที่ภายในคลาสจำนวนเต็มซึ่งเก็บวัตถุจำนวนเต็มบางอย่างที่เริ่มต้น ค่าทั่วไปคือ (-128 ~ 127) หากคุณใช้การเปรียบเทียบ == บางครั้งเท็จจะถูกส่งคืนเนื่องจากค่าไม่ได้อยู่ในแคชดังนั้นคุณควรใช้เท่ากับการเปรียบเทียบ
17. หลักการของ ArrayList คืออะไร?
(1) ArrayList เป็นความปลอดภัยด้าย หากคุณต้องการเธรดที่ปลอดภัยให้ใช้ CopyOnWriteList
(2) เลเยอร์ด้านล่างคืออาร์เรย์วัตถุ [] และมีการอ้างอิง ElementData ชี้ไปที่อาร์เรย์ภายใน ในตอนแรกมันชี้ไปที่อาร์เรย์ว่างเปล่า (ชั่วคราว) โดยค่าเริ่มต้น เมื่อคุณต้องการขยายอาร์เรย์ใหม่ที่มีขนาด 1.5 เท่า (x + (x >> 1)) จะใหม่อีกครั้งจากนั้นองค์ประกอบเก่าจะถูกคัดลอกไปยังอาร์เรย์ใหม่ผ่านวิธีการของระบบ
(3) ความซับซ้อนของอัลกอริทึมของวิธีการอ่านและเขียนแบบสุ่ม (GET, SET) คือ O (1)
(4) มีการดำเนินการเพิ่มสองประเภท ความซับซ้อนของอัลกอริทึมของการเพิ่ม (ดัชนี, ค่า) คือ o (n) เนื่องจากจำเป็นต้องย้ายผ่านการคัดลอกองค์ประกอบ; ในขณะที่ความซับซ้อนของอัลกอริทึมของการดำเนินการ ADD (ค่า) คือ O (1) (หากการขยายไม่ได้เกิดขึ้น)
(5) ความซับซ้อนของเวลาของการดำเนินการลบคือ o (n) เพราะไม่ว่าจะถูกลบตามดัชนีหรือวัตถุจำเป็นต้องใช้การดำเนินการเคลื่อนไหวผ่านการคัดลอก หลังจากการลบขนาดอาร์เรย์จะไม่เปลี่ยนแปลงและความยาวจะถูกเก็บรักษาไว้โดยแอตทริบิวต์ขนาด เมื่อลบวัตถุตามวัตถุคุณไม่สามารถใช้วัตถุใหม่ได้ คุณต้องลบพวกเขาผ่านการอ้างอิงถึงวัตถุใน ArrayList
18. หลักการของ LinkedList คืออะไร?
(1) เลเยอร์พื้นฐานเป็นรายการที่เชื่อมโยงแบบสองทิศทางรักษาตัวชี้แรกและตัวชี้สุดท้าย
(2) ความซับซ้อนของเวลาของการอ่านแบบสุ่มและเขียน (รับ, ตั้ง) คือ o (n)
(3) ความซับซ้อนของเวลาของการดำเนินการแทรกเพิ่ม (วัตถุ) คือ o (1); ความซับซ้อนของเวลาของการเพิ่ม (ดัชนี, วัตถุ) คือ o (n)
(4) ความซับซ้อนของเวลาของการลบลบ (วัตถุ) คือ o (1); ความซับซ้อนของเวลาของการลบ (ดัชนี) คือ o (n)
19. สิ่งที่ควรทราบเมื่อใช้พูลเธรด?
(1) ป้องกันการหยุดชะงัก เธรดทั้งหมดในพูลเธรดกำลังรอเหตุการณ์ A ที่จะเกิดขึ้นและไม่มีเธรดฟรีที่จะดำเนินการ A.
(2) ป้องกันทรัพยากรระบบไม่เพียงพอ เพื่อควบคุมจำนวนเธรด
(3) ป้องกันข้อผิดพลาดพร้อมกัน
(4) ป้องกันการรั่วไหลของด้าย เธรดสิ้นสุดลงอย่างผิดปกติเนื่องจาก runtimeException หรือข้อผิดพลาดที่ไม่ถูกจับได้ตามปกติและพูลเธรดจะสูญเสียเธรด
(5) หลีกเลี่ยงงานโอเวอร์โหลด
20. อะไรคือความแตกต่างระหว่าง @autowire และ @Resource ในฤดูใบไม้ผลิ?
@Autowire ประกอบตามประเภทตามค่าเริ่มต้น โดยค่าเริ่มต้นจะต้องมีวัตถุการพึ่งพาอยู่ หากอนุญาตให้ NULL สามารถตั้งค่าเป็นเท็จได้ หากเราต้องการใช้ชื่อประกอบตามชื่อเราสามารถใช้ร่วมกับคำอธิบายประกอบ @qualifier;
@Resource ประกอบตามชื่อตามค่าเริ่มต้น เมื่อไม่พบถั่วที่จับคู่ชื่อมันจะถูกรวบรวมตามประเภท สามารถระบุได้ผ่านแอตทริบิวต์ชื่อ หากไม่ได้ระบุแอตทริบิวต์ชื่อเมื่อคำอธิบายประกอบถูกใส่คำอธิบายประกอบบนฟิลด์ชื่อของฟิลด์จะถูกนำมาใช้เป็นค่าเริ่มต้นเป็นชื่อถั่วเพื่อค้นหาวัตถุการพึ่งพา เมื่อคำอธิบายประกอบถูกทำเครื่องหมายบนวิธีการตั้งค่าของแอตทริบิวต์ชื่อแอตทริบิวต์จะถูกนำมาใช้เป็นค่าเริ่มต้นเป็นชื่อถั่วเพื่อค้นหาวัตถุการพึ่งพา
21. แผนภาพการถ่ายโอนสถานะเธรด
22. วิธีการคลาสวัตถุ?
(1) เท่ากับ: พิจารณาว่ามันเท่ากันหรือไม่
(2) HashCode: ค้นหาค่าแฮช หากค่าแฮชของวัตถุทั้งสองเท่ากันอาจไม่เท่ากับ ถ้าเท่ากับค่าแฮชของวัตถุทั้งสองจะต้องเท่ากัน
(3) ToString: รับรูปแบบการแสดงออกของสตริงของวัตถุซึ่งโดยทั่วไปจะถูกเขียนใหม่
(4) GetClass: วิธีการสะท้อนกลับเพื่อให้ได้คลาสที่เป็นของวัตถุ
(5) รอ: สามารถใช้ในส่วนรหัสที่ซิงโครไนซ์เท่านั้น หากไม่รวมพารามิเตอร์เวลาเธรดการดำเนินการจะทำให้ล็อคถูกยกเลิกและป้อนสถานะการรอคอย (รอพูล)
(6) แจ้ง: สามารถใช้ในส่วนรหัสที่ซิงโครไนซ์เท่านั้นนำด้ายจากสระน้ำรอและใส่ลงในพูลล็อคธง
(7) NotifyAll: สามารถใช้ในส่วนรหัสที่ซิงโครไนซ์เท่านั้นและเธรดทั้งหมดจะถูกนำออกจากสระว่ายน้ำรอและใส่ลงในพูลล็อค
23. หลักการพื้นฐานของการทำให้เป็นอนุกรม Java?
แปลงข้อมูลวัตถุเป็นข้อมูล bytecode
(1) เก็บคำอธิบายของการทำให้เป็นอนุกรม (2) ข้อมูลคำอธิบายชั้นเรียนปัจจุบัน (3) คำอธิบายของแอตทริบิวต์คลาสปัจจุบัน (4) คำอธิบาย SuperClass (5) คำอธิบายแอตทริบิวต์ SuperClass (6) SuperClass Attribute Value Description (7) Subclass Attribute Value Description