Ada yang punya baik FizzBuzz pertanyaan jenis yang tidak pada masalah FizzBuzz?
Saya mewawancarai seseorang dan FB relatif terkenal dan tidak terlalu sulit untuk dihafal, jadi perhentian pertama saya dalam mencari ide adalah kecanduan baru saya.
Ada yang punya baik FizzBuzz pertanyaan jenis yang tidak pada masalah FizzBuzz?
Saya mewawancarai seseorang dan FB relatif terkenal dan tidak terlalu sulit untuk dihafal, jadi perhentian pertama saya dalam mencari ide adalah kecanduan baru saya.
Jawaban:
Saya telah melihat daftar kecil masalah pemrograman yang relatif sederhana yang digunakan untuk menyingkirkan kandidat, seperti FizzBuzz. Berikut adalah beberapa masalah yang saya lihat, dalam rangka meningkatkan kesulitan:
Ini untuk Java, dan Anda dapat menggunakan pustaka standar sehingga beberapa di antaranya bisa sangat mudah (seperti 6). Tapi mereka bekerja seperti FizzBuzz. Jika Anda memiliki petunjuk tentang pemrograman, Anda seharusnya dapat melakukannya dengan sangat cepat. Bahkan jika Anda tidak tahu bahasanya dengan baik, Anda setidaknya harus bisa memberikan ide di balik bagaimana melakukan sesuatu.
Dengan menggunakan tes ini, salah satu atasan saya sebelumnya melihat segalanya mulai dari orang-orang yang mengerjakan semuanya dengan sangat cepat, hingga orang-orang yang dapat melakukannya dengan sangat cepat, hingga satu orang yang tidak dapat menjawab satu pun setelah setengah jam.
Saya juga harus mencatat: dia membiarkan orang menggunakan komputernya saat mereka diberi tugas ini. Mereka secara khusus diinstruksikan bahwa mereka dapat menggunakan Google dan sejenisnya.
Mungkin ini tidak menjawab pertanyaan Anda secara langsung, tetapi saya tidak yakin Anda perlu mengajukan masalah lain. Selain "mudah diingat", pertanyaan FizzBuzz juga "mudah", dan itulah intinya. Jika orang yang Anda wawancarai termasuk dalam kelompok orang yang "terkenal" oleh FizzBuzz, mereka termasuk dalam kelompok orang yang pertanyaan jenis FizzBuzz tidak akan difilter. Itu tidak berarti bahwa Anda mempekerjakan mereka di tempat, tetapi itu berarti bahwa mereka harus dapat melewatinya dan melanjutkan wawancara.
Dengan kata lain, siapa pun yang meluangkan waktu untuk membaca Coding Horror layak untuk diwawancara lebih lanjut. Mintalah mereka menuliskan solusinya dengan sangat cepat, diskusikan dengan singkat (misalnya, Bagaimana Anda mengujinya?), Dan kemudian beralih ke pertanyaan berikutnya. Dan seperti yang dikatakan artikel tersebut, "sungguh mengherankan betapa banyak kandidat yang tidak mampu melakukan tugas pemrograman yang paling sederhana."
Salah satu yang pertama dari Project Euler mungkin akan bagus.
Sebagai contoh:
Soal 25
Urutan Fibonacci ditentukan oleh relasi perulangan:
Fn = Fn−1 + Fn−2, where F1 = 1 and F2 = 1.
Oleh karena itu, 12 suku pertama adalah:
F1 = 1 F2 = 1 F3 = 2 F4 = 3 F5 = 5 F6 = 8 F7 = 13 F8 = 21 F9 = 34 F10 = 55 F11 = 89 F12 = 144
Suku ke-12, F12, adalah suku pertama yang terdiri dari tiga digit.
Berapa indeks dari suku pertama dalam deret Fibonacci yang mengandung 1000 digit?
Saya telah menemukan memeriksa string apakah itu palindrome adalah cara yang cukup sederhana yang bisa menjadi penyiang yang baik.
scalar(reverse 'foo') == 'foo'
.
Saya menginginkan pertanyaan FizzBuzz yang tidak melibatkan operator modulo. Terutama karena saya biasanya mewawancarai pengembang web yang operator modulo tidak sering muncul. Dan jika itu bukan sesuatu yang Anda temui secara teratur, itu salah satu hal yang Anda cari beberapa kali Anda membutuhkannya.
(Memang, ini adalah konsep yang, idealnya, Anda temui dalam kursus matematika di suatu tempat, tapi itu topik yang berbeda.)
Jadi, yang saya temukan adalah apa yang saya sebut, tanpa imajinasi , Threes in Reverse . Instruksi adalah:
Tulis program yang mencetak, dalam urutan terbalik , setiap kelipatan 3 antara 1 dan 200.
Mudah melakukannya dalam urutan normal: kalikan indeks loop dengan 3 hingga Anda mencapai angka yang melebihi 200, lalu keluar. Anda tidak perlu khawatir tentang berapa banyak iterasi yang harus dihentikan setelahnya, Anda terus melakukannya hingga mencapai nilai pertama yang terlalu tinggi.
Tapi mundur ke belakang, Anda harus tahu harus mulai dari mana. Beberapa mungkin menyadari secara intuitif bahwa 198 (3 * 66) adalah kelipatan tertinggi dari 3, dan dengan demikian, kode keras 66 ke dalam loop. Orang lain mungkin menggunakan operasi matematika (pembagian integer atau floor () pada pembagian floating point 200 dan 3) untuk mengetahui angka itu, dan dengan melakukan itu, memberikan sesuatu yang lebih dapat diterapkan secara umum.
Pada dasarnya, ini adalah jenis masalah yang sama dengan FizzBuzz (mengulang nilai dan mencetaknya, dengan twist). Yang satu ini adalah masalah untuk dipecahkan yang tidak menggunakan sesuatu yang (relatif) esoterik seperti operasi modulo.
print [x for x in xrange(3, 200, 3)][::-1]
Untuk sesuatu yang sangat sederhana yang dapat dilakukan dalam 10 detik, tetapi akan menghapus orang-orang yang benar-benar tidak dapat memprogram apa pun , coba yang ini:
Tanyakan: tunjukkan kepada saya (di atas kertas, tetapi lebih baik di papan tulis) bagaimana Anda akan menukar nilai dua variabel.
Ini bukan ideku, tapi diposting dalam komentar oleh seseorang bernama Jacob di postingan blog tentang pertanyaan asli FizzBuzz.
Yakub melanjutkan dengan mengatakan:
Jika mereka tidak memulai dengan membuat variabel ketiga, Anda dapat menghapus orang tersebut. Saya telah menemukan bahwa saya dapat memotong sepertiga hingga setengah pelamar saya (memang pada saat itu belum tersaring) dengan pertanyaan itu saja.
Ada pembahasan menarik lebih lanjut setelah itu mengomentari postingan blog asli tentang cara melakukan pertukaran variabel ini tanpa memerlukan variabel ketiga (menambah / mengurangi, xor dll), dan tentu saja, jika Anda menggunakan bahasa yang mendukung ini dalam satu pernyataan / operasi, ini mungkin bukan tes yang bagus.
Meskipun bukan ide saya, saya ingin memposting ini di sini karena ini adalah pertanyaan yang sangat sederhana dan mudah serta elegan yang dapat (dan harus) dijawab dalam waktu sekitar 10 detik oleh seseorang yang telah menulis program yang paling sederhana sekalipun. Ini juga tidak memerlukan penggunaan operator yang agak tidak jelas seperti operator modulo, yang banyak orang, yang merupakan programmer yang cukup baik, tidak terbiasa dengannya (yang saya tahu dari pengalaman saya sendiri).
Fibonacci, membalikkan string, menghitung jumlah bit yang ditetapkan dalam satu byte adalah yang umum lainnya. Project Euler juga memiliki banyak koleksi kesulitan yang meningkat.
Minta mereka untuk menulis aplikasi untuk mengembalikan faktor dari bilangan tertentu. Ini mudah dilakukan dan sulit dilakukan dengan baik dalam waktu singkat. Anda dapat melihat gaya mereka dan cara mereka memikirkan masalah dalam waktu singkat.
Jika ini adalah wawancara C / C ++ pastikan orang tersebut tahu tentang petunjuk.
Umum - algoritma sederhana (daftar tertaut [tunggal / ganda]). Tanyakan tentang kerumitan penambahan dalam setiap kasus (di awal, di akhir, pengoptimalan ...)?
(Umum) Bagaimana Anda menemukan min dan max dari sebuah array (ukuran N) hanya dengan perbandingan 3 * N / 2?
C / C ++: Bagaimana Anda mengoptimalkan beberapa "strcat" ke buffer?
Lihat 6.14 dari C ++ FAQ Lite:
Bagaimana dengan: Saya ingin menggunakan satu integer untuk menyimpan banyak nilai. Jelaskan bagaimana itu akan berhasil.
Jika mereka tidak memiliki petunjuk tentang bit mask dan operasi, mereka mungkin tidak dapat menyelesaikan masalah lain.
Saya telah meminta kandidat saya untuk membuat program untuk menghitung faktorial dari bilangan tertentu dalam bahasa pseudo pilihan mereka. Ini adalah masalah yang cukup mudah untuk dipecahkan dan cocok untuk pertanyaan tindak lanjut alami (yang sering kali dapat ditanyakan) tentang rekursi.