วิธีการจัดการสัมภาษณ์ 'รหัสไม่ดี'? [ปิด]


12

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

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


8
ทำไม "เร็ว" หากคุณต้องการเวลาในการคิดมีอะไรผิดปกติกับการใช้เวลาในการคิด?
S.Lott

นี่เป็นส่วนหนึ่งของการทดสอบข้อเขียน / ความถนัดหรือไม่คุณต้องทำการบ้านกับการทดสอบประเภทนี้สำหรับ บริษัท ที่เกี่ยวข้อง
Aditya P

@ S.Lott ดีฉันต้องการเทคนิคส่วนใหญ่ที่จะช่วยให้ฉันหลีกเลี่ยงการล็อคทางปัญญาในสถานการณ์แบบนั้น เทคนิคที่สามารถนำไปใช้ได้อย่างรวดเร็วนั้นมักจะทำงานได้ดีกว่าสำหรับฉัน
วอนตัม

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

@quanticle: "หยุดและคิดว่า" ไม่ใช่เทคนิคแรก "ที่คุณจะใช้อย่างไร? แท้จริงแล้วมีเทคนิคอะไรที่เป็นไปได้อีกบ้างที่มี "หยุดและคิด"
S.Lott

คำตอบ:


18

การสัมภาษณ์รหัสที่ไม่ถูกต้อง (หากพวกเขาทำได้อย่างถูกต้อง) ควรแสดงรหัสของคุณดังต่อไปนี้:

  • เทคนิคภาษาที่ไม่ดี (ไม่ได้ใช้usingคำสั่งใน C # เมื่อจำเป็นหรือใช้ArrayListแทนList<T>)
  • การตัดสินใจออกแบบที่ไม่ดี (เพราะเหตุใดเราจึงต้องการส่งสตริงไปทุกที่หรือใช้refและoutพารามิเตอร์มาก)
  • ข้อผิดพลาดทางไวยากรณ์ (สิ่งนี้ไม่ควรคอมไพล์!)
  • ข้อผิดพลาดรันไทม์ (เช่น Stack Overflow ที่เกิดจากคุณสมบัติที่อ้างถึงตัวเองใน C #)

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

ฉันเพิ่งblogged เกี่ยวกับชิ้นส่วนของรหัสที่แสดงปัญหาเหล่านี้มันจะช่วยให้คุณผ่านกระบวนการทางจิตเดียวกัน

Ayende นำมันลึกลงไปกับซีรี่ส์ค่าจ้างของเขาบาป


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

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

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

+1 อีกหนึ่งจุดสำหรับรายการตรวจสอบ: ตรวจสอบว่ารหัสจัดการกับกรณีเส้นขอบอย่างไร (รายการว่าง, สตริงว่าง, 0, Inf / NaN สำหรับหมายเลขจุดลอยตัว, List<T>ซึ่งมีnullองค์ประกอบ ... )
nikie

9

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

IMO ที่สำคัญคือคิดออกมาดัง ๆ ดังนั้นแม้ว่าคุณจะแข็งตัวขึ้น - แล้วเพียงแค่พูดว่า "ฉันกำลังเครียดอยู่ที่นี่ แต่ให้ฉันผ่านเสียงดังช้า ๆ "

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


2

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

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

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

เหนือสิ่งอื่นใดพูดคุยถึงสิ่งที่คุณกำลังทำและคิด - มันจะช่วยคุณและผู้สัมภาษณ์ทั้งคู่


1

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


1

ฉันคิดว่าเป็นสถานที่ที่ดีในการเริ่มต้น (ถ้าคุณไม่เห็นอะไรชัดเจน) จะโดย "แก้จุดบกพร่อง" มัน นอกจากว่าคุณจะเห็นปัญหาที่เป็นไปได้ทันทีจากค้างคาวสถานที่ที่ดีในการเริ่มต้นคือการสร้างรายการค่าทดสอบจำนวนเล็กน้อย ค่าที่ดีคือค่า 'เส้นทางที่มีความสุข' (ปกติ) ค่า 'ศูนย์' หรือ 'ว่าง' ค่าเป็นโมฆะค่าที่น้อยมาก (สตริง 1 อักขระ, int 1 และอื่น ๆ ) ขนาดใหญ่มากหรือยาวมาก ค่าและค่า 'แปลก' ที่เฉพาะเจาะจงกับประเภท (เช่นอักขระ Unicode สำหรับสตริงตัวเลขติดลบสำหรับ ints ฯลฯ ) มันจะไม่เจ็บที่นี่เพื่อพูดถึงว่าโดยปกติคุณจะเขียนการทดสอบหน่วยโดยใช้ค่าเหล่านี้เพื่อทดสอบรหัสและจะเรียกใช้เหล่านั้นเพื่อตรวจสอบการทำงาน

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

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

อย่างน้อยคุณก็จะได้


0

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


0

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


0

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


0

อาจมีสองประเด็น:

มันอาจจะเป็น "สัมภาษณ์ความเครียด" http://en.wikipedia.org/wiki/Job_interview#Stress ผู้สัมภาษณ์พยายามดูว่าคุณรับมือกับความเครียดอย่างไรเนื่องจากสภาพแวดล้อมการทำงานของพวกเขาเป็นเช่นนั้น

หรือ

คุณอาจรู้สึกเครียด ในกรณีนี้คุณจะต้องจัดการกับความเครียดเช่นวิปัสสนาและดูว่าคุณสามารถสงบสติอารมณ์ได้อย่างไร

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