Dari seorang penerjemah: mereka menerbitkan sebuah artikel untuk Anda oleh Maria Perna (Maria Antonietta Perna), yang berbicara tentang tugas-tugas khas dalam JavaScript , paling sering ditawarkan kepada para pencari kerja-pengembang saat wawancara. Artikel ini akan berguna terutama untuk programmer pemula. Di bawah ini adalah contoh penyelesaian masalah, jika Anda merasa mereka tidak terlalu baik, dan ada opsi yang lebih baik - sarankan alternatif di komentar.Wawancara di perusahaan teknologi telah lama menjadi buah bibir. Ini tidak perlu heran - wawancara yang sukses memberi Anda kesempatan untuk mendapatkan pekerjaan yang baik. Tetapi ini tidak sesederhana itu, karena seringkali perlu untuk menyelesaikan masalah yang kompleks.
Dan lebih sering daripada tidak, sebagian besar tugas-tugas ini tidak terkait dengan pekerjaan yang akan dilakukan pelamar, tetapi mereka masih perlu diselesaikan. Terkadang Anda harus melakukannya di papan tulis, tanpa memeriksa dengan Google atau sumber lain. Ya, situasinya berangsur-angsur berubah, dan beberapa perusahaan menolak wawancara semacam itu, tetapi banyak pengusaha masih menganut tradisi ini. Artikel ini dikhususkan untuk analisis tugas JavaScript yang khas, yang sering digunakan sebagai tugas untuk pelamar.
Kami mengingatkan Anda: untuk semua pembaca "Habr" - diskon 10.000 rubel saat mendaftar untuk kursus Skillbox apa pun menggunakan kode promo "Habr".
Skillbox merekomendasikan: Kursus praktis "Pengembang Mobile PRO" .
Yang utama adalah persiapan yang matang untuk wawancara Anda
Ya, sebelum Anda mulai membongkar tugas-tugas, mari kita lihat tips umum untuk mempersiapkan wawancara.
Yang terpenting adalah mempersiapkan terlebih dahulu. Periksa seberapa baik Anda mengingat algoritma dan struktur data, dan tarik pengetahuan di bidang yang tidak terlalu Anda kenal. Ada banyak platform online yang membantu mempersiapkan wawancara. Kami merekomendasikan
GeeksforGeeks ,
Pramp ,
Interviewing.io dan
CodeSignal .
Perlu belajar untuk mengucapkan keputusan itu dengan lantang. Dianjurkan untuk memberi tahu pelamar apa yang Anda lakukan, dan tidak hanya menulis di papan tulis (atau ketik kode di komputer, juga secara diam-diam). Dengan demikian, jika Anda membuat kesalahan dalam kode, tetapi keputusan umumnya akan benar, Anda dapat meningkatkan peluang keberhasilan Anda.
Masalahnya harus dipahami sebelum melanjutkan dengan solusi. Dalam beberapa kasus, Anda dapat secara dangkal memahami tugas dan kemudian pergi ke arah yang salah. Mungkin ada baiknya menanyakan beberapa pertanyaan klarifikasi kepada pewawancara.
Anda perlu berlatih menulis kode secara manual, bukan pada PC. Kebetulan selama wawancara, pelamar diberikan spidol dan papan di mana tidak ada tips atau format otomatis. Saat mencari solusi, tulis kode Anda di selembar kertas atau langsung di papan tulis. Jika Anda mengingat semuanya, Anda bisa melupakan sesuatu yang penting.
Tugas templat JavaScript
Mungkin beberapa tugas ini sudah tidak asing lagi bagi Anda. Anda baik melalui wawancara di mana Anda harus menyelesaikan sesuatu yang serupa, atau Anda berlatih pada mereka saat belajar JavaScript. Nah, sekarang saatnya untuk menyelesaikannya lagi, dengan penjelasan terperinci tentang prosesnya.
PalindromePalindrome adalah kata, kalimat atau urutan karakter yang dapat dibaca dengan cara yang persis sama di arah yang biasa atau sebaliknya. Misalnya, "Anna" adalah palindrom, tetapi "meja" dan "John" tidak.
PementasanDiberikan string; Anda perlu menulis fungsi yang memungkinkan Anda untuk mengembalikan true jika string adalah palindrome, dan false jika tidak. Dalam hal ini, Anda perlu mempertimbangkan spasi dan tanda baca.
palindrome ('racecar') === true
palindrome ('table') === falseKami membongkar tugasGagasan utama di sini adalah membalik garis ke arah yang berlawanan. Jika garis "mundur" benar-benar identik dengan aslinya, maka kami mendapat palindrom dan fungsi tersebut harus mengembalikan true. Jika tidak, salah.
SolusiBerikut adalah kode yang memecahkan palindrome.
const palindrome = str => {
Langkah pertama adalah mengubah karakter string input menjadi huruf kecil. Ini adalah jaminan bahwa program akan membandingkan karakter itu sendiri, dan bukan case atau sesuatu yang lain.
Langkah kedua adalah membalikkan garis. Ini mudah dilakukan: Anda perlu mengonversinya menjadi array menggunakan metode .split () (String library). Kemudian kita membalik array menggunakan .reverse () (Array library). Langkah terakhir adalah mengubah array terbalik menjadi string menggunakan .join () (Array library).
Sekarang semua yang diperlukan adalah membandingkan string "mundur" dengan yang asli, mengembalikan hasilnya benar atau salah.
FizzbuzzSalah satu tugas wawancara paling populer.
PementasanDiperlukan untuk menulis fungsi yang menampilkan angka dari 1 ke n ke konsol, di mana n adalah bilangan bulat yang diambil fungsi sebagai parameter, dengan ketentuan berikut:
- keluaran mendesis bukannya kelipatan 3;
- output buzz bukannya kelipatan 5;
- Output fizzbuzz bukannya angka yang merupakan kelipatan dari 3 dan 5.
ContohFizzbuzz (5)Hasil// 1
// 2
// mendesis
// 4
// buzzKami membongkar tugasHal utama di sini adalah cara mencari beberapa angka menggunakan JavaScript. Ini dapat diimplementasikan menggunakan operator modul atau sisanya -%, yang memungkinkan Anda untuk menampilkan sisanya ketika membagi dua angka. Jika sisanya adalah 0, ini berarti bahwa angka pertama adalah kelipatan dari yang kedua.
12% 5 // 2 -> 12 bukan kelipatan 5
12% 3 // 0 -> 12 adalah kelipatan dari 3Jadi, jika kita membagi 12 dengan 5, kita mendapat 2 dengan sisanya 2. Jika kita membagi 12 dengan 3, kita mendapatkan 4 dengan sisanya 0. Dalam kasus pertama, 12 bukan kelipatan 5, di detik - 12 adalah kelipatan 3.
SolusiSolusi terbaik adalah kode berikut:
const fizzBuzz = num => { for(let i = 1; i <= num; i++) {
Fungsi melakukan pemeriksaan yang diperlukan menggunakan pernyataan kondisional dan menghasilkan hasil yang dibutuhkan pengguna. Tugas harus memperhatikan urutan pernyataan if ... else: mulai dengan kondisi ganda (&&) dan diakhiri dengan kasus ketika beberapa angka tidak dapat ditemukan. Akibatnya, kami membahas semua opsi.
AnagramIni adalah nama kata yang berisi semua huruf dari kata lain dalam jumlah yang sama, tetapi dalam urutan yang berbeda.
PementasanAnda perlu menulis fungsi yang memeriksa apakah dua baris adalah anagram, dan huruf tidak penting. Hanya karakter yang diperhitungkan; spasi atau tanda baca tidak diperhitungkan.
anagram ('finder', 'Friend') -> true
anagram ('hello', 'bye') -> falseKami membongkar tugasPenting untuk mempertimbangkan bahwa perlu memeriksa setiap huruf dalam dua baris input dan nomor mereka di setiap baris.
finder -> f: 1 teman -> f: 1
i: 1 r: 1
n: 1 i: 1
d: 1 e: 1
e: 1 n: 1
r: 1 d: 1Untuk menyimpan data anagram, Anda harus memilih struktur seperti literal objek JavaScript. Kunci dalam hal ini adalah simbol huruf, nilainya adalah jumlah pengulangannya di baris saat ini.
Ada kondisi lain:
- Anda harus memastikan bahwa huruf tidak diperhitungkan saat membandingkan. Konversikan kedua string menjadi huruf kecil atau besar.
- Kami mengecualikan dari perbandingan semua non-karakter. Cara terbaik adalah bekerja dengan ekspresi reguler .
Solusi
Perhatikan penggunaan
Object.keys () dalam cuplikan di atas. Metode ini mengembalikan array yang berisi nama atau kunci dalam urutan yang sama seperti yang muncul di objek. Dalam hal ini, arraynya akan seperti ini:
['f', 'i', 'n', 'd', 'e', 'r']Dengan demikian, kita mendapatkan sifat-sifat objek tanpa perlu melakukan siklus volume. Dalam tugas, Anda dapat menggunakan metode ini dengan properti .length - untuk memeriksa apakah jumlah karakter yang sama ada di kedua baris - ini adalah fitur penting dari anagram.
Pencarian vokalTugas yang cukup sederhana yang sering muncul dalam wawancara.
PementasanAnda perlu menulis fungsi yang mengambil string sebagai argumen dan mengembalikan jumlah vokal yang terkandung dalam string.
Vokal adalah "a", "e", "i", "o", "u".
Contoh:findVowels ('hello') // -> 2
findVowels ('why') // -> 0SolusiBerikut ini pilihan termudah:
const findVowels = str => { let count = 0 const vowels = ['a', 'e', 'i', 'o', 'u'] for(let char of str.toLowerCase()) { if(vowels.includes(char)) { count++ } } return count }
Penting untuk memperhatikan penggunaan metode .includes (). Ini tersedia untuk string dan array. Ini harus digunakan untuk menentukan apakah array berisi nilai tertentu. Metode ini mengembalikan true jika array berisi nilai yang ditentukan, dan false jika tidak.
Ada solusi yang lebih ringkas untuk masalah ini:
const findVowels = str => { const matched = str.match(/[aeiou]/gi) return matched ? matches.length : 0 }
Ini melibatkan metode .match (), yang memungkinkan Anda untuk mengimplementasikan pencarian yang efisien. Jika ekspresi reguler sebagai argumen ke metode ditemukan di dalam string yang ditentukan, maka array karakter yang cocok menjadi nilai yang dikembalikan. Nah, jika tidak ada yang cocok, maka .match () mengembalikan null.
FibonacciTugas klasik yang dapat ditemukan dalam wawancara dari berbagai tingkatan. Patut diingat bahwa urutan Fibonacci adalah serangkaian angka, di mana masing-masing berikutnya adalah jumlah dari dua sebelumnya. Jadi, sepuluh angka pertama adalah sebagai berikut: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.
PementasanKita perlu menulis fungsi yang mengembalikan catatan ke-n dalam urutan tertentu, dan n adalah angka yang diteruskan sebagai argumen ke fungsi.
fibonacci (3) // -> 2Tugas ini melibatkan perulangan sebanyak yang ditentukan dalam argumen, mengembalikan nilai pada posisi yang sesuai. Metode pernyataan masalah ini membutuhkan penggunaan siklus. Jika Anda menggunakan rekursi, pewawancara mungkin menyukainya dan memberi Anda beberapa poin tambahan.
Solusi const fibonacci = num => {
Dalam array hasil, dua angka pertama terkandung dalam satu baris, karena setiap catatan dalam urutan terdiri dari jumlah dari dua angka sebelumnya. Pada awalnya, tidak ada dua angka yang dapat Anda ambil untuk mendapatkan nomor berikutnya, sehingga siklus tidak dapat menghasilkan mereka dalam mode otomatis. Tetapi, seperti yang kita ketahui, dua angka pertama selalu 0 dan 1. Oleh karena itu, Anda dapat menginisialisasi array hasil secara manual.
Adapun rekursi, semuanya di sini lebih sederhana dan lebih rumit pada saat yang sama:
const fibonacci = num => {
Kami terus memanggil fibonacci (), meneruskan angka yang lebih kecil sebagai argumen. Kami berhenti ketika argumen yang disampaikan adalah 0 atau 1.
Kesimpulan
Kemungkinan besar, Anda telah mengalami salah satu dari tugas-tugas ini jika Anda diwawancarai untuk pekerjaan pengembang frontend- atau JavaScript (terutama jika ini adalah tingkat junior). Tetapi jika mereka tidak menemukan Anda, mereka dapat berguna di masa depan - setidaknya untuk pengembangan umum.
Skillbox merekomendasikan: