Saya harus mengakui di sini, bahwa saya adalah salah satu dari mereka yang suka mengajukan pertanyaan algoritma dalam wawancara, tetapi saya harus menekankan, bahwa jawaban aktual untuk pertanyaan itu sama sekali tidak relevan. Saya tidak peduli sedikit pun jika orang yang diwawancarai tahu jawabannya atau tidak. Sebagai gantinya, bagi saya, pertanyaan ini menargetkan berbagai aspek, seperti yang berikut - sesuai urutan kepentingan:
Persyaratan
Pertanyaan-pertanyaan semacam itu sengaja tidak ditentukan. Dalam contoh Anda, tidak ada detail lebih lanjut yang diberikan tentang urutan. Jika Anda memiliki orang yang diwawancarai yang bertanya apakah angka-angka ini benar-benar diurutkan, maka itu pertanda baik. Dia memiliki pola pikir yang benar untuk bertanya kepada pelanggan tentang perincian lebih lanjut, yang akan membantu mencapai solusi yang lebih baik dalam waktu yang lebih singkat. Calon juga dapat mempermainkan ide menggunakan O (n) ruang untuk menyimpan array nomor N, tetapi ia tidak boleh melakukan itu tanpa bertanya tentang rincian lebih lanjut tentang X dan Y. Katakanlah bahwa X dan Y adalah antara 1 dan 1000 , lalu yakin, maju dan jalankan solusi berbasis array. Tetapi jika saya beri tahu Anda bahwa intervalnya adalah 1 dan 1 miliar, maka masalahnya menjadi sangat berbeda. Biarkan saya tekankan lagi, bahwa saya tidak peduli dengan solusinya.
Teknik Standar
Saya tidak ingin mempekerjakan seorang programmer yang bahkan tidak tahu apa artinya O (n). Itu mutlak harus diketahui jika Anda memiliki pendidikan yang layak di bidang itu. Tetapi juga penting untuk tidak hanya tahu apa artinya, tetapi untuk benar-benar menerapkan pengetahuan itu. Dalam contoh Anda, saya ingin seorang kandidat menyadari bahwa ia tidak diizinkan untuk mengurutkan data (tanpa mengajukan pertanyaan lebih lanjut dengan menargetkan opsi penyortiran bucket atau pendekatan penyortiran O (n) lainnya karena penyortiran diperlukan O (n log n) secara umum.
Demikian pula, pertanyaan algoritma lainnya menargetkan teknik standar seperti pohon atau grafik-traversal, atau rekursi. Calon dapat menyelinap di salah satu teknik ini, yang tidak membuat kesan yang baik Namun, dalam kasus seperti itu, saya ingin menggali lebih dalam untuk mengetahui apakah kandidat memiliki latar belakang CS sama sekali. Tentu saja, itu tergantung pada apa posisi target itu, tetapi biasanya pengembang yang tidak tahu tentang kompleksitas runtime, atau struktur data khas dan traversalnya, tidak akan membantu.
Mindset Berurusan Masalah
Setelah mengajukan pertanyaan, Anda memantau kandidat dengan cermat. Bagaimana dia bereaksi? Anda mendapatkan hasil terbaik di sini dari kandidat yang sama sekali tidak tahu bagaimana menyelesaikan masalah pada awalnya . Dalam hal itu, pertanyaannya memeriksa apa yang mungkin terjadi jika situasi serupa terjadi di tempat kerja nanti. Anda mungkin menemukan masalah seperti itu selama pengembangan Anda, dan baik untuk mengetahui bagaimana calon Anda menangani masalah-masalah ini, bahkan jika dia tidak mampu menyelesaikannya sendiri.
Contoh: Anda tidak ingin calon Anda masuk ke mode diam selama setengah jam berikutnya! Periksa apakah dia dapat mengajukan pertanyaan cerdas (lihat Persyaratan), periksa apakah dia mulai berpikir di luar kotak begitu dia menyadari bahwa dia tidak bisa melakukannya. Bahkan pertanyaan tandingan yang "menyenangkan" seperti "Bolehkah saya menggunakan opsi telepon-rekan kerja?" adalah pertanda baik.
Bagaimana menjawabnya
Secara umum, jawaban terbaik yang dapat Anda berikan untuk pertanyaan semacam ini adalah pertanyaan balasan! Memberi jawaban segera pada dasarnya gagal semuanya, dan sebenarnya bukan jawaban yang baik sama sekali, karena semua pertanyaan ini mengisyaratkan trade-off, yang disiratkan oleh jawaban Anda, tanpa Anda memiliki informasi yang diperlukan untuk secara cerdas membuat itu trade-off. Tentu saja, kualitas pertanyaan balik bervariasi di antara kandidat.
Sebagai catatan umum tentang pertanyaan wawancara: Pertanyaan tandingan jarang merupakan hal yang buruk. Dalam salah satu wawancara saya sendiri, misalnya saya ditanya sesuatu seperti berikut: "Jika Anda harus menerapkan X, apakah Anda memilih C ++ atau Java untuk itu, dan mengapa?" - Saya hanya membalas dengan "Apakah saya terbatas pada keduanya?". Tebak sendiri, reaksi seperti apa yang Anda dapatkan dari pewawancara untuk pertanyaan balasan seperti itu - dan betapa mudahnya bagi Anda untuk benar-benar menunjukkan kepada pewawancara apa yang mampu Anda lakukan.
find the missing element in O(N) or better
Apa artinya "atau lebih baik" dalam konteks ini? Sepertinya jenis hal yang akan diselesaikan dengan loop sementara yang sederhana, tapi bagaimanapun saya tidak mengerti - itu baik dipecahkan atau tidak diselesaikan , kan?