คำถามสัมภาษณ์งาน C ++ ที่ดีที่สุดคืออะไร [ปิด]


28

ถ้าคุณสามารถถามโปรแกรมเมอร์ C ++ คำถามเดียวเพื่อวัดทักษะ C ++ ของพวกเขามันจะเป็นอะไร?

คำถามที่ฉันคิดว่าดีที่สุดคือ: คุณเรียก "ลบสิ่งนี้" ได้ไหม ภายในฟังก์ชั่นสมาชิก? (ฉันใส่สิ่งนี้เป็นลิงก์เพื่อให้คุณสามารถคิดได้ก่อนแล้วไปที่คำถามสัมภาษณ์ C ++ ที่ดีที่สุด - Ever!เพื่อดูคำตอบที่ถูกต้อง)

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

คำตอบ:


8

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

เพิ่มเติม: ฟังก์ชั่นสมาชิกเสมือนของเทมเพลตในคำตอบนี้หมายถึงฟังก์ชั่นเทมเพลตที่เป็นฟังก์ชั่นสมาชิกเสมือนของบางคลาส - ไม่ใช่ฟังก์ชันสมาชิกปกติในคลาสเทมเพลต ขออภัยที่ทำให้เกิดความสับสน :(


3
@summerlight: ฉันผสมฟังก์ชั่นสมาชิกเสมือนและแม่แบบและไม่มีอะไรเลวร้ายเกิดขึ้นจนถึง ... ดังนั้นฉันกลัวว่าฉันไม่เข้าใจสิ่งที่คุณได้รับ สนใจที่จะสอนฉัน :)
Matthieu M.

2
คำตอบนี้เกือบ แต่ไม่ถูกต้องนัก คุณไม่สามารถใช้ฟังก์ชันสมาชิกเสมือนของแม่แบบได้ แต่คุณสามารถมีฟังก์ชันสมาชิกเสมือนของคลาสแม่แบบได้
catphive

1
@summerlight: เข้าใจแล้ว! คำถามที่น่าขบขันใช่ก็จะปรากฏขึ้นบ่อยครั้ง)
Matthieu M.

2
@ นิกกี้: นั่นเป็นฟังก์ชั่นสมาชิกเสมือนในคลาสเทมเพลตไม่ใช่ฟังก์ชั่นสมาชิกเทมเพลตเสมือนเช่นเทมเพลต <typename T> void เสมือน doSomethingWithGenericTypeT (T arg);
summerlight

2
@summerlight: คุณควรรวมตัวอย่างนั้นไว้ในโพสต์ของคุณ ฉันไม่รู้ว่าคุณหมายถึงอะไรจนถึงตอนนี้ แม้ว่าคำถามที่ดีตอนนี้ฉันเข้าใจแล้ว ;-)
nikie

57

คำถามสัมภาษณ์ C ++ ที่ดีที่สุดคือปัญหาการเขียนโปรแกรมไม่ใช่คำถามตอบคำถาม


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

4
แม้สิ่งที่ง่ายเป็น "เขียนฟังก์ชั่นที่จะย้อนกลับสตริง" สามารถบอกคุณได้มากเกี่ยวกับโปรแกรมเมอร์ผู้เชี่ยวชาญ: ทำพวกเขาใช้CString, char*, std::stringฯลฯ .; พวกเขากลับสตริงใหม่หรือย้อนกลับในสถานที่; พวกเขาวนรอบตัวอักขระหรือเรียกใช้ฟังก์ชันไลบรารีด้วยตนเอง และแน่นอนถ้าพวกเขาไม่สามารถทำอะไรที่เรียบง่ายเหมือนย้อนกลับสตริงมันก็บอกคุณได้มากมายเกี่ยวกับพวกเขา! นอกจากนี้ยังมีคำถามมากมายติดตามเหมือนไม่ได้ทำงานร่วมกับ Unicode มันไม่ทำงานกับ UTF-8 ฯลฯ
เกบ

16
@Ernelli: C ++ ไม่เคยถอดจริงๆเหรอ? อย่างจริงจัง?
Steven Evers

1
@Gabe - จุดดี ตัวอย่างเช่นการทำเทมเพลตในสถานที่กลับด้วยพารามิเตอร์นโยบายอาจจะไม่ทั่วไปมากหรือ (อาจเป็นนโยบายที่ค่อนข้างฟังก์ชั่น) ค่อนข้างซับซ้อนเมื่อมันมาถึงสตริงตัวแปรไบต์ต่ออักขระ ฉันไม่ทราบว่าไม่มีการเพิ่มประสิทธิภาพก่อนวัยอันควร (สร้างสตริงใหม่เพราะง่ายกว่าทั่วไป) หรือความคล่องแคล่ว (ไม่ต้องกังวลเกี่ยวกับกรณีนี้จนกว่าจะเกิดขึ้นและการสลับตำแหน่งแบบ in-place นั้นไม่ใช่เรื่องยาก ง่ายกว่าสำหรับสตริงที่มีความกว้างคงที่) จะชนะ
Steve314

1
@Ernelli - คุณลืม wchar_t และ std :: wstring และพวกมันหมายถึงสิ่งต่าง ๆ บน Windows / Unix
Martin Beckett

32

ฉันจะถามพวกเขาว่าพวกเขาชอบอะไรเกี่ยวกับ C ++ 0x จากนี้ฉันสามารถ "ถัง" พวกเขาเป็นแบบแผนต่างๆ:

  • โรงเรียนเก่าสุดใช้คอมไพเลอร์ C ++ เพื่อคอมไพล์รหัส C
  • โรงเรียนเก่ากลัว (หรือเห็นว่าไม่มีจุด) STL ยังไม่ได้รับการเปลี่ยนแปลง
  • รัก lambdas, รัก STL เริ่มเร็วขึ้นจากการอ้างอิงค่า rvalue, แฟนใหญ่ RAII, ร้อนแรงในการใช้ shared_ptr, unique_ptr ฯลฯ
  • มีรสขมเนื่องจากรหัสส่งเสริมทั้งหมดที่เขียนในช่วงไม่กี่ปีที่ผ่านมาจะต้องถูกปรับให้ใช้เทียบเท่ากับ C ++ 0x
  • metaprogrammer แม่แบบบ้าที่ทำให้หัวของฉันระเบิดในขณะที่ตอบคำถามที่ค่อนข้างสั้น

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


1
+1 สำหรับคำถามนำที่ดีที่กระตุ้นให้มีการอภิปรายรอบเรื่องมาก
Gary Rowe

8
คุณลืมหมวดหมู่ของคนที่ไม่รู้ว่า C ++ 0x คืออะไร ฉันเดาว่าน่าจะเป็นคำตอบที่มากกว่าและพอดีกับสองประเภทแรก
Fast Fish

1
@Fast Fish ใช่คนที่ชอบ C ++ 0-whatnow? โดยทั่วไปจะเป็นหนึ่งในสองประเภทแรกและโดยทั่วไปจะให้ความกระจ่างว่าในคำตอบของพวกเขา
Kate Gregory

28

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

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

ในระดับหนึ่งถึงสิบโปรแกรมเมอร์ C ++ คุณเก่งแค่ไหน?

นี่ไม่ใช่คำถามที่ทำให้คุณได้คำตอบที่คุณต้องการ ทุกคนพูดว่า "แปด" โดยไม่คำนึงถึง คำถามที่ทำให้คุณได้คำตอบที่คุณต้องการคือ:

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

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

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


3
ฉันจะเริ่มใช้อันนี้: โอเคคุณก็อายุแปดขวบ พื้นที่ปัญหาที่คุณคิดว่าเจ็ดจะมีช่วงเวลาที่ยากลำบากในการทำงานกับอะไร?
David Thielen

10
อีกคำถามที่ดีที่นี่: เก้าสิ่งที่คุณจะมีปัญหากับอะไร?
David Thornley

มันยอดเยี่ยมมากมันวิเศษมาก
UpAndAdam

14

เพื่อความสนุกฉันมีโปรแกรมเมอร์ C ++ ที่มีลูกน้อยตัวนี้:

เหตุใดจึงทำงานเป็นวนรอบไม่สิ้นสุด (และใช่พิมพ์อย่างถูกต้อง)

int x=0;
while (x<3) {
  x = x++;
}

มันน่าประหลาดใจที่มีคนสะดุดมากแค่ไหน แน่นอนฉันไม่สามารถใช้ใด ๆ เพิ่มเติมหลังจากที่มันปรากฏอยู่บนกองมากเกิน พูดพึมพำ ... พูดพึมพำ ...

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

เพิ่มคำถามโบนัส

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

คำสารภาพ

ฉันจมอยู่กับมาตรฐาน "x ++ คืนค่าดั้งเดิม" การตอบสนอง อย่างไรก็ตามคำตอบที่ถูกต้องคือพฤติกรรมไม่ได้ถูกกำหนดเนื่องจากมีจุดลำดับ ไม่มีใครเคยกล่าวถึงจุดลำดับในทุกครั้งที่ฉันใช้สิ่งนี้จนกว่าฉันจะโพสต์ที่นี่

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


1
Gary Rowe: ในขณะที่ฉันรักตัวอย่าง (ครั้งแรกที่ฉันได้เห็นมัน) มันทำให้ฉันเศร้าใจที่ผู้คนไม่เห็นว่าค่อนข้างเร็วให้อยู่คนเดียวไม่รู้
Orbling

2
เมื่อฉันอยู่ที่ Microsoft ฉันเริ่มขอให้ผู้สมัครทำการแทรกในรายการที่เชื่อมโยง ทำไม? เพราะประมาณ 80% ทำไม่ได้ น่าอัศจรรย์ ...
David Thielen

43
นี่ไม่จำเป็นต้องเป็นวงที่ไม่สิ้นสุด คุณกำลังเรียกใช้พฤติกรรมที่ไม่ได้กำหนดที่นี่ (x ถูกแก้ไขสองครั้งโดยไม่มีจุดลำดับที่เข้ามาแทรก) และในความเป็นจริงด้วยคอมไพเลอร์เฉพาะของฉัน gcc (Debian 4.3.2-1.1) 4.3.2 บน arch เฉพาะของฉัน (x86) มันจะยุติลง
Logan Capaldo

2
@Logan +1 สำหรับการกล่าวถึงจุดลำดับ คุณจะได้รับการสัมภาษณ์ครั้งที่สองแน่นอน ;-)
Gary Rowe

4
นี่เป็นคำถามสัมภาษณ์ที่ดีมากเพราะบอกผู้สมัครว่าควรกลับมาสัมภาษณ์อีกครั้งหรือไม่ ;-) หากการสัมภาษณ์คิดว่ารหัสนั้นส่งผลให้เกิดการวนซ้ำไม่สิ้นสุด (และผู้สัมภาษณ์ควรมีความสามารถทางเทคนิค) ผู้สมัครสามารถให้โอกาส "พลาด" ได้อย่างปลอดภัย
CB Bailey

8

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


4
ขึ้นอยู่กับพื้นหลังของพวกเขาไม่เคยพบใครบางคนที่มีพื้นหลังฮาร์ดแวร์ที่ไม่เข้าใจตัวชี้ แต่บางคนที่ไม่ได้รับการห่อหุ้มหรือ polymorphism
jk

7

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

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



6

ฉันเชื่อว่าฉันจะถามพวกเขาในสิ่งที่พวกเขารู้หรือมีแนวโน้มที่จะให้พวกเขามีคำถามในสิ่งที่แตกต่างกันมาก

นักเขียน C ++ มากเกินไปเกี่ยวกับผู้ที่มีประสบการณ์น้อยในภาษาอื่น ประสบการณ์ที่ จำกัด มักจะ จำกัด


6

คำถามที่ดีที่สุดสำหรับนักพัฒนา C ++ ที่ยอดเยี่ยมคือ "บอกเหตุผลว่าทำไมเราไม่ควรใช้ C ++"


4

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


4

3

คำถามที่ฉันชอบถามคือคำถามง่าย ๆ :

a) คุณเริ่มต้นด้วย C แล้วเปลี่ยนเป็น C ++ หรือไม่

b) ถ้าเป็นเช่นนั้นสิ่งแรกที่คุณเรียนรู้ที่จะทำแตกต่างกันคืออะไร?

คำตอบนี้มักจะให้คำแนะนำกับฉันเกี่ยวกับวิธีการที่โปรแกรมเมอร์เข้าถึง C ++ และ / / เข้าใจ OOP และ C ++ โดยทั่วไป

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


1

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

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


1

คุณใช้ฟังก์ชั่นเสมือนจริงใน C ++ ได้อย่างไรอธิบายสถานการณ์โลกแห่งความจริง


1

ในขณะนี้ฉันจะพูดว่า: "คุณจะดำเนินการเกี่ยวกับการใช้ตัวสร้างการย้ายสำหรับภาชนะ?"

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


1

ฉันคิดว่าฉันถามความคิดเห็นของพวกเขาเกี่ยวกับการออกแบบพูดstd::string. ฉันยังต้องการถามพวกเขาหากพวกเขาได้ใช้การออกแบบอื่น ๆ (เช่น MFC / ATL CString, wxStringฯลฯ ) และสมมติว่าพวกเขามีขอให้พวกเขาในการเปรียบเทียบและความคมชัดของการออกแบบ

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

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