Interview terbuka bersama mazipan
Artikel ini secara terbuka akan memberikan berbagai daftar pertanyaan yang umumnya akan saya tanyakan, kalau secara tidak sengaja kalian ketemu saya pada satu sesi interview spesifik untuk posisi Frontend Engineer.
βοΈ Q&A Singkat
-
β Apakah semua daftar tersebut akan selalu saya tanyakan: Bisa iya bisa tidak, bisa berkembang pertanyaannya, tapi umumnya masing-masing interviewer biasanya punya set of pertanyaan andalan yang sering ditanyakan pada setiap sesi interview. Jadi sebagian besar daftar di sini adalah pertanyaan andalan dari saya pribadi, kemungkinan besar akan saya tanyakan.
-
β Kenapa gak disertakan jawabannya: Ya karena jawabannya gak akan text-book juga. Sebaiknya memang jelaskan sesuai dengan gaya dan pengetahuan yang kalian punya saja. Beberapa pertanyaan juga merupakan open question, jadi antar satu dan orang lain akan berbeda hasilnya.
π§βπ« Proses Interview Soft. Engineer Secara Umum
Sebelum saya mulai breakdown berbagai pertanyaan yang biasa saya tanyakan, ada baiknya kalian memahami dulu proses interview software engineer secara umum. Kalian bisa memahaminya dengan menonton video di YouTube Channelnya Gogo mengenai Gimana sih proses interview software engineer? Kalau belum sempat nonton, sempatkan buat nonton dulu. Jangan lupa klik βLaikβ dan βSabskrebβ π
Prosesnya bisa beda-beda, tapi secara umum akan mirip-mirip dengan skema yang berbeda-beda. Ada yang dipisah-pisah ke beberapa sesi, ada yang digabungkan semuanya jadi satu sesi.
π» Live Coding
Bagian ini saya akan run pertama, saya biasanya akan meminta Live Coding untuk 2 hal:
- βοΈ HTML & CSS: Biasanya hanya meminta untuk dibuatkan layout sederhana menggunakan HTML dan CSS.
- βοΈ Struktur Data: Seperti pertanyaan struktur data pada umumnya, kemungkinan akan bermain dengan berbagai tipe data.
Bisa nonton video dari Gogo tentang Interview koding algoritma dan struktur data dan Mock interview - koding algoritma dan struktur data.
Beberapa contoh soal Live Coding untuk Frontend
β© Membuat replika library classnames
Buatlah fungsi utility untuk men-generate string classname, kalian bisa melihat beberapa contoh test case untuk fungsi ini:
classNames('foo', 'bar'); // => 'foo bar'
classNames('foo', { bar: true }); // => 'foo bar'
classNames({ 'foo-bar': true }); // => 'foo-bar'
classNames({ 'foo-bar': false }); // => ''
classNames({ foo: true }, { bar: true }); // => 'foo bar'
classNames({ foo: true, bar: true }); // => 'foo bar'
// lots of arguments of various types
classNames('foo', { bar: true, duck: false }, 'baz', { quux: true }); // => 'foo bar baz quux'
// other falsy values are just ignored
classNames(null, false, 'bar', undefined, 0, 1, { baz: null }, ''); // => 'bar 1'
var arr = ['b', { c: true, d: false }];
classNames('a', arr); // => 'a b c'
β© Membuat fungsi untuk Memoize
Buatlah fungsi yang bisa melakukan Memoize/Cache terhadap suatu argumen fungsi, tujuannya agar suatu fungsi tidak perlu memanggil fungsi aslinya untuk kali ke-dua dan seterusnya.
Contoh test case:
// write your Memoize fn here
function memoize () {}
function add (a, b) {
console.log('Call origin Add function', a, b)
return a + b
}
const memoizedAddFn = memoize(add)
console.log(memoizedAddFn(1, 2)) // => print 3, but should call the origin fn
console.log(memoizedAddFn(1, 2)) // => print 3, but should not call the origin fn
console.log(memoizedAddFn(1, 2)) // => print 3, but should not call the origin fn
β© Contains duplicate
β© Intersection of two Array
π Pertanyaan Umum
Berikut adalah daftar berbagai pertanyaan umum yang kemungkinan saya tanyakan:
π Web Fundamental
- π© Jelaskan perbedaan kalau kita load sebuah berkas JavaScript dengan hanya menggunakan tag
<script>
dengan<script async>
dan<script defer>
- π© Jelaskan mengenai attribute
rel=noopener
dan/ataurel=noreferrer
yang biasanya ditambahkan pada tag link (<a href="..." rel="noopener noreferrer">
) - π© Sebutkan beberapa semantic tag pengganti
div
yang kamu tau? - π© Jelaskan perbedaan antara
Cookie
,Local Storage
danSession Storage
! Kapan kita mesti pakai masing-masing dari mereka? Jelaskan pula trade-off kalau pakai masing-masing dari mereka! - π© Apa itu
prefetch
, dan apa itupreload
? Adakah use case yang tepat kapan kita sebaiknya pakai hal tersebut? Dan kapan sebaiknya kita menghindari pakai hal tersebut? - π© Bagaimana cara membuat peramban agar melakukan cache terhadap resource statis yang sudah pernah di request sebelumnya?
- π© Apa itu
CDN
? Dan bagaimana peranCDN
dalam penyajian sebuah website? Kenapa dan kapan kita perlu pakaiCDN
? Resource yang seperti apa yang sebaiknya disajikan melalui diCDN
? - π© Bagaimana cara kamu kalau diminta menyajikan sebuah layout yang sangat berbeda antara Desktop dan Mobile?
- π© Jelaskan mengenai
CORS
(Cross-Origin Resource Sharing)! Kapan dan kenapa dia bisa terjadi? Sebutkan beberapa alternatif solusi yang bisa dikerjakan saat ketemu masalah tersebut.
π‘ JS Fundamental
- π© Apa bedanya antara
.forEach
dan.map
? - π© Apa bedanya antara
debounce
danthrottle
? Sebutkan use case kapan kita pakai masing-masing mereka! - π© Jelaskan mengenai Closure di JavaScript.
βοΈ Frameworks
- π© Jelaskan soal semantic versioning!
- π© Jelaskan bedanya
dependencies
,devDependencies
danpeerDependencies
padapackage.json
! - π© Jelaskan Rule of Hooks! Kapan kita bisa pakai Hooks di React?
- π© Jelaskan fungsi Array Dependency pada
useEffect
, Bagaimana penggunaanya dan apa pengaruhnya kalau kita tidak tambahkan atau salah mendefinisikan dependency-nya dengan tepat? Bagaimana dengan fungsi Cleanup padauseEffect
? Kapan kita menambahkannya? - π© Jelaskan mengenai Server-Side Render, Client-Side Render dan Static Site Generated! Kapan kita sebaiknya pakai masing-masing diantaranya? Sebutkan pula kekurangan kalau pakai masing-masing mereka!
- π© Jelaskan perbedaan
Rest API
denganGraphQL
! Sebutkan kelebihan dan kekurangan mereka masing-masing! Kapan sebaiknya kita pakaiRest API
? Kapan pakaiGraphQL
? - π© Sebutkan beberapa alternatif solusi mengatur CSS di sebuah projek yang kamu tau dan bagaimana pendapatmu mengenainya, pilihan mana yang biasanya kamu ambil, kenapa mengambil pilihan tersebut? Bagaimana caramu menghindari masalah dengan specificity di CSS?
- π© Bagaimana konsep membuat sebuah lazy load pada komponen gambar/image? Jelaskan beberapa alternatif pendekatan yang bisa dikerjakan!
- π© Hal teknis minimal yang akan kamu buat untuk mendukung
SEO
bahkan jika hal tersebut lupa diminta sekalipun oleh pihak terkait. - π© Jelaskan cara testing aplikasi yang kalian lakukan sekarang! Bagaimana yang idealnya menurutmu? Testing seperti apa yang harusnya dikerjakan? Pertimbangan apa yang perlu diperhatikan? Siapa yang harusnya mengerjakan?
π« Web Performance
- π© Jelaskan mengenai Core Web Vitals!
- π© Jelaskan bedanya penggunaan Data Lapangan dan Data Lab dalam konteks web performance!
- π© Hal apa yang akan mempengaruhi skor
CLS
(Cumulative Layout Shift)! Opsi langkah yang seharusnya bisa dikerjakan untuk meningkatkan skorCLS
! - π© Hal apa yang akan mempengaruhi skor
LCP
(Largest Contentful Paint)! Opsi langkah yang seharusnya bisa dikerjakan untuk meningkatkan skorLCP
! - π© Bagaimana memantau metrik web performance secara berkala? Bagaimana dengan Realtime User Monitoring? Apakah diperlukan?
π Design
- π© Bagaimana caranya kalau kamu diminta mempercepat waktu yang diperlukan oleh engineer dalam menyelesaikan task, dari mulai development sampai ke production?
- π© Bagaimana membuat aplikasi yang menampilkan Live Comments dari pengguna? Pendekatan seperti apa yang kamu ambil?
π Saran pribadi
Memang kemungkinan interviewer-mu akan menanyakan hal yang berbeda dari yang biasanya ditanyakan oleh saya. Tapi setidaknya daftar di atas bisa sedikit jadi benchmark buat dirimu untuk mempersiapkan proses interview. Apakah dirimu masih merasa kesulitan menjelaskan poin-poin di atas kalau memang ditanya hal yang sama?
Kalau diperlukan, tulis jawaban-jawabanmu dan atur agar penjelasanmu cukup mudah dipahami. Salah satu yang bisa meningkatkan kepercayaan diri dalam menjawab saat diinterview adalah karena memang sudah menguasai materi dan tau dengan baik mengenai hal yang ditanyakan oleh si interviewer.
Tau pengertian secara text-book saja bisa jadi tidak cukup, karena pertanyaannya kemungkinan besar akan di follow up lebih dalam berdasarkan jawabanmu. Tiap teknologi biasanya punya use case yang berbeda yang coba diselesaikan, jadi bisa mengerti kapan kita harus pakai dan kelebihan serta kekurangan teknologi tersebut akan membantu dalam memberikan jawaban yang baik.
π€Ί Jadi, kapan nih kita interview?
Foto cover diambil dari Tima Miroshnichenko di Pexels