5 tugas khas untuk wawancara JavaScript: penguraian dan solusi



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.

Palindrome

Palindrome 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.

Pementasan

Diberikan 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') === false

Kami membongkar tugas

Gagasan 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.

Solusi

Berikut adalah kode yang memecahkan palindrome.

const palindrome = str => { // turn the string to lowercase str = str.toLowerCase() // reverse input string and return the result of the // comparisong return str === str.split('').reverse().join('') } 

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.

Fizzbuzz

Salah satu tugas wawancara paling populer.

Pementasan

Diperlukan 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.

Contoh

Fizzbuzz (5)

Hasil

// 1
// 2
// mendesis
// 4
// buzz

Kami membongkar tugas

Hal 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 3

Jadi, 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.

Solusi

Solusi terbaik adalah kode berikut:

 const fizzBuzz = num => { for(let i = 1; i <= num; i++) { // check if the number is a multiple of 3 and 5 if(i % 3 === 0 && i % 5 === 0) { console.log('fizzbuzz') } // check if the number is a multiple of 3 else if(i % 3 === 0) { console.log('fizz') } // check if the number is a multiple of 5 else if(i % 5 === 0) { console.log('buzz') } else { console.log(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.

Anagram

Ini adalah nama kata yang berisi semua huruf dari kata lain dalam jumlah yang sama, tetapi dalam urutan yang berbeda.

Pementasan

Anda 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') -> false

Kami membongkar tugas

Penting 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: 1

Untuk 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

 // helper function that builds the // object to store the data const buildCharObject = str => { const charObj = {} for(let char of str.replace(/[^\w]/g).toLowerCase()) { // if the object has already a key value pair // equal to the value being looped over, // increase the value by 1, otherwise add // the letter being looped over as key and 1 as its value charObj[char] = charObj[char] + 1 || 1 } return charObj } // main function const anagram = (strA, strB) => { // build the object that holds strA data const aCharObject = buildCharObject(strA) // build the object that holds strB data const bCharObject = buildCharObject(strB) // compare number of keys in the two objects // (anagrams must have the same number of letters) if(Object.keys(aCharObject).length !== Object.keys(bCharObject).length) { return false } // if both objects have the same number of keys // we can be sure that at least both strings // have the same number of characters // now we can compare the two objects to see if both // have the same letters in the same amount for(let char in aCharObject) { if(aCharObject[char] !== bCharObject[char]) { return false } } // if both the above checks succeed, // you have an anagram: return true return true } 

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 vokal

Tugas yang cukup sederhana yang sering muncul dalam wawancara.

Pementasan

Anda 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') // -> 0

Solusi

Berikut 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.

Fibonacci

Tugas 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.

Pementasan

Kita perlu menulis fungsi yang mengembalikan catatan ke-n dalam urutan tertentu, dan n adalah angka yang diteruskan sebagai argumen ke fungsi.

fibonacci (3) // -> 2

Tugas 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 => { // store the Fibonacci sequence you're going // to generate inside an array and // initialize the array with the first two // numbers of the sequence const result = [0, 1] for(let i = 2; i <= num; i++) { // push the sum of the two numbers // preceding the position of i in the result array // at the end of the result array const prevNum1 = result[i - 1] const prevNum2 = result[i - 2] result.push(prevNum1 + prevNum2) } // return the last value in the result array return result[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 => { // if num is either 0 or 1 return num if(num < 2) { return num } // recursion here return fibonacci(num - 1) + fibonacci(num - 2) } 

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:

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


All Articles