คำถามสัมภาษณ์เขียนโค้ดด้วย AI: ตัวอย่างและการฝึกฝน
โดย Aaron Cao · อัปเดตเมื่อ

เตรียมรับคำถามเกี่ยวกับอาร์เรย์ แฮชแมป ต้นไม้ กราฟ การเขียนโปรแกรมแบบไดนามิก และการดีบัก ระหว่างฝึก AI สามารถให้คำใบ้ เสนอกรณีทดสอบ และวิจารณ์คำอธิบายได้ แต่คุณยังต้องตรวจสอบความถูกต้องและความซับซ้อนด้วยตนเอง ใช้ความช่วยเหลือแบบสดเฉพาะเมื่อกฎการสัมภาษณ์อนุญาตเท่านั้น
ควรฝึกคำถามสัมภาษณ์เขียนโค้ดข้อใดก่อน?
แม้จะรู้ชื่ออัลกอริทึม คุณก็อาจยังไม่แน่ใจว่าจะเริ่มแก้ปัญหาใหม่อย่างไร คำถามฝึกเหล่านี้เชื่อมโยงอินพุตที่ชัดเจนกับการเลือกวิธีแก้ ขอบเขตความซับซ้อน และกรณีขอบที่ควรอธิบายออกเสียง
- Two Sum: คืนค่าดัชนีที่ต่างกันสองตำแหน่งซึ่งค่ารวมกันเท่ากับเป้าหมาย สำหรับ [3, 3] และเป้าหมาย 6 คำตอบต้องใช้ทั้งสองตำแหน่ง ให้ไล่ตรวจด้วยแฮชแมปของค่าที่พบก่อนหน้า โดยตรวจหาค่าส่วนเติมเต็มก่อนเก็บค่าปัจจุบัน วิธีนี้ป้องกันการใช้ดัชนีเดียวซ้ำ เวลาที่คาดหวังคือ O(n) และใช้พื้นที่เพิ่มเติม O(n) ควรถามให้ชัดว่าต้องคืนค่าอะไรหากไม่มีคู่ที่ตรงเงื่อนไข
- หาสตริงย่อยที่ยาวที่สุดซึ่งไม่มีอักขระซ้ำ สำหรับ 'abba' ความยาวคือ 2 ติดตามตำแหน่งล่าสุดของอักขระแต่ละตัวและรักษาหน้าต่างที่ไม่มีตัวซ้ำ ขอบซ้ายต้องไม่เลื่อนย้อนกลับเมื่ออักขระที่เคยพบอยู่นอกหน้าต่างปัจจุบัน เวลาที่คาดหวังคือ O(n) เมื่อค้นหาด้วยแฮชแมป ควรถามให้ชัดว่าอะไรนับเป็นอักขระหนึ่งตัว
- รวมช่วงปิดที่ทับซ้อนกัน สำหรับ [1, 3], [3, 5] และ [8, 10] ให้คืนค่า [1, 5] และ [8, 10] เรียงตามจุดเริ่มต้น แล้วขยายช่วงปัจจุบันหรือเริ่มช่วงใหม่ การเรียงลำดับใช้เวลา O(n log n) ช่วงปิดที่มีจุดปลายร่วมกันถือว่าทับซ้อน ควรถามว่าสอดคล้องกับนิยามของโจทย์หรือไม่
- กลับลำดับลิงก์ลิสต์ทางเดียวที่ไม่มีวงจร เก็บโหนดถัดไปไว้ก่อนเปลี่ยนพอยน์เตอร์ next ของโหนดปัจจุบัน วิธีวนซ้ำใช้เวลา O(n) และพื้นที่เพิ่มเติม O(1) ลองไล่กรณีลิสต์ว่าง หนึ่งโหนด และสองโหนด พร้อมอธิบายว่าส่วนใดของลิสต์ถูกกลับลำดับแล้วหลังการวนซ้ำแต่ละครั้ง
- คืนค่าของต้นไม้ทวิภาคทีละระดับ ใช้คิวและประมวลผลตามจำนวนโหนดในระดับปัจจุบันก่อนเริ่มระดับถัดไป เวลาเป็น O(n) ส่วนพื้นที่เสริมของคิวเป็น O(w) โดย w คือความกว้างสูงสุดของระดับ ไม่นับเอาต์พุตที่คืนมา ทดสอบต้นไม้ว่างและต้นไม้ที่แต่ละระดับมีลูกเพียงหนึ่งโหนด
- ตัดสินว่าสามารถเรียนทุกรายวิชาให้จบได้หรือไม่เมื่อมีวิชาบังคับก่อน สร้างแบบจำลองวิชาบังคับก่อนเป็นกราฟแบบมีทิศทางและใช้การเรียงลำดับเชิงทอพอโลยี หากประมวลผลจุดยอดได้น้อยกว่า V แสดงว่ายังมีวงจรแบบมีทิศทาง เวลาเป็น O(V + E) ทดสอบคอมโพเนนต์ที่ไม่เชื่อมต่อ วิชาที่แยกเดี่ยว และวิชาที่พึ่งพาตัวเอง
- หาจำนวนเหรียญน้อยที่สุดที่รวมได้ตามจำนวนเงิน สมมติว่ามีเหรียญไม่จำกัดและมูลค่าเป็นจำนวนเต็มบวก สำหรับ [1, 3, 4] และจำนวนเงิน 6 การเลือกเหรียญมูลค่าสูงสุดก่อนใช้สามเหรียญ แต่ 3 + 3 ใช้สองเหรียญ กำหนดสถานะของการเขียนโปรแกรมแบบไดนามิกเป็นจำนวนเหรียญต่ำสุดสำหรับแต่ละจำนวนเงิน โดยเริ่มจากศูนย์เหรียญสำหรับจำนวนเงินศูนย์ เมื่อเป้าหมายคือ A และมีมูลค่าเหรียญ c แบบ วิธีมาตรฐานใช้เวลา O(Ac) และพื้นที่ O(A) ต้องจัดการจำนวนเงินที่ไม่สามารถรวมได้อย่างชัดเจน
ดูแบบฝึกที่จัดตามบทบาทและหัวข้อเพิ่มเติมได้ใน คลังคำถามสัมภาษณ์
คำตอบที่อธิบายได้ดีมีลักษณะอย่างไร?
พิจารณาโจทย์นี้: นับ subarray ต่อเนื่องที่ไม่ว่างและมีผลรวมเท่ากับเป้าหมาย โดยอนุญาตให้มีค่าติดลบ สำหรับ [1, -1, 1] และเป้าหมาย 1 คำตอบคือ 3 ได้แก่ subarray [1] แบบสมาชิกเดียวแต่ละชุด หรือทั้งอาร์เรย์
เริ่มด้วยวิธีพื้นฐาน: เลือกตำแหน่งเริ่มต้นแต่ละตำแหน่ง แล้วขยายตำแหน่งสิ้นสุดพร้อมรักษาผลรวมสะสม วิธีนี้ใช้เวลา O(n²) และพื้นที่เพิ่มเติม O(1) วิธีหน้าต่างแบบหดขนาดทั่วไปไม่น่าเชื่อถือในกรณีนี้ เพราะค่าติดลบทำให้สมมติฐานที่ว่าการขยายหน้าต่างจะเพิ่มผลรวมใช้ไม่ได้
วิธีที่เร็วกว่าจะใช้ prefix sum และแมปความถี่ หาก prefix sum ปัจจุบันคือ s ทุก prefix ก่อนหน้าที่เท่ากับ s - target จะระบุ subarray ที่มีผลรวมตามต้องการ เริ่มต้นแมปด้วย prefix sum ศูนย์หนึ่งครั้ง ซึ่งแทน prefix ว่างก่อนอาร์เรย์เริ่มต้น
- ลำดับการประมวลผล: เพิ่มค่าปัจจุบันใน prefix sum นับ prefix ก่อนหน้าที่ตรงกัน แล้วจึงบันทึก prefix ปัจจุบัน หากบันทึกก่อนจะนับ subarray ว่างอย่างไม่ถูกต้องเมื่อเป้าหมายเป็นศูนย์
- ค่าคงสภาพ: ก่อนบันทึก prefix ปัจจุบัน แมปจะเก็บความถี่ของ prefix ทั้งหมดที่สิ้นสุดก่อนตำแหน่งปัจจุบัน
- ความซับซ้อน: แต่ละสมาชิกดำเนินการกับแมปเป็นจำนวนคงที่ เวลาที่คาดหวังคือ O(n) โดยสมมติว่าการดำเนินการแฮชใช้เวลาคงที่โดยเฉลี่ย ส่วนพื้นที่เพิ่มเติมคือ O(n)
- การตรวจสอบ: อาร์เรย์ว่างคืนค่า 0 สำหรับ [0, 0] และเป้าหมาย 0 ให้คืนค่า 3 หากใช้ชนิดจำนวนเต็มที่มีความกว้างคงที่ ให้คำนึงถึงการล้นทั้งในผลรวมสะสมและจำนวนคำตอบ
คำถามต่อยอดที่มีประโยชน์คือ โจทย์ต้องการเพียงจำนวนหรือต้องการ subarray จริงทั้งหมด การคืนค่า subarray ที่ตรงกันทุกชุดทำให้มีต้นทุนด้านเอาต์พุต โดยอาร์เรย์ที่มีแต่ศูนย์จะมี subarray ไม่ว่างที่ตรงกัน n(n + 1)/2 ชุดเมื่อเป้าหมายเป็นศูนย์
ควรใช้ AI ฝึกคำถามเขียนโค้ดอย่างไร?
ลองทำด้วยตนเองก่อนขอความช่วยเหลือ แล้วขอความช่วยเหลือเพียงเล็กน้อยที่สุดที่ทำให้คุณไปต่อได้ คำสั่งต่อไปนี้จะเปลี่ยนการสนทนากับ AI ให้เป็นแบบฝึกที่คุณตรวจสอบได้
- ขอคำใบ้หนึ่งข้อ: บอกคำใบ้หนึ่งข้อเกี่ยวกับข้อมูลที่ควรเก็บ แต่อย่าเพิ่งให้โค้ดหรือบอกชื่ออัลกอริทึมทั้งหมด
- ท้าทายเหตุผล: นี่คือค่าคงสภาพของลูปของฉัน จงหาอินพุตที่การทำงานของฉันละเมิดค่านี้ หรืออธิบายว่าการอัปเดตแต่ละครั้งรักษาค่านี้ไว้อย่างไร ตรวจสอบคำตอบด้วยตนเอง เพราะการที่โมเดลเห็นด้วยไม่ใช่ข้อพิสูจน์ความถูกต้อง
- ตรวจสอบความซับซ้อน: นับงานที่เกิดจากการแบ่งส่วน การเรียงลำดับ การดำเนินการกับคอนเทนเนอร์ และการเรียกซ้ำในการทำงานนี้ ชื่ออัลกอริทึมที่คุ้นเคยไม่ได้ยืนยันความซับซ้อนของโค้ดจริงของคุณ
- สร้างกรณีทดสอบ: เสนอกรณีสำหรับอินพุตว่าง ค่าซ้ำ ค่าขอบเขต และผลลัพธ์ที่เป็นไปไม่ได้ พร้อมอธิบายคำตอบที่คาดหวังของแต่ละกรณี หาคำตอบเหล่านั้นด้วยตนเองก่อนใช้เป็นเกณฑ์ตัดสินผลทดสอบ
- เปลี่ยนข้อจำกัดหนึ่งข้อ: วิธีแก้จะเปลี่ยนอย่างไรหากอินพุตเรียงลำดับแล้ว แก้ไขไม่ได้ หรือเข้ามาเป็นสตรีม? อธิบายสิ่งที่ต้องแลกก่อนเขียนโค้ดใหม่
ลองพิจารณาวิศวกรแบ็กเอนด์ที่เตรียมสมัครตำแหน่งอาวุโสกับผู้ให้บริการคลาวด์ หลังแก้ปัญหากราฟวิชาบังคับก่อนแล้ว เธอขอให้คู่ฝึก AI สร้างกราฟที่ไม่เชื่อมต่อและมีวงจร จากนั้นเธอไล่สถานะคิวและอธิบายว่าเหตุใดจำนวนจุดยอดที่ประมวลผลจึงเผยให้เห็นวงจร โดยไม่ดูคำใบ้
หลังอ่านวิธีแก้ฉบับเต็ม ให้ปิดแล้วสร้างอัลกอริทึม ค่าคงสภาพ และการทดสอบขึ้นใหม่จากความจำ ความสามารถในการเขียนโค้ดเดิมซ้ำมีประโยชน์น้อยกว่าความสามารถในการอธิบายว่าเหตุใดจึงใช้ได้ผลและปรับให้เข้ากับข้อจำกัดที่เปลี่ยนไป
หากต้องการซ้อมอธิบายเหตุผลผ่านบทสนทนา โปรดไปที่ หน้าสัมภาษณ์จำลอง
SubcueAI เหมาะกับการสัมภาษณ์เขียนโค้ดแบบสดที่ได้รับอนุญาตอย่างไร?
SubcueAI มีช่องทางช่วยเหลือแบบสดสองรูปแบบ แอปเนทีฟหลักสำหรับ macOS และ Windows รับเสียงระบบและไมโครโฟนของคุณ พร้อมแสดงความช่วยเหลือในโอเวอร์เลย์ลอยบนเครื่อง ใช้งานกับไคลเอนต์ประชุมบนเดสก์ท็อปได้ รวมถึง Zoom และ Microsoft Teams
ส่วนขยายเบราว์เซอร์ยังให้ความช่วยเหลือแบบสดผ่าน Side Panel บนเบราว์เซอร์ Chromium รวมถึง Chrome และ Edge โดยรับเฉพาะเสียงจากแท็บประชุม รองรับการโทรผ่านแท็บเบราว์เซอร์ เช่น Google Meet ระบบจะได้ยินผู้สัมภาษณ์ผ่านแท็บนั้น แต่ไม่รับเสียงไมโครโฟนของคุณและไม่ถอดเสียงคำพูดของผู้สมัคร ส่วนเวอร์ชัน Firefox ใช้สำหรับการฝึกจำลองเท่านั้น
ทั้งสองรูปแบบจะไม่เพิ่มบอตประชุมเข้าในการโทรหรือแทรกสคริปต์เนื้อหาลงในหน้าประชุม สำหรับคำถามเขียนโค้ด ต้องแยกบริบทที่พูดออกจากบริบทที่เขียน เพราะการรับเสียงเพียงอย่างเดียวจะไม่ได้รับโจทย์หรือโค้ดที่แสดงเฉพาะในเอดิเตอร์ ตรวจสอบทุกคำแนะนำกับโจทย์ ข้อจำกัด และการทำงานจริงอย่างละเอียด
ยืนยันกฎของการสัมภาษณ์ก่อนใช้ความช่วยเหลือแบบสด ไม่รับประกันว่า SubcueAI จะตรวจจับไม่ได้ในทุกกรณี การแชร์หน้าจอ การบันทึก การประเมินที่มีผู้คุมสอบ และอุปกรณ์ที่บริษัทจัดการอยู่นอกขอบเขตการรับรองด้านการซ่อน หน้าจอที่แชร์หรือบันทึกอาจเผยโอเวอร์เลย์หรือ Side Panel และการควบคุมอุปกรณ์หรือระบบคุมสอบอาจตรวจสอบกิจกรรมได้
ดูคำแนะนำการตั้งค่าสำหรับช่องทางที่มีได้ใน บทแนะนำ SubcueAI