คำถามสัมภาษณ์ยอดนิยม Java บทสัมภาษณ์นักพัฒนา Middle Java วิธีการทำงานของ substring() ของคลาส String

💖 ชอบไหม?แชร์ลิงก์กับเพื่อนของคุณ

สำหรับผู้ที่ได้ยินคำว่า Java Core เป็นครั้งแรก สิ่งเหล่านี้ถือเป็นรากฐานพื้นฐานของภาษา ด้วยความรู้นี้ คุณสามารถไปฝึกงาน/ฝึกงานได้อย่างปลอดภัย คำถามเหล่านี้จะช่วยให้คุณทบทวนความรู้ก่อนการสัมภาษณ์หรือเรียนรู้สิ่งใหม่ๆ สำหรับตัวคุณเอง หากต้องการเพิ่มทักษะการปฏิบัติ เรียนที่

    จะสร้างวัตถุที่ไม่เปลี่ยนรูปใน Java ได้อย่างไร? รายการผลประโยชน์ทั้งหมด

    คลาสที่ไม่เปลี่ยนรูปคือคลาสที่สถานะไม่สามารถเปลี่ยนแปลงได้หลังจากการสร้าง ที่นี่สถานะของวัตถุถือเป็นค่าที่เก็บไว้ในอินสแตนซ์ของคลาสเป็นหลัก ไม่ว่าจะเป็นประเภทดั้งเดิมหรือประเภทการอ้างอิง

    หากต้องการทำให้คลาสไม่เปลี่ยนรูป ต้องเป็นไปตามเงื่อนไขต่อไปนี้:

    1. ห้ามระบุตัวตั้งค่าหรือเมธอดที่แก้ไขฟิลด์หรือออบเจ็กต์ที่อ้างถึงฟิลด์ ตัวตั้งค่าหมายถึงการเปลี่ยนแปลงสถานะของวัตถุ ซึ่งเป็นสิ่งที่เราต้องการหลีกเลี่ยงในที่นี้
    2. ทำให้ทุกฟิลด์เป็นที่สิ้นสุดและเป็นส่วนตัว ช่องที่ทำเครื่องหมายเป็นส่วนตัวจะไม่สามารถเข้าถึงได้จากภายนอกชั้นเรียน และการกำหนดให้เป็นช่องสุดท้ายช่วยให้แน่ใจว่าคุณจะไม่เปลี่ยนแปลงช่องเหล่านั้น แม้ว่าจะไม่ได้ตั้งใจก็ตาม
    3. ไม่อนุญาตให้คลาสย่อยแทนที่วิธีการ วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการประกาศชั้นเรียนครั้งสุดท้าย คลาสที่สรุปผลแล้วใน Java ไม่สามารถเขียนทับได้
    4. โปรดจำไว้เสมอว่าอินสแตนซ์ตัวแปรของคุณสามารถเปลี่ยนแปลงได้หรือไม่เปลี่ยนรูปก็ได้ กำหนดและส่งคืนออบเจ็กต์ใหม่พร้อมเนื้อหาที่คัดลอกสำหรับออบเจ็กต์ที่ไม่แน่นอนทั้งหมด (ประเภทการอ้างอิง) ตัวแปรที่ไม่เปลี่ยนรูป (ชนิดดั้งเดิม) สามารถส่งคืนได้อย่างปลอดภัยโดยไม่ต้องใช้ความพยายามเพิ่มเติม

    นอกจากนี้ คุณต้องจำข้อดีที่ตามมาของคลาสที่ไม่เปลี่ยนรูปด้วย คุณอาจต้องการสิ่งเหล่านี้ในการสัมภาษณ์ คลาสที่ไม่เปลี่ยนรูป:

    • ออกแบบ ทดสอบ และใช้งานง่าย
    • เธรดปลอดภัยโดยอัตโนมัติและไม่มีปัญหาการซิงโครไนซ์
    • ไม่จำเป็นต้องมีตัวสร้างการคัดลอก
    • อนุญาตให้คุณเริ่มต้นแฮชโค้ดอย่างเกียจคร้านและแคชค่าที่ส่งคืน
    • ไม่ต้องการการคัดลอกที่ปลอดภัยเมื่อใช้เป็นฟิลด์
    • สร้างคีย์แผนที่ที่ดีและองค์ประกอบการตั้งค่า (วัตถุเหล่านี้ไม่ควรเปลี่ยนสถานะเมื่ออยู่ในคอลเลกชัน)
    • ทำให้ชั้นเรียนของคุณเป็นแบบถาวรโดยสร้างเพียงครั้งเดียว และไม่จำเป็นต้องตรวจสอบอีกครั้ง
    • มี "อะตอมมิกซิตีที่ล้มเหลว" เสมอ (คำที่ Joshua Bloch ตั้งขึ้น): หากวัตถุที่ไม่เปลี่ยนรูปทำให้เกิดข้อยกเว้น มันจะไม่มีวันคงอยู่ในสถานะที่ไม่ต้องการหรือไม่ได้กำหนดไว้

    ดูตัวอย่างที่เขียนในโพสต์นี้

    ข้อกำหนด Java ระบุว่าทุกอย่างใน Java ถูกส่งผ่านตามค่า ไม่มีสิ่งที่เรียกว่า "ผ่านการอ้างอิง" ใน Java เงื่อนไขเหล่านี้เชื่อมโยงกับวิธีการเรียกและตัวแปรที่ส่งผ่านเป็นพารามิเตอร์ของวิธีการ โอเค ประเภทดั้งเดิมจะถูกส่งผ่านด้วยค่าเสมอโดยไม่มีความสับสน แต่แนวคิดควรมีความชัดเจนในบริบทของพารามิเตอร์วิธีการประเภทที่ซับซ้อน


    ในตัวอย่างด้านบน บิตที่อยู่ของอินสแตนซ์แรกจะถูกคัดลอกโดยตัวแปรอ้างอิงอื่น ทำให้การอ้างอิงทั้งสองชี้ไปยังตำแหน่งหน่วยความจำเดียวกันที่จัดเก็บออบเจ็กต์ โปรดจำไว้ว่าการกำหนด null ให้กับลิงก์ที่สอง คุณจะไม่กำหนด null ให้กับลิงก์แรก แต่การเปลี่ยนแปลงสถานะของออบเจ็กต์ที่มีตัวแปรอ้างอิงตัวหนึ่งจะสะท้อนให้เห็นในอีกลิงก์หนึ่ง

    ในที่สุดการใช้บล็อกคืออะไร? บล็อกนี้รับประกันการรันโค้ดหรือไม่ ในที่สุดบล็อกจะไม่ถูกเรียกเมื่อใด

    บล็อกสุดท้ายจะถูกเรียกเสมอหากมีบล็อก try อยู่ เพื่อให้แน่ใจว่าบล็อกสุดท้ายจะถูกเรียกแม้ว่าจะมีข้อยกเว้นที่ไม่คาดคิดเกิดขึ้นก็ตาม แต่สุดท้ายก็มีประโยชน์มากกว่าแค่การจัดการข้อยกเว้น - บล็อกนี้ช่วยให้คุณสามารถล้างโค้ดที่ถูกข้ามโดยไม่ได้ตั้งใจผ่านการ return ดำเนินการต่อหรือหยุดทำงาน การวางโค้ดการล้างข้อมูลในบล็อกสุดท้ายถือเป็นแนวปฏิบัติที่ดีเสมอ แม้ว่าจะไม่มีการคาดหวังข้อยกเว้นก็ตาม

    หากเครื่องเสมือนออกในขณะที่ดำเนินการบล็อก try หรือ catch บล็อกสุดท้ายจะไม่ถูกดำเนินการ ในทำนองเดียวกัน หากเธรดกำลังดำเนินการ try หรือ catch block และถูกขัดจังหวะหรือถูกฆ่า บล็อกสุดท้ายจะไม่ถูกดำเนินการ แม้ว่าแอปพลิเคชันจะยังคงทำงานต่อไปก็ตาม

    เหตุใดจึงมีคลาส Date สองคลาส คลาสหนึ่งอยู่ในแพ็คเกจ java.util และคลาสอื่นใน java.sql

    java.util.Date แทนวันที่และเวลา ในขณะที่ java.sql.Date แทนเฉพาะวันที่ ส่วนเสริมของ java.sql.Date คือคลาส java.sql.Time ซึ่งแสดงถึงเวลาเท่านั้น

    คลาส java.sql.Date เป็นคลาสย่อย (ส่วนขยาย) ของคลาส java.util.Date แล้วมีอะไรเปลี่ยนแปลงใน java.sql.Date:

    • toString() สร้างการแสดงสตริงที่แตกต่างกัน: yyyy-mm-dd
    • วิธีการคงที่ valueOf(String) สร้างวันที่จากสตริงที่มีการเป็นตัวแทนข้างต้น
    • ไม่รวม getters และ setters สำหรับชั่วโมง นาที และวินาที

    คลาส java.sql.Date ใช้ใน JDBC และได้รับการออกแบบมาให้ไม่มีส่วนประกอบของเวลา ซึ่งหมายความว่าชั่วโมง นาที วินาที และมิลลิวินาทีจะต้องเป็นศูนย์... แต่ไม่จำเป็นสำหรับชั้นเรียน

    อธิบายอินเทอร์เฟซของมาร์กเกอร์

    รูปแบบอินเทอร์เฟซโทเค็นเป็นรูปแบบการออกแบบในวิทยาการคอมพิวเตอร์ที่ใช้โดยภาษาการเขียนโปรแกรมนั้น ให้ข้อมูลเกี่ยวกับออบเจ็กต์ ณ รันไทม์- นี้ จัดเตรียมวิธีการเชื่อมโยงข้อมูลเมตาของชั้นเรียนโดยที่ภาษาไม่มีการสนับสนุนที่ชัดเจนสำหรับข้อมูลเมตาดังกล่าว- ใน Java มีการใช้อินเทอร์เฟซสำหรับสิ่งนี้โดยไม่ต้องระบุวิธีการ

    ตัวอย่างที่ดีของอินเทอร์เฟซโทเค็นใน Java คืออินเทอร์เฟซแบบอนุกรม คลาสใช้อินเทอร์เฟซนี้เพื่อระบุว่าข้อมูลที่ไม่ชั่วคราวสามารถเขียนลงในสตรีมไบต์หรือระบบไฟล์ได้

    ปัญหาหลักอินเทอร์เฟซของมาร์กเกอร์คืออินเทอร์เฟซกำหนดแบบแผนสำหรับคลาสที่นำไปใช้ และแบบแผนนั้นสืบทอดมาจากคลาสย่อยทั้งหมด ซึ่งหมายความว่าคุณจะไม่สามารถ "ยกเลิกการใช้งาน" โทเค็นได้ ในตัวอย่างข้างต้น หากคุณสร้างคลาสย่อยที่คุณไม่ต้องการทำให้เป็นอนุกรม (อาจเป็นเพราะมันอยู่ในสถานะชั่วคราว) คุณต้องหันไปใช้ NotSerializableException อย่างชัดเจน

    เหตุใดเมธอด main() จึงถูกประกาศให้เป็นโมฆะสาธารณะแบบคงที่

    ทำไมต้องสาธารณะ?วิธีการหลักมีตัวแก้ไขการเข้าถึงสาธารณะ ดังนั้นจึงสามารถเข้าถึงได้ทุกที่และโดยออบเจ็กต์ใด ๆ ที่ต้องการใช้วิธีนี้เพื่อเรียกใช้แอปพลิเคชัน ตอนนี้ฉันไม่ได้บอกว่า JDK/JRE มีเหตุผลที่คล้ายกัน เนื่องจาก java.exe หรือ javaw.exe (สำหรับ windows) ใช้การเรียก Java Native Interface (JNI) เพื่อเรียกใช้เมธอด ดังนั้นพวกเขาจึงสามารถเรียกมันต่อไปได้ โดยไม่คำนึงถึง ตัวแก้ไขการเข้าถึง

    ทำไมต้องคงที่?สมมติว่าวิธีการหลักของเราไม่คงที่ ตอนนี้เพื่อเรียกวิธีการใด ๆ ที่คุณต้องการอินสแตนซ์ของคลาส ขวา? Java อนุญาตให้มีคอนสตรัคเตอร์ที่โอเวอร์โหลด เราทุกคนรู้ดี ถ้าอย่างนั้นควรใช้อันไหนและพารามิเตอร์สำหรับคอนสตรัคเตอร์ที่โอเวอร์โหลดจะมาจากไหน?

    เหตุใดจึงเป็นโมฆะ?ไม่มีการใช้ค่าที่ส่งคืนในเครื่องเสมือนที่เรียกวิธีนี้จริงๆ สิ่งเดียวที่แอปพลิเคชันต้องการบอกกระบวนการโทรก็คือว่ากระบวนการยุติตามปกติหรือผิดปกติ สิ่งนี้เป็นไปได้แล้วโดยใช้ System.exit(int) ค่าที่ไม่ใช่ศูนย์หมายถึงการทำงานเสร็จสมบูรณ์อย่างผิดปกติ ไม่เช่นนั้นทุกอย่างก็โอเค

    อะไรคือความแตกต่างระหว่างการสร้างสตริงเป็น new() และการสร้างตัวอักษร (โดยใช้เครื่องหมายคำพูดคู่)?

    เมื่อเราสร้างสตริงโดยใช้ new() มันจะถูกสร้างขึ้นในฮีปและจะถูกเพิ่มลงในพูลสตริงด้วย ในขณะที่สตริงที่สร้างโดยใช้ลิเทอรัลจะถูกสร้างขึ้นในพูลสตริงเท่านั้น

    คุณจะต้องทำความคุ้นเคยกับแนวคิดเรื่องการรวมสตริงให้มากขึ้นเพื่อตอบคำถามนี้หรือคำถามที่คล้ายกัน คำแนะนำของฉันคือการเรียนรู้คลาส String และ String Pool จริงๆ

    substring() วิธีการของคลาส String ทำงานอย่างไร

    เช่นเดียวกับภาษาการเขียนโปรแกรมอื่นๆ สตริงใน Java นั้นเป็นลำดับของอักขระ คลาสนี้เป็นเหมือนคลาสยูทิลิตี้สำหรับการทำงานกับลำดับนี้ ลำดับของอักขระมีให้โดยตัวแปรต่อไปนี้:

    /** ค่านี้ใช้สำหรับจัดเก็บอักขระ - /** เป็นค่าที่ใช้เก็บตัวอักษร */ค่าถ่านสุดท้ายส่วนตัว ; ตัวแปรต่อไปนี้ใช้เพื่อเข้าถึงอาร์เรย์นี้ในสถานการณ์ต่างๆ /** อ็อฟเซ็ตคือดัชนีแรกของการจัดเก็บข้อมูลที่ใช้ - /** Offset คือดัชนีแรกของพื้นที่เก็บข้อมูลที่ใช้ -ออฟเซ็ต int สุดท้ายส่วนตัว /** การนับคือจำนวนอักขระใน String - /** Count คือจำนวนอักขระในบรรทัด -จำนวน int ส่วนตัวสุดท้าย

    แต่ละครั้งที่เราสร้างสตริงย่อยจากอินสแตนซ์สตริงที่มีอยู่ เมธอด substring() จะตั้งค่าใหม่ให้กับตัวแปรออฟเซ็ตและนับเท่านั้น อาร์เรย์อักขระภายในไม่เปลี่ยนแปลง นี่เป็นสาเหตุที่เป็นไปได้ของหน่วยความจำรั่วหากใช้เมธอด substring() อย่างไม่ระมัดระวัง:

    ค่าเดิมไม่เปลี่ยนแปลง ดังนั้น หากคุณสร้างสตริงที่มีความยาว 10,000 อักขระ และสร้างสตริงย่อย 100 รายการ โดยแต่ละสตริงมีอักขระ 5-10 ตัว ออบเจ็กต์ทั้งหมด 101 รายการจะมีอาร์เรย์อักขระยาว 10,000 อักขระเหมือนกัน ไม่ต้องสงสัยเลยว่านี่เป็นการสิ้นเปลืองหน่วยความจำ

    สิ่งนี้สามารถหลีกเลี่ยงได้โดยการเปลี่ยนรหัสดังนี้:

    แทนที่ original.substring(beginIndex) ด้วย new String(Original.substring(beginIndex)) โดยที่ original เป็นสตริงดั้งเดิม

    อธิบายการทำงานของ HashMap ปัญหาการซ้ำซ้อนแก้ไขได้อย่างไร?

    พวกคุณส่วนใหญ่คงเห็นด้วยว่า HashMap เป็นหัวข้อที่ได้รับความนิยมมากที่สุดสำหรับการสนทนาในการสัมภาษณ์ในปัจจุบัน หากมีคนขอให้ฉันบอกคุณว่า “HashMap ทำงานอย่างไร” ฉันก็จะตอบเพียงว่า “ตามหลักการของการแฮช” เรียบง่ายอย่างที่มันเป็น

    ดังนั้น การแฮชจึงเป็นวิธีการกำหนดโค้ดเฉพาะให้กับตัวแปร/อ็อบเจ็กต์ใดๆ หลังจากใช้สูตร/อัลกอริทึมกับคุณสมบัติแล้ว

    คำจำกัดความของแผนที่คือ: "วัตถุที่เชื่อมโยงคีย์กับค่า" ง่ายมากใช่มั้ย? ดังนั้น HashMap จึงมีรายการคลาสภายในของตัวเองซึ่งมีลักษณะดังนี้:

    รายการคลาสคงที่ใช้แผนที่ - รายการ(คีย์ K สุดท้าย; ค่า V; รายการถัดไป; แฮช int สุดท้าย; …//โค้ดเพิ่มเติมอยู่ที่นี่ )

    เมื่อมีคนพยายามใส่คู่คีย์-ค่าลงใน HashMap สิ่งต่อไปนี้จะเกิดขึ้น:

    • ประการแรก วัตถุหลักจะถูกตรวจสอบเป็น null หากคีย์เป็นโมฆะ ค่าจะถูกจัดเก็บในตำแหน่งตาราง เพราะแฮชโค้ดสำหรับค่าว่างจะเป็น 0 เสมอ
    • จากนั้น ขั้นตอนต่อไปคือการคำนวณค่าแฮชโดยการเรียกเมธอด hashCode() ของตัวแปรคีย์ แฮชนี้ใช้ในการคำนวณดัชนีลงในอาร์เรย์เพื่อเก็บวัตถุรายการ นักพัฒนา JDK ตระหนักดีว่าเมธอด hashCode() อาจเขียนได้ไม่ดี และอาจส่งคืนค่าที่มากหรือน้อยมากได้ เพื่อแก้ไขปัญหานี้ พวกเขาได้แนะนำวิธี hash() อีกวิธีหนึ่ง และส่งรหัสแฮชของออบเจ็กต์ไปยังวิธีนี้เพื่อส่งค่านั้นไปยังช่วงขนาดดัชนีอาร์เรย์
    • ตอนนี้มีการเรียกเมธอด indexFor(hash, table.length) เพื่อคำนวณตำแหน่งที่แน่นอนในการจัดเก็บออบเจ็กต์รายการ
    • ตอนนี้ส่วนหลัก ดังที่เราทราบกันว่าวัตถุสองชิ้นที่แตกต่างกันสามารถมีค่าแฮชโค้ดเดียวกันได้ แล้ววัตถุสองชิ้นที่แตกต่างกันจะถูกจัดเก็บไว้ในตำแหน่งเดียวกันในไฟล์เก็บถาวร [เรียกว่าที่เก็บข้อมูล] ได้อย่างไร

    คำตอบคือ LinkedList หากคุณจำได้ว่าคลาส Entry มีคุณสมบัติ "ถัดไป" คุณสมบัตินี้จะชี้ไปที่วัตถุถัดไปในห่วงโซ่เสมอ ลักษณะการทำงานนี้คล้ายกับ LinkedList มาก

    ดังนั้น ในกรณีที่รหัสแฮชตรงกัน ออบเจ็กต์รายการจะถูกจัดเก็บในรูปแบบของ LinkedList เมื่อจำเป็นต้องวางวัตถุ Entry ไว้ที่ดัชนีเฉพาะ HashMap จะตรวจสอบเพื่อดูว่ามีวัตถุ Entry อื่นอยู่ในตำแหน่งนั้นหรือไม่ หากไม่มีทางเข้า วัตถุของเราจะถูกบันทึกไว้ในตำแหน่งนี้

    หากมีวัตถุอื่นอยู่ในดัชนีของเราแล้ว ช่องถัดไปจะถูกทำเครื่องหมาย หากเป็นโมฆะ อ็อบเจ็กต์ของเราจะกลายเป็นโหนดถัดไปใน LinkedList หาก next ไม่ใช่ null ขั้นตอนนี้จะถูกทำซ้ำจนกว่าจะพบฟิลด์ถัดไปที่เป็น null

    จะเกิดอะไรขึ้นถ้าเราเพิ่มค่าคีย์อื่นที่เท่ากับค่าที่เราเพิ่มไว้ก่อนหน้านี้ เป็นเหตุผลที่ควรแทนที่ค่าเก่า สิ่งนี้เกิดขึ้นได้อย่างไร? หลังจากกำหนดดัชนีตำแหน่งสำหรับออบเจ็กต์ Entry แล้ววนซ้ำใน LinkedList ที่อยู่ในดัชนีของเรา HashMap จะเรียกเมธอดเท่ากับ () บนค่าคีย์สำหรับออบเจ็กต์ Entry แต่ละรายการ ออบเจ็กต์รายการเหล่านี้ทั้งหมดใน LinkedList มีค่าแฮชโค้ดเหมือนกัน แต่เมธอดเท่ากับ () จะตรวจสอบความเท่าเทียมกันที่แท้จริง ถ้ากุญแจ. เท่ากับ (k) จะเป็น จริงจากนั้นทั้งสองจะถูกมองว่าเป็นวัตถุเดียวกัน สิ่งนี้จะทำให้วัตถุค่าภายในวัตถุรายการถูกแทนที่เท่านั้น

    ด้วยวิธีนี้ HashMap ช่วยให้แน่ใจว่าคีย์ไม่ซ้ำกัน

    ความแตกต่างระหว่างอินเทอร์เฟซและคลาสนามธรรม?

    นี่เป็นคำถามที่พบบ่อยมากหากคุณกำลังสัมภาษณ์โปรแกรมเมอร์ระดับจูเนียร์ ความแตกต่างที่สำคัญที่สุดมีดังต่อไปนี้:

    • ในอินเทอร์เฟซ Java ตัวแปรถือเป็นนิรนัยสุดท้าย คลาสนามธรรมสามารถมีตัวแปรที่ไม่ใช่ตัวแปรสุดท้ายได้
    • อินเทอร์เฟซใน Java ไม่สามารถใช้งานได้อย่างแน่นอน คลาสนามธรรมสามารถมีอินสแตนซ์ของวิธีการที่ใช้พฤติกรรมพื้นฐานได้
    • ส่วนประกอบอินเทอร์เฟซต้องเป็นสาธารณะ คลาสนามธรรมสามารถมีตัวดัดแปลงการเข้าถึงเพื่อให้เหมาะกับรสนิยมของคุณ
    • อินเทอร์เฟซจะต้องถูกนำมาใช้กับคีย์เวิร์ดที่นำไปใช้ คลาสนามธรรมต้องขยายด้วยคีย์เวิร์ด ขยาย.
    • ใน Java คลาสสามารถใช้อินเทอร์เฟซได้มากมาย แต่สามารถสืบทอดจากคลาสนามธรรมเพียงคลาสเดียวเท่านั้น
    • อินเทอร์เฟซเป็นแบบนามธรรมโดยสมบูรณ์และไม่สามารถมีอินสแตนซ์ได้ คลาสนามธรรมไม่สามารถมีอินสแตนซ์ของคลาสได้ แต่สามารถเรียกได้หากมีเมธอด main()
    • คลาสนามธรรมจะเร็วกว่าอินเทอร์เฟซเล็กน้อยเนื่องจากอินเทอร์เฟซจะถือว่ามีการค้นหาก่อนที่จะเรียกใช้เมธอดที่ถูกแทนที่ใน Java ในกรณีส่วนใหญ่ นี่เป็นข้อแตกต่างเล็กน้อย แต่หากคุณกำลังเขียนแอปพลิเคชันที่เน้นเวลา คุณจะต้องคำนึงถึงข้อเท็จจริงนี้ด้วย
  1. คุณจะแทนที่วิธี hashCode() และเท่ากับ () เมื่อใด

    วิธีการ hashCode() และเท่ากับ() ถูกกำหนดไว้ในคลาส Object ซึ่งเป็นคลาสหลักของอ็อบเจ็กต์ Java ทั้งหมด ด้วยเหตุนี้ ออบเจ็กต์ Java ทั้งหมดจึงสืบทอดการใช้งานพื้นฐานของวิธีการเหล่านี้

    hashCode() วิธีการใช้เพื่อให้ได้ค่าจำนวนเต็มที่ไม่ซ้ำกันสำหรับวัตถุที่กำหนด ค่านี้ใช้เพื่อระบุตำแหน่งของบัคเก็ตเมื่อจำเป็นต้องจัดเก็บออบเจ็กต์ในโครงสร้างข้อมูล เช่น HashTable ตามค่าเริ่มต้น เมธอด hashCode() จะส่งคืนการแสดงจำนวนเต็มของที่อยู่หน่วยความจำที่วัตถุนั้นถูกจัดเก็บ

    วิธีการเท่ากับ () ดังที่ชื่อแนะนำ ใช้เพื่อดำเนินการเทียบเท่าวัตถุอย่างง่าย การใช้งานพื้นฐานของวิธีนี้คือการตรวจสอบการอ้างอิงของสองวัตถุเพื่อตรวจสอบว่าเทียบเท่ากันหรือไม่

    โปรดทราบว่าโดยปกติแล้วจำเป็นต้องแทนที่เมธอด hashCode() ทุกครั้งที่เมธอดเท่ากับ () ถูกแทนที่ นี่เป็นสิ่งจำเป็นเพื่อสนับสนุนแบบแผนทั่วไปของวิธี hashCode ซึ่งระบุว่าวัตถุที่เท่ากันจะต้องมีรหัสแฮชที่เท่ากัน

    วิธีการเท่ากับ() ต้องกำหนดความเท่าเทียมกันระหว่างความสัมพันธ์ (ต้องเป็นแบบเกิดซ้ำ สมมาตร และสกรรมกริยา) นอกจากนี้ จะต้องคงอยู่ (หากวัตถุไม่มีการเปลี่ยนแปลง วิธีการจะต้องส่งกลับค่าเดียวกัน) นอกจากนี้ o.equals(null) ควรส่งคืนเสมอ เท็จ.

    hashCode() จะต้องคงอยู่ (หากวัตถุไม่ได้รับการแก้ไขตามเงื่อนไขของเมธอดเท่ากับ () จะต้องส่งคืนค่าเดิมต่อไป

    ความสัมพันธ์ระหว่างทั้งสองวิธีคือ: เสมอถ้า a.equals(b) ดังนั้น a.hashCode() จะต้องเหมือนกับ b.hashCode()

ขอให้โชคดีกับการเรียนนะ!! ผู้เขียนบทความ โลเกช กุปต้า บทความต้นฉบับลิงค์ไปยังส่วนอื่น ๆ :

ฉันย้ายไปอยู่เมืองอื่น ฉันได้งาน ฉันกำลังจะไปสัมภาษณ์ สำหรับฉันดูเหมือนว่าคำถามที่ถามในนั้นแม้จะรู้จักกันดีแต่เมื่อนำมารวมกันแล้วสามารถช่วยให้คุณเตรียมตัวและรู้สึกมั่นใจมากขึ้น

คำถามที่จะช่วยให้คุณเข้าใจหลักการสร้าง DBMS
1. รูปแบบปกติแรกและกระบวนการทำให้เป็นมาตรฐานคืออะไร? แบบฟอร์มปกติมีอะไรบ้าง?
2. ดัชนี DBMS มีความหมายว่าอย่างไร มีโครงสร้างอย่างไร และจัดเก็บอย่างไร คุณจะใช้ฟังก์ชันเดียวกันนี้อย่างไร? คำถามสุดท้ายคือถามว่าไม่มีความเข้าใจที่ชัดเจนเกี่ยวกับดัชนีหรือไม่
3. วาดความสัมพันธ์แบบกลุ่มต่อกลุ่ม ตัวอย่างเช่น ตารางผู้แต่งและหนังสือ ผู้เขียนคนหนึ่งสามารถมีหนังสือได้หลายเล่ม และหนังสือหนึ่งเล่มสามารถเขียนโดยผู้เขียนหลายคนได้ เขียนแบบสอบถาม SQL เพื่อเลือกหนังสือโดยผู้เขียนเฉพาะ

คำถามพื้นฐานเกี่ยวกับ Java
4. คลาสพื้นฐานใน Java ดังที่คุณทราบคือ Object คุณสามารถตั้งชื่อวิธีใดได้บ้าง?
5. บอกเราว่าอะไรเท่ากับและ hashCode คืออะไร? มีกฎและแบบแผนอะไรบ้างในการนำวิธีการเหล่านี้ไปใช้? จะใช้เมื่อไหร่?
6. อธิบายการรอ, แจ้ง, แจ้งทุกวิธี พวกเขาใช้อย่างไร เมื่อใด ทำไมจึงจำเป็น? การซิงโครไนซ์คืออะไร?
7. สรุปคืออะไร? เหตุใดจึงจำเป็น? คุณสามารถบอกเราเกี่ยวกับตัวรวบรวมขยะและอัลกอริธึมของมันได้อย่างไร
8. เหตุใดวิธีการโคลนจึงได้รับการประกาศว่ามีการป้องกัน สิ่งที่จำเป็นในการดำเนินการโคลนนิ่ง?
9. มีตัวแก้ไขอะไรบ้าง (การเข้าถึงและอื่น ๆ )? ความผันผวนและชั่วคราวคืออะไร? ค่าเริ่มต้นสามารถนำมาใช้เพื่ออะไรและในกรณีใดบ้าง?

กรอบงานคอลเลกชัน Java
10. อินเทอร์เฟซการรวบรวมใน Java คืออะไร? อธิบายว่าแตกต่างกันอย่างไร
11. คุณรู้การใช้งานอินเทอร์เฟซเหล่านี้อะไรบ้าง?
12. ArrayList และ LinkedList แตกต่างกันอย่างไร? พวกเขาสร้างขึ้นมาได้อย่างไร? ควรใช้ในกรณีใดบ้าง?
13. HashMap และ TreeMap แตกต่างกันอย่างไร? มีโครงสร้างและการทำงานอย่างไร? แล้วเวลาในการเข้าถึงอ็อบเจ็กต์นั้น ขึ้นอยู่กับอะไร?
14. Hashtable คืออะไร แตกต่างจาก HashMap อย่างไร วันนี้เลิกใช้งานแล้ว คุณจะยังคงใช้ฟังก์ชันที่จำเป็นได้อย่างไร

ข้อยกเว้น
15. มีข้อยกเว้นอะไรบ้าง? คุณรู้ข้อยกเว้นประเภทใดบ้างและแตกต่างกันอย่างไร
16. อาจมีปัญหากับการบล็อก try-catch-finally และคำถามว่าสิ่งใดจะถูกส่งกลับหรือข้อยกเว้นใดจะผ่านไปในที่สุด?

อัลกอริทึม
17. คุณรู้อัลกอริธึมการเรียงลำดับอะไรบ้าง? คุณรู้จักอัลกอริธึมประเภทใด?
นอกจากนี้ ยังมีคำถามเพิ่มเติมมากมายเกี่ยวกับการประเมินความซับซ้อนของอัลกอริธึมและการเปรียบเทียบกัน

รูปแบบการออกแบบ
18. คุณคุ้นเคยกับรูปแบบการออกแบบใดบ้าง?
19. เขียนซิงเกิลตัน... และแบบขี้เกียจโหลด จะเกิดอะไรขึ้นถ้ามันจำเป็นต้องเป็นเธรดที่ปลอดภัย? และในกรณีใดบ้างที่การโหลดแบบขี้เกียจแย่ลง?
20. คุณจะพูดอะไรเกี่ยวกับ MVC ได้บ้าง? วาดแผนภาพและอธิบายวิธีการทำงานของ MVC

ชุดคำถามที่จะช่วยให้คุณเข้าใจเทคโนโลยี Stack ของ J2EE
21. servlet, jsp คืออะไร, ความแตกต่างคืออะไร?
22. อาแจ็กซ์คืออะไร? เทคโนโลยีนี้ทำงานโดยพื้นฐานอย่างไร?
23. ORM คืออะไร แปลอย่างไร และควรทำงานอย่างไร?

ปัญหาง่ายๆ ในการเขียนอัลกอริทึม
24. เขียนฟังก์ชันเพื่อคำนวณแฟกทอเรียล
25. มีการกำหนดฟังก์ชันสำหรับคำนวณตัวเลขฟีโบนัชชี เป็นที่รู้กันว่าใช้งานได้ ค้นหาการเข้าใจผิดเชิงตรรกะ ประเมินความซับซ้อนของอัลกอริธึมผลลัพธ์
26. กลับเส้น.
27. คำนวณค่าเฉลี่ยของอาร์เรย์

จำไว้ว่าถ้าคุณรู้สึกไม่มั่นใจมากนัก ก็ไม่จำเป็นต้องพูดคำที่ไม่จำเป็น คุณพูดคำพิเศษออกมา แล้วพวกเขาก็เกาะมันไว้ กำลังคลายโซ่ออก พวกเขากำลังโปรโมตสิ่งที่พวกเขาไม่แน่ใจมากนัก ความสามารถของผู้คน - ในการยึดเกาะ - ต้องใช้ แต่มีประโยชน์ต่อตัวคุณเอง ;-)

ความรู้ความเข้าใจ...สิ่งต่าง ๆ ค่อนข้างต่างกันดังนั้น
- อัลกอริธึมที่แตกต่างกัน เช่น การเรียงลำดับ คุ้มค่าที่จะเขียนด้วยตัวเอง แม้จะมาจากหนังสือเรียนก็ตาม ดูว่าพวกเขาแตกต่างกันอย่างไร เปรียบเทียบความซับซ้อน
- การดูยูทิลิตีและไลบรารีต่างๆ หลักการของการจัดกลุ่มคลาสเป็นแพ็คเกจ และสไตล์การเขียนโค้ดและการแสดงความคิดเห็นจะเป็นประโยชน์ จะมีประโยชน์มากในการทำความเข้าใจตัวแก้ไขการเข้าถึงและการจัดระเบียบโครงการ
- โดยการทำความเข้าใจบางอย่างที่เฉพาะเจาะจง คุณสามารถช่วยเหลือผู้ที่รู้น้อยได้ ไปที่ฟอรัมใดก็ได้แล้วลองตอบคำถามในหัวข้อที่คุณสนใจ คุณสามารถทำบางสิ่งบางอย่างเพื่อตัวคุณเองจากการสนทนา คุณสามารถเขียนบทความสั้น ๆ แน่นอนว่าคุณต้องมีความเข้าใจในหัวข้อนี้เป็นอย่างดี
งานใดๆ ที่มุ่งเป้าไปที่การปรับปรุงคุณสมบัติของตนเองจะปรากฏแก่ผู้สัมภาษณ์ที่มีความสามารถและจะไม่มีใครสังเกตเห็น สิ่งเดียวคือคุณต้องพูดถึงมันอย่างตรงไปตรงมา คุณไม่ควรดูถูกความสามารถและความสามารถของคุณ
หากต้องการมีแนวทางในการเตรียมตัวหรือพัฒนาตนเองเป็นผู้เชี่ยวชาญก็อาจดูคล้าย ๆ นี้ได้

จริงๆ แล้ว คำถามข้างต้นเป็นระดับ Junior Developer อย่างที่ผมจินตนาการไว้ ที่ไหนสักแห่ง อาจจะลึกกว่านี้ บางแห่งน้อยกว่า แต่ในความเป็นจริงแล้ว - จูเนียร์

ทุกวิธีแก้ปัญหาจะสร้างปัญหาใหม่

เราได้รวบรวมตัวอย่างโปรแกรมที่ยุ่งยาก 10 ตัวอย่างที่แสดงข้อมูลต่างๆ คุณควรดูโค้ดและบอกว่าโปรแกรมจะส่งออกอะไร เป็นไปได้ว่าโปรแกรมจะไม่คอมไพล์ด้วยซ้ำ ในกรณีนี้ คุณต้องระบุสิ่งที่คอมไพลเลอร์จะส่งออก

ผู้คนชอบถามคำถามแบบนี้ในระหว่างการสัมภาษณ์ ดังนั้นจึงเป็นความคิดที่ดีที่จะทบทวนความรู้เกี่ยวกับภาษาการเขียนโปรแกรม Java คำตอบจะถูกซ่อนอยู่ในสปอยเลอร์ - สิ่งที่โปรแกรมหรือคอมไพเลอร์จะส่งออก ลองคิดด้วยตัวเองก่อนที่จะดูคำตอบที่ถูกต้อง

แพ็คเกจ com.instanceofjava; คลาสสาธารณะ B ( B b = new B(); public int show())( return (true ? null: 0); ) public static void main(String args) ( B b = new B(); b.show( ) ;

  • ทุกครั้งที่เราสร้างอ็อบเจ็กต์ของคลาสใดๆ ตัวสร้างจะถูกเรียกก่อน และหน่วยความจำจะถูกจัดสรรให้กับตัวแปรที่ไม่คงที่ทั้งหมด
  • ที่นี่ B b = ใหม่ B(); วัตถุของคลาส B ได้รับการกำหนดวัตถุใหม่ของคลาสเดียวกัน
  • เขียน B b = ใหม่ B(); นำไปสู่การดำเนินการแบบเรียกซ้ำของ Constructor ซึ่งสร้างอ็อบเจ็กต์ที่ไม่มีที่สิ้นสุด นี่คือเหตุผลว่าทำไมข้อยกเว้น java.lang.StackOverFlowError จะถูกยกขึ้นมาบนเธรด "main" เมื่อโค้ดนี้ทำงาน
  • สาเหตุทั่วไปของข้อยกเว้นประเภทนี้คือการเรียกซ้ำที่ไม่ดี ซึ่งมักเกิดขึ้นเนื่องจากเงื่อนไขการยกเลิกที่ไม่ถูกต้อง

โปรแกรมต่อไปนี้จะแสดงผลอะไร?

แพ็คเกจ com.instanceofjava; คลาสสาธารณะ A ( โมฆะสาธารณะคงที่แสดง ()) ( System.out.println ("วิธีคงที่เรียกว่า"); ) โมฆะสาธารณะคงที่ main (Args สตริง) ( A obj = null; obj.show (); ) )
  • เราสามารถเรียกวิธีการคงที่โดยใช้ตัวแปรอ้างอิง null ประเด็นก็คือวิธีการแบบคงที่อยู่ในระดับชั้นเรียน นี่คือเหตุผลที่เราสามารถเรียกใช้ฟังก์ชันคงที่ทั้งโดยใช้คลาสเองและการใช้ตัวแปรเท่ากับ null

โปรแกรมต่อไปนี้จะแสดงผลอะไร?

แพ็คเกจ com.instanceofjava; คลาสสาธารณะ A ( static int a = 1111; static ( a = a-- - --a; ) ( a = a++ + ++a; ) โมฆะสาธารณะคงที่ main (String args) ( System.out.println (a) ; ))

โปรแกรมต่อไปนี้จะแสดงผลอะไร?

แพ็คเกจ com.instanceofjava; คลาสสาธารณะ A( int GetValue() ( return (true ? null: 0); ) โมฆะสาธารณะคงที่ main(String args) ( A obj = new A(); obj.GetValue(); ) )

โปรแกรมต่อไปนี้จะแสดงผลอะไร?

แพ็คเกจ com.instanceofjava; คลาสสาธารณะ A (โมฆะสาธารณะคงหลัก (สตริง args) (จำนวนเต็ม i1 = 128; จำนวนเต็ม i2 = 128; System.out.println (i1 == i2); จำนวนเต็ม i3 = 127; จำนวนเต็ม i4 = 127; System.out.println (i3 == i4);

โปรแกรมต่อไปนี้จะแสดงผลอะไร?

แพ็คเกจ com.instanceofjava; คลาส A ( วิธีการเป็นโมฆะ(int i) ( ) ) คลาส B ขยาย A ( @Override วิธีการเป็นโมฆะ(จำนวนเต็ม i) ( ) )
  • บรรทัดใดของโปรแกรมที่จะทำให้เกิดข้อผิดพลาดในการคอมไพล์?
แพ็คเกจ com.instanceofjava; คลาส A ( โมฆะสาธารณะคงที่ main (String args) ( จำนวนเต็ม i = จำนวนเต็มใหม่ (null); String s = สตริงใหม่ (null); ) )

โปรแกรมต่อไปนี้จะแสดงผลอะไร?

แพ็คเกจ com.instanceofjava; คลาส A ( โมฆะสาธารณะคงที่ main (String args) ( String s = "ONE"+3+2+"TWO"+"THREE"+5+4+"FOUR"+"FIVE"+5; System.out.println (s);

โปรแกรมต่อไปนี้จะแสดงผลอะไร?

แพ็คเกจ com.instanceofjava; คลาส A ( static int method1(int i) ( return method2(i *= 11); ) static int method2(int i) ( return method3(i /= 11); ) static int method3(int i) ( return method4( i -= 11); ) static int method4(int i) ( return i += 11; ) public static void main(String args) ( System.out.println(method1(11)); ) )

โปรแกรมต่อไปนี้จะแสดงผลอะไร?

แพ็คเกจ com.instanceofjava; คลาส A ( โมฆะสาธารณะคงที่ main (String args) ( System.out.println (null); ) )

จะเกิดอะไรขึ้นเมื่อคุณเขียน System.out.println(null); -

แน่นอนว่าเกิดข้อผิดพลาดในการคอมไพล์ วิธีการ println มีหลายรูปแบบ สามารถรับ String, Object หรือ char ได้ เมื่อส่งผ่านอาร์กิวเมนต์ null ไปยังฟังก์ชันนี้ คอมไพลเลอร์ไม่สามารถตัดสินใจได้ว่าจะใช้วิธีใดในสามวิธีที่จะเรียก

วิธีการโอเวอร์โหลด:

  • โมฆะสาธารณะ prinltln (String str) (
  • โมฆะสาธารณะ prinltln (ถ่าน ch) (
  • โมฆะสาธารณะ prinltln (Object ch) (

สำหรับคอมไพลเลอร์ การเรียก System.out.println(null) นั้นไม่ชัดเจน เนื่องจากสองวิธีอาจเหมาะสมไม่มากก็น้อยสำหรับเอาต์พุต null ‘a: println(String) และ println(char) แต่คอมไพเลอร์ไม่รู้ว่าจะเรียกวิธีการเฉพาะใด เพื่อให้การรวบรวมสำเร็จ คุณควรเขียน:

  • System.out.println((สตริง)null);
  • System.out.println((ถ่าน)null);
  • System.out.println((วัตถุ)null);

แต่ที่นี่คุณต้องระวัง โทร System.out.println ((อักขระ) null); จะส่งผลให้เกิดข้อยกเว้นรันไทม์

ฉันจะบอกคุณเกี่ยวกับตัวเองอย่างรวดเร็ว ฉันอายุ 25 ปี เกิดที่ไครเมีย เฟโอโดเซีย เขาเรียนที่โรงเรียนเทคนิคประจำเมือง จากนั้นเข้าเรียนที่คาร์คอฟ สำเร็จการศึกษาระดับปริญญาตรี และกลับบ้านในปี 2014 ในปี 2014 ฉันเข้าสู่การศึกษาทางไปรษณีย์ในระดับปริญญาโท (ความเชี่ยวชาญพิเศษทั้งหมดเกี่ยวข้องกับการเขียนโปรแกรม) และในปี 2558 ฉันเข้ากองทัพเพื่อรับบริการตามสัญญาเป็นระยะเวลา 3 ปี หลังจากรับราชการทหารเป็นเวลาสองปี ฉันก็ตระหนักว่าฉันต้องเปลี่ยนแปลงบางสิ่งในชีวิต... จากนั้นฉันก็ได้พบกับ JavaRush ในเดือนธันวาคม 2017 และฉันก็เริ่มเรียนรู้ Java อย่างต่อเนื่อง ในฤดูร้อน ฉันเข้าเรียนหลักสูตร Topjava กับ Grigory เริ่มเรียนแต่ละชั้นเรียน และภายในกลางเดือนกันยายน หลักสูตรสามเดือนน่าจะสิ้นสุดแล้ว โดยทั่วไป ต้นเดือนกันยายน ฉันจะย้ายไปมอสโคว์กับภรรยาเพื่อหางานเป็นโปรแกรมเมอร์ Java และได้สัมภาษณ์งานไปแล้วประมาณ 10 ครั้งจนถึงปัจจุบัน ฉันจะเขียนถึงคุณถึงสิ่งที่พวกเขาถามและคำถามที่ฉันถูกโจมตีอย่างต่อเนื่อง

    JDK, JRE, JVM และคอมไพเลอร์คืออะไรนี่เป็นสิ่งที่ต้องมี หากคุณถูกถามคำถามนี้ในการสัมภาษณ์และคุณไม่ตอบคำถาม ส่วนใหญ่แล้วพวกเขาจะไม่ถามอะไรเพิ่มเติม วิดีโอสั้นๆจาก ยูทูป

    การเขียนโปรแกรมเชิงวัตถุ (OOP)สิ่งสำคัญที่นี่คือการบอกคุณว่าความหลากหลายคืออะไร พวกเขาอาจขอให้คุณแปลคำนี้ แล้วคุณจะต้องบอกคำจำกัดความของมันตามนั้น คุณสามารถบอกทุกอย่างด้วยคำพูดของคุณเอง จากนั้นให้ยกตัวอย่างของคุณ

    การสืบทอดหลายรายการใน Java Java ไม่อนุญาตให้มีการสืบทอดคลาสหลายรายการ แต่อนุญาตให้มีการสืบทอดหลายอินเทอร์เฟซ เกี่ยวกับมรดก

    วิธีการของคลาส Object(ขอแนะนำให้ดูแต่ละวิธีในโค้ดโดยตรงและให้ความสนใจกับ Equals และ hashCode) ฉันเรียกมันแบบนี้: getClass, สรุป (อ่านเกี่ยวกับเรื่องนี้คุณไม่มีทางรู้ว่ามีคนถามคำถามนี้กี่คน แต่จำไว้ว่า: ในความคิดของฉัน นี่คือไม้ค้ำยัน) รอสักครู่ (ก็เพียงพอที่จะรู้ว่ามี 3 วิธีโอเวอร์โหลด ) แจ้งเตือน, notifyAll, เท่ากับ และ hashcode (จำเป็น!! ! รู้กฎ 4 ข้อของการเท่ากับ และต้องแน่ใจว่ารู้กฎระหว่าง เท่ากับ และ hashCode)

    JVM จากภายในหน่วยความจำสแต็กและฮีป

    คำหลักใหม่คืออะไรและทำงานอย่างไรฉันไม่พบเนื้อหา แต่พวกเขาถามฉันเกี่ยวกับเรื่องนี้หรือมากกว่าเมื่อเราเขียนตัวอย่าง

    A = ใหม่ A()
    เกิดอะไรขึ้นก่อนเท่ากับและหลังเท่ากับ?

    งานเก็บขยะ- พวกเขาไม่ได้ถามบ่อยนักแต่พอถามก็เริ่มขุดเท่าที่ผมรู้หัวข้อนี้ บทความดีๆเกี่ยวกับ

    ลำดับการเริ่มต้นของฟิลด์คลาสผู้ปกครองและเด็ก

    คอลเลกชัน:ฉันต้องอธิบายลำดับชั้นและงานทั้งหมดของแต่ละคอลเลกชันอย่างชัดเจน

    คำถามคือความแตกต่างระหว่างรายการและชุดคืออะไร สิ่งที่สำคัญที่สุดคือการบอกว่าอินเทอร์เฟซรายการคืออะไร หากคุณตอบว่า Set เป็นชุดของวัตถุที่ไม่ซ้ำใครนั่นจะไม่เพียงพอ

    HashMap, HashSet - ขนาดเริ่มต้น; ความจุ, loadfactory, อนุญาตเป็นโมฆะหรือไม่? เซลล์สำหรับออบเจ็กต์คำนวณอย่างไรเมื่อทำงานกับคอลเลกชัน Hash ความแตกต่างระหว่าง HashMap และ TreeMap (ไม่เพียงพอที่จะบอกว่า TreeMap เป็นคอลเลกชันที่เรียงลำดับตามอัลกอริทึมต้นไม้สีแดงดำ) รู้จักการแทรก การลบ และอัลกอริธึมการค้นหาสำหรับแต่ละคอลเลกชัน Queue, Deque, Stack - ฉันไม่ค่อยถูกถามคำถามเกี่ยวกับพวกเขา คุณจำเป็นต้องรู้ว่าอินเทอร์เฟซอยู่ที่ไหนและคลาสอยู่ในคอลเลกชันใด

    โปรดทราบว่าคอลเลกชันมีพาเรนต์ที่ทำซ้ำได้

    จาวา 8ตามนั้นเลยครับ ให้สูงสุดต้องบีบทุกสิ่งที่คุณรู้เกี่ยวกับ “นวัตกรรม” ที่ปล่อยออกมา 4 ปีที่แล้ว: นี่คือแหล่งที่มาใหม่ใน Java 8

    พวกเขาถามฉันเกี่ยวกับผู้บริโภค ฟังก์ชัน ฯลฯ จากนั้นพวกเขาก็ถามเกี่ยวกับอินเทอร์เฟซการทำงาน จากนั้นพวกเขาก็ถามฉันถึงวิธีสร้างคำอธิบายประกอบของตัวเอง ซึ่งหมายความว่า ตัวอย่างเช่น @SomeAnnotation (name = .... count =.... ) กล่าวคือ ชื่อคืออะไร จำนวน และวิธีทำงานในการสร้างคำอธิบายประกอบของคุณ

    ยาสามัญ- ทุกอย่างเกี่ยวกับยาชื่อสามัญ พวกเขาถามทุกที่

    สตรีม Thread, Runnable, ความแตกต่างคืออะไร, วิธีเริ่มเธรด มันคือทั้งหมดที่เกี่ยวกับการซิงโครไนซ์ Mutexes, มอนิเตอร์, คลาสล็อค การหยุดชะงักเมื่อมันเกิดขึ้น ให้ยกตัวอย่างเหล่านั้น

    ลำดับชั้นของข้อยกเว้นที่เลือก/ไม่ถูกตรวจสอบ เขียนคลาสข้อยกเว้นของคุณเอง

    ขั้นสุดท้าย , ขั้นสุดท้าย (อีกครั้ง), ไม่เปลี่ยนรูป , ท้ายที่สุด เมื่อการบล็อกล้มเหลวในที่สุด

    วิธีปิดการใช้งานการสืบทอดคลาส(ผู้สร้างเอกชน คลาสสุดท้าย...)

    เธรด IO/NIO

    รูปแบบ- เรียนรู้พื้นฐานอย่างน้อย 5 อย่าง (mvc, โรงงาน, มัณฑนากร, ซิงเกิลตัน, ผู้สังเกตการณ์)

    สปริง ioc, di, ioc - คอนเทนเนอร์นี่คือลิงก์ไปยังข้อมูลเชิงลึกเชิงปฏิบัติที่ช่วยฉันได้มาก... SPRING ที่นี่ฉันผ่านฤดูใบไม้ผลิจนถึงบทที่ 16 โดยเขียนโค้ดทั้งหมดด้วยมือ ฉันแนะนำให้คุณทำเช่นเดียวกัน

  • โอโอพีคืออะไร?
  • วัตถุคืออะไร?
  • หลักการพื้นฐานของ OOP คืออะไร?
  • มรดกคืออะไร?
  • ความแตกต่างคืออะไร? คุณรู้อาการของความหลากหลายใน Java อะไรบ้าง
  • การห่อหุ้มคืออะไร?
  • สิ่งที่เป็นนามธรรมคืออะไร?
  • ข้อดีของภาษาโปรแกรมเชิงวัตถุคืออะไร?
  • การใช้แนวทางเชิงวัตถุช่วยปรับปรุงการพัฒนาซอฟต์แวร์ได้อย่างไร
  • มีสำนวน "เป็น" และ "มี" พวกเขาหมายถึงอะไรในแง่ของหลักการ OOP? ความแตกต่างระหว่างองค์ประกอบและการรวมกลุ่มคืออะไร?
  • คุณหมายถึงอะไรโดยความหลากหลาย การห่อหุ้ม และการผูกแบบไดนามิก?

จาวาคอร์

  • JRE, JVM และ JDK แตกต่างกันอย่างไร?
  • อธิบายตัวดัดแปลงการเข้าถึงใน Java
  • การเข้าถึงระดับแพ็คเกจคืออะไร
  • คลาสนามธรรมแตกต่างจากอินเทอร์เฟซอย่างไร คุณจะใช้คลาสนามธรรมในกรณีใดบ้าง และคุณจะใช้อินเทอร์เฟซในกรณีใด
  • วัตถุสามารถเข้าถึงตัวแปรคลาสส่วนตัวได้หรือไม่? ถ้าใช่แล้วทำอย่างไร?
  • เหตุใดจึงมีบล็อกคงที่ใน Java
  • เป็นไปได้ไหมที่จะโอเวอร์โหลดวิธีคงที่?
  • บอกเราเกี่ยวกับชั้นเรียนภายใน คุณจะใช้มันเมื่อใด?
  • อะไรคือความแตกต่างระหว่างตัวแปรอินสแตนซ์และตัวแปรคงที่? ยกตัวอย่าง.
  • ยกตัวอย่างเมื่อคุณสามารถใช้วิธีคงที่ได้?
  • บอกเราเกี่ยวกับคลาสตัวโหลดและการโหลดคลาสแบบไดนามิก
  • คำสั่ง "assert" ที่ใช้ใน Java คืออะไร?
  • เหตุใดบางอินเทอร์เฟซจึงไม่กำหนดวิธีการเลย
  • อะไรคือความแตกต่างที่สำคัญระหว่าง String, StringBuffer, StringBuilder?
  • อธิบายเกี่ยวกับสตรีม Java I/O
  • หน่วยความจำ Heap และ Stack ใน Java คืออะไร?
  • อะไรคือความแตกต่างระหว่างหน่วยความจำ Stack และ Heap ใน Java?
  • บอกเราเกี่ยวกับโมเดลหน่วยความจำใน Java?
  • คนเก็บขยะทำงานอย่างไร?
  • บอกเราเกี่ยวกับการหล่อแบบ การลดระดับและการเลื่อนระดับประเภทคืออะไร? คุณจะได้รับ ClassCastException เมื่อใด
  • คลาสคงที่คืออะไร คุณสมบัติการใช้งานคืออะไร?
  • วิธีการเข้าถึงฟิลด์ของคลาสภายนอกจากคลาสที่ซ้อนกัน
  • มีคลาสที่ซ้อนกันประเภทใดบ้าง? พวกเขาใช้ทำอะไร?
  • เป็นไปได้หรือไม่ที่จะเปลี่ยนแปลงเมื่อแทนที่วิธีการ:
  • ตัวแก้ไขการเข้าถึง
  • ประเภทการส่งคืน
  • ประเภทหรือปริมาณของอาร์กิวเมนต์
  • ชื่ออาร์กิวเมนต์
  • ฉันควรเปลี่ยนลำดับ ปริมาณ หรือลบส่วนการพ่นทั้งหมดหรือไม่
  • ออโต้บ็อกซ์คืออะไร?
  • ยาสามัญคืออะไร?
  • จุดประสงค์ที่แท้จริงของการใช้ประเภททั่วไปใน Java คืออะไร?
  • ตัวแปรถูกส่งผ่านไปยังเมธอดอย่างไร โดยค่าหรือโดยการอ้างอิง?
  • คลาส Object มีวิธีการอะไรบ้าง?
  • กฎสำหรับการแทนที่ Object.equals() วิธีการ
  • หากคุณต้องการแทนที่เท่ากับ () จะต้องตรงตามเงื่อนไขใดสำหรับวิธีการแทนที่
  • ความสัมพันธ์ระหว่าง hashCode และเท่ากับคืออะไร?
  • วิธีการ hashCode และเท่ากับถูกนำมาใช้ในคลาส Object อย่างไร
  • จะเกิดอะไรขึ้นหากคุณแทนที่ค่าเท่ากับโดยไม่ลบล้าง hashCode ปัญหาอะไรที่อาจเกิดขึ้น?
  • มีคำแนะนำเกี่ยวกับฟิลด์ใดที่ควรใช้เมื่อคำนวณ hashCode หรือไม่
  • วิธี hashCode() มีไว้เพื่ออะไร?
  • กฎสำหรับการแทนที่เมธอด Object.hashCode()
  • บอกเราเกี่ยวกับการโคลนวัตถุ ความแตกต่างระหว่างการโคลนนิ่งแบบตื้นและลึกคืออะไร?
  • กฎสำหรับการแทนที่เมธอด Object.clone()
  • คุณสามารถใช้คอนสตรัคเตอร์ส่วนตัวได้ที่ไหนและอย่างไร?
  • ตัวสร้างเริ่มต้นคืออะไร?
  • อธิบายวิธีการ Object.finalize()
  • อะไรคือความแตกต่างระหว่าง Final, ในที่สุด และ Finalize?
  • อธิบายลำดับชั้นของข้อยกเว้น
  • คุณรู้ข้อยกเว้นประเภทใดบ้างใน Java มันแตกต่างกันอย่างไร
  • อะไรคือการตรวจสอบและการยกเลิกการตรวจสอบข้อยกเว้น?
  • จะสร้างข้อยกเว้นที่ไม่ได้ตรวจสอบของคุณเองได้อย่างไร
  • ข้อยกเว้น Unchecke คืออะไร
  • ข้อผิดพลาดคืออะไร?
  • อธิบายการทำงานของบล็อก try-catch-finly
  • เป็นไปได้ไหมที่จะใช้บล็อกแบบลองสุดท้าย (โดยไม่ต้องจับ)
  • ในที่สุดบล็อกจะถูกดำเนินการเสมอหรือไม่?
  • คุณสมบัติของคลาส String คืออะไร? วิธีการฝึกงาน () ทำอะไร?
  • เป็นไปได้ไหมที่จะสืบทอดประเภทสตริง เพราะเหตุใด
  • เหตุใด String จึงเป็นคีย์ยอดนิยมใน HashMap ใน Java
  • กำหนดแนวคิดของการต่อสตริง
  • จะกลับสตริงได้อย่างไร?
  • จะเปรียบเทียบค่าของสองสายได้อย่างไร?
  • จะตัดแต่งช่องว่างที่จุดเริ่มต้นและจุดสิ้นสุดของบรรทัดได้อย่างไร?
  • กำหนดคำว่า "สตริงพูล"
  • เป็นไปได้ไหมที่จะซิงโครไนซ์การเข้าถึงแถว?
  • จะเปรียบเทียบค่าสตริงของวัตถุสองชนิดที่แตกต่างกันประเภท String และ StringBuffer ได้อย่างถูกต้องได้อย่างไร
  • เหตุใดสตริงจึงไม่เปลี่ยนรูปและสรุปใน Java
  • เขียนวิธีการลบอักขระที่กำหนดออกจากสตริง
  • การสะท้อนคืออะไร?
  • จะเกิดอะไรขึ้นกับตัวรวบรวมขยะ (GC) หากมีข้อยกเว้นเกิดขึ้นระหว่างวิธีการสรุป () ของวัตถุบางอย่าง
  • ความเป็นสากล, การแปลเป็นภาษาท้องถิ่นคืออะไร?
  • คำอธิบายประกอบใน Java คืออะไร?
  • คำอธิบายประกอบทำหน้าที่อะไร?
  • คุณรู้คำอธิบายประกอบในตัวอะไรบ้างใน Java?
  • คำอธิบายประกอบ @Retention, @Documented, @Target และ @Inherited ทำหน้าที่อะไร
  • คำอธิบายประกอบ @Override, @Deprecated, @SafeVarargs และ @SuppressWarnings ทำหน้าที่อะไร
  • วงจรชีวิตของคำอธิบายประกอบใดที่สามารถระบุได้โดยใช้ @Retention
  • องค์ประกอบใดบ้างที่สามารถใช้คำอธิบายประกอบได้ และฉันจะระบุสิ่งนี้ได้อย่างไร
  • จะสร้างคำอธิบายประกอบของคุณเองได้อย่างไร?
  • แอตทริบิวต์ประเภทใดที่ได้รับอนุญาตในคำอธิบายประกอบ
  • JMX คืออะไร?
  • JMX ให้ประโยชน์อะไรบ้าง?
  • JMX สามารถทำอะไรได้อีกนอกจากการควบคุมระยะไกล?
  • MBean คืออะไร?
  • MBeans มีกี่ประเภท?
  • เซิร์ฟเวอร์ MBean คืออะไร
  • กลไกใดที่ให้ความปลอดภัยในเทคโนโลยี Java?
  • ตั้งชื่อเช็คหลายประเภทที่ตัวตรวจสอบ Java bytecode ดำเนินการหรือไม่
  • คุณรู้อะไรเกี่ยวกับ "ตัวจัดการความปลอดภัย" ใน Java?
  • JAAS คืออะไร?
  • การรีแฟคเตอร์คืออะไร?

กรอบงานคอลเลกชัน Java

  • คอลเลกชันคืออะไร?
  • ตั้งชื่ออินเทอร์เฟซหลักของคอลเลกชันและการใช้งาน
  • ArrayList แตกต่างจาก LinkedList อย่างไร ในกรณีใดจะดีกว่าถ้าใช้อันแรกและอันที่สองในกรณีใด
  • HashMap แตกต่างจาก Hashtable อย่างไร
  • ArrayList และ Vector แตกต่างกันอย่างไร?
  • องค์ประกอบคอลเลกชันมีการเปรียบเทียบอย่างไร
  • จัดเรียงอินเทอร์เฟซต่อไปนี้ในลำดับชั้น: รายการ, ตั้งค่า, แผนที่, SortedSet, SortedMap, คอลเลกชัน, Iterable, Iterator, NavigableSet, NavigableMap
  • เหตุใด Map จึงไม่ใช่คอลเลกชั่นในขณะที่รายการและเซ็ตเป็นคอลเลกชั่น
  • ให้นิยามคำว่า "ตัววนซ้ำ"
  • คุณรู้อะไรเกี่ยวกับอินเทอร์เฟซ Iterable บ้าง
  • วิธีแปลง HashSet เป็น ArrayList ในหนึ่งบรรทัด
  • วิธีแปลง ArrayList เป็น HashSet ในหนึ่งบรรทัด
  • จะวนซ้ำคีย์ทั้งหมดของ Map ได้อย่างไร เนื่องจาก Map นั้นไม่สามารถทำซ้ำได้
  • จะวนซ้ำค่า Map ทั้งหมดได้อย่างไรเนื่องจาก Map ไม่สามารถทำซ้ำได้
  • จะวนซ้ำคู่คีย์ - ค่าทั้งหมดในแผนที่ได้อย่างไรเนื่องจากแผนที่ไม่สามารถทำซ้ำได้
  • SortedMap “เรียงลำดับ” อย่างไร นอกเหนือจากข้อเท็จจริงที่ว่า toString() แสดงทุกอย่างตามลำดับ
  • วิธีคัดลอกองค์ประกอบจากคอลเลกชันใด ๆ ลงในอาเรย์ด้วยการโทรเพียงครั้งเดียว
  • ใช้ความแตกต่างแบบสมมาตรของสองคอลเลกชันโดยใช้วิธีการรวบรวม (addAll() ลบทั้งหมด() รักษาทั้งหมด())
  • เปรียบเทียบการแจงนับและตัววนซ้ำ
  • Iterable และ Iterator เกี่ยวข้องกันอย่างไร
  • Iterable, Iterator และ "for-each" ที่นำมาใช้ใน Java 5 เกี่ยวข้องกันอย่างไร
  • เปรียบเทียบ Iterator และ ListIterator
  • จะเกิดอะไรขึ้นถ้าฉันเรียก Iterator.next() โดยไม่ "ถาม" Iterator.hasNext()
  • จะเกิดอะไรขึ้นถ้าฉันเรียก Iterator.next() ก่อนที่จะเรียก Iterator.hasNext() 10 ครั้ง ฉันขาดองค์ประกอบ 9 ประการหรือไม่?
  • หากฉันมีคอลเลกชันและตัววนซ้ำย่อย คอลเลกชันจะเปลี่ยนแปลงหรือไม่หากฉันเรียก iterator.remove()
  • หากฉันมีคอลเลกชันและตัววนซ้ำย่อย ตัววนซ้ำจะเปลี่ยนแปลงหรือไม่หากฉันเรียก collection.remove(..)
  • ทำไมพวกเขาถึงเพิ่ม ArrayList ถ้ามี Vector อยู่แล้ว?
  • การใช้งานคลาส ArrayList มีฟิลด์ต่อไปนี้: Object elementData, int size อธิบายว่าเหตุใดขนาดร้านค้าจึงแยกกันหากคุณสามารถรับ elementData.length ได้ตลอดเวลา
  • LinkedList เป็นรายการที่เชื่อมโยงเดี่ยว รายการที่เชื่อมโยงสองเท่า หรือรายการที่เชื่อมโยงสี่รายการ
  • เวลาทำงานที่แย่ที่สุดของเมธอด contains() สำหรับองค์ประกอบที่อยู่ใน LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O( บ*น) )?
  • เวลาทำงานที่แย่ที่สุดของเมธอด contains() สำหรับองค์ประกอบที่อยู่ใน ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*log(N)), O(N*log(N)) คืออะไร (ญ*น) )?
  • เวลาทำงานที่แย่ที่สุดสำหรับเมธอด add() บน LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N)) คืออะไร ?
  • เวลาทำงานที่แย่ที่สุดของเมธอด add() สำหรับ ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N)) คืออะไร ?
  • เมื่อเรียกใช้ ArrayList.add() มีการจัดสรรองค์ประกอบจำนวนเท่าใดในหน่วยความจำ
  • มีการจัดสรรองค์ประกอบจำนวนเท่าใดในหน่วยความจำเมื่อเรียกใช้ LinkedList.add()
  • ประมาณจำนวนหน่วยความจำสำหรับจัดเก็บหนึ่งไบต์ดั้งเดิมใน LinkedList หรือไม่
  • ประมาณจำนวนหน่วยความจำสำหรับจัดเก็บหนึ่งไบต์ดั้งเดิมใน ArrayList หรือไม่
  • ฉันเพิ่มองค์ประกอบตรงกลางรายการ: list.add(list.size()/2, newElem) การดำเนินการนี้ช้ากว่าสำหรับใคร - สำหรับ ArrayList หรือสำหรับ LinkedList
  • จะวนซ้ำองค์ประกอบ LinkedList ในลำดับย้อนกลับโดยไม่ต้องใช้การรับช้า (ดัชนี) ได้อย่างไร
  • วิธีรับรายการที่มีองค์ประกอบทั้งหมดยกเว้น 3 รายการแรกและรายการสุดท้ายที่มีการโทรเพียงครั้งเดียวจากรายการ
  • วัตถุที่แตกต่างกันในหน่วยความจำ (ref0 != ref1) สามารถมี ref0.hashCode() == ref1.hashCode() ได้หรือไม่
  • วัตถุที่แตกต่างกันในหน่วยความจำ (ref0 != ref1) สามารถมี ref0.equals(ref1) == true ได้หรือไม่
  • การอ้างอิงที่แตกต่างกันไปยังวัตถุเดียวกันในหน่วยความจำ (ref0 == ref1) สามารถมี ref0.equals(ref1) == false ได้หรือไม่
  • มีคลาส Point(int x, y;) เหตุใดรหัสแฮช 31 * x + y จึงดีกว่า x + y
  • หาก class Point(int x, y;) มีการใช้งาน "ถูกต้อง" ของเมธอดเท่ากับ (return ref0.x == ref1.x && ref0.y == ref1.y) แต่ให้สร้างโค้ดแฮชในรูปแบบ int hashCode() ( return x;) จากนั้นจุดดังกล่าวจะถูกวางและดึงข้อมูลจาก HashSet อย่างถูกต้องหรือไม่
  • เท่ากับ() สร้างความสัมพันธ์ที่เท่าเทียมกัน ความสัมพันธ์นี้มีคุณสมบัติอะไรบ้าง: การสับเปลี่ยน, สมมาตร, การสะท้อนกลับ, การกระจายตัว, การเชื่อมโยง, การเคลื่อนผ่าน?
  • เป็นไปได้ไหมที่จะใช้เท่ากับ(Object that) (return this.hashCode() == that.hashCode()) แบบนี้
  • เท่ากับ ต้องตรวจสอบว่าอาร์กิวเมนต์ (เท่ากับ (วัตถุนั้น)) เป็นประเภทเดียวกันกับวัตถุนั้นเอง อะไรคือความแตกต่างระหว่าง this.getClass() == that.getClass() และอินสแตนซ์ของ MyClass?
  • เป็นไปได้ไหมที่จะใช้เมธอดเท่ากับของคลาส MyClass เช่นนี้: class MyClass (บูลีนสาธารณะเท่ากับ (MyClass นั่น) (ส่งคืนสิ่งนี้ == นั่น;))
  • HashMap จะทำงานได้หรือไม่หากคีย์ทั้งหมดส่งคืน int hashCode() (ส่งคืน 42;)
  • ทำไมพวกเขาถึงเพิ่ม HashMap ถ้ามี Hashtable อยู่แล้ว?
  • ตามข้อมูลของ Knuth และ Cormen มีการใช้งานตารางแฮชหลักสองประการ: การกำหนดที่อยู่แบบเปิดและการผูกมัด HashMap ถูกนำไปใช้อย่างไร? ทำไมพวกเขาถึงทำเช่นนี้ (ในความคิดของคุณ)? ข้อดีและข้อเสียของแต่ละวิธีมีอะไรบ้าง?
  • มีการคลิกลิงก์กี่ครั้งเมื่อคุณทำ HashMap.get (คีย์) บนคีย์ที่อยู่ในตาราง
  • มีวัตถุใหม่จำนวนเท่าใดที่ถูกสร้างขึ้นเมื่อคุณเพิ่มองค์ประกอบใหม่ลงใน HashMap
  • HashMap ทำงานอย่างไรเมื่อคุณพยายามจัดเก็บสององค์ประกอบไว้ในนั้นด้วยคีย์ที่มี hashCode เดียวกัน แต่สิ่งใดที่เท่ากับ == false
  • HashMap สามารถลดระดับลงเป็นรายการได้แม้กระทั่งกับคีย์ที่มี hashCodes ต่างกัน สิ่งนี้เป็นไปได้อย่างไร?
  • เวลาทำงานที่แย่ที่สุดของเมธอด get(key) สำหรับคีย์ที่ไม่ได้อยู่ในตารางคืออะไร (O(1), O(log(N)), O(N), O(N*log(N)) ,โอ(น*น ))?
  • เวลาทำงานที่แย่ที่สุดของเมธอด get(key) สำหรับคีย์ที่อยู่ในตารางคืออะไร (O(1), O(log(N)), O(N), O(N*log(N)) อ(น*น ))?
  • อธิบายความหมายของพารามิเตอร์ในตัวสร้าง HashMap(int defaultCapacity, float loadFactor)
  • อะไรคือความแตกต่างระหว่าง HashMap และ IdentityHashMap? IdentityHashMap มีไว้เพื่ออะไร? จะมีประโยชน์อย่างไรสำหรับการนำซีเรียลไลซ์เซชั่นหรือการโคลนไปใช้?
  • อะไรคือความแตกต่างระหว่าง HashMap และ WeakHashMap? WeakHashMap มีไว้เพื่ออะไร?
  • WeakHashMap ใช้ WeakReferences ทำไมไม่สร้าง SoftHashMap บน SoftReferences
  • WeakHashMap ใช้ WeakReferences ทำไมไม่สร้าง PhantomHashMap บน PhantomReferences
  • สร้าง HashSet จาก HashMap (ใช้เพียงชุดของคีย์ ไม่ใช่ชุดของค่า)
  • สร้าง HashMap จาก HashSet (HashSet >).
  • เปรียบเทียบอินเทอร์เฟซ java.util.Queue และ java.util.Deque
  • ใครขยายใคร: คิวขยาย Deque หรือ Deque ขยายคิว?
  • เหตุใด LinkedList จึงใช้ทั้ง List และ Deque
  • อะไรคือความแตกต่างระหว่างคลาส java.util.Arrays และ java.lang.reflect.Array?
  • อะไรคือความแตกต่างระหว่างคลาส java.util.Collection และ java.util.Collections?
  • เขียนโปรแกรมแบบมัลติเธรดที่ไม่ทำให้คอลเลกชันส่ง ConcurrentModificationException
  • "พฤติกรรมล้มเหลวเร็ว" คืออะไร?
  • มีคลาสพิเศษ java.util.EnumSet สำหรับชุด enum หรือไม่ เพื่ออะไร? เหตุใดผู้เขียนจึงไม่พอใจกับ HashSet หรือ TreeSet
  • java.util.Stack - ถือว่า "ล้าสมัย" แนะนำให้แทนที่ด้วยอะไร? ทำไม
  • คอลเลกชันใดที่ใช้ระเบียบวินัยในการบริการ FIFO
  • คอลเลกชันใดที่ใช้ระเบียบวินัยในการให้บริการของ FILO
  • ยกตัวอย่างเมื่อคอลเลกชันใด ๆ ส่ง UnsupportedOperationException
  • เหตุใดฉันจึงเขียน "ArrayList" ไม่ได้ ตัวเลข = ArrayList ใหม่ ();" แต่คุณสามารถ "List ตัวเลข = ArrayList ใหม่ ();"?
  • LinkedHashMap - นี่คือ "สัตว์ร้าย" แบบไหน? LinkedList คืออะไร และ HashMap คืออะไร
  • LinkedHashSet - นี่คือ "สัตว์ร้าย" แบบไหน? LinkedList คืออะไร และ HashSet คืออะไร
  • พวกเขาบอกว่ามันง่ายที่จะสร้างแคชง่ายๆ ด้วย “นโยบายการทำให้เป็นโมฆะ” บน LinkedHashMap คุณรู้ไหมว่าทำอย่างไร?
  • PriorityQueue ช่วยให้คุณทำอะไรได้บ้าง?
  • java.util.Comparator และ java.lang.Comparable แตกต่างกันอย่างไร

จาวา 8

  • ลิงค์สัญลักษณ์คืออะไร?
  • I/O และ NIO แตกต่างกันอย่างไร
  • คุณรู้จักคุณสมบัติอะไรบ้างของ NIO?
  • มีสตรีม I/O ประเภทใดบ้าง
  • ตั้งชื่อคลาสหลักของสตรีม I/O
  • อะไรคือความแตกต่างและ OutputStream, InputStream, Writer, Reader มีอะไรเหมือนกัน?
  • คุณรู้จักคลาสย่อยใดบ้างของคลาสพื้นฐาน InputStream และทำหน้าที่อะไร
  • คุณรู้อะไรเกี่ยวกับ RandomAccessFile?
  • RandomAccessFile มีโหมดการเข้าถึงไฟล์อะไรบ้าง
  • คุณรู้จักคลาสย่อยใดบ้างของคลาสพื้นฐาน OutputStream และทำหน้าที่อะไร
  • PushbackInputStream ใช้ทำอะไร?
  • SequenceInputStream ใช้ทำอะไร?
  • คุณรู้จักคลาสย่อยใดของคลาสพื้นฐาน Reader และมีไว้เพื่ออะไร
  • คุณรู้จักคลาสย่อยใดบ้างของคลาสพื้นฐาน Writer และทำหน้าที่อะไร
  • เส้นทางสัมบูรณ์และเส้นทางสัมพัทธ์คืออะไร?
  • แพ็คเกจใดมีคลาสเธรด?
  • คุณรู้อะไรเกี่ยวกับซูเปอร์คลาสบ้าง?
  • คลาสส่วนเสริมใดที่อนุญาตให้คุณอ่านข้อมูลจากสตรีมไบต์อินพุตในรูปแบบของประเภทข้อมูลดั้งเดิม
  • คลาสเสริมใดที่ช่วยให้คุณเพิ่มความเร็วในการอ่าน/เขียนโดยใช้บัฟเฟอร์
  • คลาสใดที่อนุญาตให้คุณแปลงไบต์สตรีมเป็นสตรีมอักขระและในทางกลับกัน
  • อะไรคือความแตกต่างระหว่างคลาส PrintWriter และ PrintStream?
  • คลาสใดที่ออกแบบมาเพื่อทำงานกับองค์ประกอบระบบไฟล์?
  • ตัวคั่นคืออักขระใดเมื่อระบุพาธในระบบไฟล์
  • คุณรู้จักคลาส File ด้วยวิธีใดบ้าง
  • คุณรู้อะไรเกี่ยวกับอินเทอร์เฟซ FileFilter?
  • คลาสใดที่อนุญาตให้คุณเก็บถาวรอ็อบเจ็กต์?

  • การซิงโครไนซ์เกิดขึ้นเมื่อเรียกวิธีการซิงโครไนซ์แบบคงที่บนวัตถุใด
  • คำหลักระเหย, ซิงโครไนซ์, ชั่วคราว, เนทิฟใช้สำหรับทำอะไร?
  • ลำดับความสำคัญของเธรดหมายถึงอะไร?
  • เธรด daemon ใน Java คืออะไร
  • การทำให้กระแสหลับหมายถึงอะไร?
  • เธรดสามารถมีสถานะใดใน Java โฟลว์ทำงานอย่างไรจริง ๆ ?
  • อะไรคือความแตกต่างระหว่างอินเทอร์เฟซทั้งสองสำหรับการนำงาน Runnable และ Callable ไปใช้?
  • ความแตกต่างระหว่าง CyclicBarrier และ CountDownLatch คืออะไร
  • สภาพการแข่งขันคืออะไร?
  • จะหยุดเธรดได้อย่างไร?
  • จะเกิดอะไรขึ้นเมื่อเธรดส่งข้อยกเว้น?
  • ตัวแปร ThreadLocal คืออะไร
  • FutureTask คืออะไร?
  • ความแตกต่างระหว่างถูกขัดจังหวะและถูกขัดจังหวะ?
  • เหตุใดวิธีการรอและแจ้งเตือนจึงถูกเรียกในบล็อกที่ซิงโครไนซ์
  • เธรดพูลคืออะไร?
  • ความแตกต่างระหว่าง livelock และ deadlock?
  • จะตรวจสอบได้อย่างไรว่าด้ายล็อคอยู่หรือไม่?
  • จะรับการถ่ายโอนข้อมูลเธรดได้อย่างไร?
  • พารามิเตอร์ JVM ใดที่ใช้ในการควบคุมขนาดสแต็กของเธรด
  • ความแตกต่างระหว่างการซิงโครไนซ์และ ReentrantLock คืออะไร
  • เซมาฟอร์คืออะไร?
  • จะเกิดอะไรขึ้นถ้าคิวเธรดพูลเต็มแล้วและคุณส่งงาน?
  • ความแตกต่างระหว่างวิธีการส่ง () และดำเนินการ () บนเธรดพูล?
  • วิธีการบล็อกคืออะไร?
  • ReadWriteLock คืออะไร
  • การล็อคแบบตรวจสอบสองครั้งของ Singleton คืออะไร?
  • กรอบงาน Fork/Join คืออะไร
  • บอกเพื่อน