5 travay tipik entèvyou JavaScript: analiz ak solisyon

5 travay tipik entèvyou JavaScript: analiz ak solisyon

Soti nan tradiktè a: pibliye yon atik pou ou Maria Antonietta Perna, ki pale sou travay JavaScript komen, pi souvan yo ofri aplikan devlopè yo pandan entèvyou yo. Atik la pral itil, anvan tout bagay, pwogramasyon inisyasyon yo.

Entèvyou nan konpayi teknoloji yo te pale nan vil la depi lontan. Sa a pa ta dwe etone - avèk siksè pase yon entèvyou ba ou opòtinite pou jwenn yon bon travay. Men, sa a se pa tèlman senp, paske pwoblèm konplèks souvan bezwen rezoud.

Anplis, pi souvan, pifò nan travay sa yo pa gen rapò ak travay aplikan an pral fè, men yo toujou bezwen rezoud. Pafwa ou dwe fè li sou tablo a, san yo pa tcheke ak Google oswa nenpòt lòt sous. Wi, sitiyasyon an ap chanje piti piti, ak kèk konpayi yo abandone entèvyou sa yo, men anpil anplwayè toujou respekte tradisyon sa a. Atik sa a konsakre nan analiz de travay JavaScript tipik ki souvan itilize kòm travay pou moun k ap chèche travay.

Nou raple: pou tout lektè "Habr" - yon rabè nan 10 rubles lè w ap enskri nan nenpòt kou Skillbox lè l sèvi avèk kòd pwomosyon "Habr".

Skillbox rekòmande: Kou pratik "Mobile Developer PRO".

Bagay pwensipal lan se byen prepare pou entèvyou ou.

Wi, anvan nou kòmanse gade nan travay yo, an n gade nan kèk konsèy jeneral preparasyon entèvyou.

Bagay pwensipal lan se prepare davans. Teste kijan ou sonje algoritm ak estrikti done, epi amelyore konesans ou nan domèn ou pa twò abitye avèk yo. Gen anpil platfòm sou entènèt ki ka ede w prepare pou entèvyou. Nou konseye geeksforgeeks, Pramp, Interviewing.io и CodeSiyal.

Li vo aprann di desizyon an byen fò. Li rekòmande pou di aplikan yo sou sa ou fè, epi yo pa jis ekri sou tablo a (oswa tape kòd nan òdinatè a, tou an silans). Nan fason sa a, si ou fè yon erè nan kòd la, men solisyon an jeneralman kòrèk, ou ka ogmante chans ou nan siksè.

Ou bezwen konprann pwoblèm nan anvan ou kòmanse rezoud li. Nan kèk ka, ou ka konprann yon travay supèrfisyèl ak Lè sa a, ale nan move chemen an. Li ka vo poze kèk kesyon klarifye bay entèvyou a.

Ou bezwen pratike ekri kòd alamen, pa sou yon PC. Sa rive ke pandan entèvyou yo bay aplikan an yon makè ak yon tablo blan, kote pa gen okenn sijesyon oswa fòma otomatik. Lè w ap chèche yon solisyon, li vo ekri kòd ou sou yon moso papye oswa dirèkteman sou tablo a. Si ou kenbe tout bagay nan tèt ou, ou ta ka bliye yon bagay enpòtan.

Travay modèl nan JavaScript

Gen kèk nan travay sa yo pwobableman deja abitye pou ou. Ou te swa te gen entèvyou kote ou te oblije rezoud yon bagay ki sanble, oswa pratike sou yo pandan y ap aprann JavaScript. Oke, kounye a li lè yo rezoud yo ankò, epi ak yon eksplikasyon detaye sou pwosesis la.

Palindrom

Yon palindrom se yon mo, fraz oswa yon sekans karaktè ke yo li egzakteman menm jan tou de nan direksyon nòmal la ak nan direksyon opoze a. Pou egzanp, "Anna" se yon palindrom, men "tab" ak "Jan" pa.

Rasanbleman

Bay yon fisèl; ou bezwen ekri yon fonksyon ki pèmèt ou retounen vre si fisèl la se yon palindrom, ak fo si se pa. Nan ka sa a, ou bezwen pran an kont espas ak mak ponktiyasyon.

palindrom('racecar') === vre
palindrom('tab') === fo

Ann analize travay la

Lide prensipal la isit la se ranvèse fisèl la. Si fisèl "ranvèse" a konplètman idantik ak orijinal la, Lè sa a, nou te resevwa yon palindrom ak fonksyon an ta dwe retounen vre. Si ou pa, fo.

desizyon

Men kòd ki rezoud palindrom la.

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

Premye etap la se konvèti karaktè yo nan fisèl la antre nan miniskil. Sa a se yon garanti ke pwogram nan pral konpare karaktè yo tèt yo, epi yo pa ka oswa nenpòt lòt bagay.

Dezyèm etap la se ranvèse liy lan. Sa a se pa difisil fè: ou bezwen konvèti li nan yon etalaj lè l sèvi avèk metòd la .split () (Bibliyotèk String). Lè sa a, nou ranvèse etalaj la lè l sèvi avèk .reverse () (Bibliyotèk etalaj). Dènye etap la se konvèti etalaj la ranvèse nan yon fisèl lè l sèvi avèk .join () (Bibliyotèk Array).

Koulye a, tout sa ou bezwen fè se konpare "ranvèse" fisèl la ak fisèl orijinal la, retounen rezilta a vre oswa fo.

FizzBuzz

Youn nan travay ki pi popilè nan entèvyou.

Rasanbleman

Ou bezwen ekri yon fonksyon ki enprime nimewo ki soti nan 1 rive n nan konsole a, kote n se yon nonb antye ki fonksyone pran kòm yon paramèt, ak kondisyon sa yo:

  • pwodiksyon fizz olye de miltip 3;
  • pwodiksyon buzz olye de nimewo ki se miltip 5;
  • pwodiksyon fizzbuzz olye de nimewo ki se miltip de 3 ak 5.

Egzanp

Fizzbuzz (5)

Rezilta

// 1
// 2
// fizz
// 4
//buz

Ann analize travay la

Bagay pwensipal lan isit la se yon fason yo jwenn miltip lè l sèvi avèk JavaScript. Li ka aplike lè l sèvi avèk operatè modil la oswa rès la - %, ki pèmèt ou montre rès la lè divize de nimewo. Si rès la se 0, sa vle di premye nimewo a se yon miltip dezyèm lan.

12% 5 // 2 -> 12 se pa yon miltip 5
12% 3 // 0 -> 12 se miltip de 3

Kidonk, si ou divize 12 pa 5, ou jwenn 2 ak rès 2. Si ou divize 12 pa 3, ou jwenn 4 ak yon rès 0. Nan premye ka a, 12 pa yon miltip 5, nan dezyèm lan. , 12 se yon miltip 3.

desizyon

Solisyon pi bon an ta dwe kòd sa a:

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

Fonksyon an fè chèk ki nesesè yo lè l sèvi avèk deklarasyon kondisyonèl epi li pwodui rezilta itilizatè a mande yo. Nan pwoblèm nan, li vo peye atansyon sou lòd la nan deklarasyon si...lòt la: kòmanse ak yon kondisyon doub (&&) epi fini ak ka a kote nimewo miltip pa t 'kapab jwenn. Kòm yon rezilta, nou kouvri tout opsyon.

Anagram

Sa a se non yon mo ki gen tout lèt yon lòt mo nan menm nimewo a, men nan yon lòt lòd.

Rasanbleman

Nou bezwen ekri yon fonksyon ki tcheke si de fisèl yo se anagram, ak ka a pa gen pwoblèm. Se sèlman karaktè yo konte; espas oswa mak ponktiyasyon yo pa pran an kont.

anagram('chèche', 'Zanmi') —> vre
anagram('alo', 'bye') —> fo

Ann analize travay la

Bagay ki enpòtan pou konsidere isit la se ke ou bezwen tcheke chak lèt ​​nan de liy antre yo ak nimewo yo nan chak liy.

chèche —> f: 1 zanmi —> f: 1
mwen: 1 r: 1
n: 1 mwen: 1
d: 1 e: 1
e: 1 n: 1
r: 1 d: 1

Pou estoke done anagram, ou ta dwe chwazi yon estrikti tankou yon objè JavaScript literal. Kle a nan ka sa a se karaktè nan lèt la, valè a se kantite repetisyon li yo nan liy aktyèl la.

Gen lòt kondisyon:

  • Ou bezwen asire w ke ka a nan lèt pa pran an kont lè w konpare. Nou tou senpleman konvèti tou de fisèl nan pi ba oswa majiskil.
  • Nou ekskli tout karaktè ki pa nan konparezon an. Pi bon pou travay avèk ekspresyon regilye.

desizyon

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

Peye atansyon sou itilizasyon an Object.keys() nan snippet ki anwo a. Metòd sa a retounen yon etalaj ki gen non oswa kle nan menm lòd yo parèt nan objè a. Nan ka sa a etalaj la pral tankou sa a:

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

Nan fason sa a nou jwenn pwopriyete yo nan objè a san yo pa bezwen fè yon bouk esansyèl. Nan yon pwoblèm, ou ka itilize metòd sa a ak pwopriyete a .length pou tcheke si tou de fisèl yo gen menm kantite karaktè - sa a se yon karakteristik enpòtan nan anagram.

Chèche vwayèl

Yon travay jistis senp ki souvan vini nan entèvyou.

Rasanbleman

Ou bezwen ekri yon fonksyon ki pran yon fisèl kòm yon agiman epi ki retounen kantite vwayèl ki genyen nan fisèl la.
Vwayèl yo se "a", "e", "i", "o", "u".

Egzanp:

findVowels('alo') // —> 2
findVowels('poukisa') // —> 0

desizyon

Men opsyon ki pi senp la:

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
}

Li enpòtan pou peye atansyon sou itilizasyon metòd .includes(). Li disponib pou tou de strings ak etalaj. Li ta dwe itilize pou detèmine si yon etalaj gen yon sèten valè. Metòd sa a retounen vre si etalaj la gen valè espesifye a, ak fo si li pa genyen.

Gen yon solisyon ki pi kout nan pwoblèm nan:

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

Sa a itilize metòd .match(), ki pèmèt ou aplike yon rechèch efikas. Si yo jwenn yon ekspresyon regilye kòm yon agiman metòd andedan fisèl espesifye a, Lè sa a, valè retounen a se yon etalaj de karaktè matche. Oke, si pa gen okenn alimèt, Lè sa a, .match() retounen nil.

Fibonacci

Yon travay klasik ki ka jwenn nan entèvyou nan divès nivo. Li vo sonje ke sekans Fibonacci a se yon seri nimewo kote chak youn apre yo se sòm de anvan yo. Se konsa, premye dis nimewo yo sanble sa a: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Rasanbleman

Ou bezwen ekri yon fonksyon ki retounen dosye nyèm nan yon sekans sèten, ak n se nimewo a ke yo pase kòm yon agiman nan fonksyon an.

Fibonacci(3) // —> 2

Travay sa a enplike nan mache nan yon bouk kantite fwa ki espesifye nan agiman an, retounen valè a nan pozisyon ki apwopriye a. Fason sa a pou poze pwoblèm nan mande pou itilize bouk. Si ou itilize rekouvèsyon olye de sa, li ka tanpri entèvyou a epi ba ou kèk pwen anplis.

desizyon

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

Nan etalaj rezilta yo, de premye nimewo yo genyen nan seri a paske chak antre nan sekans lan se sòm de nimewo anvan yo. Nan kòmansman an menm pa gen de nimewo ki ka pran pou jwenn nimewo kap vini an, kidonk bouk la pa ka jenere yo otomatikman. Men, jan nou konnen, de premye nimewo yo toujou 0 ak 1. Se poutèt sa, ou ka inisyalize etalaj rezilta yo manyèlman.

Kòm pou repetisyon, tout bagay se pi senp ak pi konplike an menm tan an:

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

Nou kontinye rele Fibonacci(), pase nimewo pi piti ak pi piti kòm agiman. Nou sispann lè agiman pase a se 0 oswa 1.

Sòti

Gen plis chans, ou te deja rankontre nenpòt nan travay sa yo si yo te entèvyouve w pou yon travay entèfas oswa JavaScript (sitou si li se nan nivo jinyò). Men, si ou pa te rankontre yo, yo ka itil nan lavni an - omwen pou devlopman jeneral.

Skillbox rekòmande:

Sous: www.habr.com

Add nouvo kòmantè