Apa yang harus saya harapkan dari evaluasi teknis untuk C ++? [Tutup]

10

Saya telah diminta untuk mengikuti tes teknis / evaluasi untuk pekerjaan sebagai pengembang junior, terutama menggunakan C ++. Ini adalah tes / evaluasi pertama saya, dan ini adalah 2 jam.

C ++ saya agak berkarat karena saya telah melakukan proyek baru-baru ini di PHP.

Ini adalah perusahaan Inggris, namun saya menduga pengujian teknis kandidat akan hampir sama di mana-mana.

Apa yang harus saya harapkan dalam salah satu tes ini?

roti beruang
sumber
1
Pertanyaan ini untuk PHP, tetapi jawabannya berlaku: programmers.stackexchange.com/questions/73654/…
Eric Wilson

Jawaban:

5

Ini C ++, jadi kamu bisa mengharapkan apa saja, maksudku BENAR-BENAR apa saja.

Biasanya itu melibatkan pertanyaan jebakan, dan semacam pertanyaan polimorfisme.

Tapi bisa jadi sesuatu yang sederhana juga.

Bersiaplah untuk menjawab pertanyaan tentang sesuatu seperti "mengapa Anda membuat virtual destructor", apa yang "volatile", "mendesain kelas" untuk beberapa masalah yang tidak realistis, "mengimplementasikan daftar tertaut", "membalikkan string", dll.

Coder
sumber
Saya akan menambahkan "Untuk apa mutablekata kunci digunakan?" ke kategori apa pun.
Tom
5

Jika ini adalah tes C ++ murni (yaitu bukan tes C ++ Windows / MFC / Managed), maka habiskan beberapa jam atau sehari dengan Efektif C ++ Scott Meyer dan Anda harus melakukannya dengan sangat baik. Itu tidak mencakup templat dan STL, tetapi jika mereka tertarik pada itu, mereka mungkin tidak akan memberi Anda tes dua jam. Sudah beberapa tahun, tapi saya sering mewawancarai pengembang C ++. Meskipun ide-ide dalam C ++ Efektif adalah dasar untuk pemrograman C ++, hanya sekitar sepuluh persen dari kandidat yang mengetahuinya.

kevin cline
sumber
1
+1 untuk rekomendasi buku - dan lewati Buku C ++ Scott Meyer yang Lebih Efektif. Ketika saya biasa mewawancarai pemrogram, saya juga akan melihat kejujuran intelektual (apakah Anda mencoba dan menggertak atau Anda mengakui Anda tidak tahu), apakah Anda tahu apa yang tidak Anda ketahui, dan apakah Anda tahu di mana menemukan sebuah jawaban. (Jika mewawancarai seseorang yang mengaku telah bekerja di C ++, pertanyaannya akan jauh lebih sulit). Jika tidak ada sesuatu yang menunjukkan keterampilan pemrograman dalam bahasa lain di CV Anda, saya juga akan meminta Anda untuk menulis program sederhana, dan lihat apakah Anda sudah menutupi kasus sudut dengan benar.
MZB
Saya seorang lulusan komputer, saya diajari bagaimana melakukan program di konsol dalam C ++, saya diajari untuk mengimplementasikan Binary Sort Trees, dan daftar yang saling terkait dll. Kemudian kami juga diajari tentang Kelas Abstrak, Warisan dan Polimorfisme tetapi tidak bagaimana cara mengimplementasikannya. Peran pekerjaan adalah untuk lulusan, jadi saya tidak tahu apa yang mereka harapkan dari saya, karena saya tidak punya pengalaman kerja nyata C ++.
roti beruang
4

Yah itu tergantung pada apakah mereka akan membiarkan Anda menggunakan google. : P

Saya biasanya melakukan tes teknis yang cukup baik, selama saya dapat menggunakan alat-alat di sekitar saya. Ketika mereka ingin saya kode buta ketika saya mendapat masalah. Jadi saran terbaik yang bisa saya berikan adalah kode blind di rumah ... Pastikan Anda mengingat hal-hal sepele yang kami terima begitu saja karena kami dapat memeriksa dengan mudah jika kami tidak ingat.

Juga, biasanya cek untuk keterampilan khusus yang mereka butuhkan, jadi jika Anda tahu apa yang akan Anda kerjakan, berkonsentrasilah pada itu.

(Ini dalam pengalaman umum saya, saya bukan dari Inggris)

AJC
sumber
Bagaimana dengan teori, polimorfisme, pewarisan. Saya hanya tahu teori untuk itu hanya dari lulus tetapi saya tidak tahu bagaimana menerapkannya di C ++
bearbread
Implementasinya tidak terlalu sulit, Anda mungkin dapat memeriksanya dengan sangat cepat. Bagian penting adalah mengetahui kapan waktu yang tepat untuk menggunakannya, kapan Anda akan membutuhkannya. Mereka lebih merupakan pola fungsional daripada prasyarat yang sebenarnya. Yang saya maksud adalah bahwa Anda dapat pergi tanpa menggunakannya, tetapi Anda diharapkan untuk mengetahuinya jika perlu.
AJC
@ roti roti: teori itu sendiri tidak bernilai banyak. membaca tentang pola desain dan mencoba menerapkannya.
Karoly Horvath
Saya tahu pola desain seperti MVC untuk PHP, apakah itu yang Anda maksud?
Bearbread
1

Berlatih kode kata Pilih algoritma sederhana (buffer cincin, menara Hanoi, pencarian biner, apa pun) dan kode itu dari awal. Kemudian lakukan lagi di waktu berikutnya, dan di waktu berikutnya, dan di waktu berikutnya, dan di waktu berikutnya, dan seterusnya. Lihatlah bagaimana Anda dapat meningkatkan mereka di setiap iterasi.

Sardathrion - menentang penyalahgunaan SE
sumber
1
+1. Juga lakukan dengan teman yang sedikit lebih berpengalaman. Bergantian ke program, Anda berdua akan belajar sesuatu yang baru.
Tom
0

Memang benar Anda dapat mengharapkan apa pun.

Mereka memberi tahu Anda bahwa tesnya adalah C ++ tapi mungkin itu benar-benar bagian C dari C ++ yang mereka gunakan dalam tes mereka (Anda akan menggunakan array char bukan string perpustakaan standar). Ini akan sulit diketahui.

Jika ini benar-benar C ++, saya akan menyarankan Anda untuk melihat dasar-dasarnya:

  • Kelas, variabel, array
  • referensi, petunjuk (dan mengapa Anda tidak boleh menggunakannya secara default)
  • penggunaan kata kunci const
  • Konsep Objek Berorientasi (warisan, polimorfisme ...)
  • Templat

kemudian:

  • Penggunaan perpustakaan standar (std :: string, std :: vektor, wadah, ...)
Nikko
sumber
0

Sejauh ini apa yang telah diposting sangat bagus, tetapi saya akan menambahkan sesuatu dan sebuah cerita! Saya akan mengatakan praktik menerapkan apa yang Anda ketahui dalam C ++ untuk masalah dalam domain perusahaan perangkat lunak. Sangat bagus jika Anda mengetahui semua seluk beluk C + + tetapi jika Anda tidak dapat menerapkan suatu masalah, Anda tidak berguna untuk perusahaan. Melihat ini adalah posisi dev junior, saya tidak akan berpikir mereka akan mengharapkan Anda untuk mengetahui segalanya tentang C ++.

Saya mengambil tes teknis pertama saya untuk pekerjaan pengembang pertama saya minggu lalu dan terkejut dengan apa yang saya temukan. Saya mengharapkan sesuatu seperti FizzBuzz atau sesuatu yang lebih rumit (ini untuk Java, btw) tapi yang saya temukan adalah mereka memberi saya file dan meminta saya menguraikannya ke format baru, yang merupakan bagian dari pekerjaan itu. Selain itu, mereka membiarkan saya menggunakan Google dan perpustakaan mereka sendiri. Intinya, Anda perlu tahu C ++ tetapi jika Anda ingin tahu seperti apa tesnya, lihat domain dari posisi yang Anda lamar dan bekerja untuk mengimplementasikan C ++ ke arah sesuatu di domain itu.

Jetti
sumber
Saya akan menebak bahwa <1% dari programmer C ++ tahu segalanya bahasa :) Hanya mengambil semua kasus perilaku yang tidak ditentukan / tidak ditentukan / implementasi-didefinisikan sebagai salah satu contoh.
0

Apakah kamu:

  1. Menulis kode
  2. mengambil banyak pilihan
  3. Wawancara langsung

Saat menulis kode

Mereka akan mengharapkan Anda untuk mengetahui (dan menggunakan):

  • RAII
  • Aturan tiga
  • Memahami petunjuk pintar

Mereka mungkin akan menguji Anda pada:

  • Warisan
  • Fungsi virtual
  • Serialisasi ke / dari aliran
  • membebani operator aritmatika (tidak sering digunakan dalam kehidupan nyata tetapi mudah untuk menulis tes sekitar).

Jika Anda beruntung mereka mungkin berpikir

  • Berbagai kelas pewarisan dan virtual base adalah sesuatu yang harus Anda ketahui.
    • Itu tidak tetapi beberapa orang menjadi gila.

Saat mengambil beberapa pilihan

  • Pahami semua terminologi OO
  • Ketahui cara-cara C ++ dalam mengimplementasikan OO

Wawancara Orang

  • Semua yang di atas.
  • Pengetahuan tentang rekursi
  • Cara mengubah rekursi menjadi satu lingkaran
  • Cara memperkirakan kompleksitas Big O ()
  • Algoritma pengurutan standar (bukan hanya gelembung).
Martin York
sumber
1
Saya seorang programmer C daripada C ++, jadi saya tidak tahu pembicaraannya ... tapi saya belum pernah mendengar tentang RIAA dan aturan tiga. Namun saya telah mendengar tentang RAII (akuisisi sumber daya adalah inisialisasi, yaitu destructor Anda harus membersihkan kekacauan sendiri) dan saya tahu bahwa jika kode Anda memerlukan copy ctr, operator penugasan yang berlebihan atau destruktor, mereka membutuhkan ketiganya. Tampaknya bagi saya bahwa sebuah wawancara yang merupakan hal sepele muram dalam pemrograman gaul daripada tes keterampilan Anda, mengatakan sesuatu yang buruk tentang perusahaan.
1
Dan juga, jika mereka bertanya tentang pewarisan berganda dan rekursi, saya akan berasumsi bahwa basis kode mereka berantakan. Jika mereka mengharapkan Anda untuk mengetahui semua algoritma pengurutan umum secara tiba-tiba, cara melakukan rekursi membuka gulungan, serialisasi objek dll, itu juga mengatakan sesuatu yang buruk tentang perusahaan. Bukankah mereka mengharapkan devs mereka menjadi robot? Di dunia nyata Anda melihat hal-hal seperti itu sebelum menggunakannya. Bahkan jika saya tahu teori di balik semua hal itu, saya masih akan mencari mereka, hanya untuk memastikan saya menggunakan solusi optimal daripada sesuatu yang begitu-jadi saya datang sendiri.
@Lundin: Anda tidak perlu tahu nama-nama sutera tetapi Anda perlu tahu prinsip-prinsipnya, dengan menyebutkannya di sini membuatnya mudah untuk mencari. Anda perlu mengetahui algoritma pengurutan karena Anda perlu tahu mana yang harus digunakan dan kapan (dan yang lebih penting mengapa) (robot tidak bisa melakukan apa-apa tetapi manusia melakukannya dengan sangat baik).
Martin York
Tidak ada yang salah secara inheren dengan rekursi atau multiple enheritance. Masalahnya adalah dengan pengembang lebih dari menggunakannya (dan melakukannya dengan salah). Beberapa masalah hanya dapat diselesaikan (dengan mudah) menggunakan rekursi (parsing kedalaman struktur pohon terlebih dahulu).
Martin York
@Lundin: Lihat devblog.seomoz.org/2011/10/679
Martin York
-1

Saya masuk dalam wawancara terakhir saya:

Perbedaan antara melewatkan objek ke fungsi dengan nilai / referensi / pointer dan di mana dan mengapa Anda akan melakukannya.

Tukar 2 8 bit terakhir dari integer misalnya RGBA ke RGAB.

Apa itu RIAA?

Tentukan pemrograman meta template: Anda mungkin mendapatkan pertanyaan dalam hal "selesaikan masalah ini dengan TMP .."

Apa yang bisa berubah, volatile, const, dll, dll. tahu semua kata kunci.

multiple inheritance .... lagi dan lagi.

Multi threading: Produser konsumen dan objek memori bersama yang disangga.

Beberapa pertanyaan tambahan:

Agregasi dan komposisi UML

Pola desain: mengimplementasikan singleton ... Apa komponen umum MVC?

Pepe
sumber