จะตรวจสอบหรือประเมินทักษะการแก้ไขจุดบกพร่องของบุคคลได้อย่างไร? [ปิด]


48

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

ตั้งแต่นั้นมาเรากำลังคิดว่าเราจะประเมินหรือประเมินทักษะการดีบักของบุคคลได้อย่างไร

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

และข้อที่สอง: วิธีการทดสอบทักษะเหล่านั้นในระหว่างการสัมภาษณ์?


14
จริง ๆ แล้วฉันได้รับรหัสเพื่อตรวจแก้จุดบกพร่องบนคอมพิวเตอร์หนึ่งครั้งสัมภาษณ์ พวกเขาได้แก้ไขซอร์สโค้ดเป็น tar หรือ gzip หรืออะไรบางอย่างและต้องการดูว่าฉันจะแก้ปัญหาอย่างไร
wkl

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

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

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

ให้เขาติดตามสแต็คในการวิเคราะห์ :-)
JustMe

คำตอบ:


24

หากสิ่งแรกที่คนต้องการทำคือดูรหัสและก้าวผ่านมันด้วยตัวดีบั๊กบุคคลนั้นไม่ใช่ตัวแก้ไขปัญหาที่ดี

หากคุณยังไม่มีแผนของการดำเนินการและคุณดำดิ่งเข้าไปในบั๊กของบั๊กแล้วคุณก็คือ Egging อีสเตอร์ สิ่งนี้เป็นจริงสำหรับการแก้ไขปัญหาใด ๆ

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

นี่เป็นความจริงของระบบที่ซับซ้อนใด ๆ


1
+1 สำหรับมุมมองที่ดีในเรื่องนี้ ฉันเห็นด้วย แต่เมื่อพวกเขาคิดว่ากลไกที่สองพวกเขาดีขึ้นตอนนี้วิธีการใช้เครื่องมือ เช่นเดียวกับในรถยนต์วิศวกรที่ไม่เข้าใจหรือไม่สามารถใช้เครื่องมือกลศาสตร์ไม่ใช่วิศวกรที่มีคุณสมบัติเลย
maple_shaft

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

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

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

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

15

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

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

  • การรันแอปพลิเคชันหรือเซิร์ฟเวอร์ที่ใช้แซนด์บ็อกซ์ในโหมดดีบักหรือการสร้างแอปพลิเคชันที่มีสัญลักษณ์สำหรับการดีบัก

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

  • การใช้จุดหยุดเชิงกลยุทธ์

  • คุณสมบัติที่กำหนดเองของจุดพักการแสดงออกตามเงื่อนไขของจุดพัก (ถ้าใช้กับภาษา)

  • การใช้นิพจน์หรือการเฝ้าดูตัวแปรสำหรับการตรวจสอบค่าตัวแปรหรือการอ้างอิง

  • การใช้ค่าตัวแปร ad-hoc หรือการอ้างอิงหรือการจัดการตัวชี้ในเวลาจริง

  • แสดงให้เห็นถึงความสามารถในการก้าวเข้าและออกจากแอพพลิเคชั่น

  • การประเมินผลที่สำคัญของ call stack

  • การดีบักแอ็พพลิเคชันแบบมัลติเธรดและทำความเข้าใจกับสิ่งนี้

กลยุทธ์การดีบักอื่น ๆ ที่ไม่มีเครื่องมือควรแสดงให้เห็นเช่นกันเช่นการวิเคราะห์บันทึกและซอร์สโค้ดรวมถึงความสามารถในการทำการดีบักระดับต่ำโดยไม่ต้องใช้ IDE เช่นกัน


+1 รายการที่เป็นประโยชน์มาก และนำไปใช้มากกว่าหนึ่ง
Dipan Mehta

8
ฉันเห็นว่าการดีบักแอพพลิเคชั่นแบบมัลติเธรดนั้นแตกต่างอย่างสิ้นเชิงจากการดีบักแอพพลิเคชั่นแบบเธรดเดียว แตกต่างและมากยิ่งขึ้น
Bruce Ediger

20
@JarrodRoberson Brian Kernighan และ Rob Pike เขียนใน The Practice of Programming ว่าพวกเขายังคงชอบพิมพ์คำสั่งให้ debuggers เพราะมันชั่วคราวน้อย หลายคนชอบระบบการบันทึกที่ดีซึ่งให้มุมมองที่มีรายละเอียดเกี่ยวกับพา ธ โค้ดโดยไม่หยุดโปรแกรมมิดรัน นอกจากนี้ยังง่ายต่อการอ่านไฟล์บันทึกจากนั้นทำการดีบักดัมพ์หลัก ดังนั้นการทดสอบสารสีน้ำเงินของคุณอาจปฏิเสธโปรแกรมเมอร์ที่ดีบางคนเพราะไม่ใช่ทุกคนที่เห็นด้วยกับการดีบั๊กว่ามีประโยชน์เหมือนกับวิธีการดีบั๊กอื่น (บันทึก, การทดสอบหน่วย, การยืนยัน)
MetricSystem

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

8

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


7

ถามคำถามเช่นนี้กับเขา:

  1. คุณจัดการปัญหาอย่างไร

  2. โครงการซับซ้อนที่คุณทำคืออะไรและคุณประสบความสำเร็จได้อย่างไร

  3. คุณใช้เครื่องมือดีบั๊กใด

  4. คุณมีความต้องการสำหรับเครื่องมือบางอย่างหรือไม่?

  5. ยกตัวอย่างสถานการณ์ของคุณและถามเขาว่าเขาจะจัดการกับมันอย่างไร?

  6. คุณให้คะแนนความสามารถของคุณในการรับโค้ดของคนอื่นอย่างไร

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


6

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

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

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

การทำงานกับฐานรหัสที่มีอยู่นั้นต้องดูรหัสเอกสารและอาจจะทำบันทึกและ desgins ของคุณเอง

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


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

1
@MichalB .: เราแก้ปัญหาทุกโปรแกรมของเรา แต่บางคนจะแสดงวิธีการหลักการในขณะที่สิ่งที่เพียงการสุ่มปรับแต่งอื่น ๆ และดูสิ่งที่เกิดขึ้น
Matthieu M.

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

3

ในทำนองเดียวกันคุณจะกำหนดความสามารถในการเขียนรหัสของใครบางคนถามคำถามพวกเขาเกี่ยวกับการแก้จุดบกพร่อง

ถามพวกเขาว่า "อย่างไร" พวกเขาจะติดตามบั๊กในสถานการณ์ที่กำหนด

ทำตามขั้นตอนต่อไปแล้วนั่งลงหน้าคอมพิวเตอร์แล้วดูการแก้ไขปัญหา


3

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


2

โดยปกติแล้วคนที่มีความสามารถที่ดีก็เป็นคนที่มีความสามารถในการดีบั๊ก

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

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

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


+1 คำตอบยอดเยี่ยม! ฉันยอมรับว่านักพัฒนาซอฟต์แวร์ที่ดีที่สุดมีทักษะการดีบักที่ดีและฉันก็รู้สึกว่าการพบข้อผิดพลาดทางไวยากรณ์นั้นไม่ได้แสดงให้เห็นอะไรมากมาย IDE ส่วนใหญ่และตัวแก้ไขข้อความที่ดี (Notepad ++) บางส่วนจะระบุข้อผิดพลาดทางไวยากรณ์ในภาษาทั่วไป ฉันไม่เห็นด้วยอย่างไรก็ตามปริศนาที่แสดงให้เห็นถึงทักษะการดีบัก ปริศนาแสดงให้เห็นถึงการคิดเชิงวิพากษ์ซึ่งเป็นทักษะที่แตกต่างกัน แต่เกี่ยวข้องกัน
maple_shaft

@maple_shaft ขอบคุณสำหรับ (ยังเป็น +1 อีก) ทรูปริศนายังไม่ได้เชื่อมโยงโดยตรงกับการแก้จุดบกพร่อง แต่มันเป็นการดีสำหรับการตัดสินว่าผู้คนเข้าหาปัญหาอย่างไร - เป็นเรื่องทางอ้อมจริงๆ
Dipan Mehta

2
ฉันดูปริศนาและฉันชอบ ewwwwwwww คุณไม่มีอะไรที่ดีไปกว่าสิ่งที่ "gotcha" ใช่ไหม? และ "ความอาวุโส" เข้ามาในภาพได้อย่างไร? ppl ที่เก่ากว่าควรแก้ปริศนาที่ยากกว่านี้ไหม โปรแกรมเมอร์ที่ดี (หรือ debuggers) เป็นแฟนของ sudoku หรือไม่? คุณอาจจบลงด้วยความน่ารำคาญโปรแกรมเมอร์บางคนที่เก่งและน่ารังเกียจทั่วเมือง gotcha คำถามเป็นการดูถูก <period> โปรดหาสิ่งที่ผู้ชายดีกว่า
Chani

@Scrooge ฉันแค่หมายถึงมันเป็นปริศนาการเขียนโปรแกรม - ฉันไม่เคยเล่นซูโดกุพร้อมการสัมภาษณ์หลายร้อยครั้งที่ฉันได้รับ
Dipan Mehta

2

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

ทำให้พวกเขาบอกคุณเกี่ยวกับสิ่งที่พวกเขาได้ทำในงานสุดท้ายของพวกเขาการบ้านการบ้าน ฯลฯ และสิ่งที่พวกเขาทำในการค้นหาปัญหา


2

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

มันถูกจัดวางเป็นเดสก์ท็อประยะไกลกับสภาพแวดล้อมการทดสอบเก่า อาจเป็นสภาพแวดล้อมที่ไม่ได้เสียบปลั๊กหรือแยกออกจากกัน โครงการนี้เป็นเว็บฟอร์มสองสามตัวที่มีการควบคุม ASP.NET บางตัวและรหัสไฟล์รหัสที่เกี่ยวข้อง codefile อ้างถึงประเภทของชั้นธุรกิจที่ฉันเพิ่งมี dll ไม่มีรหัสแหล่งที่มาและคำอธิบายวิธีการ Webforms ทำหน้าที่ CRUD ที่คุณสามารถคาดหวังได้ ฟังก์ชั่นการค้นหาขนาดเล็ก เลเยอร์ธุรกิจในทางกลับกันพูดคุยกับ Views และ SP ในเซิร์ฟเวอร์ sql

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

ฉันจำรายละเอียดทั้งหมดไม่ได้ แต่อย่างน้อยก็มีการเปลี่ยนชื่อฟิลด์ตารางซึ่งนำไปสู่ ​​SP ที่ใช้งานไม่ได้ซึ่งถูกใช้โดยฟังก์ชันการค้นหา นั่นหมายความว่าไม่มีข้อผิดพลาดใน VS และไม่มีซอร์สโค้ด BL เพื่อติดตามชื่อฟิลด์ พารามิเตอร์ SELECT กับ Sqlcommand ถูกสะกดผิดและทำให้เว็บฟอร์มทำงานผิดปกติ นอกจากนี้ยังมีการละเว้นฟิลด์ซึ่งเป็นฟิลด์ที่ขาดหายไปใน GridView (Autogeneratecolumns) ปุ่ม ASP.NET ถูกอ้างถึงบางสิ่งที่ต้องหมายถึงการทำซ้ำปรับปรุงวิธีและ "ลืม" เพื่อชี้ปุ่มไปยังวิธีการใหม่

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

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

* ผมคิดว่าการทดสอบที่ได้รับการพิสูจน์แล้วว่าผู้สมัคร / ทักษะของฉันไป * * * *
* * * * วิเคราะห์ระบบต่างประเทศ
* ใช้น้อยที่สุดของข้อมูลเพื่อหาข้อผิดพลาดและข้อผิดพลาด
* ภายใต้ความเครียดเวลาและโดยไม่ต้องมีคนช่วยให้คุณรหัสสันนิษฐานแก้ไข
* ระดับที่แตกต่างกันของความรู้
** SQL ฐานข้อมูลและการจัดเก็บ
การใช้งาน ** ของ dll ในโครงการ
** เทคนิค asp.net,
** สถาปัตยกรรมชั้น
** ด้านปัญหาที่มุ่งเน้น

แต่ยังมีสิ่งที่ชัดเจนยิ่งขึ้นเช่นจัดการสภาพแวดล้อมของนักพัฒนาค้นหาและทำความเข้าใจกับเครื่องมือการจัดการเซิร์ฟเวอร์ Db แน่นอนว่ามีผู้สมัครที่ดูดีมากบนกระดาษ แต่ในทางปฏิบัติอาจติดอยู่กับงานดังกล่าว


2

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

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

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


1

นั่งลงที่คอมพิวเตอร์ด้วยสัญลักษณ์ไบนารี (พร้อม debug) ง่ายๆที่ segfaults พร้อมการอ้างอิงตัวชี้โมฆะหรือ + ซอร์สโค้ด + + gdb ดังกล่าวแล้วดูว่าพวกเขาสามารถหาสาเหตุของการชนได้หรือไม่


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

1

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


1

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

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

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

มีมากขึ้นในการแก้จุดบกพร่องกว่าการติดตามผ่านบล็อกของรหัสและการประเมินความสามารถของใครบางคนในการแก้จุดบกพร่องควรตรวจสอบว่า


ฉันคิดว่ามีข้อบกพร่องในซอฟต์แวร์ที่เรายังไม่ได้ค้นพบ มันเหมือนกับการค้นหาข้อบกพร่องจากแผ่นดินไหว คำถามคือคนมองหาสัญญาณที่บอกได้อย่างไร
Christopher Mahan

1

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

คะแนนโบนัสหากพวกเขาพบข้อบกพร่องในรหัสต้นฉบับ

คะแนนโบนัสสองเท่าหากพวกเขาสามารถแก้ไขข้อผิดพลาดในรหัสเดิม


1

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


1

ฉันจะถามคำถามเกี่ยวกับผู้ไม่เชื่อเรื่องพระเจ้าสองอย่างของเทคโนโลยีดังต่อไปนี้:

  • พาฉันผ่านทุกขั้นตอนที่คุณทำเพื่อระบุสาเหตุและแก้ไขข้อบกพร่อง (ข้อบกพร่อง)
  • คุณจะใช้ Call Stack อย่างไรในขณะที่ทำการดีบักแอพมัลติเธรด

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

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