ใครมีคำถามใด ๆ ที่ดี FizzBuzz ชนิดที่ไม่ปัญหา FizzBuzz?
ฉันกำลังสัมภาษณ์ใครบางคนและ FB เป็นที่รู้จักกันดีและไม่ใช่เรื่องยากที่จะจดจำดังนั้นการหยุดค้นหาไอเดียครั้งแรกของฉันคือการเสพติดใหม่ของฉัน
ใครมีคำถามใด ๆ ที่ดี FizzBuzz ชนิดที่ไม่ปัญหา FizzBuzz?
ฉันกำลังสัมภาษณ์ใครบางคนและ FB เป็นที่รู้จักกันดีและไม่ใช่เรื่องยากที่จะจดจำดังนั้นการหยุดค้นหาไอเดียครั้งแรกของฉันคือการเสพติดใหม่ของฉัน
คำตอบ:
ฉันเคยเห็นรายการเล็ก ๆ ของปัญหาการเขียนโปรแกรมที่ค่อนข้างง่ายที่ใช้ในการกำจัดผู้สมัครเช่นเดียวกับ FizzBuzz นี่คือปัญหาบางส่วนที่ฉันพบตามลำดับความยากที่เพิ่มขึ้น:
สิ่งเหล่านี้มีไว้สำหรับ Java และคุณสามารถใช้ไลบรารีมาตรฐานเพื่อให้บางส่วนทำได้ง่ายมาก (เช่น 6) แต่ทำงานเหมือน FizzBuzz หากคุณมีเบาะแสเกี่ยวกับการเขียนโปรแกรมคุณควรจะทำได้อย่างรวดเร็ว แม้ว่าคุณจะไม่รู้ภาษาดี แต่อย่างน้อยก็ควรให้แนวคิดเบื้องหลังวิธีการทำบางสิ่งได้
การใช้การทดสอบนี้หนึ่งในผู้บังคับบัญชาคนก่อนของฉันเห็นทุกอย่างตั้งแต่คนที่ทำมันได้อย่างรวดเร็วไปจนถึงคนที่ทำได้เร็วที่สุดไปจนถึงผู้ชายคนหนึ่งที่ไม่สามารถตอบคำถามได้หลังจากผ่านไปครึ่งชั่วโมง
ฉันควรทราบ: เขาปล่อยให้ผู้คนใช้คอมพิวเตอร์ของเขาในขณะที่พวกเขาได้รับงานเหล่านี้ พวกเขาได้รับคำสั่งโดยเฉพาะว่าสามารถใช้ Google และอื่น ๆ ที่คล้ายกันได้
บางทีนี่อาจจะไม่ได้ตอบคำถามของคุณโดยตรง แต่ฉันไม่แน่ใจว่าคุณต้องเจอปัญหาอื่น นอกจากจะ "ง่ายต่อการจดจำ" แล้วคำถามของ FizzBuzz ยังเป็นเพียง "ง่าย" และนั่นคือประเด็น หากบุคคลที่คุณกำลังสัมภาษณ์อยู่ในกลุ่มบุคคลที่ FizzBuzz "เป็นที่รู้จัก" แสดงว่าพวกเขาอยู่ในกลุ่มคนที่คำถามประเภท FizzBuzz จะไม่กรองออกไป นั่นไม่ได้หมายความว่าคุณจ้างพวกเขาตรงจุด แต่หมายความว่าพวกเขาควรจะผ่านมันไปได้และเข้าสู่เนื้อหาของการสัมภาษณ์ต่อไป
กล่าวอีกนัยหนึ่งใครก็ตามที่ใช้เวลาในการอ่านCoding Horrorก็ควรค่าแก่การสัมภาษณ์เพิ่มเติม เพียงแค่ให้พวกเขาเขียนวิธีแก้ปัญหาโดยเร็วจริงๆอภิปรายสั้น ๆ (เช่นคุณจะทดสอบสิ่งนี้อย่างไร) จากนั้นไปยังคำถามถัดไป และตามที่บทความกล่าวว่า "เป็นที่น่าประหลาดใจอย่างแท้จริงว่ามีผู้สมัครกี่คนที่ไม่สามารถทำงานเขียนโปรแกรมที่ง่ายที่สุดได้"
คนแรก ๆ จากProject Eulerน่าจะดี
ตัวอย่างเช่น:
ปัญหา 25
ลำดับฟีโบนักชีถูกกำหนดโดยความสัมพันธ์การเกิดซ้ำ:
Fn = Fn−1 + Fn−2, where F1 = 1 and F2 = 1.
ดังนั้น 12 เทอมแรกจะเป็น:
F1 = 1 F2 = 1 F3 = 2 F4 = 3 F5 = 5 F6 = 8 F7 = 13 F8 = 21 F9 = 34 F10 = 55 F11 = 89 F12 = 144
เทอมที่ 12 F12 เป็นเทอมแรกที่มีตัวเลขสามหลัก
ดัชนีของเทอมแรกในลำดับฟีโบนักชีที่มีตัวเลข 1,000 หลักคืออะไร?
ฉันพบว่าการตรวจสอบสตริงว่ามันเป็นพาลินโดรมนั้นค่อนข้างง่ายที่สามารถเป็นวัชพืชที่ดีได้
scalar(reverse 'foo') == 'foo'
มันทำกับ
ฉันต้องการคำถาม FizzBuzz ที่ไม่เกี่ยวข้องกับตัวดำเนินการโมดูโล โดยเฉพาะอย่างยิ่งเนื่องจากฉันมักจะสัมภาษณ์นักพัฒนาเว็บซึ่งผู้ให้บริการโมดูโลไม่ได้เกิดขึ้นบ่อยๆ และหากไม่ใช่สิ่งที่คุณพบเป็นประจำก็เป็นหนึ่งในสิ่งเหล่านั้นที่คุณมองหาไม่กี่ครั้งที่คุณต้องการ
(จริงอยู่ว่าเป็นแนวคิดที่คุณควรจะพบในหลักสูตรคณิตศาสตร์ที่ไหนสักแห่งระหว่างทาง แต่เป็นหัวข้อที่แตกต่างออกไป)
ดังนั้นสิ่งที่ฉันคิดขึ้นมาคือสิ่งที่ฉันเรียกว่าThrees in Reverseอย่างไม่น่าเชื่อ คำแนะนำคือ:
เขียนโปรแกรมที่พิมพ์ออกมาโดยเรียงลำดับย้อนกลับทุกๆ 3 ระหว่าง 1 ถึง 200
ทำตามลำดับปกติให้ง่าย: คูณดัชนีลูปด้วย 3 จนกว่าคุณจะได้ตัวเลขที่เกิน 200 แล้วเลิก คุณไม่ต้องกังวลว่าจะยุติการทำซ้ำอีกกี่ครั้งหลังจากนั้นคุณเพียงแค่ดำเนินการต่อไปจนกว่าจะถึงค่าแรกที่สูงเกินไป
แต่จะถอยหลังคุณต้องรู้ว่าจะเริ่มจากตรงไหน บางคนอาจรู้โดยสัญชาตญาณว่า 198 (3 * 66) เป็นตัวคูณสูงสุดของ 3 และด้วยเหตุนี้ฮาร์ดโค้ด 66 ในลูป คนอื่น ๆ อาจใช้การดำเนินการทางคณิตศาสตร์ (การหารจำนวนเต็มหรือพื้น () บนการหารทศนิยม 200 และ 3) เพื่อหาจำนวนนั้นและในการทำเช่นนั้นให้ระบุสิ่งที่เกี่ยวข้องเพิ่มเติม
โดยพื้นฐานแล้วมันเป็นปัญหาเดียวกันกับ FizzBuzz (วนลูปผ่านค่าและพิมพ์ออกมาด้วยการบิด) ปัญหานี้เป็นปัญหาในการแก้ไขซึ่งไม่ได้ใช้อะไรที่ค่อนข้าง (ค่อนข้าง) ลึกลับเหมือนกับการทำงานของโมดูโล
print [x for x in xrange(3, 200, 3)][::-1]
สำหรับสิ่งที่ง่ายสุด ๆ ที่สามารถทำได้ใน 10 วินาที แต่จะลบคนที่ไม่สามารถตั้งโปรแกรมอะไรได้เลยให้ลองทำสิ่งนี้:
ถาม: แสดงให้ฉันเห็น (บนกระดาษ แต่ดีกว่าบนไวท์บอร์ด) ว่าคุณจะสลับค่าของสองตัวแปรอย่างไร
นี่ไม่ใช่ความคิดของฉัน แต่ถูกโพสต์ในความคิดเห็นโดยคนชื่อ Jacob ในบล็อกโพสต์เกี่ยวกับคำถามดั้งเดิมของ FizzBuzz
ยาโคบกล่าวต่อไปว่า:
หากพวกเขาไม่ได้เริ่มต้นด้วยการสร้างตัวแปรที่สามคุณก็สามารถเขียนคนนั้นออกไปได้ ฉันพบว่าฉันสามารถตัดผู้สมัครได้หนึ่งในสามถึงครึ่งหนึ่ง (เป็นที่ยอมรับ ณ จุดนั้นโดยไม่มีการคัดกรอง) ด้วยคำถามนั้นเพียงอย่างเดียว
มีการอภิปรายที่น่าสนใจเพิ่มเติมหลังจากนั้นความคิดเห็นในบล็อกโพสต์ต้นฉบับเกี่ยวกับวิธีการสลับตัวแปรนี้โดยไม่ต้องใช้ตัวแปรที่สาม (การเพิ่ม / ลบ xor ฯลฯ ) และแน่นอนว่าหากคุณใช้ภาษาที่รองรับสิ่งนี้ ในคำสั่ง / การดำเนินการเดียวอาจไม่ใช่การทดสอบที่ดีนัก
แม้ว่าจะไม่ใช่ความคิดของฉัน แต่ฉันก็อยากจะโพสต์สิ่งนี้ไว้ที่นี่เนื่องจากเป็นคำถามที่เรียบง่ายและสง่างามซึ่งสามารถ (และควร) ได้รับคำตอบภายใน 10 วินาทีโดยคนที่เขียนแม้กระทั่งโปรแกรมที่ง่ายที่สุด นอกจากนี้ยังไม่จำเป็นต้องใช้ตัวดำเนินการที่ค่อนข้างคลุมเครือเช่นตัวดำเนินการโมดูโลซึ่งผู้คนจำนวนมากซึ่งเป็นโปรแกรมเมอร์ที่ดีพอสมควรไม่คุ้นเคย (ซึ่งฉันรู้จากประสบการณ์ของตัวเอง)
Fibonacci, ย้อนกลับสตริง, นับจำนวนบิตที่ตั้งค่าเป็นไบต์เป็นบิตทั่วไปอื่น ๆ Project Eulerยังมีชุดความยากที่เพิ่มขึ้นมากมาย
ขอให้พวกเขาเขียนแอปเพื่อส่งคืนปัจจัยของตัวเลขที่กำหนด ทำได้ง่ายและทำได้ยากในช่วงเวลาสั้น ๆ คุณสามารถดูสไตล์และวิธีคิดของพวกเขาผ่านปัญหาได้ในเวลาอันสั้น
ส่งกลับดัชนีของสตริง X ที่เกิดขึ้นครั้งแรกภายในสตริง Y
การใช้ strstr () ต้องมีความเข้าใจพื้นฐานของภาษาในขณะที่ให้โอกาสในการเพิ่มประสิทธิภาพอย่างชาญฉลาด
หากเป็นการสัมภาษณ์แบบ C / C ++ ให้แน่ใจว่าบุคคลนั้นรู้เกี่ยวกับพอยน์เตอร์
ทั่วไป - อัลกอริทึมอย่างง่าย (รายการที่เชื่อมโยง [เดี่ยว / คู่]) ถามเกี่ยวกับความซับซ้อนของการเพิ่มในแต่ละกรณี (ที่จุดเริ่มต้นในตอนท้ายการเพิ่มประสิทธิภาพ ... )?
(ทั่วไป) คุณจะหาค่าต่ำสุดและสูงสุดจากอาร์เรย์ (ขนาด N) ได้อย่างไรด้วยการเปรียบเทียบเพียง 3 * N / 2
C / C ++: คุณจะเพิ่มประสิทธิภาพ "strcat" หลายตัวให้เป็นบัฟเฟอร์ได้อย่างไร
ตรวจสอบ 6.14 จาก C ++ FAQ Lite:
วิธีการ: ฉันต้องการใช้จำนวนเต็มเดียวเพื่อเก็บหลายค่า อธิบายว่าจะได้ผลอย่างไร
หากพวกเขาไม่มีเบาะแสเกี่ยวกับมาสก์บิตและการทำงานพวกเขาอาจไม่สามารถแก้ปัญหาอื่น ๆ ได้
ค้นหารายการช่วงเวลาเป็นคำถามที่พบได้บ่อย แต่ก็ยังต้องใช้ความคิดและมีคำตอบหลายระดับที่ผู้คนอาจให้ได้
นอกจากนี้คุณยังต้องแปลกใจว่ามีคนจำนวนมากที่พยายามใช้โครงสร้างข้อมูลประเภทแผนที่ / พจนานุกรม
ฉันขอให้ผู้สมัครของฉันสร้างโปรแกรมเพื่อคำนวณแฟกทอเรียลของจำนวนที่กำหนดในภาษาหลอกใด ๆ ที่พวกเขาเลือก มันเป็นปัญหาที่ค่อนข้างง่ายในการแก้ปัญหาและให้ยืมตัวเองได้ดีกับคำถามติดตามผลตามธรรมชาติ (ซึ่งมักจะถูกถาม) เกี่ยวกับการเรียกซ้ำ