เป็นการสัมภาษณ์ที่ไม่ดีหรือไม่ที่ให้ผู้สมัครเขียนการใช้ลิสต์ที่เชื่อมโยง [ปิด]


43

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

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

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

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

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

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


11
ตำแหน่งนี้มีไว้เพื่ออะไร? นี่เป็นงานประเภทใด มันอยู่ในโดเมนอะไร
โธมัสโอเวนส์

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

3
'C # (... ) ใช้รายการอย่างกว้างขวาง' และ 'ประสิทธิภาพผ่านตัวชี้ไม่ใช่ปัญหาที่เคยเป็น': คุณรู้หรือไม่ว่ารายการเนทีฟเหล่านี้ไม่ได้เชื่อมโยงกับรายการ แต่เป็นรายการตามอาร์เรย์ อาร์เรย์มีแนวโน้มที่จะทำงานได้ดีขึ้นเนื่องจากการแคช ในความเป็นจริง IIRC the .NET Framework ไม่ได้เชื่อมโยงรายการจนถึง 2.0 ฉันค่อนข้างมั่นใจว่าโปรแกรม C # ส่วนใหญ่นั้นไม่ใช้รายการที่ลิงก์
อเล็กซ์สิบบริงค์

1
@AlextenBrink น่าสนใจฉันคิดว่านั่นหมายความว่าความรู้เกี่ยวกับรายการที่เชื่อมโยงนั้นมีความสำคัญน้อยกว่าสำหรับ C # เหตุใดจึงต้องใช้โครงสร้างข้อมูลด้วยตัวเอง (พร้อมข้อบกพร่องที่เป็นไปได้) เมื่อฉันสามารถใช้โครงสร้างที่ดีกว่าที่สร้างไว้ในภาษาได้อย่างถูกต้อง
joshin4colours

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

คำตอบ:


52

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

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

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


เกี่ยวกับการแก้ไขของคุณ:

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

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


19
ย่อหน้าแรกของคุณคือครึ่งเรื่อง อีกครึ่งหนึ่งคือ: หากถูกถามคำถามจะทำให้ผู้สมัครต้องการทำงานให้กับคุณนั่นเป็นคำถามสัมภาษณ์ที่ดี ถ้ามันทำให้ผู้สมัครไม่ต้องการทำงานให้คุณมันเป็นคำถามที่ไม่ดี
ruakh

5
คุณไม่สามารถหาข้อ จำกัด ของสิ่งที่ผู้สมัครรู้ได้เพราะคุณไม่มีทางที่จะยืนยันว่าสิ่งที่คุณพิจารณาว่า "ซับซ้อน" และ "พื้นฐาน" มีผลในลำดับเดียวกันกับผู้สมัครของคุณ LinkedList อาจเป็นพื้นฐานสำหรับโปรแกรมเมอร์ที่สอนในมหาวิทยาลัย แต่โปรแกรมเมอร์ที่เรียนรู้ด้วยตนเองมักจะไม่ต้องเขียน ท้ายที่สุดเขาอาจจะเขียนว่า "LinkedList <string> ... " เมื่อใดก็ตามที่เขาต้องการ หมายความว่าความรู้ของเขาถูกตรึงภายใต้ระดับ "linkedList" หรือไม่? เขาอาจเป็นผู้เชี่ยวชาญในวิชาที่ซับซ้อนและสามารถเรียน LL ใน 5 นาทีใน Google
Sylverdrag

1
@Silverdrag นั่นเป็นเหตุผลที่ฉันบอกว่าคุณต้องการคำถามมากกว่าหนึ่งคำถาม เมื่อคุณพบขีด จำกัด ของความรู้เกี่ยวกับรายการที่เชื่อมโยงไปยังหัวข้ออื่น
Bill the Lizard

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

34

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

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

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


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

2
@pdr - "ถ้าพวกเขาสามารถนำโค้ดตัวอย่างมาได้" หากพวกเขาเขียนตัวอย่างโค้ดที่พวกเขานำมานั้นไม่มีค่า
robrambusch

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

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

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

25

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


เผง ปีที่แล้วฉันได้เขียนส่วนประกอบการเรียงลำดับทางพันธุกรรมวัตถุประสงค์ทั่วไปซึ่งใช้การจำลองการอบอ่อน (เพื่อสร้างตารางเรียน) และใช้โครงสร้างข้อมูล "ขั้นสูง" หลายอย่างเพื่อให้ทำงานได้ ฉันไม่ต้องการรหัสเดียว หาก. Net Framework ไม่มีสิ่งที่ฉันต้องการฉันใช้ C5 หรือ Power Collections
ElGringoGrande

4
ตกลงฉันเขียนแอป LOB ทุกวันฉันมีในการใช้งานรายการที่ผ่านมาเขียนเชื่อมโยง ... ในวิทยาลัย ... ในภาษาโคบอล ฉันสามารถทำมันได้อีก แต่ทำไม? นักพัฒนา LOB ที่มีความสามารถจำนวนมากไม่เคยเขียนและไม่จำเป็นต้องทำ
CaffGeek

1
เห็นด้วยโดยทั่วไป แต่รายการที่เชื่อมโยงนั้นไม่มีอะไรแปลกใหม่จริง ๆ มันเป็นพื้นฐานเพียงหนึ่งระดับผ่าน FizzBuzz
Francesco De Vittori

1
@FrancescoDeVittori: นั่นไม่ใช่ปัญหาบางครั้งใช่มั้ย บางคนให้คุณแก้ปัญหาได้ ดูเหมือนจะง่าย แต่คุณไม่เคยทำมาก่อนดังนั้นสมองของคุณจึงเริ่มแข่งพยายามหา gotchas สิ่งที่จะทำให้คุณเสียค่าใช้จ่ายในการสัมภาษณ์ถ้าคุณไม่คิด และมันไม่ได้อยู่ที่นั่น แต่นั่นทำให้คุณหันเหจากการแก้ปัญหาที่เกิดขึ้นจริง
pdr

@FrancescoDeVittori: คุณช่วยยกตัวอย่างคำถามสัมภาษณ์ที่ไม่ใช่พื้นฐานได้ไหม ฉันต้องการสิ่งนี้เพื่อการพัฒนาตนเอง ขอบคุณ
ชัด

9

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

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


7

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

1) เป็นคำถามประเภทเสียงพึมพำ คุณเพียงแค่ตรวจสอบบางสิ่งพื้นฐานมาก ๆ : บุคคลนั้นเข้าใจรายการที่ลิงก์หรือไม่ ถามและย้ายไป

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

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


6

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

ถ้าฉันเคยสัมภาษณ์ฉันจะไปใช้การเรียงลำดับรายการที่เชื่อมโยงบางอย่างเพื่อทดสอบว่าคนดีในการเขียนโค้ด แต่เพื่อตรวจสอบว่าคน ๆ หนึ่งให้ความสนใจกับรายละเอียดมากน้อยเพียงใด ทุกคนสามารถเขียนรายการที่เชื่อมโยงได้ แต่เป็นกรณีขอบเขตที่แม้แต่โปรแกรมเมอร์ที่ดีบางคนก็ล้มเหลว อย่าถามเขา: Write a code for linked list in C/C++. ขอให้เขาเขียนรายการเชื่อมโยงทั่วไปใน C (ไม่ใช่ C ++) เป็นต้น

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


2
ไม่มีสิ่งใดเป็นรายการเชื่อมโยงทั่วไปใน C.
DeadMG

1
อย่างจริงจัง? ฉันคิดว่าvoidตัวชี้จะอยู่ที่นั่นเท่านั้น ... :) ลิงก์แรกที่ฉันพบใน google สำหรับ "รายการลิงก์ทั่วไปใน c" คือ: daniweb.com/software-development/c/threads/109260และอีกหนึ่งเป็นการสัมภาษณ์ทางเทคนิค .com / … ฉันคิดว่าทุกคนรู้เรื่องนี้!
c0da

ฉันยังไม่ได้ทดสอบรหัสเหล่านี้ แต่ฉันมีรายการเชื่อมโยงประเภทนี้ก่อนหน้านี้และมันทำงานได้ดี ...
c0da

แม้แต่การเขียนรายการเชื่อมโยงทั่วไปใน C # ก็มี "gotchas" หนึ่งหรือสอง (เช่นการเปรียบเทียบองค์ประกอบของประเภท T ไม่ชัดเจนเช่น. (T v1, T v2) => {return v1 == v2;} จะไม่สามารถรวบรวมได้ นอกเสียจากว่าคุณจะมีข้อ จำกัด ด้านคลาสหรือใช้โอเปอเรเตอร์ความเท่าเทียมกันเริ่มต้น)
Steven Evers

@ c0da ตามความเห็นของฉันรายการที่ใช้พvoidอยน์เตอร์ไม่ใช่แบบทั่วไป แต่เป็นแบบทั่วไปตลอดเวลา พวกเขาสามารถเก็บสิ่งต่าง ๆ ไว้ในนั้นและแม้แต่ผสมพวกเขาทั้งหมดที่พวกเขาต้องการ - และทำให้มันไม่ธรรมดาสำหรับฉัน มันเหมือนกับการใช้ประเภทฐานobjectในภาษาเชิงวัตถุ…
โผล่

5

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

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

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

ถามคำถามที่เกี่ยวข้องกับงานที่ผู้สมัครน่าจะได้รับมอบหมายและพยายามทำความเข้าใจว่าพวกเขารู้สึกอย่างไรเกี่ยวกับการรับความรู้ใหม่ พวกเขาจะหาความหมายของไวยากรณ์ที่ไม่ชัดเจนที่พวกเขาไม่เคยเห็นได้อย่างไร (ถ้าคุณเป็นร้านค้า C คุณอาจลองคำถามที่เกี่ยวข้องกับ trigraphs) สำหรับตำแหน่งการเขียนโปรแกรมพวกเขาอ่านหรือมีส่วนร่วมในฟอรัมเช่น Stack Overflow อย่างสม่ำเสมอหรือไม่? หากพวกเขาถูกขอให้ทำงานบางอย่างในภาษาโปรแกรมหรือเฟรมเวิร์กพวกเขาจะมีประสบการณ์น้อยหรือไม่มีเลย (เช่นถ้าคุณเป็นร้านค้า Java ส่วนใหญ่แล้ว Clojure หรือ. NET) แล้วพวกเขาจะแก้ไขปัญหาอย่างไร อาจนำข้อผิดพลาดจริงออกจากตัวติดตามบั๊กของคุณ (อาจเป็นปัญหาที่แก้ไขได้นานแล้ว) และถามพวกเขาว่าพวกเขาในแง่ทั่วไปจะเข้าหาวิธีการแก้ปัญหาได้อย่างไรและพร้อมที่จะอธิบายชิ้นส่วนที่เกี่ยวข้องของผลิตภัณฑ์ที่เป็นปัญหา

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


4

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

ฉันไม่ได้บอกว่าสิ่งนี้จะเป็นมาตรการที่ดีที่สุด แต่มีความสัมพันธ์กันบ้าง


4

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

นี่คือวิธีที่ฉันคิดเกี่ยวกับมัน:

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

ฉันคิดว่านั่นทำให้พวกเขามีคำถามที่ดีที่จะถาม หากคุณเป็นกังวลเกี่ยวกับพวกเขาก่อนการศึกษาสำหรับการสัมภาษณ์แล้วโยนในรายการ ให้พวกเขาเขียนเป็นวงกลมและถามว่าเวลาทำงานของซีมโทติคเป็นอย่างไร หรือให้พวกเขาเขียนโครงสร้างข้อมูลทั่วไปและ / หรืออีกฉบับหนึ่งอย่างรวดเร็ว ... แผนผังการค้นหาแบบไบนารี่ คิว (FIFO) หรือไม่ สแต็ค (FILO)? O(n)คิวลำดับความสำคัญไร้เดียงสา ( ) ผู้คนจำนวนมากคิดว่าฉันรู้ว่า BST เป็นเพียงเพราะมันเป็นต้นไม้O(log n)

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

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


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

@ joshin4colours: ไม่ฉันสับสนเกี่ยวกับคำถาม ในตอนแรกผู้ปฏิบัติการบอกว่าคำถาม LL นั้นเป็นเรื่องตลก แต่จากนั้นไปยังรายการจุดว่าทำไมนักพัฒนาที่มีคุณภาพจะล้มเหลวในคำถาม
Steven Evers

3

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

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

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

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


3

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

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


2

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


2
คำถามยอดนิยมอาจมีการเล่นเกมโดยผู้ที่จำดี
พอลนาธา

1
หากคุณต้องอธิบายว่ารายชื่อที่เชื่อมโยงนั้นทำงานอย่างไรกับผู้สมัครมากกว่าที่คุณไม่ควรจ้างเขามาเขียนโปรแกรม ...
Dima

2

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

  • เขารู้หรือไม่ว่า API คืออะไร เขาสามารถใช้รหัสของคนอื่นได้หรือไม่ เขาสามารถเขียนรหัสเพื่อให้คนอื่นใช้งานได้หรือไม่

  • เขารู้หรือไม่ว่ารายการที่เชื่อมโยงคืออะไร เขารู้จักคอลเล็กชั่นโครงสร้างข้อมูลอัลกอริทึมหรือไม่

หากเขาไม่รู้ด้วยซ้ำว่าควรใช้วิธีใดในรายการที่เชื่อมโยงคุณรู้ว่าเขาอาจไม่เคยใช้วิธีใดวิธีหนึ่งหรือรู้ว่าควรใช้เมื่อใด

  • เขาจัดการกับปัญหาได้อย่างไร เขาเริ่มต้นด้วยการวิเคราะห์ก่อนสเปคเล็ก ๆ ทดสอบก่อนไหม? หรือว่าเขาเพิ่งเริ่มแฮ็คอย่างมีความสุข?

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

  • เขาจัดการกับข้อยกเว้นหรือไม่? แต่ละภาษาการเขียนโปรแกรมมีระเบียบของตนเองสำหรับการจัดการข้อยกเว้น: ใน Java คุณจะคาดว่า LinkedList จะโยน NoSuchElementException เมื่อคุณใช้ getFirst () ในรายการว่าง ภาษาอื่นอาจส่งคืนค่าที่ไม่ได้กำหนด -1 หรือค่าคงที่


ในแบบฝึกหัดการเขียนโค้ดสัมภาษณ์เว้นแต่ว่าจะมีการร้องขอเป็นการเฉพาะฉันจะข้ามการจัดการเคสขอบทุกประเภทการจัดการข้อผิดพลาด ฯลฯ นอกเหนือจากสิ่งที่จำเป็นสำหรับการพิสูจน์แนวคิด แต่ฉันจะทำให้ชัดเจนว่าเป็นตัวเลือกที่ฉันทำ ข้อ จำกัด ในระหว่างการสัมภาษณ์หนึ่งชั่วโมงหรือแม้แต่สองสามชั่วโมงนั้นแตกต่างจากสถานการณ์จริง ๆ เมื่อคุณกำลังทำงานกับสิ่งที่จะเห็นการใช้งานจริง
CVN
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.