Saya pikir ada pertanyaan-pertanyaan mudah fizzbuzz, membalikkan string, dll, dan kemudian ada pertanyaan tertentu sedangkan jika Anda belum melihat mereka sebelumnya sulit untuk mendapatkan solusi optimal yang dimaksudkan dengan tekanan tambahan dari wawancara dan waktu singkat kendala. Bagian terburuknya adalah bahwa kadang-kadang perekrut yang tidak memiliki pengetahuan teknis mengajukan beberapa pertanyaan ini dan mereka mencari jawaban yang sangat spesifik .... Jika Anda tidak memberikan jawaban yang optimal, mereka pikir Anda benar-benar idiot. Sekalipun jawaban Anda berhasil, selesaikan masalahnya, dan sementara itu mungkin tidak optimal itu tidak terlalu tidak efisien ....
Beberapa Contoh:
Bagaimana Anda mengocok setumpuk kartu? Mereka mencari metode Fisher-Yates http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shufflejawaban lain adalah "salah" ..... Ini bukan sesuatu yang Anda mungkin tahu kecuali Anda ingin mengocok kartu sebelumnya dan secara khusus mencarinya. Anda mungkin tersandung pada saat melakukan jawaban, tetapi dari apa yang saya lihat mereka berharap Anda tahu dingin ini sehingga diragukan akan ada banyak waktu yang diberikan untuk memungkinkan menemukan solusi. Cara lain yang kurang efisien (tapi mungkin lebih jelas) adalah membuat array baru dengan pointer ke array asli dan angka yang merupakan angka acak kemudian mengurutkan array dengan angka acak. Kemudian gunakan susunan yang diurutkan untuk membuat susunan kartu yang baru. Dalam hal apa pun, saya mendapat 0 kredit karena menyajikannya kepada seorang perekrut.
Contoh lain adalah pertanyaan tentang bagaimana Anda akan mendeteksi nomor duplikat dalam daftar n angka semua dari 1 hingga n-1. Jawaban yang jelas (yang relatif efisien dalam perspektif waktu) adalah menggunakan tabel hash untuk memasukkan setiap elemen dan jika Anda menemukan satu sudah dimasukkan maka Anda menemukan duplikat. Jawaban optimal adalah karena jumlahnya antara 1 dan n jika tidak ada duplikat, Anda bisa mendapatkan jumlah yang diharapkan sebagai n (n + 1) / n. Kemudian jika Anda menjumlahkan array Anda mendapatkan jumlah aktual yang nd kurang dari jumlah yang diharapkan. Jadi pada dasarnya n - (Jumlah yang Diharapkan - Jumlah Aktual) = angka duplikat ... Ini adalah kasus yang cukup istimewa .... Saya benar-benar melihat sesuatu sebelumnya dalam beberapa posting online tentang masalah wawancara beberapa waktu lalu tentang yang terkait dengan trik yang sama, jadi Saya baik-baik saja ....
Yang lain, membalikkan semua kata dalam string tanpa menggunakan ruang tambahan. Saya harus memikirkannya dan perekrutnya cukup tidak sabar dalam 5 menit yang saya pikir (membelah dan menggabungkan kembali string secara terbalik, atau memasukkan kata demi kata ke dalam array baru keduanya sangat mudah). Saya datang dengan menemukan batas kata terakhir, menemukan akhir kata pertama, dan terus-menerus mengubah seluruh daftar menjadi 1 dan kemudian memasukkan huruf yang sesuai. Kemudian ulangi sampai Anda mencapai akhir daftar. Metode ini berhasil dan pewawancara setuju (dia agak teknis), tetapi cukup tidak efisien. Ketika sampai di rumah, saya mencari jawaban yang optimal, dan hanya membalikkan daftar, lalu membalikkan setiap kata. Beberapa orang mungkin datang dengan itu,
Sekarang benar begitu Anda telah melihat beberapa masalah ini, Anda dapat menyelesaikannya dengan lebih mudah. Karena ada beberapa pertanyaan serupa dengan beberapa trik yang sama. Saya tahu khususnya rumus n dan nomor (n-1) / 2 memiliki beberapa variasi. Tetapi saya masih belum tahu apa yang diuji dari pertanyaan-pertanyaan ini. FizzBuzz adalah sesuatu yang harus dapat dilakukan semua orang (walaupun saya telah melihat variasi yang tidak begitu sederhana dalam hal ini saya mulai mempertanyakan apakah itu realistis untuk situasi wawancara tanpa bisa mengetik / debug kode). Beberapa dari pertanyaan ini sudah jelas setelah Anda melihatnya, tetapi jika Anda belum melihatnya, itu tidak jelas. Setelah semua orang menyebutkan butuh waktu bertahun-tahun untuk implementasi pertama pencarian biner yang benar muncul ... Saat ini pencarian biner sangat jelas karena semua orang dapat membacanya.
Namun demikian, saya pikir bagian terburuknya adalah ketika orang-orang non-teknis mengajukan pertanyaan karena mereka tidak dapat menghargai solusi Anda yang benar meskipun tidak optimal. Mereka hanya tahu solusi Anda bukan yang disajikan dan karenanya semuanya salah, Anda tidak mendapat pujian atas upaya tersebut. Bahkan solusi yang tidak optimal sering menunjukkan pengetahuan tentang konstruksi pemrograman Kecuali saya pemrograman permainan poker, saya tidak peduli seberapa baik seseorang dapat mengocok setumpuk kartu. Dan bahkan jika saya, setelah menunjukkan kepada mereka algoritma yang efisien saya yakin siapa pun yang setengah layak bisa mengikutinya.
Pertanyaan templat tampaknya hanya memberikan keuntungan bagi kandidat yang telah mewawancarai lebih lama karena mereka lebih cenderung melihat lebih banyak pertanyaan templat. Bahkan FizzBuzz, pertama kali Anda melihatnya, Anda mungkin akan panik, tetapi ketika Anda melihatnya berulang-ulang Anda menjadi lebih terbiasa. Hal terbaik yang dapat Anda lakukan adalah memberikan beberapa tantangan pengkodean yang membutuhkan logika bisnis khusus. Misalnya membuat beberapa dataset (array objek / catatan) dan kemudian membuat beberapa aturan bisnis untuk diterapkan ke setiap objek dan mengembalikan jawaban .. misalnya beberapa jenis peringkat, dll. Tetapi aturan yang sangat khusus). Meskipun mereka mungkin telah melihat loop melalui catatan dan menerapkan logika jutaan kali, aturan Anda akan unik, jadi setidaknya mereka harus memahami dan berhasil menerapkan aturan yang Anda buat.
Katakanlah Gaji yang diproyeksikan dan daftar kandidat serta 3 video game favorit mereka, dan mungkin gaji awal. Calon yang menyukai Zelda mendapat penalti 300, kandidat yang suka putri duyung kecil mendapat bonus 200. Kandidat yang menyukai Donkey Kong dan Super Mario Brothers tetapi bukan Dr. Mario mendapat bonus 300. Calon yang suka Metroid atau Kid Icarus mendapatkan bonus 200, dll .... Tampaknya agak gila tetapi akan menunjukkan kepada Anda kemampuan mereka untuk menerjemahkan aturan bisnis ke dalam konstruksi program logis dan menguji pemahaman mereka tentang logika boolean juga. Secara keseluruhan tidak jauh berbeda dari fizzbuzz kecuali tidak menggunakan modulus dan loop. Anda tentu saja dapat memberi mereka daftar dan meminta mereka mengulanginya dan mencetak hasilnya ke layar menggunakan kriteria keluaran spesifik juga.