คำถามที่นักพัฒนา. NET ที่ดีทุกคนควรจะตอบไหม [ปิด]


246

บริษัท ของฉันเป็นเรื่องเกี่ยวกับการจ้างพัฒนา NET เราทำงานบนแพลตฟอร์ม. NET ที่หลากหลาย: ASP.NET, Compact Framework, Windowsforms, Web Services ฉันต้องการรวบรวมรายการ / แคตตาล็อกของคำถามที่ดีเป็นมาตรฐานขั้นต่ำเพื่อดูว่าผู้สมัครมีประสบการณ์ ดังนั้นคำถามของฉันคือ:

คำถามสิ่งที่คุณคิดว่าดีควรโปรแกรมเมอร์ .NET สามารถที่จะตอบสนอง ?

ผมยังเห็นว่ามันเป็นรายการตรวจสอบสำหรับตัวเองเพื่อที่จะดูว่าการขาดดุลของฉันเอง(มีจำนวนมาก ... )

ข้อความแสดงแทน

* UPDATE: ต้องการให้ชัดเจนว่าเราไม่ได้ทดสอบเฉพาะความรู้. NET เท่านั้นและความสามารถในการแก้ปัญหาและทักษะการเขียนโปรแกรมทั่วไปนั้นสำคัญยิ่งสำหรับเรา

คำตอบ:


171

คำถามพื้นฐาน ได้แก่ :

ฉันคิดว่าโดยปกติแล้วมันจะช่วยให้ผู้สมัครของคุณทำการฝึกเขียนโค้ดอย่างง่ายเช่น:

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

จากนั้นค้นหาความรู้ด้านเทคนิคเฉพาะ:

  • (ตัวจัดการเหตุการณ์) สร้างคลาสที่มีตัวจัดการเหตุการณ์ที่กำหนดเองสร้างคลาสอื่นที่เชื่อมต่อกับตัวจัดการเหตุการณ์ที่กำหนดเอง
  • (XML) โหลดเอกสาร XML และเลือกโหนดทั้งหมดที่มีคุณสมบัติ x, y และ z
  • (การโปรแกรมเชิงฟังก์ชัน) สร้างฟังก์ชั่นที่ยอมรับฟังก์ชั่นอื่นเป็นพารามิเตอร์ ฟังก์ชั่น Map หรือ Fold ใช้งานได้ดีจริง ๆ สำหรับสิ่งนี้
  • (Reflection) เขียนฟังก์ชันที่กำหนดว่าคลาสมีคุณสมบัติเฉพาะหรือไม่
  • (Regex) เขียนนิพจน์ทั่วไปซึ่งจะลบแท็กทั้งหมดออกจากบล็อก HTML

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

[แก้ไขเพื่อความกระจ่าง] :

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


ถาม:ครั้งสุดท้ายที่มีคนใช้สารระเหยหรือข้อมูลอ้างอิงอ่อน

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

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

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

.NET เป็นภาษาที่ค่อนข้างเป็นธรรม แต่ผู้พัฒนาดาวมักจะมีความเข้าใจอย่างลึกซึ้งเกี่ยวกับ CLR และรายละเอียดระดับต่ำของรันไทม์ของ. NET


ถาม:ทำไมทุกคนต้องใช้ hashtable ของตนเองหรือรายการที่ลิงก์?

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

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


ถาม:ทำไมคำถามเหล่านี้ถึงหยาบคาย?

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

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


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

33
ในทำนองเดียวกันฉันไม่เคยประกาศตัวแปร "ระเหย" และทำเพียงเล็กน้อยกับ XML และไม่สามารถทำงานเขียนโปรแกรมของคุณให้เสร็จได้ และยัง - ฉันเป็นผู้แต่งที่ได้รับการตีพิมพ์ชนะการประกวดเขียนโปรแกรมครั้งสำคัญและได้เขียนผลิตภัณฑ์ที่ประสบความสำเร็จ 4 รายการที่ได้รับรางวัลใหญ่
Mark Brittingham

24
ดังนั้นฉันไม่จำเป็นต้องไม่เห็นด้วยกับรายการของคุณ - ฉันแค่ไม่เห็นด้วยกับการกำหนดลักษณะของรายการความรู้ของคุณเป็น "พื้นฐาน" ไม่มีแนวคิดที่ยาก - แต่บางคนก็ค่อนข้างเฉพาะเจาะจงและจะไม่คุ้นเคยกับผู้สมัครจำนวนมาก ยัง - อีกครั้ง - โปรดยอมรับคำขอโทษของฉัน
Mark Brittingham

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

15
(Regex) Write a regular expression which removes all tags from a block of HTML.- I SMELL TROUBLE
BlueRaja - Danny Pflughoeft

135

ฉันพบรายการเหล่านี้ในบล็อกของScott Hanselman :

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

แพลตฟอร์มคำถาม. NET อิสระ

ASP.NET


8
ฉันรู้จักนักพัฒนาที่รู้ทั้งหมดนี้และยังไม่สามารถมองเห็นได้ไกลไปกว่าหนังสือ Open-Minded มีความสำคัญมากนอกจากนี้อย่าพยายามที่จะรับรายละเอียดคำตอบมากเกินไปตรวจสอบให้แน่ใจว่าพวกเขาเข้าใจแนวคิด
Saif Khan

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

2
คำถามบางข้อโง่จริงๆเช่นความแตกต่างระหว่าง Debug และ Release build ใช่ Visual Studio ได้กำหนดค่าการสร้างไว้ล่วงหน้าแล้ว แต่นี่ไม่ใช่คำถามที่เป็นอิสระของแพลตฟอร์ม คนที่คอมไพล์ด้วยบรรทัดคำสั่งหรือใช้โมโนอาจไม่รู้ว่าคุณกำลังพูดถึงอะไร
lubos hasko

3
คุณสามารถอธิบายแนวคิดที่มักจะใช้เวลา 2 หน้าหรือแม้แต่บทหนึ่งของหนังสือในลักษณะที่ชัดเจนในสถานการณ์การสัมภาษณ์ ฉันไม่สามารถฝึกซ้อมพวกเขาไม่ได้ก่อน
Chris S

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

94

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

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

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


อาจเป็นส่วนหนึ่งของกระบวนการจ้างงานควรเป็นปัญหาใน Cardspace หรือบางสิ่งที่พวกเขาไม่เคยดู !!
Jennifer

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

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

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

5
ใช่เราทุกคนต้องรู้ "เทคโนโลยีแคบ ๆ " แต่สำหรับทุกคนที่เรารู้จักมีพวงที่เราไม่รู้ (ปกติแล้วเพราะเราไม่ต้องการพวกเขา) ฉันกำลังบอกว่าคุณไม่ต้องการที่จะพลาดนักพัฒนาที่ยอดเยี่ยมที่ไม่รู้จัก SharePoint เพราะในไม่ช้าเขาอาจเป็นคนที่ดีที่สุดของ SharePoint
Brian MacKay

66

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

ก่อนหน้านี้ฉันเคยถามคำถามหลายข้อที่มีอยู่แล้วและคำถามอื่น ๆ :

  • ความแตกต่างระหว่างการอ้างอิงและประเภทของค่า
  • ส่งผ่านการอ้างอิงกับการส่งผ่านตามค่า
  • IDisposable และ finalizers
  • สตริง, การเปลี่ยนแปลงไม่ได้, การเข้ารหัสอักขระ
  • จุดลอยตัว
  • ผู้ได้รับมอบหมาย
  • generics
  • ประเภทที่ทำให้เป็นโมฆะ

1
ใช่ฉันต้องการเห็นคำตอบแบบนี้ ผู้สมัครที่ดีสำหรับการได้รับการยอมรับ ใครดีกว่ากัน
splattne

5
@splattne: อย่าโง่นี่เป็นคำตอบของ Jon Skeet ดังนั้นเพียงแค่ยอมรับ มันคงหนีไม่พ้น
Steven A. Lowe

3
ฉันกำลังจะพูดว่า ... wt ... คุณไม่ได้ถาม Skeet!
Saif Khan

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

1
คำตอบนี้จะทำให้กางเกงไม่ 'ออกแบบรายการที่เชื่อมโยงของคุณเอง "แยกวิเคราะห์ HTML กับ regexp" หรือ "คุณรู้เกี่ยวกับการประกอบ GAC ฯลฯ มากน้อยเพียงใด" เพราะเป็นเครื่องมือและแนวคิดที่คุณต้องการ ใช้จริงในระหว่างการพัฒนา ความรู้ที่ใกล้ชิดของ LINQ ก็เป็นสิ่งจำเป็นเช่นกัน ฉันเคยเห็นอินสแตนซ์มากมายในไซต์นี้ที่ผู้คนพยายามสะสม Union Distinct และ Concat รุ่นของตนเองเนื่องจากพวกเขาไม่เข้าใจ LINQ
Evan Plaice

42

ฉันอยู่กับพวกที่กำลังมองหาความสามารถในการแก้ปัญหามากกว่าสิ่งที่คุณสามารถค้นหาและจดจำได้จาก '101 top .NET สัมภาษณ์ Qs และ As "

เพียงยกตัวอย่างตัวเองฉันมักจะ 'รู้' สิ่งที่ฉันต้องใช้ในแต่ละวัน ฉันมักจะลืม (และต่อมาต้องค้นหาอีกครั้ง) สิ่งที่ฉันไม่ค่อยได้ใช้

หากคุณต้องการที่จะเดินทางไปให้ฉันในการสัมภาษณ์มันจะง่ายมาก

อย่างไรก็ตามฉันได้ออกแบบและเขียนโครงสร้างพื้นฐานส่วนใหญ่สำหรับระบบที่ใช้ Business Objects และเลเยอร์ข้อมูลที่เหมือนกันสำหรับ WinForms และ ASP.NET incarnations และ codebase ของเรานั้นแข็งแกร่งและสามารถนำกลับมาใช้ใหม่ได้เพื่อให้เราสามารถสนับสนุนและพัฒนา 20+ รุ่นที่กำหนดค่าแตกต่างกันของเว็บไซต์เช่นเดียวกับจำนวนที่เพิ่มขึ้น (ปัจจุบัน 5) ของแอปพลิเคชัน WinForms ...

... กับทีมพัฒนาสองคน

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

... ยกเว้นวิธีการเขียนโค้ดที่ตรงตามข้อกำหนดหรือใครก็ตามที่สามารถเข้าใจได้ยกเว้นตัวเขาเอง ในที่สุดเมื่อฉันชักชวน PM ไม่ให้ต่ออายุสัญญาของเขาทุกสิ่งที่เขาเขียนจะต้องมีการเขียนใหม่

จัดโครงสร้างการสัมภาษณ์ของคุณอย่างชาญฉลาด ...


1
นั่นเป็นข้อสังเกตที่น่าสนใจจริงๆ เรามีสถานการณ์ตรงกันข้าม: นักพัฒนากลุ่มเล็ก ๆ ที่รู้น้อยกว่าคนอื่น ๆ แต่ผู้ที่เชื่อมั่นว่าพวกเขารู้มากขึ้น พวกเขาเสนอคลาสนามธรรมของข้อมูลที่ฉันโต้เถียงเป็นไปไม่ได้ (ฉันถูกวิพากษ์วิจารณ์ว่าไม่ได้เป็น "ผู้เล่นทีม")
Mark Brittingham

- ยุติ - หลังจาก 4 เดือนของความพยายาม "งานเสนียด" พวกเขานำเสนอทีมพร้อมกับ .... เอกสารการโอนไปยังแผนกอื่น - และไม่มีรหัส ส่วนที่เหลือของทีมต้องหยิบชิ้น
Mark Brittingham

1
แม้ว่าบรรทัดล่าง: ฉันชอบการสังเกตของคุณว่าความรู้เฉพาะของการสร้างโครงสร้างไม่ได้รับประกันความสามารถในการสร้างซอฟต์แวร์ที่ใช้งานได้ที่ตรงกับความต้องการของลูกค้า
Mark Brittingham

34

Jon Skeet คือใคร


11
หรือดีกว่า: คุณ Jon Skeet หรือไม่ ;-)
splattne

นี่เป็นคำถามที่ดีสำหรับตำแหน่ง C # พิจารณาแล้วว่า Jon Skeet เป็นเจ้าของ stackoverflow / google ค้นหา C # ที่เกี่ยวข้อง หากคุณไม่ทราบว่าเขาคือใครคุณคือ Jon Skeet หรือคุณไม่ได้เขียนโปรแกรมใน C #
lubos hasko

2
ไม่มีการกระทำผิดกฎหมายจอน Skeet - แต่ผมคิดว่าริกราล์มีแนวโน้มที่จะแสดงขึ้นกับคำตอบที่พบบ่อยมากขึ้นสำหรับประเภทของปัญหาที่ผมทำงานเป็น ..
แอนดรู Theken

1
@ [Andrew Theken]: ฉันจะเล่นเปอร์เซ็นต์ในหนึ่ง ;-) google สำหรับ "Rick Strahl" ให้ผลตอบแทน 38,500 ครั้ง "jon skeet" ให้ผล 144,000 นอกจากนี้ Rick Strahl ไม่ได้โพสต์ใน SO AFAIK
Steven A. Lowe

1
ทั้งสองคนยอดเยี่ยมในสิ่งที่พวกเขาทำ ... ผลประโยชน์ของเรา
GR7

33

คำถามที่ดีที่ฉันได้รับการถามคือ

  • คุณคิดว่าอะไรดีเกี่ยวกับ. NET
  • สิ่งใดที่คุณคิดว่าเป็นที่ไม่ดีเกี่ยวกับ .NET?

มันน่าสนใจที่จะเห็นว่าผู้สมัครจะเกิดอะไรขึ้นและแน่นอนคุณจะได้เรียนรู้เล็กน้อยเกี่ยวกับวิธีที่เขา / เธอใช้กรอบงาน


18

ฉันมักจะมองหาทักษะที่อ่อนนุ่มตัวเอง - ไม่เล่นสำนวนเจตนา การออกแบบ OO ที่ดีมากการพัฒนาที่ขับเคลื่อนด้วยการทดสอบพื้นหลังภาษาที่ดี (การเขียนโปรแกรม) ที่หลากหลายและความฉลาดรอบด้านทั้งหมด (และการทำสิ่งต่าง ๆ เสร็จเรียบร้อยฉันเดา!)

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

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


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

4
... แต่ถ้าคุณไม่แก้ปัญหาตามที่ผู้สัมภาษณ์คาดหวังคุณก็ล้มเหลว
gbjbaanb

1
@gbjbaanb บางครั้ง แต่ถ้าเป็นเช่นนั้นคุณอาจไม่ต้องการทำงานที่นั่น จำไว้ว่าคุณกำลังสัมภาษณ์ บริษัท ด้วย ฉันรู้จัก บริษัท บางแห่งที่ล้มเหลวในการสัมภาษณ์!
Tony Ennis

13

สุจริต?

". NET คืออะไร"

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

ข้อเท็จจริงของเรื่องคือหลายคนไม่รู้จริง ๆ ว่า. NET คืออะไร แม้แต่คนที่เขียนโปรแกรมสำหรับมัน


11

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

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


10

ทราบความแตกต่างระหว่างการอ้างอิงและประเภทของค่า

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

เงื่อนไขไม่เปลี่ยนรูป


6

ฟาวเลอร์มาร์ตินชอบทักษะการออกแบบมากกว่าความรู้แพลตฟอร์ม ในทางกลับกันคุณสามารถถามคำถามซึ่งจะแสดงความรู้เกี่ยวกับรูปแบบการออกแบบและแพลตฟอร์ม NET ดังนี้:

  • ชื่อรูปแบบการออกแบบและหลักการที่คุณรู้จักและวิธีการใช้ใน. NET Framework

4

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


3

นี่คือบางส่วนที่ฉันเคยใช้ในการกรองโปรแกรมเมอร์ใช้สำหรับงานเป็นโปรแกรมเมอร์ C #:

ประเภทอ้างอิงและประเภทค่าแตกต่างกันอย่างไร

อธิบายถึงส่วนต่อประสาน IDisposable ซึ่งโครงสร้างภาษา C # นั้นต้องการและวิธีการใช้งาน

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


รหัสของฉันมักจะโยน NullReferenceException
Joshua

5
@Joshua, ArgumentNullException คุณล้มเหลว
Nicolas Dorier

3

"ASP ตัวใด: คุณจะใช้ตัวควบคุมอะไรในการผลิตและทำไม"

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

(คำตอบคือ asp: Repeater, asp: ตัวยึดตำแหน่ง, asp: ตัวอักษรและ asp: เนื้อหา)



2

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

". NET Framework เสนออะไรเพื่อให้ภารกิจ X เสร็จสิ้น"

หรือเฉพาะเจาะจงมากขึ้น:

". NET Framework มีวัตถุที่ทำ X หรือไม่"

ตัวอย่างเช่นเมื่อเร็ว ๆ นี้ฉันใช้เวลาไม่กี่ชั่วโมงในการพัฒนาวัตถุที่ได้รับการปรับแต่งเพื่อเก็บอาร์เรย์ของบูลีนและทำงานกับมันเช่นการทำคอลเลคชั่นที่ไม่ฉลาด, OR, XOR, และตั้งค่าทั้งหมดเป็นต้น จนกว่าฉันจะเสร็จสิ้นการเขียนการทดสอบหน่วยของฉันทั้งหมดและปรับแต่งมันเพื่อให้ได้ประสิทธิภาพที่ดีที่สุดเท่าที่จะเป็นไปได้ฉันรู้ว่าวัตถุ "BoolArray" ของฉันมีอยู่แล้วในกรอบงาน. NET ภายใต้ชื่อ "BitArray"

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


2

ฉันจะแนะนำคำถามบางข้อมุ่งเน้นไปที่การทำความเข้าใจแนวคิดการเขียนโปรแกรมโดยใช้ดอทเน็ตเช่น

ความแตกต่างระหว่างสภาพแวดล้อมที่ถูกจัดการและไม่ได้รับการจัดการคืออะไร? ข้อดีและข้อเสียของ GC ข้อดีและข้อเสียของ JIT หากเราต้องการพัฒนาแอปพลิเคชัน X เราสามารถใช้ dotnet ได้ทำไม? (สิ่งนี้จะระบุว่าเขาเห็น dotnet ได้อย่างไร)

ฉันขอแนะนำให้เขียนวิธีการขนาดเล็กและขอให้เขาเขียนใหม่ด้วยประสิทธิภาพที่ดีขึ้นโดยใช้คลาส dotnet ที่ดีขึ้นหรือวิธีมาตรฐาน ยังเขียนวิธีการที่ไม่ถูกต้อง (ในแง่ของใด ๆ ) ตรรกะหรืออะไรก็ตามและขอให้เขาแก้ไขพวกเขา


2

ฉันเป็นแฟนของต่อไปนี้นอกเหนือจากบางคำถามที่กล่าวถึงแล้ว:

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

2

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

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

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

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

2 เซ็นต์ของฉันขอแสดงความนับถือทอม


2

อีกไม่กี่:

  1. คลาสบางส่วน และข้อ จำกัด ของมัน?
  2. ชั้นเรียนที่ปิดสนิท
  3. การแปลเป็นภาษาท้องถิ่นสามารถทำได้ใน. NET
  4. การเชื่อมต่อฐานข้อมูล
  5. ไฟล์การกำหนดค่าต่างๆ
  6. ผู้ได้รับมอบหมาย vs เหตุการณ์
  7. การเข้าถึง dll ที่ไม่มีการจัดการ
  8. สะท้อน
  9. คลาสทั่วไป
  10. ร้อนแรงที่สุดใน. NET 3.5
  11. กรอบการทดสอบหน่วยที่คุณใช้

2

ฉันจะไม่ถามคำถามที่ "รู้อะไรบางอย่างจากตำราเรียน" แต่ถามคำถามที่น่าสนใจเช่น:

  • foreach loop ทำอะไรใน C ธรรมดา (คาดว่าเขาจะเขียนวนซ้ำ)
  • ซิงเกิลคืออะไร
  • ให้เขา / เธอวิเคราะห์สตริงไปที่ Datetime (คาดว่าเขา / เธอจะใช้ TryParse แทนที่จะลอง / จับ)
  • ใช้รูปแบบกลยุทธ์และคำสั่งเดี่ยว
  • ปล่อยให้เขา / เธอ Refactor ชิ้นส่วนของรหัสสำหรับการทดสอบ คาดหวังให้เขา / เธอเป็นนามธรรมบริการภายนอกห่างจากหน่วยภายใต้การทดสอบและใช้การทดสอบสองครั้งของการบริการ

สิ่งเหล่านี้ไม่แน่ใจ 100% ขึ้นอยู่กับบุคคลที่ฉันอาจถามพวกเขา:

  • ให้เขา / เธอป้องกันวิธีการจากการป้อนข้อมูลเป็นโมฆะ (คาดหวังว่าเขา / เธอจะใช้ผลตอบแทนหลายรายการเพื่อลดการทำรัง)
  • object initializer ทำงานอย่างไร (คาดหวังว่าเขา / เธอจะเขียนการกำหนดเธรดที่ปลอดภัย)

นอกจากนี้ฉันจะถามเขาว่าเขา / เธอได้เรียนรู้เนื้อหาของเขา / เธออย่างไรและเขา / เธอกำลังอ่านอะไร (บล็อกอะไรหนังสือ)


1

อีกไม่กี่:

ข้อ จำกัด ของการเก็บขยะคืออะไร

รู้เกี่ยวกับ finalizers และ IDisposable

ระวังเธรดพูลและเมื่อใช้

หากคุณกำลังใช้งานแอพพลิเคชั่น GUI โปรดระวังว่า Windows GUI เป็นเธรดเดี่ยว

ใช้ foreach (ฉันเห็นผู้คนจำนวนมากที่ทำ MoveNext และอื่น ๆ )


1
ผมไม่ทราบดังนั้นผมมองขึ้นไปบนข้อ จำกัด ของการเก็บขยะ
MSpeed

1

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

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

ฉันถูกขอให้พัฒนาแอปพลิเคชั่นเว็บสามหน้าในเวลา 6 ชั่วโมง ข้อ จำกัด ที่บังคับใช้ในแอพพลิเคชั่นนั้นครอบคลุมประเด็นสำคัญ ๆ ของการพัฒนาแอพพลิเคชั่นเช่น ERD ขนาดเล็กการออกแบบ Layerd ความสอดคล้องของ UI ควบคุมปัญหาเฉพาะเช่นการใช้ปุ่มตัวเลือกใน GridView และการดึงและการแสดงประเภทภาพจากฐานข้อมูลบนเว็บเพจ ความปลอดภัย, การเข้ารหัส, การแฮช, การแสดงข้อมูลและการจัดการ

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

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


0

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

สิ่งนี้จะแตกความสามารถเกือบทั้งหมดของผู้สมัครในแง่ของทักษะด้านเทคนิคการวิเคราะห์และการแก้ปัญหาพร้อมกับวิธีการของเขาในการแก้ปัญหา

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