Kiat untuk calon dari programmer yang melakukan wawancara di Facebook



Tahun lalu, saya menghabiskan banyak waktu mewawancarai kandidat untuk berbagai posisi di Facebook. Dan, karena sekarang saya memiliki kesempatan untuk mengunjungi kedua sisi dari proses seleksi, saya ingin membantu Anda - siswa yang sedang mencoba untuk magang pertama mereka, pengembang yang lebih berpengalaman yang sedang bersiap untuk pindah ke perusahaan lain, atau mereka yang ingin pergi ke pemrograman dari lingkungan profesional yang sama sekali berbeda.

Dalam artikel ini saya ingin menguraikan pelajaran paling penting yang saya pelajari dari pengalaman mewawancarai programmer di Facebook. Saya harap mereka menjelaskan beberapa fitur dari proses ini, yang sangat, sangat melelahkan saraf.

Format


Wawancara untuk pemrogram, sebagai aturan, mengambil bentuk percakapan, 45 menit terakhir dan ditujukan untuk menguji pengetahuan Anda tentang struktur data dan algoritma. Magang biasanya hanya perlu melalui satu wawancara di mana mereka menunjukkan keterampilan menulis kode mereka. Pengembang tingkat yang lebih tinggi mungkin harus menghadiri dua atau tiga wawancara penulisan kode, satu atau dua wawancara di mana mereka akan menguji keterampilan desain sistem mereka, serta pertemuan terpisah untuk mengevaluasi kualitas pribadi mereka. Di sini saya hanya akan berbicara tentang wawancara kode.

Baru-baru ini saya ditanya: "Bagaimana jika saya tidak dapat menemukan solusi untuk masalah ini segera?" Saya menjawab: "Ya, jika tugas itu dipilih dengan benar, maka Anda seharusnya tidak segera menemukannya." Kalau tidak, apa gunanya? Tujuan dari wawancara adalah untuk memahami seberapa baik Anda dalam pemrograman. Di tim Facebook, informasi yang menjawab pertanyaan ini disebut sinyal. Pewawancara berusaha untuk mendapatkan yang terbaik dari dirinya. Dengan kata lain, jika kami mengerti bahwa Anda sudah terbiasa dengan tugas yang diusulkan, tanggung jawab kami adalah memberi Anda tugas lain.

Kami perlu melihat bagaimana Anda menghadapi kesulitan. Jika Anda, secara kebetulan, dapat menghafal solusi dengan langsung dari Cracking The Coding Wawancara, maka kami tidak tahu apa-apa tentang kemampuan Anda untuk menyelesaikan masalah.

Praktik Terbaik untuk Wawancara Kerja


Calon terbaik dari yang terbaik menjadi kekuatan pendorong untuk wawancara - mereka sendiri memiliki percakapan dan praktis tidak memerlukan karyawan perusahaan untuk mendorong mereka ke arah yang benar. Biasanya, programmer seperti itu atas kemauan, tanpa dorongan dari luar, lakukan hal berikut:

  1. Ajukan pertanyaan klarifikasi.
  2. Menganalisis opsi solusi, pro dan kontra mereka
  3. Kode konsep
  4. Tampilkan implementasi solusi
  5. Menguji Solusi Anda

Jangan bingung inisiatif dengan tergesa-gesa. Sikap aktif tidak berarti Anda harus segera bergegas menulis kode. Sebaliknya, jika Anda memulai kode dalam lima menit pertama percakapan, ini dapat sangat merusak kesan. Langkah pertama menuju wawancara kerja yang cemerlang adalah pertanyaan klarifikasi cerdas.

Pertanyaan Cerdas

Sebelum membuat keputusan, Anda harus memahami masalahnya dengan baik. Beberapa perbaikan serius dapat secara serius meningkatkan peluang Anda untuk sukses. Berikut ini beberapa contohnya:

  • Apakah ini perlu dilakukan tanpa memori tambahan?
  • Masukan apa yang harus kita fokuskan?
  • Apa yang lebih penting - kinerja atau konsumsi memori rendah?

Dengan cara ini Anda bisa fokus pada apa yang benar-benar penting dan mengeluarkan yang lain dari benak Anda. Mengetahui apa yang tidak dapat Anda pikirkan tidak kurang berharga daripada mengetahui yang membutuhkan perhatian khusus.

Jangan berpikir

Sangat sering, kandidat mulai menambahkan semacam spekulasi sendiri (variabel hanya angka positif, array tidak boleh kosong, semua data input aman). Ini adalah bel yang serius. Jangan pernah menyesuaikan kondisi sehingga lebih mudah bagi Anda untuk menemukan solusi. Tanya

"Apakah kita mengasumsikan bahwa semua nilai adalah positif?"

Tidak ada tempat yang lebih mudah. Jika mereka menjawab ya, itu bagus. Tidak diperlukan pemeriksaan tambahan. Jika tidak, maka satu pernyataan kondisi cukup untuk melindungi kode Anda dari segala kesempatan. Seringkali dengan bantuan pertanyaan seperti itu Anda bisa mendapatkan indikasi ke arah mana Anda perlu bergerak.

Opsi solusi

Pewawancara sangat suka ketika kandidat menyoroti beberapa solusi. Ini menunjukkan bahwa Anda mengerti: Anda dapat mendekati tugas apa pun dari sudut yang berbeda, dan, yang lebih penting, itu memaksa orang yang diwawancarai untuk memberi tahu Anda tanpa permintaan langsung dari Anda. Ya ampun!

Kami tidak bisa hanya mengambil dan memberikan jawaban yang tepat untuk Anda. Tetapi jika Anda mengusulkan dua opsi, A dan B, dan bertanya: "Pendekatan mana, menurut Anda, yang lebih tepat di sini?", Maka kita tentu akan memilih apa yang lebih mirip yang diinginkan.

Buat konsep solusi Anda dalam bentuk kode

Pada wawancara teknis, menulis paling sering diperlukan di papan tulis. Karenanya, tidak akan berfungsi untuk menyisipkan operator kapan dan di mana pun ia mau. Anda harus memiliki ide bagus tentang apa yang akan Anda lakukan sebelum mulai menulis.

Ambil napas dalam-dalam dan mulailah merencanakan kode Anda. Itu bisa berupa konsep kode, bisa berupa skema, yang utama adalah Anda tahu struktur data mana yang akan digunakan di dalamnya dan variabel mana yang akan menarik bagi Anda. Saya pikir tidak ada yang ingin hasil karyanya terlihat seperti ini:



Tulis implementasinya

Pada tahap ini, semuanya biasanya macet, meskipun seharusnya tidak dalam keadaan yang baik. Secara teori, implementasi solusi adalah yang paling sederhana. Anda mengajukan pertanyaan cerdas, mempertimbangkan pendekatan yang berbeda, memikirkan algoritme - yang tersisa hanyalah mengecat semuanya. Sementara itu, jangan lupakan ...

Komunikasi!

Bicaralah dengan keras. Sangat sulit untuk membawa Anda ke titik yang tepat jika saya tidak tahu apa yang Anda pikirkan sama sekali. Jika Anda membawa Anda ke suatu tempat di tempat yang salah, saya akan turun tangan. Jika Anda bergerak ke arah yang benar, kemungkinan besar saya tidak akan menjatuhkan Anda.

Namun, peringatan harus dibuat: gaya wawancara pribadi banyak menentukan. Seseorang melakukan intervensi dalam pengambilan keputusan secara lebih aktif, seseorang lebih memilih untuk menjauh.

Pengujian

Anehnya, langkah ini paling sering diabaikan. Saya akan mengatakan bahwa 98% pengembang yang ada di wawancara saya harus lebih memperhatikan memeriksa keputusan mereka.

Pada awal wawancara, kandidat biasanya diberikan opsi tes bersama dengan tugas. Setelah selesai mengerjakan solusi, mereka menjalankan kode melalui tes yang sesuai. Tetapi ada satu masalah: kami memberi Anda pilihan tes yang paling primitif. Itu, sebagai suatu peraturan, tidak mempengaruhi kasus-kasus batas dan tidak memungkinkan untuk memeriksa kode sebagaimana mestinya. Dengan parameter ini, algoritma Anda memberikan output yang diinginkan, dengan yang lain, mungkin tidak.

Cara termudah untuk pamer di wawancara teknis adalah dengan menulis tes. Semakin banyak, semakin baik. Semakin sulit semakin baik. Semakin komprehensif, semakin baik. Dalam kebanyakan kasus, ini akan memungkinkan Anda untuk menangkap bug sebelum saya tunjukkan. Dan hal-hal seperti itu mendukung Anda.

Apa yang harus dilakukan jika Anda tidak tahu harus berbuat apa


Jadi sama saja, apa yang harus Anda lakukan jika Anda diberi tugas, dan Anda tidak dapat menemukan solusi segera?
Lanjutkan secara bertahap. Ingat: mungkin tugas itu bagi Anda mirip dengan tugas yang pernah Anda selesaikan sebelumnya. Banyak tugas yang saya usulkan dalam wawancara adalah tugas-tugas dasar, yang dibongkar di setiap kursus di mana algoritma dan struktur data dipelajari - tetapi dengan subvert.

Jika tidak ada yang terlintas dalam pikiran, jangan panik. Semuanya baik-baik saja. Jangan khawatir tentang mencoba untuk segera menemukan solusi yang paling efektif - mulailah dengan yang paling sederhana. Kemudian, dengan membawanya ke titik awal, pikirkan: apa hambatannya di sini? Apa yang paling membutuhkan pengoptimalan? Bagaimana ini bisa dioptimalkan?

Mengurangi kelemahan sistem dengan kekuatan struktur data. Ketika Anda perlu membuat suatu algoritma lebih efisien, struktur data seringkali (meskipun tidak selalu) datang untuk menyelamatkan. Masing-masing dari mereka memiliki kelebihan dan kekurangannya sendiri (tabel hash adalah kecepatan pencarian data, pohon pencarian biner menyortir mereka dan sebagainya). Solusi terbaik diperoleh ketika Anda berhasil menutup beberapa hambatan karena kekuatan satu atau struktur data lainnya.

Misalnya, Anda memiliki tugas:

Diberikan proposal, hitung berapa kali setiap huruf alfabet muncul di dalamnya.

Jika Anda menggunakan metode pencarian lengkap, Anda harus menghitung setiap huruf secara bergantian, dan kemudian merangkum data menjadi hasil akhir. Inefisiensi metode terletak pada kebutuhan untuk menyimpan dan mencari informasi: kami menyimpan data yang kami terima untuk setiap huruf, dan kemudian kami mengekstraknya untuk membentuk hasil total. Jika Anda melihat struktur data yang tersedia, Anda akan melihat bahwa yang satu menonjol di antara yang lain seperti yang kita butuhkan:

  • Pohon pencarian biner
  • Array
  • Meja hash
  • Pohon AVL
  • Tumpukan
  • Antrian

Tabel hash paling efektif menyimpan dan mengambil data. Jika Anda menggunakannya, Anda tidak perlu menganalisis proposal dua puluh enam kali - cukup satu saja.

Cari petunjuk


Seringkali sebuah petunjuk dimasukkan ke dalam tugas pemrograman yang membuka jalan ke solusi yang lebih nyaman. Biasanya ini adalah semacam hal sepele, suatu kondisi yang tidak biasa karena Anda dapat bertindak dengan efisiensi yang lebih besar daripada yang awal lainnya. Periksa untuk melihat apakah ada hal seperti ini dalam tugas Anda.

Katakanlah:

Diberikan dua array bertipe Integer, A dan B; diperlukan untuk menggabungkan B dari A. Diasumsikan bahwa A dapat mengakomodasi semua elemen dari B; jumlah elemen yang diinisialisasi dalam array adalah m dan n, masing-masing.

Tugas ini diambil langsung dari buku How To Crack the Coding Wawancara. Melihat petunjuk? Kita bisa diberikan hanya dua array untuk digabung, tetapi tidak: dalam skenario kami, satu sepenuhnya ditempatkan di yang lain. Itulah yang saya bicarakan. Jika Anda melihat reservasi tersebut, ketahuilah bahwa reservasi tersebut tidak termasuk secara tidak sengaja.

Di sini ruang kosong memberi Anda peluang untuk mengoptimalkan proses merger. Solusi lengkapnya bisa dilihat di sini .

Minta bantuan


Terkadang Anda melewati semua langkah, tetapi tetap menemui jalan buntu. Dalam hal ini, Anda hanya perlu menghubungi pewawancara untuk bantuan.

Dari kenyataan bahwa kita akan duduk selama sepuluh menit dalam keheningan, itu tidak akan menjadi lebih mudah bagi siapa pun. Jika Anda benar-benar tidak tahu harus berbuat apa, meminta petunjuk akan menjadi jalan keluar terbaik. Kita masing-masing membutuhkan tips dari waktu ke waktu. Semuanya menentukan bagaimana Anda akan dapat menggunakannya.

Kesimpulannya


Wawancara teknis adalah tes standar yang sama dengan yang kita ketahui sejak kelulusan dan pendaftaran di universitas. Tugas berbeda dalam rincian, tetapi konsep dasar dan strategi solusi tetap kurang lebih standar.

Banyak kandidat terputus pada hal-hal yang sangat sederhana: mereka memikirkan kondisi mereka sendiri, tidak mengucapkan kereta pikiran, menguji keputusan mereka dengan buruk. Semua kesalahan ini dapat diperbaiki, dan "pasti tidak" dapat berubah menjadi "ambil". Gunakan sistem yang saya sketsa di artikel ini dan Anda akan berada dalam kondisi yang baik.

Source: https://habr.com/ru/post/id473018/


All Articles