5 tugas wawancara JavaScript khas: analisis lan solusi

5 tugas wawancara JavaScript khas: analisis lan solusi

Saka penerjemah: nerbitake artikel kanggo sampeyan Maria Antonietta Perna, sing ngomong babagan tugas JavaScript umum, paling asring ditawakake kanggo pelamar pangembang sajrone wawancara. Artikel bakal migunani, pisanan kabeh, kanggo programer anyar.

Wawancara ing perusahaan teknologi wis suwe dadi omongan ing kutha. Iki mesthine ora nggumunake - kanthi sukses ngliwati wawancara menehi kesempatan kanggo entuk kerja sing apik. Nanging iki ora gampang banget, amarga masalah rumit asring kudu ditanggulangi.

Menapa malih, paling asring, tugas-tugas kasebut ora ana gandhengane karo karya sing bakal ditindakake pelamar, nanging isih kudu ditanggulangi. Kadhangkala sampeyan kudu nindakake ing papan, tanpa mriksa Google utawa sumber liyane. Ya, kahanan saya suwe saya ganti, lan sawetara perusahaan nolak wawancara kasebut, nanging akeh pengusaha isih tetep manut tradisi iki. Artikel iki dikhususake kanggo analisis tugas JavaScript khas sing asring digunakake minangka tugas kanggo wong sing golek kerja.

Kita ngelingake: kanggo kabeh sing maca "Habr" - diskon 10 rubel nalika ndhaptar kursus Skillbox nggunakake kode promosi "Habr".

Skillbox nyaranake: Kursus praktis "Mobile Developer PRO".

Ingkang utama yaiku nyiapake kanthi lengkap kanggo wawancara.

Ya, sadurunge kita miwiti ndeleng tugas, ayo ndeleng sawetara tips persiapan wawancara umum.

Sing utama yaiku nyiyapake sadurunge. Tes sepira sampeyan ngelingi algoritma lan struktur data, lan nambah kawruh ing wilayah sing sampeyan ora ngerti. Ana akeh platform online sing bisa mbantu sampeyan nyiapake wawancara. We menehi saran geeksforgeeks, Pramp, Interviewing.io и KodeSinyal.

Iku worth sinau kanggo ngomong kaputusan banter. Disaranake kanggo ngandhani pelamar babagan apa sing sampeyan lakoni, lan ora mung nulis ing papan (utawa ngetik kode menyang komputer, uga meneng). Kanthi cara iki, yen sampeyan nggawe kesalahan ing kode, nanging solusi umume bener, sampeyan bisa nambah kasempatan kanggo sukses.

Sampeyan kudu ngerti masalah kasebut sadurunge miwiti ngrampungake. Ing sawetara kasus, sampeyan bisa ngerteni tugas kanthi entheng lan banjur mudhun ing dalan sing salah. Sampeyan bisa uga kudu takon sawetara pitakonan klarifikasi kanggo interviewer.

Sampeyan kudu latihan nulis kode kanthi tangan, ora ing PC. Mengkono nalika wawancara, pelamar diwenehi tandha lan papan tulis, sing ora ana petunjuk utawa format otomatis. Nalika nggoleki solusi, sampeyan kudu nulis kode sampeyan ing kertas utawa langsung ing papan. Yen sampeyan nyimpen kabeh ing sirah, sampeyan bisa uga lali bab penting.

Tugas Cithakan ing JavaScript

Sawetara tugas iki mbokmenawa wis kenal karo sampeyan. Sampeyan uga duwe wawancara ing ngendi sampeyan kudu ngrampungake perkara sing padha, utawa praktek nalika sinau JavaScript. Inggih, saiki wektune kanggo ngrampungake maneh, lan kanthi panjelasan rinci babagan proses kasebut.

Palindrome

Palindrom minangka tembung, ukara, utawa urutan karakter sing diwaca persis padha ing arah biasa lan ing arah ngelawan. Contone, "Anna" minangka palindrome, nanging "meja" lan "John" ora.

Pementasan

Diwenehi senar; sampeyan kudu nulis fungsi sing ngijini sampeyan kanggo bali bener yen senar palindrome a, lan palsu yen ora. Ing kasus iki, sampeyan kudu njupuk menyang akun spasi lan tandha wacan.

palindrome('mobil balap') === bener
palindrome('tabel') === palsu

Ayo analisa tugas

Ide utama ing kene yaiku mbalikke string. Yen senar "muwalik" pancen padha karo sing asli, mula kita wis nampa palindrome lan fungsi kasebut kudu bali bener. Yen ora, palsu.

kaputusan

Punika kode sing solves 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 pisanan yaiku ngowahi karakter ing string input dadi huruf cilik. Iki minangka jaminan manawa program kasebut bakal mbandhingake karakter kasebut dhewe, lan dudu kasus utawa liya-liyane.

Langkah kapindho yaiku mbalikke baris. Iki ora angel kanggo nindakake: sampeyan kudu Ngonversi menyang Uploaded nggunakake cara .split () (String perpustakaan). Banjur kita mbalikke Uploaded nggunakake .reverse () (Array perpustakaan). Langkah pungkasan punika Ngonversi array mbalikke kanggo senar nggunakake .join () (Array perpustakaan).

Saiki sampeyan mung kudu mbandhingake senar "muwalik" karo senar asli, ngasilake asil bener utawa salah.

FizzBuzz

Salah sawijining tugas sing paling populer ing wawancara.

Pementasan

Sampeyan kudu nulis fungsi sing prints nomer saka 1 kanggo n kanggo console, ngendi n iku sawijining integer sing fungsi njupuk minangka parameter, karo kahanan ing ngisor iki:

  • output fizz tinimbang kelipatan 3;
  • Buzz output tinimbang nomer sing kelipatan 5;
  • output fizzbuzz tinimbang angka sing kelipatan 3 lan 5.

Conto:

Fizzbuzz(5)

asil

// 1
// 2
// dhek
// 4
//buzz

Ayo analisa tugas

Sing utama ing kene yaiku cara kanggo nemokake kelipatan nggunakake JavaScript. Bisa dileksanakake nggunakake operator modulus utawa sisa -%, sing ngidini sampeyan nuduhake sisa nalika mbagi rong nomer. Yen isih ana 0, tegese nomer pisanan minangka kelipatan nomer loro.

12% 5 // 2 -> 12 dudu kelipatan 5
12% 3 // 0 -> 12 iku kelipatan 3

Dadi, yen dibagi 12 karo 5, sampeyan entuk 2 kanthi sisa 2. Yen dibagi 12 karo 3, sampeyan entuk 4 kanthi sisa 0. Ing kasus sing sepisanan, 12 dudu kelipatan 5, ing nomer loro. , 12 iku kelipatan saka 3.

kaputusan

Solusi optimal bakal dadi kode ing ngisor iki:

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 kasebut nindakake pamriksa sing dibutuhake nggunakake pernyataan kondisional lan ngasilake asil sing dibutuhake pangguna. Ing masalah, iku worth mbayar manungsa waé kanggo urutan if...else statements: miwiti karo kondisi pindho (&&) lan mungkasi karo cilik ngendi sawetara nomer ora bisa ditemokake. Akibaté, kita nutupi kabeh opsi.

Anagram

Iki jeneng kanggo tembung sing ngemot kabeh aksara saka tembung liyane ing nomer padha, nanging ing urutan beda.

Pementasan

Kita kudu nulis fungsi sing mriksa apa loro strings anagrams, lan cilik ora Matter. Mung karakter sing diitung; spasi utawa tandha wacan ora dianggep.

anagram('finder', 'Friend') -> bener
anagram('hello', 'bye') -> false

Ayo analisa tugas

Sing penting kanggo ditimbang ing kene yaiku sampeyan kudu mriksa saben huruf ing rong baris input lan nomer ing saben baris.

golek -> f: 1 kanca -> f: 1
aku: 1r:1
n:1: 1
d:1 e:1
e:1 n:1
r: 1 d:1

Kanggo nyimpen data anagram, sampeyan kudu milih struktur kayata literal obyek JavaScript. Tombol ing kasus iki yaiku karakter huruf, nilai kasebut minangka jumlah repetisi ing baris saiki.

Ana syarat liyane:

  • Sampeyan kudu nggawe manawa kasus huruf ora dianggep nalika mbandhingake. Kita mung ngowahi loro strings menyang huruf cilik utawa gedhe.
  • Kita ngilangi kabeh non-karakter saka perbandingan kasebut. Paling apik kanggo nggarap ekspresi reguler.

kaputusan

// 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
}

Pay manungsa waé kanggo panggunaan Object.keys() ing cuplikan ing ndhuwur. Cara iki ngasilake array sing ngemot jeneng utawa tombol ing urutan sing padha sing katon ing obyek kasebut. Ing kasus iki, array bakal kaya iki:

['f', 'i', 'n', 'd', 'e', ​​'r']

Kanthi cara iki, kita entuk sifat obyek kasebut tanpa kudu nindakake loop akeh. Ing masalah, sampeyan bisa nggunakake cara iki karo properti .length kanggo mriksa apa loro strings duwe nomer padha karakter - iki fitur penting anagrams.

Telusuri aksara swara

Tugas sing cukup prasaja sing asring muncul ing wawancara.

Pementasan

Sampeyan kudu nulis fungsi sing njupuk senar minangka argumen lan ngasilake jumlah vokal sing ana ing senar.
Aksara swara yaiku “a”, “e”, “i”, “o”, “u”.

Conto:

golekVowels('halo') // —> 2
findVowels('kok') // -> 0

kaputusan

Mangkene pilihan sing paling gampang:

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
}

Iku penting kanggo mbayar manungsa waé kanggo nggunakake .kalebu () cara. Kasedhiya kanggo strings lan array. Sampeyan kudu digunakake kanggo nemtokake manawa array ngemot nilai tartamtu. Cara iki ngasilake bener yen array ngemot nilai sing ditemtokake, lan palsu yen ora.

Ana solusi sing luwih cendhek kanggo masalah kasebut:

const findVowels = str => {
  const matched = str.match(/[aeiou]/gi)
  return matched ? matches.length : 0
}

Iki nggunakake cara .match (), sing ngijini sampeyan kanggo ngleksanakake search efisien. Yen ekspresi reguler minangka argumen metode ditemokake ing jero string sing ditemtokake, nilai bali minangka array saka karakter sing cocog. Inggih, yen ora ana cocog, banjur .match () bali null.

fibonacci

Tugas klasik sing bisa ditemokake ing wawancara ing macem-macem tingkat. Sampeyan kudu eling yen urutan Fibonacci minangka seri nomer sing saben sabanjure minangka jumlah saka rong sadurunge. Dadi, sepuluh nomer pisanan katon kaya iki: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Pementasan

Sampeyan kudu nulis fungsi sing ngasilake cathetan n ing urutan tartamtu, karo n minangka nomer sing liwati minangka bantahan kanggo fungsi.

fibonacci(3) // —> 2

Tugas iki kalebu lumaku liwat daur ulang kaping sing ditemtokake ing argumentasi, ngasilake nilai ing posisi sing cocog. Iki cara posing masalah mbutuhake nggunakake puteran. Yen sampeyan nggunakake recursion tinimbang, iku bisa please interviewer lan menehi sawetara TCTerms ekstra.

kaputusan

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]
}

Ing larik asil, rong nomer pisanan ana ing seri amarga saben entri ing urutan minangka jumlah saka rong nomer sadurunge. Ing awal banget ora ana rong nomer sing bisa dijupuk kanggo njaluk nomer sabanjuré, supaya daur ulang ora bisa generate otomatis. Nanging, kita ngerti, loro nomer pisanan tansah 0 lan 1. Mulane, sampeyan bisa initialize asil Uploaded kanthi manual.

Kanggo rekursi, kabeh luwih gampang lan luwih rumit ing wektu sing padha:

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)
}

Kita terus nelpon fibonacci (), ngliwati angka cilik lan cilik minangka argumen. Kita mandheg nalika argumen sing dilewati yaiku 0 utawa 1.

kesimpulan

Paling kamungkinan, sampeyan wis nemoni samubarang tugas kasebut yen sampeyan wis diwawancarai kanggo proyek pangembang frontend utawa JavaScript (utamane yen ana ing tingkat junior). Nanging yen sampeyan durung nemoni, bisa uga migunani ing mangsa ngarep - paling ora kanggo pangembangan umum.

Skillbox nyaranake:

Source: www.habr.com

Add a comment