ฉันควรคาดหวังอะไรจากการประเมินทางเทคนิคสำหรับ C ++ [ปิด]


10

ฉันถูกขอให้ไปทดสอบทางเทคนิค / ประเมินผลงานในฐานะนักพัฒนารุ่นใหม่โดยใช้ C ++ เป็นหลัก นี่คือการทดสอบครั้งแรกของฉัน / การประเมินผลและมีความยาว 2 ชั่วโมง

C ++ ของฉันค่อนข้างสนิมเมื่อฉันได้ทำโปรเจ็กต์เมื่อเร็ว ๆ นี้บน PHP

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

ฉันควรคาดหวังอะไรจากการทดสอบข้อใดข้อหนึ่งเหล่านี้


1
คำถามนี้มีไว้สำหรับ PHP แต่คำตอบมีดังนี้: programmers.stackexchange.com/questions/73654/ …
Eric Wilson

คำตอบ:


5

มันคือ C ++ ดังนั้นคุณสามารถคาดหวังอะไรก็ได้ฉันหมายถึงอะไรจริงๆ

มักจะเกี่ยวข้องกับคำถามเคล็ดลับและคำถามที่หลากหลาย

แต่อาจเป็นสิ่งที่ง่ายเช่นกัน

เตรียมพร้อมที่จะตอบคำถามเกี่ยวกับบางสิ่งเช่น "ทำไมคุณถึงทำให้ destructor เสมือน", "volatile", "ออกแบบคลาส" สำหรับปัญหาที่ไม่สมจริง "ใช้รายการที่เชื่อมโยง", "ย้อนกลับสตริง" ฯลฯ


ฉันเพิ่ม " mutableคำหลักใช้ทำอะไร" ไปที่หมวดหมู่อะไรก็ได้
Tom

5

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


1
+1 สำหรับคำแนะนำหนังสือ - และข้ามหนังสือ C ++ ที่มีประสิทธิภาพมากขึ้นของ Scott Meyer เมื่อฉันเคยสัมภาษณ์โปรแกรมเมอร์ฉันก็จะมองไปที่ความซื่อสัตย์ทางปัญญาด้วย (คุณลองและป้านหรือคุณยอมรับว่าคุณไม่รู้) คุณรู้ว่าคุณไม่รู้อะไรและรู้ว่าจะหาที่ไหน คำตอบ. (หากสัมภาษณ์คนที่อ้างว่าทำงานใน C ++ คำถามจะยากกว่านี้) หากไม่มีสิ่งใดที่ชี้แนะทักษะการเขียนโปรแกรมในภาษาอื่นใน CV ของคุณฉันก็ขอให้คุณเขียนโปรแกรมอย่างง่ายและดูว่าคุณครอบคลุมกรณีศึกษาอย่างถูกต้องหรือไม่
MZB

ฉันเป็นผู้สำเร็จการศึกษาด้านคอมพิวเตอร์ฉันได้รับการสอนวิธีการทำโปรแกรมในคอนโซลใน C ++ ฉันได้รับการสอนให้ใช้ Binary Sort Trees และเชื่อมโยงรายการทวีคูณเป็นต้นจากนั้นเราก็ได้รับการสอนในชั้นนามธรรมบทคัดย่อการสืบทอดและ Polymorphism วิธีการใช้งาน บทบาทของงานมีไว้สำหรับบัณฑิตดังนั้นฉันไม่รู้ว่าพวกเขาคาดหวังอะไรจากฉันเพราะฉันไม่มีประสบการณ์ชีวิตการทำงานจริงของ C ++
bearbread

4

มันขึ้นอยู่กับว่ามันจะให้คุณใช้ google หรือเปล่า : P

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

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

(นี่เป็นประสบการณ์ทั่วไปของฉันฉันไม่ได้มาจากสหราชอาณาจักร)


เกี่ยวกับทฤษฎีความหลากหลายรูปแบบการสืบทอด ฉันเพิ่งรู้ทฤษฎีเกี่ยวกับสิ่งนั้นตั้งแต่เพิ่งสำเร็จการศึกษา แต่ฉันไม่รู้ว่าจะนำไปใช้ใน C ++ ได้อย่างไร
Bearbread

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

@bearbread: ทฤษฎีเองไม่คุ้มค่ามาก อ่านเกี่ยวกับรูปแบบการออกแบบและลองใช้
Karoly Horvath

ฉันรู้ว่ารูปแบบการออกแบบเช่น MVC สำหรับ PHP นั่นคือสิ่งที่คุณหมายถึง?
bearbread

1

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


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

0

มันเป็นความจริงที่คุณคาดหวังอะไรก็ได้

พวกเขาบอกคุณว่าการทดสอบคือ C ++ แต่บางทีมันอาจเป็นเซตย่อย C ของ C ++ ที่พวกเขาใช้ในการทดสอบ (คุณจะใช้อาร์เรย์ char แทนสตริงไลบรารีมาตรฐาน) มันจะยากที่จะรู้

หากเป็น C ++ จริงๆฉันขอแนะนำให้คุณดูพื้นฐาน:

  • คลาสตัวแปรอาร์เรย์
  • การอ้างอิงพอยน์เตอร์ (และทำไมคุณไม่ควรใช้เป็นค่าเริ่มต้น)
  • การใช้คำสำคัญ const
  • แนวคิดเชิงวัตถุ (การสืบทอด, ความหลากหลาย) ...
  • แม่แบบ

แล้ว:

  • การใช้ไลบรารีมาตรฐาน (std :: string, std :: vector, container, ... )

0

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

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


ฉันเดาว่า <1% ของโปรแกรมเมอร์ C ++ รู้ทุกอย่างของภาษา :) เพียงแค่นำทุกกรณีของพฤติกรรมที่ไม่ได้กำหนด / ไม่ระบุ / ไม่ระบุ / ใช้งานเป็นตัวอย่าง

0

คุณเป็น:

  1. กำลังเขียนรหัส
  2. การหลายทางเลือก
  3. ในการสัมภาษณ์บุคคล

เมื่อเขียนรหัส

พวกเขาจะคาดหวังให้คุณรู้ (และใช้):

  • RAII
  • กฎข้อที่สาม
  • ทำความเข้าใจกับสมาร์ทพอยน์เตอร์

พวกเขาอาจจะทดสอบคุณใน:

  • มรดก
  • ฟังก์ชั่นเสมือนจริง
  • การทำให้เป็นอนุกรมถึง / จากสตรีม
  • โอเวอร์โหลดตัวดำเนินการทางคณิตศาสตร์ (มักไม่ได้ใช้ในชีวิตจริง แต่ง่ายต่อการเขียนการทดสอบ)

หากคุณโชคร้ายพวกเขาอาจคิดว่า

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

เมื่อถ่ายหลายทางเลือก

  • ทำความเข้าใจกับจุดประสงค์ของ OO ทั้งหมด
  • รู้วิธีการใช้งาน C ++ ของ OO

ในการสัมภาษณ์บุคคล

  • ทั้งหมดที่กล่าวมา
  • ความรู้เรื่องการเรียกซ้ำ
  • วิธีการแปลงการสอบถามซ้ำเป็นลูป
  • วิธีการประมาณความซับซ้อน Big O ()
  • อัลกอริทึมการเรียงลำดับมาตรฐาน (ไม่ใช่แค่บับเบิล)

1
ฉันเป็นโปรแกรมเมอร์ C แทนที่จะเป็น C ++ ดังนั้นฉันไม่รู้คำพูด ... แต่ฉันไม่เคยได้ยิน RIAA และกฎสามข้อ อย่างไรก็ตามฉันเคยได้ยิน RAII (การได้มาของทรัพยากรคือการเริ่มต้นนั่นคือ destructor ของคุณควรทำความสะอาดความยุ่งเหยิงของตัวเอง) และฉันรู้ว่าถ้ารหัสของคุณต้องการสำเนา ctr, ตัวดำเนินการกำหนดค่าเกินพิกัดหรือ destructor มันต้องการทั้งสามอย่าง สำหรับฉันแล้วมันดูเหมือนว่าการสัมภาษณ์ที่เป็นเรื่องไม่สำคัญในการเขียนโปรแกรมสแลงมากกว่าการทดสอบทักษะของคุณพูดอะไรที่ไม่ดีเกี่ยวกับ บริษัท

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

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

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


-1

ฉันได้รับในการสัมภาษณ์ครั้งล่าสุดของฉัน:

ความแตกต่างระหว่างการส่งวัตถุไปยังฟังก์ชันตามค่า / การอ้างอิง / ตัวชี้และตำแหน่งและสาเหตุที่คุณต้องทำเช่นนั้น

สลับ 2 จำนวน 8 บิตสุดท้ายของจำนวนเต็มเช่น RGBA เป็น RGAB

RIAA คืออะไร

กำหนดการเขียนโปรแกรมเมตาเทมเพลต: คุณอาจได้รับคำถามในแง่ของ "แก้ปัญหานี้ด้วย TMP .. "

ความไม่แน่นอนผันแปร const ฯลฯ ฯลฯ หมายถึงอะไร รู้คำค้นหาทั้งหมด

หลายมรดก .... อีกครั้งและอีกครั้ง

การทำหลายเธรด: ผู้ผลิตคอนซูเมอร์และบัฟเฟอร์หน่วยความจำแบบแบ่งใช้

คำถามรอบนอกเพิ่มเติมอีกสองสามข้อ:

การรวม UML และการประพันธ์เพลง

รูปแบบการออกแบบ: ติดตั้งซิงเกิล ... องค์ประกอบทั่วไปของ MVC คืออะไร

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