5 Kasagaran nga Mga Problema sa Interbyu sa JavaScript: Pagtuki ug Solusyon

5 Kasagaran nga Mga Problema sa Interbyu sa JavaScript: Pagtuki ug Solusyon

Gikan sa tighubad: nagpatik ug artikulo para nimo Maria Antonietta Perna, nga naghisgot bahin sa kasagarang mga buluhaton sa JavaScript, kasagarang gitanyag sa mga aplikante-developer sa mga interbyu. Ang artikulo mahimong mapuslanon, una sa tanan, sa mga bag-ong programmer.

Ang mga interbyu sa mga kompanya sa teknolohiya dugay na nga gihisgutan sa lungsod. Dili kini katingad-an - ang malampuson nga pagkompleto sa interbyu nagpaposible nga makakuha usa ka maayong trabaho. Apan dili kini sayon, tungod kay kasagaran gikinahanglan ang pagsulbad sa mga komplikadong problema.

Dugang pa, kasagaran sa kadaghanan niini nga mga buluhaton wala'y kalabutan sa trabaho nga buhaton sa aplikante, apan kinahanglan pa kini nga masulbad. Usahay kinahanglan nimo nga buhaton kini sa pisara, nga wala magsusi sa Google o bisan unsang ubang gigikanan. Oo, ang kahimtang anam-anam nga nagbag-o, ug sa pipila ka mga kompanya sila nagdumili sa ingon nga mga interbyu, apan daghang mga amo ang nagsunod gihapon niini nga tradisyon. Kini nga artikulo gipahinungod sa pagtuki sa tipikal nga mga buluhaton sa JavaScript nga sagad gigamit isip mga buluhaton alang sa mga aplikante.

Gipahinumduman namon ikaw: alang sa tanan nga mga magbabasa sa "Habr" - usa ka diskwento sa 10 nga mga rubles kung nagpalista sa bisan unsang kurso sa Skillbox gamit ang code sa promosyon nga "Habr".

Girekomenda sa Skillbox: Praktikal nga kurso "Mobile Developer PRO".

Ang nag-unang butang mao ang pag-andam pag-ayo alang sa imong interbyu.

Oo, sa dili pa kita magsugod sa pagbungkag sa mga buluhaton, atong tan-awon ang pipila ka kinatibuk-ang mga tip sa pag-andam alang sa usa ka interbyu.

Ang nag-unang butang mao ang pag-andam daan. Susiha kung unsa ka maayo ang imong paghinumdom sa mga algorithm ug mga istruktura sa datos, ug pauswaga ang imong kahibalo sa mga lugar nga dili nimo pamilyar. Adunay daghang mga online nga plataporma nga makatabang kanimo sa pag-andam alang sa mga interbyu. Among gitambagan geeksforgeeks, Pramp, Interbyu.io и CodeSignal.

Angayan nga makat-on sa paglitok sa desisyon nga kusog. Mas maayo nga isulti sa mga aplikante kung unsa ang imong gibuhat, ug dili lang isulat sa pisara (o i-type ang code sa kompyuter, sa hilom usab). Busa, kung masayop ka sa code, apan ang solusyon sa kasagaran husto, mahimo nimong madugangan ang imong kahigayonan sa kalampusan.

Kinahanglang sabton ang problema sa dili pa masugdan ang solusyon. Sa pipila ka mga kaso, mahimo nimong masabtan sa taphaw ang buluhaton ug dayon moadto sa sayup nga dalan. Mahimong angayan nga mangutana sa pipila ka nagpatin-aw nga mga pangutana sa tig-interbyu.

Kinahanglan ka nga magpraktis sa pagsulat sa code pinaagi sa kamot, dili sa PC. Nahitabo nga sa mga interbyu ang aplikante gihatagan usa ka marka ug usa ka board diin wala’y mga pag-aghat o awtomatikong pag-format. Kon mangita og solusyon, isulat ang imong code sa usa ka piraso nga papel o diha mismo sa pisara. Kung ibutang nimo ang tanan sa imong ulo, makalimtan nimo ang usa ka butang nga hinungdanon.

Mga Buluhaton sa Template sa JavaScript

Tingali pamilyar ka na sa pipila niini nga mga buluhaton. Nagkuha ka og mga interbyu kung diin kinahanglan nimo nga sulbaron ang usa ka butang nga parehas, o nagpraktis niini samtang nagkat-on sa JavaScript. Aw, karon panahon na nga sulbaron sila pag-usab, ug uban ang detalyadong pagpatin-aw sa proseso.

Palindrome

Ang palindrome kay usa ka pulong, sentensiya o han-ay sa mga karakter nga nagbasa sa parehas nga paagi sa naandan nga direksyon ug sa atbang nga direksyon. Pananglitan, ang "Anna" usa ka palindrome, apan ang "lamesa" ug "John" dili.

Pagpadayon

Gihatagan ug pisi; kinahanglan nimo nga magsulat usa ka function nga nagtugot kanimo nga ibalik ang tinuod kung ang hilo usa ka palindrome, ug sayup kung dili. Sa kini nga kaso, ang mga luna ug mga marka sa punctuation kinahanglan nga tagdon.

palindrome('karera') === tinuod
palindrome('table') === bakak

Pagtuki sa buluhaton

Ang panguna nga ideya dinhi mao ang pag-flip sa hilo pabalik. Kung ang "reverse" string hingpit nga parehas sa orihinal, nan nakakuha kami usa ka palindrome ug ang function kinahanglan mobalik nga tinuod. Kung dili, bakak.

desisyon

Ania ang code nga nagtugot kanimo sa pagsulbad sa 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('')
}

Ang unang lakang mao ang pag-convert sa input string nga mga karakter ngadto sa lower case. Kini usa ka garantiya nga ang programa magtandi sa eksakto nga mga karakter mismo, ug dili kaso o uban pa.

Ang ikaduhang lakang mao ang reverse sa linya. Sayon ra kining buhaton: kinahanglan nimo nga i-convert kini ngadto sa array gamit ang .split() method (String library). Dayon atong balihon ang array gamit ang .reverse() (Array library). Ang katapusang lakang mao ang pag-convert sa reverse array ngadto sa string gamit ang .join() (Array library).

Karon ang tanan nga gikinahanglan mao ang pagtandi sa "reverse" string sa orihinal, pagbalik sa resulta tinuod o bakak.

fizzbuzz

Usa sa labing inila nga mga interbyu sa trabaho.

Pagpadayon

Gikinahanglan ang pagsulat sa usa ka function nga nagpakita sa mga numero gikan sa 1 ngadto sa n ngadto sa console, diin ang n usa ka integer nga gikuha sa function isip usa ka parameter, uban sa mosunod nga mga kondisyon:

  • output fizz imbes nga multiples sa 3;
  • buzz output imbes nga multiples sa 5;
  • fizzbuzz nga output imbes nga multiples sa 3 ug 5.

Pananglitan:

Fizzbuzz(5)

resulta

// 1
// 2
// lingaw
// 4
//buzz

Pagtuki sa buluhaton

Ang nag-unang butang dinhi mao ang paagi sa pagpangita sa mga multiple gamit ang JavaScript. Mahimo kini nga ipatuman gamit ang modulus operator o ang nahabilin -%, nga nagtugot kanimo sa pagpakita sa nahabilin kung gibahin ang duha ka numero. Kung ang nahabilin mao ang 0, kini nagpasabut nga ang una nga numero usa ka multiple sa ikaduha.

Ang 12% 5 // 2 -> 12 dili multiple sa 5
Ang 12% 3 // 0 -> 12 kay multiple sa 3

Busa, kung atong bahinon ang 12 sa 5, atong makuha ang 2 nga adunay nahabilin nga 2. Kon atong bahinon ang 12 sa 3, nan makuha nato ang 4 nga adunay nahibilin nga 0. Sa unang kaso, ang 12 dili multiple sa 5, sa ikaduha, ang 12 maoy multiple sa 3.

desisyon

Ang labing maayo nga solusyon mao ang mosunod nga code:

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

Ang function naghimo sa gikinahanglan nga mga tseke gamit ang conditional nga mga pahayag ug nagpatungha sa resulta nga gikinahanglan sa user. Sa buluhaton, angay nga hatagan ug pagtagad ang han-ay sa kung...lain nga mga pahayag: sugod sa doble nga kondisyon (&&) ug matapos sa kaso kung daghang mga numero ang dili makit-an. Ingon usa ka sangputanan, gisakup namon ang tanan nga kapilian.

Anagram

Kini ang ngalan sa usa ka pulong nga adunay tanan nga mga letra sa lain nga pulong sa parehas nga numero, apan sa lahi nga pagkasunod-sunod.

Pagpadayon

Kinahanglan namon nga magsulat usa ka function nga nagsusi kung ang duha ka mga kuwerdas mga anagram, ug ang kaso sa mga letra dili igsapayan. Mga karakter lamang ang maihap; ang mga luna o punctuation mark wala gikonsiderar.

anagram('tigpangita', 'Higala') -> tinuod
anagram('hello', 'bye') -> bakak

Pagtuki sa buluhaton

Dinhi importante nga tagdon nga gikinahanglan nga susihon ang matag letra sa duha ka linya sa input ug ang ilang numero sa matag linya.

tigpangita -> f: 1 higala -> f: 1
ako: 1r:1
n:1 ug: 1
d: 1 ug: 1
e: 1n: 1
r:1 d:1

Alang sa pagtipig sa datos sa anagram, kinahanglan nga mopili ka usa ka istruktura sama sa literal nga butang sa JavaScript. Ang yawe niini nga kaso mao ang kinaiya sa sulat, ang bili mao ang gidaghanon sa mga pagsubli niini sa kasamtangan nga linya.

Adunay uban nga mga kondisyon usab:

  • Kinahanglan nimo nga sigurohon nga ang kaso sa mga sulat wala gikonsiderar kung itandi. I-convert lang ang duha ka strings ngadto sa lowercase o uppercase.
  • Gidili namo ang tanan nga dili mga karakter gikan sa pagtandi. Labing maayo nga magtrabaho uban regular nga mga ekspresyon.

desisyon

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

Hatagi'g pagtagad ang gamit Object.keys() sa snippet sa ibabaw. Kini nga pamaagi nagbalik sa usa ka laray nga adunay mga ngalan o mga yawe sa parehas nga pagkasunod-sunod ingon nga kini makita sa butang. Sa kini nga kaso, ang array mahimong sama niini:

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

Niining paagiha makuha nato ang mga kabtangan sa butang nga dili kinahanglan nga buhaton ang usa ka dako nga laang. Sa usa ka buluhaton, mahimo nimong gamiton kini nga pamaagi gamit ang .length nga kabtangan - aron masusi kung ang duha ka kuwerdas adunay parehas nga gidaghanon sa mga karakter - kini usa ka hinungdanon nga bahin sa anagrams.

Vowel nga pagpangita

Usa ka yano nga buluhaton nga kanunay makita sa mga interbyu.

Pagpadayon

Kinahanglan ka nga magsulat usa ka function nga nagkuha usa ka hilo ingon usa ka argumento ug ibalik ang gidaghanon sa mga bokales nga naa sa sulud.
Ang mga bokales kay "a", "e", "i", "o", "u".

Pananglitan:

findVowels('hello') // --> 2
findVowels('ngano') // -> 0

desisyon

Ania ang labing sayon ​​nga kapilian:

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
}

Importante nga hatagan ug pagtagad ang paggamit sa .includes() nga pamaagi. Anaa kini alang sa mga kuwerdas ug mga arrays. Kinahanglan kini gamiton aron mahibal-an kung ang usa ka array adunay usa ka piho nga kantidad. Kini nga pamaagi mobalik nga tinuod kung ang array naglangkob sa piho nga kantidad ug bakak kung dili.

Adunay usab usa ka mas mubo nga solusyon sa problema:

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

Ang .match() nga pamaagi gigamit dinhi, nga nagtugot kanimo sa pagpatuman sa usa ka episyente nga pagpangita. Kung ang usa ka regular nga ekspresyon ingon usa ka argumento sa pamaagi makit-an sa sulod sa gitakda nga hilo, nan ang pagbalik nga kantidad usa ka han-ay sa magkatugma nga mga karakter. Aw, kon walay mga posporo, unya .match() mobalik null.

fibonacci

Usa ka klasiko nga buluhaton nga mahimong mahimamat sa mga interbyu sa lainlaing lebel. Angay nga hinumdoman nga ang pagkasunod-sunod sa Fibonacci usa ka serye sa mga numero, diin ang matag sunod nga usa mao ang sumada sa miaging duha. Busa, ang unang napulo ka mga numero ingon niini: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Pagpadayon

Kinahanglan ka nga magsulat og usa ka function nga nagbalik sa nth record sa usa ka piho nga pagkasunod-sunod, ug ang n usa ka numero nga gipasa ingon usa ka argumento sa function.

fibonacci(3) // -> 2

Kini nga buluhaton naglakip sa pag-loop sa gidaghanon sa mga panahon nga gitakda sa argumento, pagbalik sa bili sa tukma nga posisyon. Kini nga paagi sa pagpahimutang sa problema nagkinahanglan sa paggamit sa mga galong. Kon mogamit ka hinuon og recursion, ang tig-interbyu tingali ganahan niini ug hatagan ka og pipila ka dugang nga mga punto.

desisyon

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

Sa han-ay sa resulta, ang unang duha ka numero anaa sa usa ka laray tungod kay ang matag entry sa han-ay naglangkob sa sum sa miaging duha ka numero. Walay duha ka mga numero sa sinugdanan nga mahimong makuha aron makuha ang sunod nga numero, mao nga ang loop dili makahimo niini nga awtomatiko. Apan, ingon sa nahibal-an namon, ang una nga duha nga mga numero kanunay nga 0 ug 1. Busa, mahimo nimo nga ma-initialize ang han-ay sa resulta nga mano-mano.

Mahitungod sa recursion, ang tanan mas simple ug mas komplikado sa samang higayon:

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

Nagpadayon kami sa pagtawag sa fibonacci(), nga nagpasa sa gagmay ug gagmay nga mga numero isip mga argumento. Mohunong kami kung ang gipasa nga argumento 0 o 1.

konklusyon

Lagmit, naatubang na nimo ang bisan unsa niini nga mga buluhaton kung nag-interbyu ka alang sa usa ka trabaho isip frontend o JavaScript developer (ilabi na kung kini usa ka junior level). Apan kung wala nimo sila makit-an, mahimo kini nga magamit sa umaabot - labing menos alang sa kinatibuk-ang kalamboan.

Girekomenda sa Skillbox:

Source: www.habr.com

Idugang sa usa ka comment