ทักษะที่ใช้ในคำถามสัมภาษณ์ทั่วไปถูกนำไปใช้ในงานจริงอย่างไร [ปิด]


13

สำหรับงาน SQL และ C # แอป dev, ผู้สัมภาษณ์มักถามคำถามเกี่ยวกับการสำรวจต้นไม้กราฟและการเชื่อมโยงรายการโดยใช้ C และพอยน์เตอร์ล้วนๆ ในช่วง 3 ปีที่ผ่านมาฉันเคยทำงานไม่เคยทำ

ค้นหาเส้นทางไปยังโหนดที่ 1 ทางด้านขวาของโหนดที่กำหนดซึ่งเป็นจำนวนมากของโหนดที่กำหนด

ตัวอย่างเช่น

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


5
หากคุณต่อสู้กับโครงสร้างข้อมูลพื้นฐานที่สุดคุณจะต้องต่อสู้กับการเขียนโปรแกรมส่วนใหญ่
Mert Akcakaya

1
ซ้ำกันเป็นไปได้: programmers.stackexchange.com/questions/102041/ …
nikie

คำตอบ:


15

อ่านคำตอบบางส่วนของโจเอลด้านล่าง

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

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

http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

http://www.joelonsoftware.com/articles/fog0000000319.html

"... ใช้เวลาอย่างน้อยหนึ่งภาคการศึกษาใกล้กับเครื่องไม่เช่นนั้นคุณจะไม่สามารถสร้างโค้ดที่มีประสิทธิภาพในภาษาระดับสูงกว่าได้ ... "

"... คุณกำลังเขียนโปรแกรมตามความเชื่อโชคลางตราบใดที่ฉันเป็นกังวล: แพทย์ที่ไม่ทราบลักษณะทางกายวิภาคขั้นพื้นฐานกำหนดใบสั่งยาตามสิ่งที่เด็กขายยาบอกว่าใช้งานได้"

http://www.joelonsoftware.com/articles/CollegeAdvice.html


22

พวกเขาไม่. มีการสัมภาษณ์หลายครั้งโดยคนที่ไม่รู้วิธีมองหานักพัฒนาที่มีทักษะและไม่รู้ว่าควรถามหรือไม่ควรถามคำถามอะไร

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

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

คำถามที่ดี (ด้านเทคนิค) คำถามที่ไม่ดี

ในระหว่างการสัมภาษณ์คุณอาจพบคำถามตั้งแต่ดีมากไปจนถึงแย่มาก:

  1. (เป็นอันตราย) "ความยาวของบรรทัดในโปรแกรมการทำงานที่ยาวที่สุดที่คุณเขียนด้วยภาษานั้นคืออะไร"

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

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

  2. (ไม่ดี) "เดนนิสริตชี่คือใคร"

    อย่างน้อยก็มีวัฒนธรรมบางอย่างที่มีประโยชน์มาก แต่การถามคำถามเหล่านั้นไม่ตรงประเด็น หาก บริษัท ค้นหานักพัฒนาที่มีความสามารถซึ่งสามารถจัดการโครงการพัฒนาซอฟต์แวร์และเขียนโค้ดได้ความจริงที่ว่าพวกเขาไม่รู้ชื่อของบุคคลที่สร้าง C และ Unix ไม่ควรสำคัญเกินไป

  3. (ดี) "ฟีเจอร์ใหม่ของ. NET 4.5 คืออะไร"

    คำถามนี้น่าสนใจยิ่งกว่าคำถามเกี่ยวกับเดนนิสริตชี่ หากผู้สมัครไม่สามารถพูดคุยเกี่ยวกับคุณสมบัติใหม่ใน. NET 4.5 ทำไมเขาถึงเรียกตัวเองว่าเป็นนักพัฒนา C # การขาดความรู้ดังกล่าว:

    • แสดงให้เห็นว่าบุคคลนั้นอาจไม่สนใจทั้งภาษาการเขียนโปรแกรมหรือชุมชน. NET

    • บ่งชี้ว่าบุคคลนั้นอาจขาดความรู้ที่สำคัญเกี่ยวกับคุณสมบัติของ C # /. NET นักพัฒนาอื่น ๆ ที่ใช้ถ้าไม่ใช่ทุกวันอย่างน้อยบ่อยครั้ง

    ดูคำตอบของ Jerry Coffinซึ่งมีการวิเคราะห์รายละเอียดเพิ่มเติมของคำถามประเภทนี้

  4. (โดยเฉลี่ย) "อันไหนเร็วกว่า SSD หรือ RAM บ้าง"

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

  5. (ค่าเฉลี่ย) "มีการใช้งานสแต็กและคิวอย่างไร"

    นี่เป็นคำถามที่คุณพูดถึง พวกเขาเป็นทฤษฎีบางทีอาจเป็นทฤษฎี แต่การรู้ว่าเกิดอะไรขึ้นภายใต้ประทุนอาจช่วยให้เขียนโค้ดได้ดีขึ้น

    ฉันจะไม่ปฏิเสธผู้สมัครที่ไม่สามารถตอบคำถามนี้ได้ แต่จะตรวจสอบอย่างละเอียดมากขึ้นถ้าเขารู้เรื่องจริง ๆ เช่นถามคำถามที่เกี่ยวข้อง แต่ไม่เกี่ยวกับทฤษฎี:

  6. (ดี) "คุณจะเดินผ่านต้นไม้โดยไม่ใช้การเรียกซ้ำได้อย่างไร"

    หากผู้สมัครตอบคำถามนี้พูดคุยเกี่ยวกับ FILO / FIFO และเกี่ยวกับประโยชน์และข้อเสียของการใช้สแต็คเทียบกับการสอบถามการสำรวจเส้นทางแบบต้นไม้มันไม่สำคัญเลยว่าเขาไม่สามารถตอบคำถามก่อนหน้านี้ได้

    การถามคำถามนี้เป็นวิธีที่ดีในการตรวจสอบผู้สมัครที่ใช้เวลาหลายปีในการศึกษาระดับปริญญา CS แต่ไม่มีประสบการณ์ภาคสนาม

จะถามคำถามทางเทคนิคที่ดีได้อย่างไร

ความคิดเห็นของ kojiro นั้นน่าสนใจและสมควรได้รับคำตอบนานกว่านี้:

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

การค้นหาคำถามที่ดีอาจเป็นเรื่องท้าทายโดยเฉพาะเมื่อคุณจ้างนักพัฒนาคนแรกหรือเมื่อคุณจ้างนักพัฒนาที่คาดว่าจะมีทักษะมากกว่านักพัฒนาทั้งหมดที่ทำงานใน บริษัท จริง

คำแนะนำสามข้อต่อไปนี้ที่สามารถช่วยได้:

  1. ค้นหาเพื่อน / เพื่อนร่วมงานที่คุณเชื่อว่ามีทักษะและขอให้เขาแสดงความคิดเห็น สิ่งนี้ต้องการความไว้วางใจมากมาย แต่สามารถสร้างประโยชน์ให้กับ บริษัท ของคุณได้มากมาย

  2. หาที่ปรึกษาที่คุณเชื่อว่ามีทักษะและขอให้เขาช่วยคุณหรือทำส่วนทางเทคนิคของการสัมภาษณ์

  3. พิมพ์ "คำถามสัมภาษณ์" ใน Google มันใช้งานได้ดีและมักจะอธิบายคำตอบที่เป็นไปได้ ตัวอย่าง:

    • Python : คำถามสิบข้อนั้นค่อนข้างดี อาจเป็นพื้นฐานเล็กน้อย แต่จะช่วยกรองผู้สมัคร 95% ที่คุณไม่ต้องการจ้าง

    • SQLโดย Dave Pinal ยอดเยี่ยมตามปกติ

    • C # : พื้นฐานเกินไป แต่อีกครั้งพวกเขาจะกรองผู้สมัคร 95%

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

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


¹มีนักพัฒนาบางคนที่ไม่สามารถอธิบายได้ว่า B-tree นั้นคืออะไร (นอกเหนือจากว่ามันคือ "โครงสร้างข้อมูลบางอย่าง") แต่ก็ยังสามารถพัฒนาได้อย่างถูกต้อง


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

หรือคุณอาจขอความช่วยเหลือจากที่ปรึกษาหรือใครก็ตามที่คุณเชื่อว่ามีฝีมือในการจ้างนักพัฒนารายอื่น แน่นอนว่าสิ่งนี้ทำให้เกิดคำถามขึ้น: คุณจะรู้ได้อย่างไรว่าที่ปรึกษา / เพื่อนมีคุณสมบัติเพียงพอสำหรับงานนี้
Arseni Mourzenko

"จำนวนปีที่คุณใช้ในวิทยาลัย (มากกว่านั้นดีกว่า)" ... สิ่งนี้ดีอย่างไร? ดังนั้นถ้าใช้เวลา 15 ปีในการสำเร็จการศึกษาระดับปริญญาตรีฉันดีกว่าคนที่ได้รับใน 3 ปี? "นักเรียนที่ล้มเหลว" ไม่ควรเป็นที่นิยมสำหรับคนที่เรียนจบวิทยาลัยในเวลาปกติ (ฉันใช้คำว่า "นักเรียนที่ล้มเหลว" จากที่นี่หวังว่าการแปลนั้นจะถูกต้อง) หากคุณไม่ได้หมายความอย่างนี้บางทีคุณควรชี้แจง เพราะมันไม่ชัดเจนว่าคุณต้องการระบุอะไร
Bakuriu

@ บาคุริ: แน่นอนนี่เป็นสิ่งที่ตรงกันข้ามกับที่ฉันหมายถึง ฉันแก้ไขคำตอบเพื่อให้ชัดเจนยิ่งขึ้น
Arseni Mourzenko

2
FWIW ฉันไม่สามารถบอกคุณได้ทุกที่ใกล้กับคุณสมบัติใหม่ทั้งหมดของ. NET 4.5 และฉันเขียนบางส่วนของพวกเขา ถ้าฉันต้องการทราบสิ่งนั้นฉันพิมพ์ "คุณสมบัติใหม่ของ. NET 4.5" ลงในเครื่องมือค้นหาและให้รายชื่อฉัน
Eric Lippert

6

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

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

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

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

คำถามภารกิจการเขียนโปรแกรมที่ดีคืออะไร

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

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

ที่กล่าวมาคำถามงานเขียนโปรแกรมที่ดีไม่ควรมุ่งเน้นไปที่การรู้จัก API หรือทักษะการเขียนโค้ดพิเศษยกเว้นว่านี่เป็นข้อกำหนดที่แน่นอนสำหรับงาน สามารถรับความรู้ได้ดังนั้นจึงเป็นการดีกว่าที่จะค้นหาว่าบุคคลนั้นมีความรู้ได้ดีเพียงใดกว่าจะถามว่าเขา / เธอรู้อะไรอยู่แล้ว

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

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

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

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

มีคำตอบที่เป็นไปได้มากมายสำหรับคำถามนี้ดังนั้นการมองอย่างใกล้ชิดถึงวิธีการพัฒนารหัสเป็นส่วนสำคัญไม่ใช่ว่าโซลูชันจะทำงานได้จริงหรือไม่ ผู้สมัครสอบเป็นโมฆะหรือไม่? โอเวอร์โฟลว์ถูกเก็บไว้อย่างไร? มีการใช้การวนซ้ำหรือการตั้งค่า mem หรือไม่? ผู้สมัครตรวจสอบความถูกต้องของรหัสอย่างไร คำถามง่ายๆข้อนี้จะบอกประวัติทั้งหมดเกี่ยวกับการทำงานของบุคคลนั้น

คำถามความรู้ทั่วไปที่ดีคืออะไร

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

ตัวอย่าง:

(ถามโปรแกรมเมอร์ C ++): "คุณรู้ภาษาอื่นที่อยู่นอกเหนือจาก C ++ หรือไม่"

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

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

(ถัดไปจากนั้นสมมติว่าเขารู้ Java):อะไรคือความแตกต่างสามอันดับแรกระหว่าง C ++ และ Java ในที่คุณรับรู้?

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

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

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

  1. "คุณจะให้คะแนนประสบการณ์การพัฒนาแบบมัลติเธรดอย่างไร?"
  2. "โปรดระบุสิ่งที่คุณคิดว่าเป็นสิ่งสำคัญที่สุดสามอันดับแรกที่ควรพิจารณาเมื่อพัฒนาแอพพลิเคชั่นแบบมัลติเธรด"
  3. "โปรดตั้งชื่อคลาสสามคลาสจาก Java API ที่สามารถช่วยคุณในการพัฒนาแอปพลิเคชันเหล่านั้นและให้คำอธิบายสั้น ๆ เกี่ยวกับสิ่งที่พวกเขาใช้สำหรับ"

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

ดังนั้นในครั้งต่อไปที่มีคนถามคุณ 20 ข้อในการเข้ารหัสคำถามคุณรู้ว่าเขาหรือเธอไม่มีความคิดในการสัมภาษณ์คนอย่างถูกต้อง ;)


นี่เป็นคำแนะนำที่ดีจริงๆเกี่ยวกับวิธีการสัมภาษณ์อิโม หวังเป็นอย่างยิ่งว่าจะมีผู้ติดตามจำนวนมาก
Evicatos

5

คำเตือน: สิ่งนี้เขียนเป็น (เรียงลำดับ) ความคิดเห็นเกี่ยวกับคำตอบของ @ MainMa แต่ 1) มันยาวเกินไปที่จะใส่ความคิดเห็นและ 2) ฉันคิดว่ามันเพิ่มมุมมองที่แตกต่างออกไปสำหรับคำถามที่สร้างสรรค์ดังนั้นจึงเป็นคำตอบที่แท้จริง .

ในคำตอบของเขา @MainMa จัดประเภท "คุณสมบัติใหม่ของ. NET 4.5 คืออะไร" เป็นคำถามที่ "ดี"

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

คำถามที่เกี่ยวกับการท่องจำ ผู้สมัครรายนี้จดจำรายการคุณสมบัติทั้งหมดหรือไม่ ตามสิทธิผู้ที่อ้างถึงรายการของ Microsoft อย่างถูกต้องที่สุดควรเป็นผู้ชนะ

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

เพียงแค่สามารถพูดว่า "LINQ" ไม่ได้บอกคุณว่ามีประโยชน์อะไรเกี่ยวกับผู้สมัคร ความสามารถในการพูด: "LINQ ช่วยทำให้โค้ดของฉันมีขนาดกะทัดรัดและอ่านง่ายขึ้นเนื่องจากฉันสามารถแสดงแนวคิด X, Y และ Z ได้อย่างหมดจดและตรงไปตรงมาซึ่งก่อนหน้านี้ฉันต้องกระโดดผ่านห่วงไฟที่ต่อไปนี้เพื่อทำสิ่งเหล่านั้น" (หรือบางอย่างที่คล้ายกัน) บอกคุณมากมายเกี่ยวกับผู้สมัครรหัสประเภทใดที่เขาเขียนการตัดสินความยืดหยุ่นและอื่น ๆ นอกจากนี้ยังช่วยให้คุณมีโอกาสมากขึ้นในการติดตามคำถามเกี่ยวกับวิธีที่บุคคลนี้คิดเกี่ยวกับปัญหาเขียนรหัสคิดถึงรหัสและอื่น ๆ ในที่สุดมันจะช่วยให้คุณมีความคิดที่ดีขึ้นไม่ว่าจะเป็นผู้สมัครที่มีประสบการณ์ N ปีหรือคนที่มีประสบการณ์หนึ่งปีหรือไม่ก็ทำซ้ำ N ครั้ง

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


+1 ฉันคาดหวังว่าผู้สมัครจะไม่ระบุรายชื่อของคุณสมบัติใหม่ แต่เพื่ออธิบายว่าเขาใช้คุณลักษณะใดและเพราะอะไร แต่คำตอบของฉันไม่เพียงพอในขณะที่คุณตอบ
Arseni Mourzenko

@MainMa: นั่นไม่ได้ทำให้ฉันแปลกใจ - นั่นเป็นเหตุผลที่ฉันพูดซ้ำ "เพราะเขาใช้ถ้อยคำ" สองสามครั้งในคำตอบของฉัน
Jerry Coffin

3

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

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

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

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


2

ทักษะที่จำเป็นในการทำงานเหล่านี้ไม่ค่อยมีความสำคัญ ทักษะที่แสดงให้เห็นในแนวทางการตอบคำถามและในบทสนทนาต่อไปคือประเด็นทั้งหมด

เมื่อฉันสัมภาษณ์นักพัฒนาฉันมองหา (a) smart (b) ทำให้สิ่งต่าง ๆ เสร็จสมบูรณ์ (c) จะพอดีมีความรู้ทางเทคนิคระดับพื้นฐานที่จำเป็นสำหรับการเติมบทบาทใด ๆ ซึ่งต้องไปด้วยความเต็มใจที่จะเรียนรู้และรับสิ่งใหม่ ทักษะ การสัมภาษณ์เกี่ยวกับการตรวจสอบกล่องเหล่านั้น

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

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


1

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


1

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

วิธีการเกี่ยวกับการเขียนเสิร์ชเอนจิ้นเว็บเซิร์ฟเวอร์เว็บเบราว์เซอร์เวิร์ดโปรเซสเซอร์สเปรดชีตโปรแกรมแก้ไขรูปภาพโปรแกรมวาดรูปเซิร์ฟเวอร์ฐานข้อมูลชีวสารสนเทศศาสตร์โปรแกรมซื้อขายเกมเกมฟิสิกส์จำลองและอื่น ๆ

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


0

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.