Apakah praktik wawancara yang buruk membuat kandidat menulis implementasi daftar-tertaut? [Tutup]


43

Membaca situs ini dan JADI, saya telah melihat banyak cerita tentang pertanyaan dan jawaban wawancara yang mengatakan seorang kandidat harus mengimplementasikan daftar yang ditautkan dari awal. Biasanya ini adalah latihan "beri" untuk memprogram kandidat peran seperti menulis FizzBuzz. Idenya adalah bahwa jika kandidat tidak dapat melakukan ini, mereka tidak dapat memprogram dan harus segera ditolak.

Namun, saya tidak bisa tidak berpikir ini bisa menjadi praktik yang buruk karena alasan berikut:

  • Bahasa tingkat tinggi modern seperti C # dan Python asli menggunakan daftar secara luas; menulis objek daftar tertaut Anda sendiri hanya akan diperlukan dalam keadaan yang tidak biasa dan bahkan kemudian mungkin keliru.
  • Bahasa tingkat bawah seperti C ++ memiliki pustaka standar dengan iterator / daftar kontainer dan objek.
  • Mengingat dua poin pertama, coders dapat berjalan bertahun-tahun tanpa berpikir tentang mengimplementasikan daftar (terkait, dua kali lipat, dll) sendiri. Beberapa bahkan mungkin tidak benar-benar melihat hal-hal seperti itu sejak masa kuliah.
  • Daya komputasi juga bukan merupakan faktornya bertahun-tahun yang lalu, jadi efisiensi melalui pointer bukanlah masalah yang dulu (secara umum).
  • Pencarian web sederhana dari sesuatu seperti "contoh daftar tertaut" akan memunculkan banyak contoh kode yang bisa dihafalkan dan diludahkan kembali, tidak benar-benar menunjukkan kompetensi sebenarnya dari pemohon.

Saya harus mengatakan bahwa menggunakan linked list untuk menyebabkan terbuka pertanyaan / diskusi pemecahan masalah calon / kemampuan berpikir kritis adalah sebagian besar kemungkinan praktik wawancara benar-benar baik. Bagaimana pun pewawancara dapat benar-benar melihat seperti apa pelamar itu dan bagaimana menurut mereka bermanfaat besar-besaran.

Saya pikir pendekatan biner ini "tidak ada kode daftar tertaut, tidak ada pekerjaan" untuk programmer yang bekerja pada aplikasi desktop atau web agak ketinggalan jaman. Itu juga bisa sangat berbahaya; seorang kandidat yang tidak ingat bagaimana cara bekerja dengan baik dengan kepala daftar bisa menjadi pembuat kode yang baik dan rekan kerja dan tersesat dalam campuran. Pikiran?

EDIT : Ada banyak komentar (baik) yang menunjukkan bahwa apakah ini adalah pertanyaan yang baik atau buruk untuk ditanyakan tergantung pada konteks pekerjaan. Saya sangat setuju, jadi izinkan saya ulangi pertanyaan ini: Menerapkan daftar-tertaut adalah pertanyaan wawancara umum untuk berbagai pekerjaan koding, mirip dengan pertanyaan seperti FizzBuzz atau menulis fungsi rekursif untuk menghitung faktorial. Apakah pertanyaan ini memiliki cukup utilitas untuk digunakan secara umum untuk mengevaluasi kandidat pemrograman di seluruh papan? Atau harus dianggap pertanyaan buruk untuk ditanyakan kecuali untuk posisi "Pengembang Senior, Tim Tertaut Daftar Tertanam"?


11
Untuk apa posisi ini? Jenis pekerjaan apa ini? Di dalam domain apa?
Thomas Owens

1
Saya melihat hasil edit Anda, tetapi masih - jenis pekerjaan apa ini? Apakah ini magang? Pekerjaan entry level? Pekerjaan perantara? Apakah Anda ingin mempekerjakan seorang programmer atau insinyur atau ilmuwan? Dalam domain apa ini? Apakah mereka akan berada dalam posisi sedemikian rupa sehingga mereka perlu menggulung algoritma atau struktur data mereka sendiri dengan alasan apa pun?
Thomas Owens

3
'C # (...) secara asli menggunakan daftar secara luas' dan 'efisiensi melalui petunjuk bukan masalah yang dulunya': Anda tahu bahwa daftar asli ini bukan daftar yang ditautkan, melainkan daftar yang didasarkan pada array? Array cenderung berkinerja lebih baik karena caching. Bahkan, IIRC .NET framework bahkan tidak memiliki daftar yang ditautkan hingga 2.0. Saya cukup yakin sebagian besar program C # di luar sana tidak menggunakan daftar tertaut.
Alex ten Brink

1
@AlextenBrink Menariknya, saya pikir itu berarti bahwa pengetahuan daftar tertaut bahkan kurang penting untuk C #. Mengapa menerapkan struktur data sendiri (dengan kemungkinan bug) ketika saya bisa menggunakan struktur yang lebih baik yang dibangun langsung ke dalam bahasa?
joshin4colours

Pertanyaan yang ada dalam benak saya adalah 'mengapa bahkan mempertimbangkan menggunakan struktur data yang dalam hampir semua kasus lebih rendah daripada struktur data lain'? Daftar tertaut lebih lambat untuk sebagian besar operasi daripada daftar berdasarkan array; satu-satunya hal yang terkait dengan daftar yang baik adalah penghapusan dalam waktu yang konstan, tetapi ada beberapa situasi yang sangat dibutuhkan. Perhatikan bahwa saya tidak berbicara tentang apakah itu akan menjadi struktur data yang baik untuk pertanyaan wawancara: konsep yang terlibat mungkin merupakan tes yang baik, saya tidak tahu.
Alex ten Brink

Jawaban:


52

Jika menjawab pertanyaan memberi tahu Anda apa yang ingin Anda ketahui tentang seorang kandidat, maka itu adalah pertanyaan wawancara yang bagus. Jika tidak memberi tahu Anda, itu pertanyaan yang buruk.

Pertanyaan mudah seperti FizzBuzz memang melayani tujuan tertentu. Jika seorang kandidat tidak dapat membuat kode FizzBuzz, mereka tidak bisa membuat kode dan Anda dapat mengakhiri wawancara lebih awal. Saya menilai menerapkan daftar tertaut hanya sedikit lebih keras, tetapi dapat memulai percakapan tentang struktur data secara umum yang akan mengungkapkan banyak hal.

Ingatlah bahwa tidak ada satu pertanyaan wawancara pun yang akan memberi tahu Anda segala hal yang ingin Anda ketahui. Anda benar-benar perlu menyiapkan sekelompok pertanyaan. Anda harus mengajukan pertanyaan secara berurutan dari yang paling mudah ke yang paling sulit sehingga Anda dapat menemukan batas dari apa yang diketahui kandidat. Jika Anda mengajukan satu pertanyaan dan mereka menjawabnya, Anda masih tidak tahu apa lagi yang mereka lakukan atau tidak tahu.


Mengenai hasil edit Anda:

Apakah pertanyaan ini memiliki cukup utilitas untuk digunakan secara umum untuk mengevaluasi kandidat pemrograman di seluruh papan? Atau harus dianggap pertanyaan buruk untuk ditanyakan kecuali untuk posisi "Pengembang Senior, Tim Tertaut Daftar Tertanam"?

Saya pikir ini adalah pertanyaan tujuan umum yang baik yang dapat digunakan untuk mengevaluasi hampir semua kandidat pemrograman. Itu hanya perlu menjadi bagian dari kelompok pertanyaan yang lebih besar. Ini akan menjadi pemecah kebekuan yang baik untuk banyak jenis posisi (bahkan jika kandidat tidak dapat mengimplementasikan daftar tertaut dari awal, mungkin mereka dapat menjelaskan bagaimana mereka telah menggunakan satu sebelumnya dan apa fungsi kuncinya), atau awal dari urutan panjang pertanyaan lebih lanjut untuk posisi "Pengembang Senior, Tim Tertaut Daftar Tertanam".


19
Paragraf pertama Anda adalah setengah cerita. Setengah lainnya adalah: Jika ditanya pertanyaan membuat kandidat ingin bekerja untuk Anda, maka itu adalah pertanyaan wawancara yang bagus. Jika itu membuat kandidat tidak mau bekerja untuk Anda, itu pertanyaan yang buruk.
ruakh

5
Anda tidak dapat menemukan batas dari apa yang diketahui kandidat dengan cara itu, karena Anda tidak memiliki cara untuk menyatakan bahwa apa yang Anda anggap "rumit" dan "dasar" berlaku dalam urutan yang sama dengan kandidat Anda. LinkedList mungkin merupakan dasar untuk programmer yang diajarkan universitas, tetapi programmer otodidak kemungkinan besar tidak pernah menulisnya. Lagipula dia mungkin menulis "LinkedList <string> ..." kapan pun dia membutuhkannya. Apakah itu berarti bahwa pengetahuannya dipatok di bawah level "linkedList"? Dia bisa menjadi ahli dalam mata pelajaran yang lebih kompleks dan dapat belajar LL dalam 5 menit di Google.
Sylverdrag

1
@Sylverdrag Itu sebabnya saya katakan Anda perlu lebih dari satu pertanyaan. Setelah Anda menemukan batas pengetahuan mereka tentang daftar yang ditautkan, pindah ke topik lain.
Bill the Lizard

@ruakh Itu pasti berperan. Jika setiap pertanyaan yang saya tanyakan dalam sebuah wawancara adalah tentang aspek biasa dari aplikasi CRUD (yaitu, saya tidak berpikir bahwa saya dapat mempelajari sesuatu yang baru di perusahaan itu), maka itu tidak akan membuat saya bersemangat untuk bekerja di sana.
Bill the Lizard

34

Saya telah melewatkan pekerjaan murni karena pikiran saya kosong pada teka-teki sederhana seperti ini. Saya juga telah mengerjakan teka-teki seperti itu dengan cerdas dalam wawancara lain - saya tahu bagaimana menerapkan daftar tertaut di lingkungan yang tidak tertekan. Saya tidak pernah memiliki keluhan tentang kemampuan saya dari seseorang yang bekerja dengan saya, jadi mungkin saya seharusnya tidak berpikir bahwa saya telah kehilangan pekerjaan, saya harus berpikir bahwa mereka telah kehilangan saya.

Jadi ya, saya pikir ini adalah praktik yang dipertanyakan, tetapi saya memahaminya. Saya juga telah mempertimbangkan kemungkinan bahwa itu bukan kesalahan dari pertanyaan, tetapi si penanya, untuk menjadikannya sebuah situasi tekanan tinggi.

Secara pribadi, saya lebih suka mengajukan pertanyaan terbuka tentang masalah yang telah dipecahkan oleh kandidat - baru-baru ini, jika mungkin, dan mencakup masalah koding dan proses. Jika mereka bisa membawa sampel kode, fantastis.


Mereka perlu bertanya sesuatu, baik itu teka-teki atau apa pun. Setiap pertanyaan dapat menyebabkan orang tersebut kosong.
Masuk

2
@ pdr - "Jika mereka bisa membawa sampel kode, fantastis." Jika mereka menulis contoh kode yang mereka bawa, tak ternilai harganya.
robrambusch

4
Jika pikiran seseorang kosong pada implementasi daftar tertaut dan mereka tidak dapat menyelesaikannya dengan sedikit dorongan atau frustrasi dengan mudah, saya pikir itu akan menjadi seseorang yang saya tidak keberatan melewatkannya.
Bill K

1
@ pdr - "Dan jika Anda tidak bisa, menurut Anda berapa lama Anda akan memiliki pekerjaan itu?" - Selama diperlukan untuk memecat mereka di bawah rezim SDM apa pun yang Anda derita. Lalu ada biaya tambahan untuk memulai kembali pencarian kandidat Anda. Juga biaya peluang yang melekat pada kenyataan bahwa orang berikutnya yang akan Anda wawancarai mungkin telah menjadi kunci utama teknis seluruh departemen Anda. Tapi tentu saja sekarang mereka tidak tersedia karena Anda merekrut orang yang salah dan mereka menemukan pekerjaan lain.
robrambusch

1
@robrambusch: Dia menunjukkan keterampilan pemecahan masalah yang sangat baik dan berbicara tentang struktur kelas dengan baik. Tapi dia tidak menulis kode. Mengenai masalah penulisan kode dalam sebuah wawancara, ya, itu bisa berguna, tapi saya berpendapat bahwa saya bisa belajar lebih banyak tentang Anda dalam satu jam berbicara dengan Anda tentang masalah yang telah Anda selesaikan daripada memberi Anda satu masalah yang dibuat-buat yang membutuhkan jam untuk menyelesaikan.
pdr

25

Kita harus mendefinisikan jenis pekerjaan pemrograman. Jika Anda berada dalam bisnis pengembangan kompiler dan algoritme, pertanyaan tentang hal-hal seperti itu harus diharapkan. Jika Anda berada di lini aplikasi jenis bisnis dan Anda mengharapkan kandidat untuk melakukan aplikasi CRUD, maka, mungkin pengetahuan konsep (tanpa menulis program) sudah cukup. Saat ini, pengetahuan tentang berbagai teknologi yang dibutuhkan untuk menyelesaikan pekerjaan secara khusus dalam jenis aplikasi LOB menggantikan kebutuhan akan algoritma yang rapi.


Persis. Tahun lalu saya menulis komponen jenis genetik tujuan umum yang juga menggunakan sedikit anil simulasi (untuk membuat jadwal kelas) dan menggunakan beberapa struktur data "canggih" untuk membuatnya tampil. Saya tidak perlu kode satu pun. Jika .Net framework tidak memiliki apa yang saya butuhkan, saya menggunakan C5 atau Power Collections.
ElGringoGrande

4
Setuju, saya menulis aplikasi LOB sepanjang hari, di masa lalu saya memiliki implementasi daftar tertaut tertulis ... di perguruan tinggi ... di COBOL. Saya bisa melakukannya lagi, tetapi mengapa? Banyak pengembang LOB yang kompeten mungkin tidak pernah menulis satu, dan tidak akan pernah perlu.
CaffGeek

1
Setuju secara umum, tetapi daftar tertaut bukanlah hal yang eksotis, sungguh. Ini dasar-dasarnya, hanya satu tingkat melewati FizzBuzz.
Francesco De Vittori

1
@FrancescoDeVittori: Bukankah itu terkadang menjadi masalah? Seseorang memberi Anda masalah untuk dipecahkan. Tampaknya cukup sederhana, tetapi Anda belum pernah melakukannya sebelumnya, jadi otak Anda mulai berpacu, mencoba menemukan gotcha, hal yang akan dikenakan biaya wawancara jika Anda tidak memikirkannya. Dan itu tidak ada di sana, tetapi itu mengalihkan Anda dari memecahkan masalah yang sebenarnya.
pdr

@FrancescoDeVittori: Bisakah Anda memberikan beberapa contoh pertanyaan wawancara tidak mendasar? Saya membutuhkan ini untuk perbaikan diri. Terima kasih.
Den

9

Jawaban saya adalah "Tergantung". Saya akan menanyakan pertanyaan ini jika seorang kandidat telah mencantumkan C atau C ++ di resume-nya. Meminta untuk menerapkan daftar tertaut adalah tes yang bagus untuk memahami pointer yang sangat penting bagi seorang programmer C atau C ++.

Di sisi lain, jika seorang kandidat tidak mengklaim tahu C atau C ++, saya tidak akan memintanya untuk mengimplementasikan daftar tertaut, tetapi saya akan mempertimbangkan untuk mengajukan pertanyaan tentang hal itu. Jelaskan pada tingkat tinggi bagaimana daftar yang terhubung berfungsi. Apa kerumitan menambahkan elemen ke kepala daftar? Ekor daftar? Memasukkan elemen di tengah daftar? Kapan Anda akan menggunakan daftar yang bertentangan dengan array? Ini adalah konsep struktur data mendasar yang harus diketahui oleh setiap programmer.


7

Saya tidak akan menganggapnya sebagai pertanyaan wawancara yang buruk. Banyak pemahaman tentang struktur data dan pemrograman dimulai dengan pemahaman yang benar-benar baik tentang Linked Links. Yang mengatakan, ada beberapa peringatan:

1) Ini adalah pertanyaan tipe desis-desis. Anda hanya memvalidasi sesuatu yang sangat mendasar: Apakah orang tersebut memahami daftar tertaut. Tanyakan dan lanjutkan.

2) Ada tantangan dengan daftar tertaut yang bahasa yang sangat cocok untuk menunjukkan pemahaman Anda tentang konsep daftar tertaut (misalnya, C) mungkin tidak sama dengan bahasa mereka akan bekerja pada pekerjaan. Anda dapat menunjukkan pemahaman dasar dalam bahasa apa pun dengan struktur, tentu saja, tetapi meminta kandidat untuk mengimplementasikan kembali daftar tertaut di Erlang tanpa menggunakan [] bukanlah tantangan yang sama dan tidak akan memberi tahu Anda hal yang sama tentang pemahaman kandidat seperti meminta mereka untuk melakukannya dalam C. Meminta mereka melakukannya dalam C jika pekerjaannya di Jawa juga agak tidak penting.

3) Dengan mengingat hal itu dan tantangan umum "pemrograman papan tulis," ketika mengajukan pertanyaan semacam ini, saya akan menerima pseudocode atau diagram selama mereka menunjukkan pemahaman tentang prinsip-prinsip inti. Saya tidak meminta orang menulis kode pada papan tulis yang sempurna secara sintaksis dan logis, terutama jika mereka kemudian dapat berbalik dan mengidentifikasi masalah logis ketika diminta untuk melihatnya lagi. YMMV.


6

Ketika saya memberikan wawancara, saya sering diminta untuk implementasi daftar tertaut dan beberapa algoritma berpusat di sekitar daftar tertaut. Saya memecahkan sebagian besar dari mereka, dan beberapa dari mereka mengharuskan saya sedikit melatih neuron saya.

Jika saya pernah mengambil wawancara, saya akan pergi untuk semacam implementasi daftar-tertaut, bukan untuk menguji seberapa baik seseorang dalam pengkodean, tetapi untuk memeriksa seberapa banyak perhatian seseorang membayar detail. Siapa pun dapat menulis daftar tertaut, tetapi ini adalah kasus batas yang bahkan gagal dilakukan oleh beberapa programmer yang baik. Jangan bertanya: Write a code for linked list in C/C++. Minta dia untuk menulis daftar tautan umum dalam C (bukan C ++), dll.

Putar masalah, dan letakkan beberapa kondisi lain di daftar tertaut, dan Anda akan memiliki pertanyaan yang bagus untuk ditanyakan. Beberapa orang pasti membuat kesalahan saat itu.


2
Tidak ada yang namanya daftar
tautan

1
Serius? Saya pikir voidpetunjuk ada untuk itu saja ... :) Tautan pertama yang saya temukan di google untuk "generic linked list in c" adalah: daniweb.com/software-development/c/threads/109260 dan yang lainnya adalah wawancara teknis .com / ... Saya pikir semua orang tahu ini!
c0da

Saya belum menguji kode-kode ini, tetapi saya memiliki jenis daftar tertaut ini sebelumnya, dan itu jelas bekerja dengan baik ...
c0da

Bahkan menulis daftar tautan umum dalam C # memiliki satu atau dua "gotcha" (misalnya membandingkan elemen tipe T tidak jelas; mis. (T v1, T v2) => {return v1 == v2;} akan gagal dikompilasi kecuali Anda memiliki batasan kelas atau menggunakan operator kesetaraan default)
Steven Evers

@ c0da Menurut pendapat saya, daftar yang menggunakan voidpointer bukan generik, tetapi hanya umum untuk setiap saat. Mereka dapat menyimpan semua jenis barang di dalamnya, dan bahkan mencampur semuanya sesuai yang mereka inginkan - dan itu justru membuatnya tidak umum bagi saya. Ini seperti menggunakan tipe dasar objectdalam bahasa berorientasi objek ...
colok

5

Dalam sekitar 10 tahun saya memprogram secara profesional (dan sekitar sepuluh tahun lagi sebagai hobi), saya rasa saya tidak pernah perlu menerapkan daftar tertaut. Jika seseorang meminta saya untuk melakukannya selama wawancara, saya mungkin membalas dengan menanyakan apakah itu sesuatu yang akan saya lakukan secara teratur di tempat kerja.

Yang pasti, ada hampir pasti berada pekerjaan di luar sana di mana Anda akan perlu untuk menulis implementasi lebih-atau-kurang-Cleanroom algoritma umumnya dikenal - seperti menerapkan linked list dari awal. Tetapi untuk sebagian besar pekerjaan pemrograman, nilai spesifik apa yang dimilikinya untuk perusahaan sehingga seorang kandidat dapat melakukannya selama wawancara? Apakah benar-benar begitu penting dalam pengaturan sedemikian rupa sehingga kandidat memberikan implementasi yang sempurna yang menangani kasus tepi dengan benar, melaporkan kegagalan sesuai dengan praktik umum dalam bahasa atau kerangka kerja, dan sebagainya? Atau bisakah Anda mengabaikan hal itu dan sebaliknya berfokus pada bagaimana mereka sebenarnya mendekati masalah yang mungkin belum pernah mereka hadapi dalam 10-20 tahun?

Ketika saya wawancarai untuk pekerjaan saya saat ini, saya memiliki sedikit pengalaman dengan tumpukan teknologi yang digunakan di perusahaan. Sekarang, beberapa tahun kemudian, saya secara rutin meminta kolega datang kepada saya dan mengajukan pertanyaan tidak hanya tentang produk, penerapannya, dan standar yang diterapkan oleh mereka, tetapi juga tentang masalah pemrograman yang lebih umum (baru kemarin saya ditanya apa implikasinya adalah ketergantungan melingkar dalam batasan default di SQL Server dalam konteks tabel tertentu dan penggunaannya dalam kasus kami - dengan alasan itu, ternyata tidak ada implikasi dalam kasus tertentu). Saya juga tidak perlu penerapan daftar tertaut yang baru.

Ajukan pertanyaan yang relevan untuk pekerjaan yang kemungkinan akan ditugaskan, dan cobalah untuk mendapatkan gambaran tentang bagaimana perasaan mereka tentang mengambil pengetahuan baru. Bagaimana mereka mencari tahu arti dari beberapa sintaksis tidak jelas yang belum pernah mereka lihat? (Jika Anda adalah toko C, misalnya, maka Anda dapat mencoba pertanyaan yang melibatkan trigraph.) Untuk posisi pemrograman, apakah mereka membaca secara teratur atau berkontribusi ke forum seperti Stack Overflow? Jika mereka diminta untuk melakukan beberapa tugas dalam bahasa pemrograman atau kerangka kerja mereka memiliki sedikit atau tidak ada pengalaman dengan (katakanlah, jika Anda terutama toko Java, bagaimana dengan Clojure atau .NET?), Lalu bagaimana mereka akan mendekati masalah? Mungkin mengeluarkan bug nyata dari pelacak bug Anda (bahkan mungkin salah satu yang sudah lama diselesaikan) dan bertanya kepada mereka bagaimana mereka secara umum akan mendekati menyelesaikannya, dan siap untuk menjelaskan bagian-bagian yang relevan dari produk yang bersangkutan.

Jika kandidat dapat menangani jenis masalah yang relevan dengan kasus bisnis dan memiliki sikap yang baik terhadap mempelajari hal-hal baru, itu mungkin merupakan indikator kecocokan yang jauh lebih baik untuk posisi tertentu daripada mampu memberikan respons terekam untuk pertanyaan-pertanyaan terkenal, apakah itu pertanyaannya adalah tentang FizzBuzz, daftar tertaut, atau yang lainnya. Lemparkan seberapa baik kandidat cocok dengan tim dan saya akan berpikir bahwa Anda berada di tempat yang cukup aman.


4

Tentu saja kebanyakan orang tidak perlu mengimplementasikan daftar tertaut, tetapi untuk mengimplementasikannya dari awal orang mungkin perlu menangani pointer dengan benar. Mereka kemudian berpendapat bahwa setelah membentuk model mental yang konsisten untuk pointer berkorelasi dengan kemahiran bahasa, memahami apa yang terjadi pada beberapa level mesin (abstrak) dan kemampuan abstrak pada umumnya.

Saya tidak mengatakan bahwa ini akan menjadi ukuran terbaik, tetapi hanya ada beberapa korelasi.


4

Anda mulai mengatakan bahwa itu adalah pertanyaan 'beri', tetapi kemudian Anda tunjukkan bahwa orang-orang tidak akan bisa melakukannya. Saya bingung.

Begini cara saya memikirkannya:

  • Jarang ada kebutuhan untuk menulis satu, seperti yang Anda katakan, sehingga orang akan mudah lupa.
  • Mereka tidak terlalu sulit untuk ditulis.
  • Konsep yang digunakan untuk menulisnya dapat dianggap mendasar.
  • Mereka digunakan sangat sering (bahkan jika Anda tidak menyadarinya).

Saya pikir itu membuat mereka pertanyaan yang bagus untuk ditanyakan. Jika Anda khawatir tentang mereka yang belum belajar untuk wawancara, maka masukkan daftar. Mintalah mereka menuliskannya melingkar dan tanyakan berapa waktu berjalan asimptotik dari implementasi mereka. Atau minta mereka menulis struktur data umum dan / atau cepat lainnya ... Pohon pencarian biner? Antrian (FIFO)? Tumpukan (FILO)? O(n)Antrian prioritas naif ( )? Banyak orang yang saya tahu berpikir bahwa BST O(log n) hanya karena itu pohon .

Jika Anda sedang mencari seseorang yang akan bekerja di logam, dan kebutuhan yang sangat dasar yang kuat dalam struktur data ... ini bahkan mungkin jauh terlalu sepele untuk calon Anda mencari untuk menyewa.

Ini mengasumsikan, tentu saja, bahwa Anda menginginkan seorang pengembang yang memiliki dasar-dasar / dasar-dasar struktur data dan posisi mereka akan mendapat manfaat dari dasar-dasar tersebut. Jika Anda ingin seseorang yang dapat menyusun halaman asp dalam hitungan detik, wawancara untuk itu. Intinya bukan untuk memilih pertanyaan wawancara karena semua orang melakukannya, tetapi untuk memilih satu yang mengukur keterampilan yang Anda cari. Secara pribadi, saya pikir pertanyaan struktur data baik, daftar tertaut atau tidak.


Dalam praktiknya tidak membingungkan. FizzBuzz adalah pertanyaan yang bahkan lebih mudah namun pelamar secara rutin bahkan tidak dapat mulai menjawabnya. Sama halnya dengan daftar tertaut. Itu adalah misteri dunia pemrograman.
joshin4colours

@ joshin4colours: Tidak, saya bingung tentang pertanyaan itu. Pada awalnya OP mengatakan bahwa pertanyaan LL adalah pertanyaan, tetapi kemudian mendaftar poin mengapa pengembang yang memenuhi syarat akan gagal menjawab pertanyaan itu.
Steven Evers

3

Apakah pertanyaan ini memiliki cukup utilitas untuk digunakan secara umum untuk mengevaluasi kandidat pemrograman di seluruh papan?

Tidak, sama sekali tidak. Bergantung pada bagaimana itu diungkapkan, apa yang akan memberitahu Anda akan berkisar dari "kandidat ini tahu cara mendesain daftar tertaut" ke "kandidat ini dapat memprogram daftar yang ditautkan dalam bahasa X". Jika Anda meminta pseudocode, itu akan cenderung lebih ke arah pertama. Jika Anda meminta implementasi dalam bahasa tertentu, Anda akan mendapatkan lebih banyak pemahaman mereka tentang bahasa (terutama dengan C dan C ++, di mana Anda dapat berurusan dengan pointer dan referensi dan struct).

Saya bahkan lebih jauh mengatakan bahwa tidak mungkin untuk mengevaluasi semua kandidat menggunakan pertanyaan yang sama. Anda perlu menyesuaikan pertanyaan wawancara Anda untuk menilai keterampilan yang Anda cari di posisi itu.

Jika orang tersebut akan berada dalam posisi untuk menulis kode, saya akan berpikir tentang memasukkan algoritma dan / atau pertanyaan struktur data, selama itu relevan dengan posisi tersebut. Saya akan mencoba memilih sesuatu yang mungkin telah dibahas atau digunakan sebelumnya. Saya juga fokus pada hal-hal selain dari implementasi algoritma dan struktur data tersebut, seperti waktu berjalan dan konsumsi memori (hal-hal seperti notasi O besar). Konsep-konsep ini relevan untuk tidak hanya menciptakan struktur data, tetapi juga memilih implementasi mana yang paling cocok (seperti ArrayListversus versus LinkedListmisalnya).


3

Saya tidak berpikir untuk pekerjaan pemrograman reguler harus menjadi pertanyaan yang menghilangkan kandidat. Tapi itu bagus untuk melihat apakah Anda berurusan dengan programmer yang benar-benar senior atau seseorang yang baru saja bentuk koding monyet selama bertahun-tahun. Meski begitu, itu seharusnya tidak menjadi kriteria mendasar untuk memilih seorang programmer. Mungkin seorang programmer hebat dengan memori buruk dan belum membaca kata-kata "daftar tertaut" selama bertahun-tahun (atau tidak ingat namanya) tetapi masih bisa melakukan aplikasi yang baik.

Jadi, seperti yang dikatakan beberapa orang, jika akan menjadi pekerjaan yang perlu bekerja dengan daftar tertaut dan banyak algoritma mewah, dll. Maka ok. Apakah jika untuk input data biasa pada formulir, validasi dan tunjukkan agak tidak berguna dan tidak adil.


2

Saya pikir ini adalah contoh pertanyaan wawancara yang buruk, tetapi karena alasan yang berbeda. Daftar tertaut adalah konsep yang sangat sederhana sehingga untuk mengetahui apa itu untuk mengetahui bagaimana menerapkannya. Jika orang tersebut tidak tahu apa itu daftar tertaut, maka Anda harus menjelaskan cara kerjanya, dan dengan melakukan itu Anda memberikan jawabannya tanpa menemukan apa pun tentang apakah mereka tahu cara memecahkan masalah atau tidak . Jadi pertanyaannya dapat direduksi menjadi "apakah Anda sudah tahu apa itu daftar tertaut dan bagaimana cara kerjanya?", Yang memberi tahu Anda apa-apa tentang kesesuaiannya sebagai programmer.


2
Pertanyaan populer juga tunduk pada permainan oleh orang-orang yang pandai menghafal.
Paul Nathan

1
Jika Anda harus menjelaskan bagaimana daftar yang terhubung berfungsi untuk seorang kandidat, daripada Anda mungkin tidak perlu mempekerjakannya untuk melakukan pemrograman ...
Dima

2

Menulis implementasi daftar-tertaut adalah pertanyaan wawancara yang baik, karena akan mengungkapkan banyak hal tentang cara pengkodean kandidat:

  • Apakah dia tahu apa itu API? Bisakah dia menggunakan kode orang lain? Bisakah dia menulis kode sehingga orang lain bisa menggunakannya?

  • Apakah dia tahu apa itu Daftar Tertaut? Apakah dia tahu Koleksi, Struktur Data, Algoritma?

Jika dia bahkan tidak tahu metode apa yang harus ditawarkan oleh Daftar Tertaut, Anda tahu dia mungkin tidak pernah menggunakannya, atau tahu kapan harus menggunakannya.

  • Bagaimana dia menangani masalah itu? Apakah dia mulai dengan analisis terlebih dahulu, spesifikasi kecil, beberapa tes sebelumnya? Atau apakah dia baru saja mulai meretas dengan gembira?

  • Apakah dia menangani kasing tepi? Bagaimana dengan menghapus simpul terakhir dari Daftar Tertaut? Bagaimana jika seseorang mencoba menambahkan referensi ke daftar tertaut itu sendiri ke daftar tertaut, dan kemudian menghapus semuanya?

  • Apakah dia menangani pengecualian? Setiap bahasa pemrograman memiliki konvensi sendiri untuk menangani pengecualian: di Jawa, Anda akan mengharapkan LinkedList untuk melempar NoSuchElementException ketika Anda melakukan getFirst () pada daftar kosong. Bahasa lain mungkin menghasilkan undefined, -1 atau konstanta.


Dalam latihan pengkodean wawancara, kecuali jika diminta secara khusus, saya akan melewati semua jenis penanganan kasus tepi, penanganan kesalahan, dll., Di luar apa yang diperlukan untuk pembuktian konsep. TETAPI saya juga akan menjelaskan bahwa ini adalah pilihan yang saya buat. Kendala selama satu jam atau bahkan beberapa jam wawancara sangat berbeda dari situasi ketika Anda benar-benar mengerjakan sesuatu yang akan melihat penggunaan nyata.
CVn
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.