Di blog kami, kami banyak menulis tentang membangun karier di bidang TI di berbagai negara, mencari pekerjaan , perbedaan dalam proses mewawancarai perusahaan besar. Dalam artikel hari ini kita akan membahas lebih jauh topik yang disebut wawancara desain sistem - ini adalah salah satu tahapan wawancara dengan perusahaan teknologi terkenal, di mana banyak kandidat tersingkir.
Jadi, apa desain sistem itu dan bagaimana Anda melewati jenis wawancara ini?
Apa itu
Di dunia sekarang ini, sistem TI telah menjadi sangat kompleks. Setiap "fitur" baru dalam produk harus memenuhi banyak persyaratan, selalu ada kendala yang harus diseimbangkan oleh teknisi. Apa yang tampak sangat mudah bagi rata-rata pengguna - seperti mengirimkan kueri penelusuran melalui Google atau Yandex - sebenarnya memiliki tingkat kerumitan yang sangat tinggi.
Perbedaan antara wawancara desain sistem dan wawancara teknis reguler adalah bahwa mereka mengharapkan kandidat menjawab pertanyaan ambigu tentang struktur data dan algoritme. Sebagai aturan, tugas-tugas pada tahap ini sedemikian rupa sehingga bagi mereka tidak ada solusi yang benar atau salah, mereka memprovokasi proses berpikir - di dalamnya kandidat terungkap.
Secara kasar, wawancara desain sistem adalah sesuatu seperti sesi brainstorming, di mana seseorang berpikir dengan keras, mencari solusi yang mungkin dan menganalisis kekurangan masing-masing secara real time. Ini adalah kesulitannya, tetapi juga nilai tambah utama - proses berpikir lebih penting di sini daripada hasil. Biasanya , wawancara semacam itu dilakukan oleh perusahaan besar yang mengembangkan sistem skala besar ( FAANG dan sejenisnya).
Bagaimana Anda melewati wawancara desain sistem? Di bawah ini adalah beberapa tip praktis.
, , @g-jobbot. , Telegram , – , .
–
Karena dalam wawancara desain sistem, yang paling penting adalah bagaimana Anda memecahkan masalah, sangat penting pada tahap pertama untuk memahaminya dengan jelas. Mantan insinyur Microsoft dan Facebook dalam artikelnya menunjukkan pentingnya fakta ini dengan contoh praktis.
Biasanya, tugasnya adalah seperti "Bagaimana Anda mendesain Netflix dalam 45 menit?" Sekilas, pertanyaan seperti itu benar-benar tidak masuk akal. Sistem skala besar seperti itu telah dirancang dan diterapkan oleh ratusan dan ribuan insinyur selama bertahun-tahun. Empat puluh lima menit bahkan tidak akan cukup untuk mulai membahas setidaknya satu dari komponen produk semacam itu!
Di sinilah memahami tugas sangat penting. Anda perlu memahami apa yang diinginkan pewawancara. Dan dia jelas ingin dia:
- memberikan jawaban dalam format "helikopter tampilan" dari seluruh sistem,
- kemudian diuraikan menjadi komponen
- menjelaskan mengapa masing-masing diperlukan (pusat data, penyimpanan data, frontend, backend, caching, bekerja dengan antrian, jaringan dan load balancing, dll.)
Gambar: system-design-primer
Anda dapat membahas beberapa komponen ini secara lebih rinci - mereka akan mengarahkan Anda ke ini, atau Anda perlu bertanya. Biasanya, Anda bahkan tidak perlu menulis kode dalam wawancara tentang desain sistem, dan jika Anda segera mempelajari rimba teknis, tanpa terlebih dahulu membahas keseluruhan sistem secara keseluruhan, ini akan merugikan.
Ajukan pertanyaan klarifikasi
Tujuan utama dari wawancara desain sistem adalah untuk memberikan kandidat kesempatan untuk menunjukkan pengetahuan dan pengalaman mereka. Seperti yang dinyatakan di atas, tidak ada jawaban benar atau salah. Jauh lebih penting untuk tidak menyelesaikan masalah seperti itu - terutama karena hal itu mungkin mustahil dalam waktu yang ditentukan - tetapi untuk menunjukkan proses berpikir Anda dengan segala kemuliaan.
Oleh karena itu, sangat penting untuk mengajukan pertanyaan, meskipun tiba-tiba terjadi sehingga Anda mengetahui dengan jelas jawaban atas pertanyaan yang diajukan. Dalam situasi seperti ini, Anda tidak hanya perlu menuliskan solusi untuk masalah tersebut, hal ini bertentangan dengan tujuan wawancara. Anda perlu melupakan solusi yang diketahui, dan mulai mencari solusi baru, mengajukan pertanyaan di sepanjang jalan.
Ini akan memungkinkan pewawancara memahami beberapa hal sekaligus:
- bagaimana kandidat mendekati penilaian masalah?
- Apakah dia segera menilai kemungkinan keterbatasan dan kemacetan sistem?
- Apakah segera memikirkan melalui pengoptimalan solusi dan pengelakan pembatasan?
Di artikel ini , seorang insinyur Twitter membagikan pengalamannya dalam wawancara. Secara khusus, dia memberikan gambaran yang baik tentang bagaimana mengajukan pertanyaan. Bayangkan dalam sebuah wawancara Anda diberi tugas untuk mendesain sebuah kotak. Tidak ada lagi informasi yang diberikan secara langsung.
Pertanyaannya mungkin:
- Apa yang seharusnya dapat dilakukan oleh sistem (berapa banyak barang yang masuk ke dalam kotak, berapa ukurannya)?
- Siapa target audiens produk?
- Apa ekspektasi pengguna produk?
Jawabannya akan memungkinkan Anda memahami bahwa Anda perlu membuat kotak kuning dengan gambar emotikon, yang akan muat setidaknya satu bola tenis. Namun, bola itu tidak biasa - radiusnya setengah meter, dan beratnya sekitar 1 kg. Kotaknya akan mudah dibawa dengan memegang bagian bawahnya, jadi tidak perlu pegangan.
Ada lebih banyak informasi, sekarang Anda dapat berpikir untuk memecahkan masalah yang begitu halus.
Gambar: freecodecamp.com
Jangan mencoba untuk mengesankan
Kesalahan umum dalam wawancara tentang desain sistem - banyak kandidat berpikir bahwa karena pada tahap ini Anda perlu bekerja di tingkat abstraksi, cukup memasukkan istilah keren dan nama-nama teknologi modis selama percakapan untuk dianggap sebagai pakar. Tidak seperti itu.
Pertama, wawancara tentang desain sistem kemungkinan besar bukan hanya perekrut, tetapi seorang insinyur yang mencari seseorang untuk bergabung dengan timnya. Tidaklah cukup bagi orang seperti itu hanya mendengar kata-kata seperti No-SQL, Mongo DB, dan Hadoop. Dia jelas akan mulai mengajukan pertanyaan klarifikasi, dan jika Anda tidak benar-benar memiliki banyak pengalaman dengan teknologi yang disebutkan, ini akan menjadi jelas dengan sangat cepat.
Jujur
Wawancara desain sistem adalah salah satu saat ketika tidak tahu pasti. Oleh karena itu, jawaban seperti "Saya tidak pernah bekerja dengan teknologi khusus ini, tetapi saya tahu bahwa ini sering digunakan untuk memecahkan masalah serupa" adalah pilihan yang baik. Selain kejujuran, di sini kandidat menunjukkan pengetahuan tertentu dan menjelaskan kepada pewawancara di mana dia akan mulai menyelesaikan masalah (dia akan mencoba solusi yang diketahui, jika tidak berhasil, dia akan “menggali” lebih lanjut).
Selain itu, Anda tidak boleh memberikan solusi Anda sebagai solusi ideal dan tidak mengandung kekurangan. Selalu ada batasan, dan teknisi-pewawancara berpengalaman memahami hal ini lebih baik daripada orang lain. Oleh karena itu, selama wawancara, ada baiknya untuk secara jujur mengatakan bahwa ada hambatan ini dan itu dalam solusi, tetapi Anda dapat mencoba menyiasatinya dengan ini dan itu, menggunakan alat tambahan atau melakukan lebih banyak penelitian.
Ini akan memperjelas bahwa kandidat tidak hanya memberikan solusi dan kemudian dengan keras mencoba untuk mendorongnya, tetapi dapat fleksibel, membuat penyesuaian, dan secara umum memadai dan memahami bahwa selalu mungkin untuk berbuat lebih baik.
Berikut adalah dialog fiksi yang indah dalam wawancara desain sistem yang menunjukkan kepada Anda bagaimana TIDAK melakukannya:
: Twitter. ?
: NoSQL- MongoDB.
: MySQL?
: . MongoDB BigTable.
: Twitter MySQL, .
: , , , . - Facebook NO-SQL.
: Facebook MySQL.
: , , , . , MySQL , BigTable.
Pewawancara : Tidak masalah. Di mana kami akan menyimpan data analitik?
Kandidat : Jelas di MySQL.
Interviewer : Tapi bukankah ada terlalu banyak untuk MySQL? Sekarang kami memiliki HDFS untuk ini.
Kandidat : Sepertinya Anda mulai mengembangkan Twitter bahkan sebelum MongoDB cukup berkembang. MongoDB dapat dengan mudah menampung tweet dan data analitik.
Pewawancara : Bagus, terima kasih atas waktunya. Senang mengobrol.
Bagaimana Mempersiapkan Wawancara: Tautan Berguna
Meskipun desain sistem adalah salah satu bagian wawancara yang tidak jelas, Anda dapat mempersiapkannya. Untuk membantu kandidat, kami telah menyusun daftar bahan yang berguna: