ฉันคิดว่ามีคำถามง่าย ๆ เหล่านั้นคือ fizzbuzz ย้อนกลับสตริง ฯลฯ และจากนั้นก็มีคำถามบางอย่างในขณะที่ถ้าคุณไม่เคยเห็นพวกเขามาก่อนมันยากที่จะหาทางออกที่ดีที่สุดที่ตั้งใจด้วยแรงกดดันเพิ่มเติมของการสัมภาษณ์และเวลาสั้น ๆ ข้อ จำกัด ส่วนที่แย่ที่สุดคือบางครั้งผู้สรรหาที่ไม่มีความรู้ด้านเทคนิคถามคำถามเหล่านี้และพวกเขากำลังมองหาคำตอบที่เฉพาะเจาะจงมาก .... ถ้าคุณไม่ได้ให้คำตอบที่ดีที่สุดพวกเขาคิดว่าคุณเป็นคนงี่เง่า แม้ว่าคำตอบของคุณจะได้ผลให้แก้ปัญหาและแม้ว่ามันอาจจะไม่เหมาะสมก็ตามมันก็ไม่ได้ไร้ประสิทธิภาพเกินไป ....
ตัวอย่างบางส่วน:
คุณจะสับไพ่ได้อย่างไร? พวกเขากำลังมองหาวิธี Fisher-Yates http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffleคำตอบอื่น ๆ คือ "ผิด" ..... นี่ไม่ใช่สิ่งที่คุณน่าจะรู้ถ้าคุณไม่ต้องการสับไพ่ก่อนและค้นหาโดยเฉพาะ คุณอาจสะดุดเมื่อทำคำตอบ แต่จากสิ่งที่ฉันได้เห็นพวกเขาคาดหวังให้คุณรู้ว่าหวัดนี้ดังนั้นจึงเป็นที่น่าสงสัยว่าจะมีเวลามากพอที่จะอนุญาตให้หาวิธีแก้ปัญหา อีกวิธีที่มีประสิทธิภาพน้อยลง (แต่อาจชัดเจนกว่า) คือการสร้างอาร์เรย์ใหม่ด้วยตัวชี้ไปยังอาร์เรย์เดิมและตัวเลขซึ่งเป็นตัวเลขสุ่มแล้วเรียงลำดับอาร์เรย์ด้วยหมายเลขสุ่ม จากนั้นใช้อาร์เรย์ที่เรียงลำดับเพื่อสร้างอาร์เรย์ของการ์ดใหม่ ไม่ว่าในกรณีใดฉันได้รับเครดิต 0 สำหรับการนำเสนอนั้นกับนายหน้า
อีกตัวอย่างหนึ่งคือคำถามเกี่ยวกับวิธีตรวจจับหมายเลขที่ซ้ำกันในรายการหมายเลข n ทั้งหมดตั้งแต่ 1 ถึง n-1 คำตอบที่ชัดเจน (ซึ่งค่อนข้างมีประสิทธิภาพในมุมมองเวลา) คือการใช้ตารางแฮชเพื่อแทรกแต่ละองค์ประกอบและหากคุณพบคำที่แทรกอยู่แล้วคุณจะพบสำเนาที่ซ้ำกัน คำตอบที่ดีที่สุดคือเพราะตัวเลขอยู่ระหว่าง 1 ถึง n หากไม่มีข้อมูลซ้ำคุณสามารถรับผลรวมที่คาดหวังเป็น n (n + 1) / n ถ้าคุณรวมอาเรย์คุณจะได้รับผลรวมจริงซึ่งน้อยกว่าผลรวมที่คาดหวัง ดังนั้นโดยทั่วไปแล้ว n - (ผลรวมที่คาดหวัง - ผลรวมจริง) = หมายเลขซ้ำกัน ... มันเป็นกรณีพิเศษที่ค่อนข้างสวย .... จริง ๆ แล้วฉันเคยเห็นบางสิ่งมาก่อนในโพสต์ออนไลน์เกี่ยวกับปัญหาการสัมภาษณ์เมื่อหลายปีก่อน ฉันโอเค ....
อีกคำหนึ่งกลับคำทั้งหมดในสตริงโดยไม่ต้องใช้ช่องว่างเพิ่มเติม ฉันต้องคิดเกี่ยวกับมันและนายหน้าก็ใจร้อนใน 5 นาทีฉันคิดว่า (แยกและเข้าร่วมสตริงในสิ่งที่ตรงกันข้ามหรือไปคำต่อคำในอาร์เรย์ใหม่ทั้งง่ายมาก) ฉันพบการค้นหาขอบเขตของคำสุดท้ายค้นหาจุดสิ้นสุดของคำแรกและเลื่อนรายการทั้งหมดโดย 1 ไปเรื่อย ๆ จากนั้นแทรกจดหมายที่เหมาะสม จากนั้นทำซ้ำจนกว่าจะถึงจุดสิ้นสุดของรายการ วิธีนี้ใช้ได้ผลและผู้สัมภาษณ์เห็นด้วย (เขาเป็นคนช่างนิดหน่อย) แต่มันไม่มีประสิทธิภาพเลยทีเดียว เมื่อฉันกลับถึงบ้านฉันค้นหาคำตอบที่ดีที่สุดและมันก็แค่ย้อนกลับรายการแล้วกลับคำแต่ละคำ บางคนอาจคิดว่า
ขณะนี้เป็นจริงเมื่อคุณพบปัญหาเหล่านี้แล้วคุณสามารถแก้ไขปัญหาได้ง่ายขึ้น เพราะมีคำถามที่คล้ายกันกับเคล็ดลับบางอย่างเดียวกัน ฉันรู้ว่าโดยเฉพาะอย่างยิ่งสูตร n (n-1) / 2 และรายการตัวเลขมีหลายรูปแบบ แต่ฉันก็ยังไม่รู้ว่าคำถามเหล่านี้ทดสอบอะไร FizzBuzz เป็นสิ่งที่ทุกคนควรจะสามารถทำได้ (แม้ว่าฉันเคยเห็นการเปลี่ยนแปลงที่ไม่ง่ายดังนั้นในกรณีนี้ฉันก็เริ่มตั้งคำถามว่าแม้มันจะเป็นจริงสำหรับสถานการณ์การสัมภาษณ์โดยไม่สามารถพิมพ์ / แก้ไขข้อบกพร่องของรหัส) คำถามเหล่านี้บางอย่างชัดเจนเมื่อคุณเห็นพวกเขา แต่ถ้าคุณไม่เห็นพวกเขาพวกเขาจะไม่ชัดเจน หลังจากที่ทุกคนพูดถึงมันต้องใช้เวลาหลายปีกว่าที่การดำเนินการค้นหาแบบไบนารีครั้งแรกจะถูกต้อง ... ตอนนี้การค้นหาแบบไบนารี่นั้นชัดเจนมากเพราะทุกคนสามารถอ่านได้
อย่างไรก็ตามฉันคิดว่าส่วนที่แย่ที่สุดคือเมื่อคนที่ไม่ใช่ช่างเทคนิคกำลังถามคำถามเพราะพวกเขาไม่สามารถชื่นชมการแก้ปัญหาของคุณได้แม้ว่าจะไม่เหมาะสมก็ตาม พวกเขาเพิ่งรู้ว่าวิธีการแก้ปัญหาของคุณไม่ได้นำเสนอและดังนั้นมันผิดทั้งหมดคุณจะไม่ได้รับเครดิตสำหรับความพยายาม แม้แต่คำตอบที่ไม่เหมาะสมมักจะแสดงความรู้เกี่ยวกับการเขียนโปรแกรมสร้าง ถ้าฉันไม่ได้เขียนโปรแกรมเกมโป๊กเกอร์ฉันไม่สนใจว่าคนอื่นจะสามารถสับไพ่ได้ดีเพียงใด และแม้ว่าฉันจะเป็นพวกเขาหลังจากที่แสดงอัลกอริธึมที่มีประสิทธิภาพฉันก็มั่นใจว่าใครก็ตามที่เหมาะสมครึ่งทางสามารถทำตามได้
คำถามเทมเพลตนั้นดูเหมือนจะให้ประโยชน์แก่ผู้สมัครที่ได้สัมภาษณ์มานานกว่าเนื่องจากพวกเขามีแนวโน้มที่จะเห็นคำถามเทมเพลตมากกว่า แม้แต่ FizzBuzz ครั้งแรกที่คุณเห็นมันคุณอาจประหลาด แต่เมื่อคุณเห็นมันซ้ำแล้วซ้ำอีกคุณก็จะชินกับมันมากขึ้น สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือให้ความท้าทายในการเขียนโค้ดที่ต้องใช้ตรรกะทางธุรกิจที่กำหนดเอง เช่นสร้างชุดข้อมูลบางส่วน (อาร์เรย์ของวัตถุ / บันทึก) จากนั้นสร้างกฎทางธุรกิจบางอย่างเพื่อนำไปใช้กับแต่ละวัตถุและคืนคำตอบ .. เช่นประเภทของคะแนน ฯลฯ แต่กฎที่กำหนดเองมาก) ในขณะที่พวกเขาอาจเห็นวนรอบระเบียนและใช้ตรรกะหนึ่งล้านครั้งกฎของคุณจะไม่ซ้ำกันดังนั้นอย่างน้อยพวกเขาก็จะต้องเข้าใจและนำกฎที่คุณสร้างขึ้นมาใช้ให้สำเร็จ
สมมติว่าเงินเดือนที่คาดการณ์ไว้และรายชื่อผู้สมัครและวิดีโอเกมโปรด 3 อันดับแรกของพวกเขาและอาจเป็นเงินเดือนเริ่มต้น ผู้สมัครที่ชอบ Zelda จะได้รับโทษ 300 คนผู้สมัครที่ชอบนางเงือกตัวน้อยจะได้รับโบนัส 200 ผู้สมัครที่ชอบ Donkey Kong และ Super Mario Brothers แต่ไม่ใช่ Dr. Mario จะได้รับโบนัส 300 คะแนน ผู้สมัครที่ชอบ Metroid หรือ Kid Icarus จะได้รับโบนัส 200 ครั้งและอื่น ๆ ดูเหมือนว่าจะบ้าไปแล้ว แต่มันจะแสดงให้คุณเห็นถึงความสามารถในการแปลกฎเกณฑ์ทางธุรกิจให้เป็นโปรแกรมเชิงตรรกะและทดสอบความเข้าใจของตรรกะบูลีน โดยรวมไม่แตกต่างจาก fizzbuzz มากนักยกเว้นไม่ได้ใช้โมดูลัสและลูป แน่นอนคุณสามารถให้พวกเขามีรายการและให้พวกเขาวนรอบมันและพิมพ์ผลลัพธ์ไปที่หน้าจอโดยใช้เกณฑ์การส่งออกที่เฉพาะเจาะจงเช่นกัน