5 dæmigerð JavaScript viðtalsverkefni: greining og lausnir

5 dæmigerð JavaScript viðtalsverkefni: greining og lausnir

Frá þýðanda: birt grein fyrir þig Maria Antonietta Perna, sem talar um algeng JavaScript verkefni, oftast boðið umsækjendum þróunaraðila í viðtölum. Greinin mun fyrst og fremst nýtast byrjendum forritara.

Viðtöl hjá tæknifyrirtækjum hafa lengi verið í umræðunni. Þetta ætti ekki að koma á óvart - að standast viðtal með góðum árangri gefur þér tækifæri til að fá góða vinnu. En þetta er ekki svo einfalt, þar sem oft þarf að leysa flókin vandamál.

Þar að auki eru flest þessi verkefni ekki tengd vinnunni sem umsækjandi mun sinna, en samt þarf að leysa þau. Stundum þarftu að gera það á borðinu, án þess að athuga með Google eða öðrum heimildum. Já, ástandið er smám saman að breytast og sum fyrirtæki hætta við slík viðtöl, en margir vinnuveitendur halda samt í þessa hefð. Þessi grein er helguð greiningu á dæmigerðum JavaScript verkefnum sem eru oft notuð sem verkefni fyrir atvinnuleitendur.

Við minnum á: fyrir alla Habr lesendur - 10 rúblur afsláttur þegar þú skráir þig á hvaða Skillbox námskeið sem er með því að nota Habr kynningarkóðann.

Skillbox mælir með: Verklegt námskeið "Mobile Developer PRO".

Aðalatriðið er að undirbúa þig vel fyrir viðtalið þitt.

Já, áður en við byrjum að skoða verkefnin skulum við skoða nokkur almenn viðtalsundirbúningsráð.

Aðalatriðið er að undirbúa sig fyrirfram. Prófaðu hversu vel þú manst reiknirit og gagnauppbyggingu og bættu þekkingu þína á sviðum sem þú þekkir ekki of vel. Það eru margir vettvangar á netinu sem geta hjálpað þér að undirbúa þig fyrir viðtöl. Við ráðleggjum geeksforgeeks, Barnavagn, Interviewing.io и CodeSignal.

Það er þess virði að læra að segja ákvörðunina upphátt. Það er ráðlegt að segja umsækjendum frá því sem þú gerir, en ekki bara skrifa á töfluna (eða slá kóða inn í tölvuna, líka hljóðlaust). Þannig, ef þú gerir mistök í kóðanum, en lausnin er almennt rétt, geturðu aukið líkurnar á árangri.

Þú þarft að skilja vandamálið áður en þú byrjar að leysa hann. Í sumum tilfellum gætirðu skilið verkefni yfirborðslega og farið síðan á rangan hátt. Það gæti verið þess virði að spyrja viðmælanda nokkurra skýringarspurninga.

Þú þarft að æfa þig í að skrifa kóða í höndunum, ekki á tölvu. Það kemur fyrir að í viðtölum er umsækjandi gefinn merkimiði og töflu þar sem engar vísbendingar eru eða sjálfvirkt snið. Þegar leitað er að lausn er það þess virði að skrifa niður kóðann þinn á blað eða beint á töfluna. Ef þú heldur öllu í hausnum gætirðu gleymt einhverju mikilvægu.

Sniðmátsverkefni í JavaScript

Sum þessara verkefna eru sennilega þegar kunnugleg þér. Þú hefur annað hvort átt viðtöl þar sem þú þurftir að leysa eitthvað svipað, eða æft þig á þeim á meðan þú lærðir JavaScript. Jæja, nú er kominn tími til að leysa þau aftur, og með nákvæmri útskýringu á ferlinu.

Palindrome

Palindrome er orð, setning eða röð stafa sem er lesin nákvæmlega eins bæði í venjulega átt og í gagnstæða átt. Til dæmis, "Anna" er palindrome, en "borð" og "John" eru það ekki.

Sviðsetning

Gefinn strengur; þú þarft að skrifa fall sem gerir þér kleift að skila satt ef strengurinn er palindrome, og false ef ekki. Í þessu tilviki þarftu að taka tillit til bila og greinarmerkja.

palindrome('kappakstursbíll') === satt
palindrome('tafla') === rangt

Við skulum greina verkefnið

Meginhugmyndin hér er að snúa strengnum við. Ef „öfugur“ strengurinn er alveg eins og sá upphaflega, þá höfum við fengið palindrome og fallið ætti að skila satt. Ef ekki, rangt.

ákvörðun

Hér er kóðinn sem leysir 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('')
}

Fyrsta skrefið er að breyta stöfunum í inntaksstrengnum í lágstafi. Þetta er trygging fyrir því að forritið beri saman persónurnar sjálfar og ekki tilfelli eða neitt annað.

Annað skref er að snúa línunni við. Þetta er ekki erfitt að gera: þú þarft að breyta því í fylki með því að nota .split() aðferðina (String library). Síðan snúum við fylkinu við með því að nota .reverse() (Array library). Síðasta skrefið er að breyta öfugu fylki í streng með því að nota .join() (Array library).

Nú er allt sem þú þarft að gera er að bera saman „öfuga“ strenginn við upprunalega strenginn og skila niðurstöðunni sönn eða ósönn.

FizzBuzz

Eitt vinsælasta verkefnið í viðtölum.

Sviðsetning

Þú þarft að skrifa fall sem prentar tölur frá 1 til n á stjórnborðið, þar sem n er heil tala sem fallið tekur sem færibreytu, með eftirfarandi skilyrðum:

  • framleiðsla fizz í stað margfeldi af 3;
  • úttak suð í stað tölur sem eru margfeldi af 5;
  • fizzbuzz úttak í staðinn fyrir tölur sem eru margfeldi af bæði 3 og 5.

Dæmi

Fizzbuzz(5)

Niðurstaðan

// 1
// 2
// fús
// 4
//suð

Við skulum greina verkefnið

Aðalatriðið hér er leið til að finna margfeldi með JavaScript. Það er hægt að útfæra það með því að nota stuðulinn eða afganginn - %, sem gerir þér kleift að sýna afganginn þegar skipt er í tvær tölur. Ef afgangurinn er 0 þýðir það að fyrri talan er margfeldi hinnar.

12% 5 // 2 -> 12 er ekki margfeldi af 5
12% 3 // 0 -> 12 er margfeldi af 3

Þannig að ef þú deilir 12 með 5 færðu 2 með afganginum 2. Ef þú deilir 12 með 3 færðu 4 með afganginum 0. Í fyrra tilvikinu er 12 ekki margfeldi af 5, í því síðara , 12 er margfeldi af 3.

ákvörðun

Besta lausnin væri eftirfarandi kóð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)
    }
  }
}

Aðgerðin framkvæmir nauðsynlegar athuganir með því að nota skilyrtar yfirlýsingar og framleiðir niðurstöðuna sem notandinn krefst. Í dæminu er rétt að gefa gaum að röðinni á if...else setningunum: Byrjaðu á tvöföldu skilyrði (&&) og endaðu á því tilviki þar sem margar tölur fundust ekki. Fyrir vikið náum við yfir alla valkosti.

Anagram

Þetta er nafn á orði sem inniheldur alla stafi annars orðs í sömu tölu, en í annarri röð.

Sviðsetning

Við þurfum að skrifa fall sem athugar hvort tveir strengir séu anagram og málið skiptir ekki máli. Aðeins stafir eru taldir; bil eða greinarmerki eru ekki tekin með í reikninginn.

anagram('finder', 'Friend') —> satt
anagram('halló', 'bless') —> rangt

Við skulum greina verkefnið

Það sem er mikilvægt að hafa í huga hér er að þú þarft að athuga hvern staf í innsláttarlínunum tveimur og númer þeirra í hverri línu.

finnandi —> f: 1 vinur —> f: 1
ég: 1 r: 1
n: 1 í: 1
d: 1 e: 1
e: 1 n: 1
r: 1 d: 1

Til að geyma anagram gögn, ættir þú að velja uppbyggingu eins og JavaScript hlut bókstaflega. Lykillinn í þessu tilfelli er eðli bréfsins, gildið er fjöldi endurtekningar hans í núverandi línu.

Það eru önnur skilyrði:

  • Gæta þarf þess að ekki sé tekið tillit til stafsetningar þegar borið er saman. Við breytum einfaldlega báðum strengjunum í lágstafi eða hástafi.
  • Við útilokum alla ekki stafi frá samanburðinum. Best að vinna með regluleg tjáning.

ákvörðun

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

Gefðu gaum að notkuninni Object.keys() í brotinu hér að ofan. Þessi aðferð skilar fylki sem inniheldur nöfn eða lykla í sömu röð og þeir birtast í hlutnum. Í þessu tilviki verður fylkið svona:

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

Þannig fáum við eiginleika hlutarins án þess að þurfa að gera bulk lykkju. Í vandamáli geturðu notað þessa aðferð með eiginleikanum .length til að athuga hvort báðir strengirnir séu með sama fjölda stafa - þetta er mikilvægur eiginleiki anagrams.

Leitaðu að sérhljóðum

Nokkuð einfalt verkefni sem kemur oft upp í viðtölum.

Sviðsetning

Þú þarft að skrifa fall sem tekur streng sem rök og skilar fjölda sérhljóða sem eru í strengnum.
Sérhljóðin eru „a“, „e“, „i“, „o“, „u“.

Dæmi:

findVwels('halló') // —> 2
findVwels('af hverju') // —> 0

ákvörðun

Hér er einfaldasti kosturinn:

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
}

Mikilvægt er að huga að notkun .includes() aðferðarinnar. Það er fáanlegt fyrir bæði strengi og fylki. Það ætti að nota til að ákvarða hvort fylki inniheldur ákveðið gildi. Þessi aðferð skilar satt ef fylkið inniheldur tilgreint gildi og false ef það gerir það ekki.

Það er styttri lausn á vandanum:

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

Þetta notar .match() aðferðina, sem gerir þér kleift að útfæra skilvirka leit. Ef venjuleg segð sem aðferðarrök finnst innan tilgreinds strengs, þá er skilagildið fylki samsvarandi stafa. Jæja, ef það eru engar samsvörun, þá skilar .match() núll.

fibonacci

Klassískt verkefni sem er að finna í viðtölum á ýmsum stigum. Það er þess virði að minna á að Fibonacci röðin er röð talna þar sem hver á eftir er summan af tveimur fyrri. Svo, fyrstu tíu tölurnar líta svona út: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Sviðsetning

Þú þarft að skrifa fall sem skilar n. færslu í ákveðinni röð, þar sem n er talan sem er send sem rök til fallsins.

fibonacci(3) // —> 2

Þetta verkefni felur í sér að ganga í gegnum lykkju þann fjölda skipta sem tilgreindur er í röksemdafærslunni og skila gildinu á viðeigandi stað. Þessi leið til að setja fram vandamálið krefst þess að nota lykkjur. Ef þú notar endurtekningu í staðinn gæti það þóknast viðmælandanum og gefið þér nokkur aukastig.

ákvörðun

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

Í niðurstöðufylkinu eru fyrstu tvær tölurnar í röðinni vegna þess að hver færsla í röðinni er summan af tveimur fyrri tölum. Strax í upphafi eru engar tvær tölur sem hægt er að taka til að fá næstu tölu, þannig að lykkjan getur ekki búið þær til sjálfkrafa. En eins og við vitum eru fyrstu tvær tölurnar alltaf 0 og 1. Þess vegna er hægt að frumstilla niðurstöður fylki handvirkt.

Hvað endurtekningar varðar, þá er allt einfaldara og flóknara á sama tíma:

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

Við höldum áfram að kalla fibonacci() og sendum smærri og minni tölur sem rök. Við hættum þegar viðurkennd rök eru 0 eða 1.

Output

Líklegast hefur þú nú þegar lent í einhverju af þessum verkefnum ef þú hefur verið tekinn viðtal fyrir framenda- eða JavaScript þróunarstarf (sérstaklega ef það er á yngra stigi). En ef þú hefur ekki rekist á þá gætu þeir verið gagnlegir í framtíðinni - að minnsta kosti fyrir almenna þróun.

Skillbox mælir með:

Heimild: www.habr.com

Bæta við athugasemd