5 Problemi cumuni d'entrevista JavaScript: Analisi è Soluzioni

5 Problemi cumuni d'entrevista JavaScript: Analisi è Soluzioni

Da u traduttore: publicatu un articulu per voi Maria Antonietta Perna, chì parla di i travaglii tipici JavaScript, u più spessu offertu à i candidati-sviluppatori à l'entrevista. L'articulu serà utile, prima di tuttu, per i programatori novi.

L'entrevista in l'imprese tecnulugiche sò longu parlatu di a cità. Questu ùn hè micca surprisante - u successu cumpletu di l'entrevista permette di ottene un bonu travagliu. Ma questu ùn hè micca cusì faciule, perchè spessu hè necessariu di risolve i prublemi cumplessi.

Inoltre, a maiò spessu a maiò parte di sti travaglii ùn sò micca ligati à u travagliu chì u candidatu hà da esse realizatu, ma anu sempre bisognu di risolve. Calchì volta ci vole à fà nantu à u bordu, senza cuntrollà cù Google o qualsiasi altra fonte. Iè, a situazione hè cambiata gradualmente, è in certi cumpagnie ricusanu tali interviste, ma assai patroni anu sempre aderiscenu à sta tradizione. Questu articulu hè dedicatu à l'analisi di e attività tipiche JavaScript chì sò spessu usate cum'è attività per i candidati.

Ramintemu: per tutti i lettori di "Habr" - un scontu di 10 000 rubles quandu si iscrizzione in ogni cursu Skillbox cù u codice promozionale "Habr".

Skillbox consiglia: Corso praticu "Sviluppatore Mobile PRO".

A cosa principal hè di preparà currettamente per a vostra entrevista.

Iè, prima di cumincià à scumpressà i travaglii, fighjemu qualchi cunsiglii generali per a preparazione per una entrevista.

A cosa principal hè di preparà in anticipu. Verificate quantu ricurdate di l'algoritmi è e strutture di dati, è migliurà a vostra cunniscenza in e zone chì ùn sò micca assai familiarizati. Ci hè parechje piattaforme in linea per aiutà à preparà per l'entrevista. Avemu cunsigliatu geeksforgeeks, Pramp, Interviewing.io и Code Signal.

Vale a pena amparà à pronunzia a decisione à voce alta. Hè cunsigliatu di dì à i candidati ciò chì fate, è micca solu scrive nantu à a tavula (o scrive u codice in l'urdinatore, ancu in silenziu). Cusì, se fate un sbagliu in u codice, ma a suluzione hè in generale curretta, pudete aumentà e vostre chance di successu.

U prublema deve esse capitu prima chì a suluzione pò esse cuminciata. In certi casi, pudete capisce superficialmente u compitu è ​​poi andà in u percorsu sbagliatu. Puderia vale a pena dumandà uni pochi di dumande clarificanti à l'entrevistadore.

Avete bisognu di praticà a scrittura di codice a manu, micca in un PC. Succede chì durante l'entrevista, u candidatu riceve un marcatore è un tavulinu induve ùn ci sò micca richieste o furmatu automaticu. Quandu cercate una suluzione, scrivite u vostru codice nantu à un pezzu di carta o ghjustu nantu à a tavula. Se tenete tuttu in a vostra testa, pudete scurdà di qualcosa impurtante.

Template Tasks in JavaScript

Probabilmente site digià familiarizatu cù alcune di queste attività. Avete pigliatu interviste induve avete da risolve qualcosa simili, o praticate nantu à elli mentre amparate JavaScript. Ebbè, avà hè u tempu di risolviri di novu, è cù una spiegazione dettagliata di u prucessu.

Palindrome

Un palindromu hè una parolla, una frase o una sequenza di caratteri chì si leghje esattamente u listessu modu in a direzzione di solitu è ​​in a direzzione opposta. Per esempiu, "Anna" hè un palindromu, ma "table" è "John" ùn sò micca.

Fallazione

Data una stringa; avete bisognu di scrive una funzione chì vi permette di vultà veru se a stringa hè un palindromu, è falsu altrimenti. In questu casu, i spazii è i segni di puntuazione deve esse cunsideratu.

palindrome('racecar') === true
palindrome('tavula') === false

Analisi di u compitu

L'idea principale quì hè di flip the string backwards. Se a stringa "reverse" hè cumplettamente identica à l'uriginale, allora avemu un palindromu è a funzione deve vultà vera. Se no, falsu.

dicisioni

Eccu u codice chì permette di risolve u palindromu.

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

U primu passu hè di cunvertisce i caratteri di stringa di input in minuscule. Questu hè una guaranzia chì u prugramma paragunarà esattamente i caratteri stessi, è micca casu o qualcosa altru.

U sicondu passu hè u reversu di a linea. Questu hè faciule fà: avete bisognu di cunvertisce in un array cù u metudu .split () (Biblioteca di String). Dopu avemu invertitu l'array usendu .reverse () (Biblioteca Array). L'ultimu passu hè di cunvertisce l'array inversa à una stringa cù .join () (Biblioteca Array).

Avà tuttu ciò chì hè necessariu hè di paragunà a stringa "reverse" cù l'uriginale, rinviendu u risultatu veru o falsu.

fizzbuzz

Unu di l'entrevista di travagliu più populari.

Fallazione

Hè necessariu di scrive una funzione chì mostra numeri da 1 à n à a cunsola, induve n hè un interu chì a funzione piglia cum'è paràmetru, cù e seguenti cundizioni:

  • output fizz invece di multipli di 3;
  • buzz output invece di multipli di 5;
  • output fizzbuzz invece di multipli di 3 è 5.

Esempiu:

Fizzbuzz (5)

risultatu

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

Analisi di u compitu

A cosa principale quì hè a manera di truvà multiplici cù JavaScript. Pò esse implementatu cù l'operatore di modulu o u restu -%, chì permette di vede u restu quandu si divide dui numeri. Sè u restu hè 0, significa chì u primu numeru hè multiplu di u sicondu.

12% 5 // 2 -> 12 ùn hè micca multiplu di 5
12% 3 // 0 -> 12 hè multiplu di 3

Allora, si dividemu 12 per 5, avemu 2 cù un restu di 2. Se dividimu 12 per 3, allora avemu 4 cù un restu di 0. In u primu casu, 12 ùn hè micca un multiplu di 5, in u secondu, 12 hè un multiplu di 3.

dicisioni

A megliu suluzione seria u seguente codice:

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 funzione esegue i cuntrolli necessarii utilizendu dichjarazioni cundiziunali è pruduce u risultatu dumandatu da l'utilizatore. In u compitu, vale a pena attente à l'ordine di e dichjarazioni if... else: cuminciendu cù una doppia cundizione (&&) è finiscinu cù u casu quandu ùn si pudia truvà parechje numeri. In u risultatu, copremu tutte l'opzioni.

Anagramma

Questu hè u nome di una parolla chì cuntene tutte e lettere di una altra parolla in u stessu numeru, ma in un ordine sfarente.

Fallazione

Avemu bisognu di scrive una funzione chì verifica se duie corde sò anagrammi, è u casu di lettere ùn importa micca. Solu i caratteri contanu; i spazii o i segni di puntuazione ùn sò micca cunsiderati.

anagramma ('trovatore', 'Amicu') --> veru
anagramma ('ciao', 'ciao') --> false

Analisi di u compitu

Quì hè impurtante di cunsiderà chì hè necessariu di verificà ogni lettera in duie linee di input è u so numeru in ogni linea.

finder -> f: 1 amicu -> f: 1
i : 1 r : 1
n: 1 i: 1
d: 1 e: 1
e: 1 n: 1
r:1 d:1

Per almacenà dati anagrammi, duvete sceglie una struttura cum'è un litterale d'ughjettu JavaScript. A chjave in questu casu hè u caratteru di a lettera, u valore hè u numeru di ripetizioni in a linea attuale.

Ci sò ancu altre cundizioni:

  • Avete bisognu di assicurà chì u casu di lettere ùn hè micca cunsideratu quandu paragunate. Basta cunvertisce e duie corde in minuscule o maiuscule.
  • Escludemu tutti i non-caratteri da u paragone. U megliu per travaglià espressioni rigulari.

dicisioni

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

Attenti à l'usu Object.keys () in u snippet sopra. Stu metudu torna un array chì cuntene i nomi o chjavi in ​​u listessu ordine chì appariscenu in l'ughjettu. In questu casu, l'array serà cusì:

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

Questu modu avemu a pruprietà di l'ughjettu senza avè da fà un grande loop. In un compitu, pudete aduprà stu metudu cù a pruprietà .length - per verificà se e duie stringhe anu u listessu numeru di caratteri - questu hè una funzione impurtante di l'anagrammi.

Ricerca di vucali

Un compitu abbastanza simplice chì spessu si trova in l'entrevista.

Fallazione

Avete bisognu di scrive una funzione chì piglia una stringa cum'è argumentu è torna u numeru di vucali chì a stringa cuntene.
I vucali sò "a", "e", "i", "o", "u".

Esempiu:

findVowels('hello') // --> 2
findVowels('perchè') // --> 0

dicisioni

Eccu l'opzione più faciule:

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
}

Hè impurtante di attentu à l'usu di u metudu .includes(). Hè dispunibile sia per stringhe sia per array. Si deve esse usatu per sapè se un array cuntene un certu valore. Stu metudu torna true se u array cuntene u valore specificatu è false altrimenti.

Ci hè ancu una suluzione più corta à u prublema:

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

U metudu .match() hè utilizatu quì, chì permette di implementà una ricerca efficaci. Se una espressione regulare cum'è un argumentu di metudu si trova in a stringa specificata, allora u valore di ritornu hè un array di caratteri currispondenti. Ebbè, s'ellu ùn ci hè micca match, allora .match() torna null.

Fibonacci

Un compitu classicu chì pò esse riunitu à l'entrevista di diversi livelli. Hè vale a ricurdà chì a sequenza di Fibonacci hè una seria di numeri, induve ogni sussegwente hè a summa di i dui precedenti. Dunque, i primi deci numeri sò cusì: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Fallazione

Avete bisognu di scrive una funzione chì torna u nth record in una certa sequenza, è n hè un numeru chì hè passatu cum'è argumentu à a funzione.

Fibonacci (3) // --> 2

Stu compitu implica un looping à traversu u numeru di volte specificata in l'argumentu, rinviendu u valore à a pusizione adatta. Questa manera di stabilisce u prublema richiede l'usu di loops. Sè vo aduprate a ricursione invece, l'entrevistadore puderia piace è dà un pocu di punti extra.

dicisioni

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

In l'array di u risultatu, i primi dui numeri sò cuntenuti in una fila perchè ogni entrata in a sequenza hè custituita da a summa di i dui numeri precedenti. Ùn ci hè micca dui numeri à u principiu chì ponu esse pigliati per ottene u prossimu numeru, cusì u ciclu ùn pò micca generà automaticamente. Ma, cum'è sapemu, i primi dui numeri sò sempre 0 è 1. Per quessa, pudete inizializà manualmente l'array di risultati.

In quantu à a ricursione, tuttu hè più simplice è complicatu à u stessu tempu:

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

Continuemu à chjamà Fibonacci (), passendu in numeri sempre più chjuchi cum'è argumenti. Ci fermemu quandu l'argumentu passatu hè 0 o 1.

cunchiusioni

Hè assai prubabile, avete digià affruntatu qualcunu di sti travaglii se avete entrevista per un travagliu di sviluppatore di front-end o JavaScript (soprattuttu s'ellu hè un livellu junior). Ma s'ellu ùn avete micca scontru, ponu esse utile in u futuru - almenu per u sviluppu generale.

Skillbox consiglia:

Source: www.habr.com

Add a comment