โครงการเขียนโปรแกรมสัมภาษณ์ดี [ปิด]


26

ฉันกำลังมองหาโครงการการเขียนโปรแกรมขนาดเล็กที่ฉันสามารถให้พนักงานที่มีศักยภาพในการวัดความสามารถในการเขียนโปรแกรมของพวกเขา สิ่งเหล่านี้จะเป็นโปรแกรมเมอร์โดยตรงจากวิทยาลัย ฉันกำลังมองหาโครงการที่ต้องใช้เวลาสักสองสามชั่วโมงและพวกเขาจะส่งอีเมลตอบกลับหลังการสัมภาษณ์

ตัวอย่างหนึ่งจะนำข้อความในย่อหน้านี้และส่งกลับรายการคำที่ไม่ซ้ำตามตัวอักษร หลังจากแต่ละคำบอกฉันว่าคำปรากฏกี่ครั้งและในประโยคที่คำนั้นปรากฏขึ้น

ใครมีคำแนะนำที่ดีบ้าง


คำถามการประกวดการเขียนโปรแกรม ACM คุณสามารถค้นหาที่เก็บของคำถามเหล่านั้นที่นี่
whatsisname

1
ไซต์ปริศนาการเขียนโปรแกรมเหล่านี้น่าสนใจสำหรับคุณหรือไม่ programmers.stackexchange.com/questions/756/programming-puzzles/…
grokus

คำตอบ:


43

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

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


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

4
@TMN - โอ้เราทำได้เช่นกัน แต่ฉันได้พบคนที่สามารถอ่านรหัสและไม่ได้เขียนไว้อย่างดี
pdr

@TMN เป็นตัวเองสอนผมใช้เวลาจำนวนเงินที่สำคัญของการอ่านรหัสเวลาในช่วงต้นถึงจุดของการเป็นไกลดีกว่าที่อ่านมันกว่าการเขียนมัน มันสามารถและจะเกิดขึ้นมันต้องใช้เวลาและการฝึกฝนเพื่อเพิ่มทักษะการเขียน
จิมมี่ฮอฟฟา

27

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

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


8
การเข้ารหัสอัลกอริธึมอย่างง่าย ๆ อย่างที่ bigtang อธิบายไว้นั้นไม่ได้เป็น ความสามารถในการทำบางสิ่งเช่นนั้นควรเป็นสิ่งที่จำเป็นต้องมีแม้แต่ในการสัมภาษณ์ (และเป็นที่ บริษัท ของฉัน) มันมีประโยชน์มากสำหรับการคัดกรองผู้สมัครที่ดูดีบนกระดาษ สิ่งสุดท้ายที่ฉันต้องการทำคือใช้เวลาหลายชั่วโมงในการสัมภาษณ์คนที่ไม่สามารถเขียนฟังก์ชั่นเพื่อบอกได้ว่าสตริงนั้นเป็น Palindrome หรือไม่ คุณจะประหลาดใจกับจำนวน CS PhDs จากโรงเรียนชั้นนำที่ไม่สามารถทำการทดสอบของบิ๊กถังได้ กล่าวโดยสรุปความสามารถในการทำแบบทดสอบนี้เป็นสิ่งจำเป็น แต่ไม่เพียงพอ
Jer

+1 @Jer ครั้งสุดท้ายที่ฉันสัมภาษณ์โปรแกรมเมอร์หกในแปดคนไม่สามารถทำงานขั้นพื้นฐานให้เสร็จสมบูรณ์ได้ (แม้แต่กับ Google และ SO) ไม่มีทางที่ฉันจะปล่อยให้พวกเขาอยู่ใกล้ codebase จริงของฉันเป็นเวลาห้านาทีปล่อยให้อยู่คนเดียว 30 วัน
Julia Hayward

2
@JuliaHayward: ฉันคาดหวังว่าทุกคนจะสามารถทำโครงการให้สำเร็จด้วยการเข้าถึงเว็บ / เอกสาร ปัญหาเกิดขึ้นเมื่อมีคนเริ่มโยน buzzwords และ algorhythms เรียงลำดับที่คุณไม่สามารถเข้าถึงอินเทอร์เน็ตภายใต้สมมติฐานที่ผิดพลาดที่ต้องจดจำเทคนิคการเรียงลำดับที่หลากหลายหรือสิ่งที่มีความสำคัญต่อประสิทธิภาพการทำงานทุกวัน
Satanicpuppy

12

การอนุญาตให้ใครบางคนทำโครงการจริงในเวลาของตัวเองไม่ได้แปลว่าพวกเขาเป็นใคร

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

เราไม่ได้มองหาคำตอบสำหรับทุกคนว่าถูกต้องเพราะใคร ๆ ก็สามารถนำคอมพิวเตอร์ไปใช้ได้เลย เรากำลังมองหากระบวนการพวกเขาลองทำคำถามหรือไม่พวกเขามาหาคำตอบได้อย่างไร

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

รวมกับงานก่อนหน้านี้เราพบว่าเป็นวิธีที่ดีที่สุดในการกรองผู้สมัคร

อัพเดท 2016/06/15

เรามีการเปลี่ยนแปลงกระบวนการของเราอย่างมีนัยสำคัญในวิธีการที่เราจ้างนักพัฒนา

ขั้นตอนที่ 1: การสัมภาษณ์ทางโทรศัพท์ 15 นาทีที่เราถามคำถาม 7 ข้อ 2 สิ่งแรกคือ "อะไรคือสิ่งที่สนุกที่สุดที่คุณทำอยู่?" (ไม่จำเป็นต้องเกี่ยวข้องกับการเขียนโปรแกรม) และ "คุณทำรหัสอะไรให้สนุกในเวลาว่างของคุณ"

ขั้นตอนที่ 2: โครงการขนาดเล็กที่พวกเขาทำตามเวลาของตนเอง จากนั้นเราแชร์หน้าจอกับพวกเขาและพวกเขาแสดงให้เราเห็นสิ่งที่พวกเขาสร้างขึ้น ในระหว่างการแชร์หน้าจอเราได้ให้พวกเขาทำการเปลี่ยนแปลงสองโครงการของพวกเขาแล้วดูพวกเขาทำงานผ่านมันและทำให้มันทำงาน

ขั้นตอนที่ 3: สัมภาษณ์บุคคล

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


1
อันนี้ช่างยอดเยี่ยม ฉันชอบมัน!
davidhaskins

3
แม้ว่าฉันจะได้รับการสัมภาษณ์จำนวนมากที่กลายเป็นเรื่องไม่สำคัญ ระวังอย่าให้จมลงในบิตของ sysntax นี้และทำความเข้าใจกับสเกลใหญ่ของพวกเขา โดยเฉพาะอย่างยิ่งหากพวกเขาถูกกล่าวหาว่ามีความสามารถหรือความสนใจเล็กน้อย ผลลัพธ์คือฉันไม่ต้องการทำงานให้กับพวกเขาและฉันแน่ใจว่ามันทำงานร่วมกัน
John Nicholas

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

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

2
@RDL ขั้นตอนการสัมภาษณ์ของเราส่วนใหญ่ได้รับการออกแบบให้มีความสนุกสนานกับนักพัฒนาที่เรากำลังมองหาและเป็นส่วนที่เหลือ คุณรู้ว่า devs ที่ดีไม่สามารถต้านทานการท้าทายได้
pdr

4

คุณอาจต้องการที่จะตรวจสอบจอนแจ็คเกอร์ 's ที่ยอดเยี่ยมกล้อง Cyber-Dojo

มันเป็นสภาพแวดล้อมแบบบูรณาการบนเว็บที่ออกแบบมาสำหรับการปฏิบัติโดยเจตนาของการทดสอบการพัฒนาขับเคลื่อนและเรียนรู้เกี่ยวกับการเปลี่ยนแปลงของทีม มีงานเขียนโปรแกรมขนาดเล็กจำนวนมาก (kata's) และรองรับภาษาหลากหลายตั้งแต่ Python และ Ruby ถึง Java และ C ++

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

สิ่งที่ดีที่สุดคือหลังจากทำกะตะคุณสามารถย้อนกลับไปดูความก้าวหน้าสีแดง / เขียว (หรืออาจจะไม่ใช่ถ้าพวกเขาไม่ได้ทำ TDD * 8 ') ของกะตะแต่ละตัว การคอมไพล์ / ทดสอบทุกคอมมิตจะทำการเปลี่ยนแปลงที่เก็บ git พร้อมกับผลลัพธ์ของการทดสอบ

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

หากคุณต้องการเซิร์ฟเวอร์ CyberDojo ของคุณเองคุณสามารถหาโปรเจ็กต์ทั้งหมดได้ที่ github และยังมีเครื่องเสมือนอุปกรณ์ Turnkey Linux ที่เชื่อมโยงจากที่นั่นซึ่งหมายความว่าสมมติว่าคุณมีเครื่องเล่น VMwareหรือVirtualBoxติดตั้งอยู่แล้ว ไม่กี่นาทีของการดาวน์โหลดเครื่อง!


3

ฉันสัมภาษณ์เพียงครั้งเดียวกับ บริษัท ที่ทำสิ่งนี้ พวกเขาให้แผ่นคำถามที่มีปัญหา 6 หรือ 7 เรื่อง คำแนะนำในการทำวิธีแก้ไขปัญหาแต่ละข้อ

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

ฉันขอแนะนำให้ลองทำอะไรแบบนั้น

สำหรับคำถาม? คำถามเริ่มต้นบางคำถามในไซต์Project Eulerนั้นดี

คุณสามารถลองเล่นเกมง่ายๆหากคุณต้องการดูว่าพวกเขาสามารถนำโปรเจ็กต์เข้าด้วยกันได้อย่างไร

หรือถ้าคุณไม่ต้องการหาอะไรให้ขอให้พวกเขาส่งรหัสบางอย่างจากโครงการสุดท้าย


3

ในการขอให้ผู้คนทำโครงงานให้เสร็จคุณควรมีชุดทักษะเฉพาะที่คุณต้องการประเมินในใจและออกแบบโครงงานเพื่อทดสอบทักษะเหล่านั้น

ตัวอย่างหนึ่งจะนำข้อความในย่อหน้านี้และส่งกลับรายการคำที่ไม่ซ้ำตามตัวอักษร หลังจากแต่ละคำบอกฉันว่าคำปรากฏกี่ครั้งและในประโยคที่คำนั้นปรากฏขึ้น

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

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


ขอโทษที่เสียเวลา
bigtang

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

นำประโยคแรกออกทั้งหมด (ด้วยความเคารพหากคุณไม่ฉลาดพอที่จะคิดโครงการที่เหมาะสมด้วยตัวคุณเองอะไรทำให้คุณคิดว่าคุณฉลาดพอที่จะประเมินผลการสมัครของผู้สมัคร? ") ไม่ได้เพิ่มอะไรเลย คุณค่าและดูเหมือนจะพูดจาไม่ลงรอยกัน
Michael Durrant

0

ตัวอย่างหนึ่งจะนำข้อความในย่อหน้านี้และส่งกลับรายการคำที่ไม่ซ้ำตามตัวอักษร หลังจากแต่ละคำบอกฉันว่าคำปรากฏกี่ครั้งและในประโยคที่คำนั้นปรากฏขึ้น

พวกเขาจะเขียนภาษานี้ในภาษาใด หากพวกเขาออกจากโรงเรียนที่เน้นหนักไปที่ C สิ่งนี้จะไม่เป็นการเขียนที่รวดเร็วเหมือนสอน Python / Perl / Ruby ฯลฯ ... หรือแม้แต่ Java หรือ C # อย่างไรก็ตามมันเป็นการทดสอบที่ดีเล็กน้อย

ฉันแนะนำคนที่ง่ายขึ้นจริง ๆ ในระหว่างการสัมภาษณ์ ไม่มีคำถามเคล็ดลับ ฉันใช้ TMN กับอันนี้ ให้ฟังก์ชั่นสองสามอย่างที่ทำหน้าที่พื้นฐานและถามสิ่งที่พวกเขาทำ (อ่านรหัสของผู้อื่น) จากนั้นให้งานพื้นฐานสองสามข้อ (<20 บรรทัด) เพื่อเขียนเป็นภาษาที่พวกเขาเลือก นั่นควรจะเพียงพอสำหรับระดับรายการที่จะรู้ว่าพวกเขาสามารถโค้ดได้หรือไม่ (ที่ตำแหน่งระดับรายการ) พร้อมกับการสัมภาษณ์และเกรดเฉลี่ยควรให้คุณมีความคิดที่ดีในสิ่งที่คุณต้องรู้


1
ฉันไม่พบภาษาที่สำคัญมันสามารถทำได้ด้วยรหัสหลอก แนวคิดหลักคือการดูว่าพนักงานสันนิษฐานว่า "เข้าที่นั่น" และแสดงสัญญาณที่ดีของการแก้ปัญหาหรือไม่
Jonas Byström

ตรงไปตรงมาภาษาใด ๆ ที่มีการแบ่ง () และอาร์เรย์ / รายการ (ด้วยการกด / ผนวก) จะทำให้เรื่องนี้เล็กน้อย อนุญาตให้โปรแกรมเมอร์ C ถึง 'ถือว่า' แยก () และรายชื่อและมันก็เป็นสิ่งที่น่ารำคาญ :-)
ChuckCottrill

-1

ให้พวกเขาใช้เกมแห่งชีวิตของ Conwayสำหรับภาษาที่คุณกำลังมองหาโดยใช้กระบวนทัศน์การออกแบบของภาษานั้น

เกมแห่งชีวิตของ Java หรือ C # Conway ควรเป็นแบบเชิงวัตถุ LISP หรือ F # จะทำงานได้ ฯลฯ


2
คุณจะให้เวลาพวกเขาทำสิ่งนี้ให้สำเร็จนานแค่ไหน?
งาน

ฉันใช้เวลาประมาณ 4 ชั่วโมงในการดำเนินการกับ OO ทั้งหมด แต่ฉันได้ทำไปแล้วประมาณสิบครั้ง หากคุณต้องการดูว่าพวกเขาคิดอย่างไรและพวกเขาได้รับมากแค่ไหนและพวกเขาเขียนโค้ดที่สามารถทดสอบได้หรือไม่ให้เวลากับพวกเขาน้อย หากคุณทำด้วยตนเองให้เวลา 45 นาทีและดูว่าพวกเขาได้รับไกลแค่ไหนและทำไมพวกเขาถึงเลือกเส้นทางที่พวกเขาทำ มันเป็นหนึ่งในปัญหาเหล่านั้นที่คุณต้องการให้พวกเขารู้ก่อนเวลาเพื่อให้พวกเขาไม่หลงทางโดยสิ้นเชิงแม้แต่สนับสนุนให้พวกเขาลองด้วยตัวเอง มันแสดงให้เห็นมากเกี่ยวกับโปรแกรมเมอร์
George Stocker

8
การถามผู้สมัครเพื่อเขียน Game of Life ของ Conway ทดสอบว่าพวกเขาอยู่ในวิทยาลัยเมื่อเร็ว ๆ นี้หรือเขียนและศึกษาปัญหานั้น คุณจะจ้าง @George Stocker เพราะเขาเขียนมันหลายสิบครั้ง เกมแห่งชีวิตมีความสัมพันธ์กับการพัฒนาในโลกแห่งความจริงอย่างไร
ChuckCottrill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.