ปัญหามัลติเธรดและการเกิดขึ้นพร้อมกันเป็นส่วนสำคัญของการสัมภาษณ์ Java หากคุณต้องการรับตำแหน่งข้อมูลส่วนหน้าในธนาคารเพื่อการลงทุนหุ้นใด ๆ คุณควรเตรียมคำถามมากมายเกี่ยวกับมัลติเธรด มัลติเธรดและการเกิดขึ้นพร้อมกันเป็นหัวข้อที่ได้รับความนิยมอย่างมากในวาณิชธนกิจโดยเฉพาะอย่างยิ่งที่เกี่ยวข้องกับการพัฒนาธุรกรรมทางอิเล็กทรอนิกส์ พวกเขาจะถามผู้สัมภาษณ์หลายคำถามที่ทำให้เกิดความสับสน ผู้สัมภาษณ์ต้องการให้แน่ใจว่าผู้สัมภาษณ์มีความรู้เพียงพอเกี่ยวกับการทำเกลียวและการเกิดขึ้นพร้อมกันของ Java เพราะผู้สมัครหลายคนเป็นเพียงผิวเผินเท่านั้น ความจุสูงและระบบการซื้อขายอิเล็กทรอนิกส์ในเวลาเดียวกันสำหรับการทำธุรกรรมที่มุ่งเน้นตลาดตรงนั้นเกิดขึ้นพร้อมกัน ต่อไปนี้เป็นคำถามเกี่ยวกับเกลียว Java ที่ฉันต้องการถามในเวลาและสถานที่ต่าง ๆ ฉันไม่ได้ให้คำตอบ แต่ฉันจะให้เบาะแสแก่คุณเมื่อเป็นไปได้และบางครั้งเบาะแสเหล่านี้ก็เพียงพอที่จะตอบคำถาม ขณะนี้มีปัญหามากขึ้นเรื่อย ๆ ที่อ้างถึงแพ็คเกจ Java5 พร้อมกันเกี่ยวกับเครื่องมือที่เกิดขึ้นพร้อมกันและคอลเลกชันพร้อมกัน Threadlocal, การปิดกั้นคิว, การนับเซมาฟอร์และพร้อมกันเกิดขึ้นได้รับความนิยมมากขึ้นในคำถามเหล่านั้น
15 คำถามสัมภาษณ์และคำตอบของ Java Multi-Threaded
1) ตอนนี้มีสามเธรด T1, T2 และ T3 คุณจะมั่นใจได้อย่างไรว่า T2 ถูกดำเนินการหลังจากดำเนินการ T1 และดำเนินการ T3 หลังจากดำเนินการ T2?
คำถามหัวข้อนี้มักจะถูกถามในช่วงการสัมภาษณ์รอบแรกหรือโทรศัพท์โดยมีวัตถุประสงค์เพื่อตรวจสอบว่าคุณคุ้นเคยกับวิธีการ "เข้าร่วม" หรือไม่ ปัญหามัลติเธรดนี้ค่อนข้างง่ายและสามารถนำไปใช้ได้โดยใช้วิธีการเข้าร่วม
2) ข้อดีของอินเทอร์เฟซล็อคผ่านบล็อกซิงโครไนซ์ใน Java คืออะไร? คุณต้องใช้แคชที่มีประสิทธิภาพซึ่งช่วยให้ผู้ใช้หลายคนอ่าน แต่ผู้ใช้เพียงคนเดียวเท่านั้นที่จะเขียนเพื่อรักษาความสมบูรณ์ คุณจะใช้มันอย่างไร?
ข้อได้เปรียบที่ใหญ่ที่สุดของอินเทอร์เฟซล็อคในการเขียนโปรแกรมแบบมัลติเธรดและพร้อมกันคือพวกเขาให้ล็อคสำหรับการอ่านและเขียนแยกต่างหากซึ่งสามารถตอบสนองคุณในการเขียนโครงสร้างข้อมูลประสิทธิภาพสูงเช่นพร้อมกัน คำถามสัมภาษณ์แบบกระทู้ Java จะถูกถามมากขึ้นตามคำตอบของผู้สัมภาษณ์ ฉันขอแนะนำให้อ่านล็อคอย่างระมัดระวังก่อนที่คุณจะไปสัมภาษณ์แบบมัลติเธรดเนื่องจากปัจจุบันใช้ในการสร้างแคชไคลเอนต์ระบบธุรกรรมอิเล็กทรอนิกส์และพื้นที่เชื่อมต่อธุรกรรม
3) ความแตกต่างระหว่างวิธีการรอและการนอนหลับใน Java คืออะไร?
คำถามสัมภาษณ์ Java Thread ที่มักถูกถามในระหว่างการสัมภาษณ์ทางโทรศัพท์ ความแตกต่างที่ยิ่งใหญ่ที่สุดคือการรอการล็อคขณะรออยู่ในขณะที่การนอนหลับยังคงถือล็อค การรอคอยมักจะใช้สำหรับการโต้ตอบระหว่างเธรดและการนอนหลับมักจะใช้เพื่อหยุดการดำเนินการชั่วคราว
4) ใช้ Java เพื่อใช้คิวการบล็อก
นี่เป็นคำถามสัมภาษณ์แบบมัลติเธรดที่ค่อนข้างยากซึ่งสามารถบรรลุเป้าหมายได้มากมาย ก่อนอื่นสามารถตรวจจับได้ว่าผู้สมัครสามารถเขียนโปรแกรมในหัวข้อ Java ได้หรือไม่ ประการที่สองมันสามารถตรวจจับความเข้าใจของผู้สมัครเกี่ยวกับสถานการณ์ที่เกิดขึ้นพร้อมกันและคุณสามารถถามคำถามมากมายตามสิ่งนี้ หากเขาใช้วิธีการรอ () และแจ้ง () วิธีการที่จะใช้คิวการบล็อกคุณสามารถขอให้เขาเขียนอีกครั้งด้วยคลาสที่เกิดขึ้นพร้อมกันล่าสุดใน Java 5
5) ใช้ Java เพื่อเขียนโค้ดเพื่อแก้ปัญหาผู้ผลิต-ผู้บริโภค
มันคล้ายกับคำถามข้างต้นมาก แต่คำถามนี้คลาสสิกมากกว่า บางครั้งคำถามต่อไปนี้จะถูกถามในการสัมภาษณ์ วิธีแก้ปัญหาผู้ผลิต-ผู้บริโภคใน Java? แน่นอนว่ามีวิธีแก้ปัญหามากมาย ฉันได้แชร์วิธีการที่ใช้การปิดกั้นคิวเพื่อนำไปใช้ บางครั้งพวกเขายังถามว่าจะตระหนักถึงปัญหาของนักปรัชญาที่กินได้อย่างไร
6) คุณจะแก้ปัญหาการเขียนโปรแกรมโปรแกรมที่จะทำให้เกิดการหยุดชะงักใน Java ได้อย่างไร?
นี่คือคำถามสัมภาษณ์กระทู้ Java ที่ฉันโปรดปรานเพราะแม้ว่าปัญหาการหยุดชะงักจะเป็นเรื่องธรรมดามากเมื่อเขียนโปรแกรมพร้อมกันหลายเธรดผู้สมัครหลายคนไม่สามารถเขียนรหัสฟรีที่หยุดชะงัก (ไม่มีรหัสหยุดชะงัก?) และพวกเขาต่อสู้ เพียงแค่บอกพวกเขาว่าคุณมีทรัพยากร n และ n เธรดและคุณต้องการทรัพยากรทั้งหมดเพื่อดำเนินการให้เสร็จสมบูรณ์ เพื่อความเรียบง่ายสามารถแทนที่ด้วย 2 ข้อมูลที่ใหญ่ขึ้นจะทำให้ปัญหามีความซับซ้อนมากขึ้น รับข้อมูลเพิ่มเติมเกี่ยวกับการหยุดชะงักโดยหลีกเลี่ยงการหยุดชะงักใน Java
7) การทำงานของอะตอมคืออะไรและการทำงานของอะตอมใน Java คืออะไร?
คำถามสัมภาษณ์กระทู้ Java ที่ง่ายมากคำถามต่อไปคือคุณต้องซิงโครไนซ์การผ่าตัดอะตอม
8) บทบาทสำคัญของความผันผวนใน Java คืออะไร? ใช้อย่างไร? มันแตกต่างจากวิธีการซิงโครไนซ์ใน Java อย่างไร?
เนื่องจากโมเดลหน่วยความจำ Java 5 และ Java มีการเปลี่ยนแปลงปัญหาการทำเกลียวตามคำหลักที่ผันผวนจึงกลายเป็นที่นิยมมากขึ้นเรื่อย ๆ คุณควรพร้อมที่จะตอบว่าตัวแปรผันผวนช่วยให้มั่นใจได้ว่าการมองเห็นในสภาพแวดล้อมที่เกิดขึ้นพร้อมกัน
9) เงื่อนไขการแข่งขันคืออะไร? คุณค้นพบและแก้ปัญหาการแข่งขันได้อย่างไร?
นี่เป็นคำถามที่ปรากฏในขั้นตอนขั้นสูงของการสัมภาษณ์แบบมัลติเธรด ผู้สัมภาษณ์ส่วนใหญ่จะถามเกี่ยวกับเงื่อนไขการแข่งขันที่คุณพบเมื่อเร็ว ๆ นี้และวิธีการแก้ไขของคุณ มีหลายครั้งที่พวกเขาเขียนโค้ดง่าย ๆ แล้วให้คุณตรวจจับเงื่อนไขการแข่งขันสำหรับรหัส คุณสามารถอ้างถึงบทความก่อนหน้าของฉันเกี่ยวกับเงื่อนไขการแข่งขัน Java ในความคิดของฉันนี่เป็นหนึ่งในคำถามสัมภาษณ์กระทู้ Java ที่ดีที่สุดซึ่งสามารถตรวจจับประสบการณ์ของผู้สมัครในการแก้ปัญหาสภาพการแข่งขันหรือการเขียนรหัสที่ปราศจากการแข่งขันข้อมูลหรือเงื่อนไขการแข่งขันอื่น ๆ หนังสือที่ดีที่สุดเกี่ยวกับเรื่องนี้คือ "การปฏิบัติที่เกิดขึ้นพร้อมกันใน Java"
10) คุณจะใช้ Dhed Dump อย่างไร? คุณจะวิเคราะห์การถ่ายโอนข้อมูลเธรดได้อย่างไร?
ใน UNIX คุณสามารถใช้ Kill -3 จากนั้น Dread Dump จะพิมพ์บันทึก ใน Windows คุณสามารถใช้ "Ctrl+Break" คำถามสัมภาษณ์กระทู้ที่เรียบง่ายและเป็นมืออาชีพ แต่มันจะยุ่งยากถ้าเขาถามคุณว่าจะวิเคราะห์อย่างไร
11) เหตุใดเราจึงเรียกใช้วิธีการเรียกใช้ () เมื่อเราเรียกเมธอด start () และทำไมเราไม่สามารถเรียกวิธีการเรียกใช้ () โดยตรงได้
นี่เป็นอีกคำถามสัมภาษณ์ Java Multithreaded คลาสสิก นี่เป็นความสับสนของฉันเมื่อฉันเริ่มเขียนโปรแกรมเธรดเป็นครั้งแรก ตอนนี้คำถามนี้มักจะถูกถามในระหว่างการสัมภาษณ์ทางโทรศัพท์หรือการสัมภาษณ์จูเนียร์และการสัมภาษณ์ Java กลางรอบแรก คำตอบสำหรับคำถามนี้ควรเป็นเช่นนี้: เมื่อคุณเรียกวิธีการเริ่มต้น () คุณจะสร้างเธรดใหม่และเรียกใช้รหัสในวิธีการเรียกใช้ () แต่ถ้าคุณเรียกเมธอด Run () โดยตรงมันจะไม่สร้างเธรดใหม่หรือเรียกใช้รหัสที่เรียกเธรด อ่านบทความ "ความแตกต่างระหว่างวิธีการเริ่มต้นและการเรียกใช้" ที่ฉันเขียนก่อนเพื่อรับข้อมูลเพิ่มเติม
12) คุณตื่นขึ้นมาด้ายบล็อกใน Java ได้อย่างไร?
นี่เป็นคำถามที่ยุ่งยากเกี่ยวกับการทำเกลียวและการบล็อกและมีวิธีแก้ปัญหามากมาย หากเธรดพบการอุดตันของ IO ฉันไม่คิดว่าจะมีวิธียกเลิกเธรด หากบล็อกเธรดเนื่องจากการโทรรอ (), sleep () หรือเข้าร่วม () เมธอดคุณสามารถขัดจังหวะเธรดและปลุกมันโดยการขว้าง InterruptedException "วิธีจัดการกับวิธีการบล็อกใน Java" ที่ฉันเขียนก่อนหน้านี้มีข้อมูลมากมายเกี่ยวกับการจัดการกับการปิดกั้นเธรด
13) อะไรคือความแตกต่างระหว่าง cyclibarriar และ Countdownlatch ใน Java?
ปัญหาการทำเกลียวนี้ส่วนใหญ่ใช้เพื่อตรวจสอบว่าคุณคุ้นเคยกับแพ็คเกจพร้อมกันใน JDK5 หรือไม่ ความแตกต่างระหว่างสองสิ่งนี้คือ Cyclicbarrier สามารถนำสิ่งกีดขวางที่ผ่านมาได้ในขณะที่ Countdownlatch ไม่สามารถนำกลับมาใช้ใหม่ได้
14) วัตถุที่ไม่เปลี่ยนรูปคืออะไรและช่วยในการเขียนแอปพลิเคชันพร้อมกันได้อย่างไร?
คำถามสัมภาษณ์แบบคลาสสิกอีกคำถามสำหรับมัลติเธรดไม่เกี่ยวข้องโดยตรงกับเธรด แต่มันช่วยได้มากทางอ้อม คำถามสัมภาษณ์ Java นี้อาจกลายเป็นเรื่องยุ่งยากมากถ้าเขาขอให้คุณเขียนวัตถุที่ไม่เปลี่ยนรูปหรือถามคุณว่าทำไมสตริงจึงไม่เปลี่ยนรูป
15) ปัญหาทั่วไปที่คุณพบในสภาพแวดล้อมแบบมัลติเธรดคืออะไร? คุณแก้ปัญหาได้อย่างไร?
พบได้ทั่วไปในโปรแกรมแบบมัลติเธรดและพร้อมกันคืออินเทอร์เฟซหน่วยความจำสภาพการแข่งขันการหยุดชะงักล็อคสดและความหิวโหย ปัญหาไม่มีที่สิ้นสุดและถ้าคุณเข้าใจผิดมันจะยากที่จะค้นพบและแก้ไขข้อบกพร่อง นี่คือคำถามที่อิงกับการสัมภาษณ์ไม่ใช่คำถามที่ใช้ในการใช้งานแอปพลิเคชัน Java
เพิ่มคำถามอื่น ๆ อีกมากมาย:
1) อะไรคือความแตกต่างระหว่างด้ายสีเขียวและเธรดท้องถิ่นใน Java?
2) ความแตกต่างระหว่างเธรดและกระบวนการ?
3) การสลับบริบทในมัลติเธรดคืออะไร?
4) ความแตกต่างระหว่างการหยุดชะงักและล็อคสดความแตกต่างระหว่างการหยุดชะงักและความหิว?
5) อัลกอริทึมการตั้งเวลาเธรดใช้ใน Java คืออะไร?
6) การกำหนดเวลาเธรดใน Java คืออะไร?
7) คุณจัดการกับข้อยกเว้นที่ไม่สามารถจับคู่ได้ในเธรดได้อย่างไร?
8) กลุ่มเธรดคืออะไรและทำไมจึงไม่แนะนำใน Java?
9) เหตุใดจึงดีกว่าที่จะใช้เฟรมเวิร์กผู้บริหารมากกว่าการสร้างและจัดการเธรดด้วยแอปพลิเคชัน
10) ความแตกต่างระหว่างผู้บริหารและผู้บริหารใน Java คืออะไร?
11) วิธีค้นหาเธรดใดที่ใช้เวลา CPU ที่ยาวที่สุดใน Windows และ Linux
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น