5 tugas wawancara JavaScript has: analisis jeung solusi

5 tugas wawancara JavaScript has: analisis jeung solusi

Ti penerjemah: diterbitkeun artikel pikeun anjeun Maria Antonietta Perna, anu ngobrol ngeunaan tugas JavaScript umum, paling sering ditawarkeun ka pelamar pamekar nalika wawancara. Tulisan éta bakal mangpaat, mimitina, pikeun programer novice.

Wawancara di perusahaan téknologi parantos lami janten omongan di kota. Ieu teu matak héran - hasil lulus wawancara méré Anjeun kasempetan pikeun meunang pakasaban alus. Tapi ieu teu jadi basajan, sabab masalah kompléks mindeng kudu direngsekeun.

Leuwih ti éta, paling sering, lolobana tugas ieu teu patali jeung karya nu ngalamar bakal ngalakukeun, tapi maranéhna masih kudu direngsekeun. Kadang-kadang anjeun kedah ngalakukeun éta dina papan, tanpa pariksa ku Google atanapi sumber anu sanés. Leres, kaayaan laun-laun robih, sareng sababaraha perusahaan ngantunkeun wawancara sapertos kitu, tapi seueur pangusaha anu tetep taat kana tradisi ieu. Artikel ieu devoted kana analisis tugas JavaScript has anu mindeng dipaké salaku tugas pikeun seekers pakasaban.

Kami ngingetan: pikeun sakabéh pamiarsa "Habr" - diskon 10 rubles nalika enrolling dina sagala Tangtu Skillbox ngagunakeun "Habr" kode promosi.

Skillbox nyarankeun: Kursus praktis "Pamekar Mobile PRO".

Hal utama nyaéta nyiapkeun tuntas pikeun wawancara anjeun.

Leres, sateuacan urang ningali tugas, hayu urang tingali sababaraha tip persiapan wawancara umum.

Hal utama nyaéta nyiapkeun sateuacanna. Uji kumaha anjeun émut kana algoritma sareng struktur data, sareng ningkatkeun pangaweruh anjeun dina daérah anu anjeun henteu terang teuing. Aya seueur platform online anu tiasa ngabantosan anjeun nyiapkeun wawancara. Urang mamatahan geeksforgeeks, Pramp, Ngawawancara.io и CodeSignal.

Éta patut diajar ngucapkeun kaputusan kalayan nyaring. Disarankeun pikeun ngawartosan pelamar ngeunaan naon anu anjeun lakukeun, sareng henteu ngan ukur nyerat dina papan (atanapi ngetik kode kana komputer, ogé cicingeun). Ku cara kieu, lamun nyieun kasalahan dina kode, tapi solusi umumna bener, Anjeun bisa ningkatkeun Chances sukses.

Anjeun kedah ngartos masalah sateuacan anjeun ngamimitian ngabéréskeunana. Dina sababaraha kasus, Anjeun bisa ngarti tugas deet lajeng turun jalur salah. Bisa jadi patut nanyakeun sababaraha patarosan klarifikasi ka interviewer.

Anjeun kudu latihan nulis kode ku leungeun, teu dina PC. Éta kajadian yén nalika ngawawancara ngalamar dibéré spidol sareng papan tulis, dimana henteu aya petunjuk atanapi pormat otomatis. Nalika milarian solusi, éta patut nyerat kode anjeun dina salembar kertas atanapi langsung dina papan. Lamun tetep sagalana dina sirah anjeun, anjeun bisa poho hal penting.

Tugas template dina JavaScript

Sababaraha pancén ieu meureun geus akrab ka anjeun. Anjeun parantos ngalaman wawancara dimana anjeun kedah ngabéréskeun hal anu sami, atanapi ngalaksanakeunana nalika diajar JavaScript. Nya, ayeuna waktuna pikeun ngabéréskeunana deui, sareng kalayan katerangan anu lengkep ngeunaan prosésna.

Palindrom

Palindrom nyaéta kecap, kalimah, atawa runtuyan aksara anu dibacana persis sarua boh dina arah nu biasa boh dina arah nu lalawanan. Contona, "Anna" palindrome a, tapi "méja" jeung "John" henteu.

Pementasan

Dibéré string; anjeun kudu nulis fungsi nu ngidinan Anjeun pikeun balik leres lamun string anu palindrome a, sarta palsu lamun henteu. Dina hal ieu, anjeun kudu tumut kana akun spasi tur tanda baca.

palindrome ( 'racecar') === leres
palindrome ( 'tabel') === palsu

Hayu urang analisa tugas

Gagasan utama di dieu nyaéta ngabalikeun senar. Lamun "ngabalikeun" string sagemblengna idéntik jeung aslina, lajeng kami geus narima palindrome sarta fungsi kudu balik leres. Lamun henteu, palsu.

kaputusan

Ieu kode anu ngabéréskeun palindrom.

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

Hambalan munggaran nyaéta ngarobah karakter dina string input kana hurup leutik. Ieu jaminan yén program bakal ngabandingkeun karakter sorangan, teu bisi atawa nanaon sejenna.

Lengkah kadua nyaéta ngabalikeun garis. Ieu teu hese ngalakukeun: anjeun kudu ngarobah kana Asép Sunandar Sunarya ngagunakeun métode .split () (String perpustakaan). Teras we ngabalikeun Asép Sunandar Sunarya maké .reverse () (Asép Sunandar Sunarya perpustakaan). Lengkah panungtungan nyaéta ngarobah Asép Sunandar Sunarya tibalik ka string maké .join () (Asép Sunandar Sunarya perpustakaan).

Ayeuna sadaya anu anjeun kedah laksanakeun nyaéta ngabandingkeun senar "malik" sareng senar asli, ngabalikeun hasil leres atanapi salah.

FizzBuzz

Salah sahiji tugas nu pang populerna di wawancara.

Pementasan

Anjeun kedah nyerat fungsi anu nyitak nomer tina 1 dugi ka n kana konsol, dimana n mangrupikeun integer anu fungsina janten parameter, kalayan kaayaan di handap ieu:

  • kaluaran fizz tinimbang lilipetan 3;
  • kaluaran buzz tinimbang angka nu lilipetan 5;
  • kaluaran fizzbuzz tinimbang angka nu lilipetan duanana 3 jeung 5.

conto

Fizzbuzz(5)

hasil

// 1
// 2
// ngilu
// 4
//gubrak

Hayu urang analisa tugas

Hal utama di dieu nyaeta cara pikeun manggihan lilipetan maké JavaScript. Éta tiasa dilaksanakeun nganggo operator modulus atanapi sésa -%, anu ngamungkinkeun anjeun nunjukkeun sésana nalika ngabagi dua angka. Lamun sésana nyaéta 0, hartina angka kahiji mangrupa kakalian kadua.

12% 5 // 2 -> 12 sanes kelipatan 5
12% 3 // 0 -> 12 mangrupa kelipatan 3

Janten, upami anjeun ngabagi 12 ku 5, anjeun nampi 2 kalayan sésana 2. Upami anjeun ngabagi 12 ku 3, anjeun nampi 4 kalayan sésana 0. Dina kasus anu pertama, 12 sanés kakalian tina 5, dina kadua. , 12 mangrupa kelipatan 3.

kaputusan

Solusi optimal bakal janten kodeu ieu:

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

Fungsina ngalaksanakeun pamariksaan anu diperyogikeun nganggo pernyataan kondisional sareng ngahasilkeun hasil anu diperyogikeun ku pangguna. Dina masalah, éta patut nengetan urutan lamun ... pernyataan sejenna: mimitian ku kaayaan ganda (&&) jeung ditungtungan ku kasus dimana sababaraha nomer teu bisa kapanggih. Hasilna, urang nutupan sadaya pilihan.

Anagram

Ieu mangrupikeun nami kecap anu ngandung sadaya hurup kecap sanés dina jumlah anu sami, tapi dina urutan anu béda.

Pementasan

Urang kedah nyerat fungsi anu mariksa naha dua senar mangrupikeun anagram, sareng masalahna henteu masalah. Ngan karakter anu diitung; spasi atawa tanda baca teu dianggap.

anagram ( 'panemu', 'Sobat') -> leres
anagram ( 'halo', 'bye') -> palsu

Hayu urang analisa tugas

Hal anu penting pikeun dipertimbangkeun di dieu nyaéta anjeun kedah pariksa unggal hurup dina dua garis input sareng nomerna dina unggal garis.

panyungsi -> f: 1 sobat -> f: 1
abdi: 1r:1
n: 1 abdi: 1
d: 1 e: 1
e: 1n: 1
r: 1d: 1

Pikeun nyimpen data anagram, anjeun kedah milih struktur sapertos obyék JavaScript literal. Konci dina hal ieu nyaéta karakter hurup, nilaina nyaéta jumlah pangulangan na dina garis ayeuna.

Aya kaayaan séjén:

  • Anjeun kedah mastikeun yén kasus hurup henteu dipertimbangkeun nalika ngabandingkeun. Urang ngan saukur ngarobah duanana string kana hurup leutik atawa luhur.
  • Urang ngaluarkeun sagala non-karakter ti ngabandingkeun. Pangalusna pikeun digawekeun ku babasan biasa.

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
}

Nengetan panggunaan Object.keys() dina sempalan di luhur. Metoda ieu mulih hiji Asép Sunandar Sunarya ngandung ngaran atawa konci dina urutan anu sarua yén maranéhna muncul dina obyék. Dina hal ieu, susunan bakal saperti kieu:

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

Ku cara kieu urang meunang sipat objék tanpa kudu ngalakukeun loop bulk. Dina masalah, Anjeun tiasa make metoda ieu kalawan sipat .length mariksa naha duanana string boga angka sarua karakter - ieu mangrupa fitur penting anagrams.

Pilarian vokal

Tugas anu cukup basajan anu sering muncul dina wawancara.

Pementasan

Anjeun kedah nyerat fungsi anu nyandak senar salaku argumen sareng ngabalikeun jumlah vokal anu dikandung dina senar.
Vokalna nyaéta "a", "e", "i", "o", "u".

contona:

findVowels('halo') // —> 2
findVowels('naha') // -> 0

kaputusan

Ieu pilihan pangbasajanna:

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
}

Kadé nengetan pamakéan métode .kaasup (). Ieu sadia pikeun duanana string na arrays. Ieu kudu dipake pikeun nangtukeun naha hiji Asép Sunandar Sunarya ngandung hiji nilai nu tangtu. Metoda ieu mulih leres lamun Asép Sunandar Sunarya ngandung nilai dieusian, sarta palsu lamun henteu.

Aya solusi anu langkung pondok pikeun masalah:

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

Ieu ngagunakeun métode .cocog (), nu ngidinan Anjeun pikeun nerapkeun hiji pilarian efisien. Lamun éksprési biasa salaku argumen metoda kapanggih di jero string dieusian, mangka nilai balik mangrupa Asép Sunandar Sunarya karakter cocog. sumur, lamun euweuh patandingan, lajeng .cocok () mulih null.

fibonacci

Tugas klasik anu tiasa dipendakan dina wawancara dina sababaraha tingkatan. Perlu diinget yén sekuen Fibonacci mangrupikeun séri nomer dimana masing-masing saterasna mangrupikeun jumlah tina dua sateuacana. Ku kituna, sapuluh angka kahiji kasampak kawas kieu: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Pementasan

Anjeun kedah nyerat fungsi anu ngabalikeun catetan n dina sekuen anu tangtu, sareng n mangrupikeun nomer anu disalurkeun salaku argumen pikeun fungsi éta.

fibonacci(3) // —> 2

Tugas ieu ngalibatkeun leumpang ngaliwatan loop a jumlah kali dieusian dina argumen, balik nilai dina posisi luyu. Cara ieu posing masalah merlukeun pamakéan puteran. Lamun make recursion gantina, éta bisa mangga interviewer tur masihan anjeun sababaraha titik tambahan.

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

Dina Asép Sunandar Sunarya hasil, dua angka munggaran dikandung dina séri sabab unggal éntri dina runtuyan mangrupa jumlah tina dua angka saméméhna. Dina awalna henteu aya dua nomer anu tiasa dicandak pikeun kéngingkeun nomer salajengna, ku kituna loop henteu tiasa ngahasilkeun sacara otomatis. Tapi, sakumaha urang terang, dua angka kahiji salawasna 0 jeung 1. Kituna, anjeun tiasa initialize hasil Asép Sunandar Sunarya sacara manual.

Sedengkeun pikeun recursion, sagalana leuwih basajan tur leuwih pajeulit dina waktos anu sareng:

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

Urang terus nelepon fibonacci (), ngalirkeun angka nu leuwih leutik sarta leuwih leutik salaku argumen. Urang eureun nalika argumen anu diliwatan nyaéta 0 atanapi 1.

kacindekan

Paling dipikaresep, anjeun geus encountered salah sahiji pancén ieu lamun geus diwawancara pikeun frontend atawa pakasaban pamekar JavaScript (utamana lamun éta di tingkat SMP). Tapi upami anjeun teu acan mendakan aranjeunna, aranjeunna tiasa mangpaat di hareup - sahenteuna pikeun pangwangunan umum.

Skillbox nyarankeun:

sumber: www.habr.com

Tambahkeun komentar