5 kompiti tipiċi ta' intervista JavaScript: analiżi u soluzzjonijiet

5 kompiti tipiċi ta' intervista JavaScript: analiżi u soluzzjonijiet

Mit-traduttur: ippubblikat artiklu għalik Maria Antonietta Perna, li titkellem dwar kompiti komuni JavaScript, ħafna drabi offruti lill-applikanti tal-iżviluppaturi waqt l-intervisti. L-artikolu se jkun utli, l-ewwelnett, għal programmaturi novizzi.

L-intervisti f'kumpaniji tat-teknoloġija ilhom li jitkellmu fil-belt. Dan m'għandux ikun sorprendenti - jekk tgħaddi b'suċċess intervista jagħtik l-opportunità li tikseb impjieg tajjeb. Iżda dan mhux daqshekk sempliċi, peress li spiss jeħtieġ li jiġu solvuti problemi kumplessi.

Barra minn hekk, ħafna drabi, ħafna minn dawn il-kompiti mhumiex relatati max-xogħol li l-applikant se jwettaq, iżda xorta jridu jiġu solvuti. Xi drabi trid tagħmel dan fuq il-bord, mingħajr ma tiċċekkja ma 'Google jew kwalunkwe sors ieħor. Iva, is-sitwazzjoni qed tinbidel gradwalment, u xi kumpaniji qed jabbandunaw tali intervisti, iżda ħafna min iħaddem għadu jaderixxi ma 'din it-tradizzjoni. Dan l-artikolu huwa ddedikat għall-analiżi tal-kompiti JavaScript tipiċi li spiss jintużaw bħala kompiti għal dawk li qed ifittxu xogħol.

Infakkrukom: għall-qarrejja kollha ta '"Habr" - skont ta' 10 rublu meta tirreġistra fi kwalunkwe kors ta 'Skillbox billi tuża l-kodiċi promozzjonali "Habr".

Skillbox jirrakkomanda: Kors prattiku "Mobile Developer PRO".

Il-ħaġa prinċipali hija li tipprepara sewwa għall-intervista tiegħek.

Iva, qabel ma nibdew inħarsu lejn il-kompiti, ejja nħarsu lejn xi suġġerimenti ġenerali għat-tħejjija tal-intervisti.

Il-ħaġa prinċipali hija li tipprepara minn qabel. Ittestja kemm tiftakar l-algoritmi u l-istrutturi tad-dejta, u ttejjeb l-għarfien tiegħek f'oqsma li m'intix familjari wisq magħhom. Hemm ħafna pjattaformi online li jistgħu jgħinuk tipprepara għall-intervisti. Nagħtu parir geeksforgeeks, Pramp, Interviewing.io и KodiċiSinjal.

Ta’ min jitgħallem ngħid id-deċiżjoni b’leħen għoli. Huwa rakkomandabbli li tgħid lill-applikanti dwar dak li tagħmel, u mhux biss tikteb fuq il-bord (jew ittajpja kodiċi fil-kompjuter, ukoll fis-skiet). Dan il-mod, jekk inti tagħmel żball fil-kodiċi, iżda s-soluzzjoni hija ġeneralment korretta, inti tista 'żżid iċ-ċansijiet tiegħek ta' suċċess.

Trid tifhem il-problema qabel tibda ssolviha. F'xi każijiet, tista 'tifhem biċċa xogħol superfiċjalment u mbagħad tmur fit-triq ħażina. Jista 'jkun ta' min jistaqsi ftit mistoqsijiet ta 'kjarifika lill-intervistatur.

Trid tipprattika l-kitba tal-kodiċi bl-idejn, mhux fuq PC. Jiġri li waqt l-intervisti l-applikant jingħata marker u whiteboard, fejn ma jkunx hemm ħjiel jew ifformattjar awtomatiku. Meta tfittex soluzzjoni, ta 'min tikteb il-kodiċi tiegħek fuq biċċa karta jew direttament fuq il-bord. Jekk iżżomm kollox f’rasek, tista’ tinsa xi ħaġa importanti.

Ħidmiet ta' mudell f'JavaScript

Xi wħud minn dawn il-kompiti probabbilment huma diġà familjari għalik. Int jew kellek intervisti fejn kellek issolvi xi ħaġa simili, jew ipprattikajt fuqhom waqt li tgħallem JavaScript. Ukoll, issa wasal iż-żmien li ssolvihom mill-ġdid, u bi spjegazzjoni dettaljata tal-proċess.

Palindromu

Palindromu huwa kelma, sentenza jew sekwenza ta’ karattri li tinqara eżattament l-istess kemm fid-direzzjoni tas-soltu kif ukoll fid-direzzjoni opposta. Pereżempju, "Anna" hija palindromu, iżda "mejda" u "John" mhumiex.

Twaqqif

Mogħtija spaga; trid tikteb funzjoni li tippermettilek li tirritorna vera jekk is-sekwenza hija palindromu, u falza jekk le. F'dan il-każ, trid tqis l-ispazji u l-marki tal-punteġġjatura.

palindrome('racecar') === veru
palindrome('tabella') === falza

Ejja nanalizzaw il-kompitu

L-idea prinċipali hawnhekk hija li ireġġa' lura s-sekwenza. Jekk is-sekwenza "reverse" hija kompletament identika għal dik oriġinali, allura rċevejna palindromu u l-funzjoni għandha tirritorna vera. Jekk le, falza.

deċiżjoni

Hawn hu l-kodiċi li jsolvi l-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('')
}

L-ewwel pass huwa li tikkonverti l-karattri fis-sekwenza tad-dħul f'ittri żgħar. Din hija garanzija li l-programm se jqabbel il-karattri nfushom, u mhux każ jew xi ħaġa oħra.

It-tieni pass huwa li taqleb il-linja. Dan mhux diffiċli li tagħmel: għandek bżonn tikkonvertih f'firxa billi tuża l-metodu .split() (Librerija String). Imbagħad inreġġgħu lura l-array billi tuża .reverse() (Librerija Array). L-aħħar pass huwa li tikkonverti l-firxa tar-reverse għal string billi tuża .join() (Librerija Array).

Issa kull ma trid tagħmel hu li tqabbel is-sekwenza "reverse" mal-sekwenza oriġinali, u tirritorna r-riżultat veru jew falz.

FizzBuzz

Wieħed mill-aktar kompiti popolari fl-intervisti.

Twaqqif

Ikollok bżonn tikteb funzjoni li tipprintja numri minn 1 sa n fuq il-console, fejn n huwa numru sħiħ li l-funzjoni tieħu bħala parametru, bil-kundizzjonijiet li ġejjin:

  • output fizz minflok multipli ta '3;
  • output buzz minflok numri li huma multipli ta '5;
  • output fizzbuzz minflok numri li huma multipli kemm ta’ 3 kif ukoll ta’ 5.

Eżempju

Fizzbuzz(5)

Riżultat

// 1
// 2
// fizz
// 4
//buzz

Ejja nanalizzaw il-kompitu

Il-ħaġa prinċipali hawnhekk hija mod kif issib multipli billi tuża JavaScript. Jista 'jiġi implimentat bl-użu tal-operatur tal-modulu jew il-bqija - %, li jippermettilek turi l-bqija meta taqsam żewġ numri. Jekk il-bqija huwa 0, dan ifisser li l-ewwel numru huwa multiplu tat-tieni.

12% 5 // 2 -> 12 mhuwiex multiplu ta' 5
12% 3 // 0 -> 12 huwa multiplu ta' 3

Allura, jekk taqsam 12 b'5, ikollok 2 b'bqija ta' 2. Jekk taqsam 12 bi 3, ikollok 4 b'bqija ta '0. Fl-ewwel każ, 12 mhuwiex multiplu ta' 5, fit-tieni. , 12 huwa multiplu ta' 3.

deċiżjoni

L-aħjar soluzzjoni tkun il-kodiċi li ġej:

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

Il-funzjoni twettaq il-kontrolli meħtieġa billi tuża dikjarazzjonijiet kundizzjonali u tipproduċi r-riżultat meħtieġ mill-utent. Fil-problema, ta 'min joqgħod attent għall-ordni tad-dikjarazzjonijiet if... else: ibda b'kundizzjoni doppja (&&) u tispiċċa bil-każ fejn ma setgħux jinstabu numri multipli. Bħala riżultat, aħna nkopru l-għażliet kollha.

Anagramma

Dan huwa l-isem għal kelma li fiha l-ittri kollha ta 'kelma oħra fl-istess numru, iżda f'ordni differenti.

Twaqqif

Għandna bżonn niktbu funzjoni li tivverifika jekk żewġ kordi humiex anagrammi, u l-każ ma jimpurtax. Il-karattri biss jingħaddu; spazji jew marki tal-punteġġjatura mhumiex ikkunsidrati.

anagramma('finder', 'Ħabib') —> veru
anagramma('hello', 'bye') —> falza

Ejja nanalizzaw il-kompitu

L-importanti li għandek tikkonsidra hawnhekk hija li trid tiċċekkja kull ittra fiż-żewġ linji ta' input u n-numru tagħhom f'kull linja.

finder —> f: 1 ħabib —> f: 1
i: 1 r: 1
n: 1 i: 1
d: 1 e: 1
e: 1 n: 1
r: 1 d: 1

Biex taħżen id-dejta tal-anagramma, għandek tagħżel struttura bħal oġġett JavaScript litterali. Iċ-ċavetta f'dan il-każ hija l-karattru tal-ittra, il-valur huwa n-numru tar-repetizzjonijiet tagħha fil-linja kurrenti.

Hemm kundizzjonijiet oħra:

  • Trid tiżgura li l-każ tal-ittri ma jitqiesx meta tqabbel. Aħna sempliċiment nikkonvertu ż-żewġ kordi f'ittri żgħar jew kbar.
  • Aħna neskludu n-non-karattri kollha mit-tqabbil. L-aħjar biex taħdem magħhom espressjonijiet regolari.

deċiżjoni

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

Oqgħod attent għall-użu Object.keys() fis-snippet hawn fuq. Dan il-metodu jirritorna firxa li fiha ismijiet jew ċwievet fl-istess ordni li jidhru fl-oġġett. F'dan il-każ l-array se jkun bħal dan:

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

B'dan il-mod inġibu l-proprjetajiet tal-oġġett mingħajr ma jkollna nagħmlu linja bl-ingrossa. Fi problema, tista 'tuża dan il-metodu bil-proprjetà .length biex tivverifika jekk iż-żewġ kordi għandhomx l-istess numru ta' karattri - din hija karatteristika importanti tal-anagrammi.

Fittex vokali

Kompitu pjuttost sempliċi li ħafna drabi joħroġ fl-intervisti.

Twaqqif

Ikollok bżonn tikteb funzjoni li tieħu sekwenza bħala argument u tirritorna n-numru ta 'vokali li jinsabu fis-sekwenza.
Il-vokali huma “a”, “e”, “i”, “o”, “u”.

Eżempju:

findVowels('hello') // —> 2
findVowels('għaliex') // —> 0

deċiżjoni

Hawn l-iktar għażla sempliċi:

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
}

Huwa importanti li tingħata attenzjoni għall-użu tal-metodu .includes(). Huwa disponibbli kemm għall-kordi kif ukoll għall-arrays. Għandu jintuża biex jiddetermina jekk array fihx ċertu valur. Dan il-metodu jirritorna vera jekk il-firxa fiha l-valur speċifikat, u falza jekk le.

Hemm soluzzjoni iqsar għall-problema:

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

Dan juża l-metodu .match(), li jippermettilek li timplimenta tfittxija effiċjenti. Jekk espressjoni regolari bħala argument ta' metodu tinstab ġewwa s-sekwenza speċifikata, allura l-valur tar-ritorn huwa firxa ta' karattri li jaqblu. Ukoll, jekk ma jkunx hemm logħbiet, allura .match() jirritorna null.

fibonacci

Kompitu klassiku li wieħed jista’ jsib f’intervisti f’diversi livelli. Ta’ min ifakkar li s-sekwenza ta’ Fibonacci hija serje ta’ numri fejn kull wieħed sussegwenti huwa s-somma tat-tnejn ta’ qabel. Allura, l-ewwel għaxar numri jidhru hekk: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Twaqqif

Ikollok bżonn tikteb funzjoni li tirritorna r-rekord nth f'ċerta sekwenza, b'n ikun in-numru li jiġi mgħoddi bħala argument għall-funzjoni.

fibonacci(3) // —> 2

Dan il-kompitu jinvolvi l-mixi permezz ta 'linja n-numru ta' drabi speċifikat fl-argument, ir-ritorn tal-valur fil-pożizzjoni xierqa. Dan il-mod kif toħloq il-problema jeħtieġ l-użu ta 'linji. Jekk tuża r-rikors minflok, tista' togħġob lill-intervistatur u tagħtik ftit punti żejda.

deċiżjoni

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

Fil-firxa tar-riżultati, l-ewwel żewġ numri jinsabu fis-serje minħabba li kull entrata fis-sekwenza hija s-somma taż-żewġ numri preċedenti. Fil-bidu nett m'hemm l-ebda żewġ numri li jistgħu jittieħdu biex jiksbu n-numru li jmiss, għalhekk il-linja ma tistax tiġġenerahom awtomatikament. Iżda, kif nafu, l-ewwel żewġ numri huma dejjem 0 u 1. Għalhekk, tista 'iniżżalizza l-firxa tar-riżultati manwalment.

Fir-rigward tar-rikors, kollox huwa aktar sempliċi u aktar ikkumplikat fl-istess ħin:

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

Nibqgħu nsejħu lil fibonacci(), ngħaddu numri dejjem iżgħar bħala argumenti. Nieqaf meta l-argument mgħoddi jkun 0 jew 1.

Output

X'aktarx, diġà ltqajt ma' xi wieħed minn dawn il-kompiti jekk ġejt intervistat għal xogħol ta' iżviluppatur frontend jew JavaScript (speċjalment jekk ikun fil-livell junior). Imma jekk ma ltqajtx magħhom, jistgħu jkunu utli fil-futur - għall-inqas għall-iżvilupp ġenerali.

Skillbox jirrakkomanda:

Sors: www.habr.com

Żid kumment