5 вазифаи мусоҳибаи маъмулии JavaScript: таҳлил ва ҳалли онҳо

5 вазифаи мусоҳибаи маъмулии JavaScript: таҳлил ва ҳалли онҳо

Аз тарҷумон: барои шумо мақолае нашр кардааст Мария Антониетта Перна, ки дар бораи вазифаҳои умумии JavaScript сӯҳбат мекунад, аксар вақт ба довталабони таҳиякунанда ҳангоми мусоҳиба пешниҳод карда мешавад. Мақола, пеш аз ҳама, барои барномасозони навкор муфид хоҳад буд.

Мусоҳибаҳо дар ширкатҳои технологӣ муддати тӯлонӣ сӯҳбати шаҳр буданд. Ин набояд тааҷҷубовар бошад - бомуваффақият гузаштани мусоҳиба ба шумо имкон медиҳад, ки кори хуб пайдо кунед. Аммо ин чандон оддӣ нест, зеро мушкилоти мураккабро аксар вақт ҳал кардан лозим аст.

Гузашта аз ин, аксар вақт, аксарияти ин вазифаҳо ба коре, ки довталаб иҷро мекунад, алоқаманд нестанд, аммо онҳо ҳанӯз бояд ҳал карда шаванд. Баъзан шумо бояд онро дар тахта бидуни тафтиш бо Google ё ягон манбаи дигар иҷро кунед. Бале, вазъият тадриҷан тағйир меёбад ва баъзе ширкатҳо аз ин гуна мусоҳибаҳо даст мекашанд, вале бисёре аз корфармоён ба ин анъана пайравӣ мекунанд. Ин мақола ба таҳлили вазифаҳои маъмулии JavaScript бахшида шудааст, ки аксар вақт ҳамчун вазифаҳо барои корҷӯён истифода мешаванд.

Мо ба шумо хотиррасон мекунем: барои ҳамаи хонандагони "Habr" - тахфифи 10 000 рубл ҳангоми номнавис шудан ба курсҳои Skillbox бо истифода аз рамзи таблиғотии "Habr".

Skillbox тавсия медиҳад: Курси амалӣ "Таҳиягари мобилӣ PRO".

Чизи асосӣ ин аст, ки ба мусоҳибаатон ҳаматарафа омода шавед.

Бале, пеш аз он ки мо ба баррасии вазифаҳо шурӯъ кунем, биёед ба баъзе маслиҳатҳои умумии омодасозии мусоҳиба назар андозем.

Хӯроки асосии он аст, ки пешакӣ тайёр кунед. Санҷед, ки то чӣ андоза алгоритмҳо ва сохторҳои додаҳоро хуб дар хотир доред ва дониши худро дар соҳаҳое, ки бо онҳо чандон ошно нестед, такмил диҳед. Бисёр платформаҳои онлайн мавҷуданд, ки метавонанд ба шумо барои омодагӣ ба мусоҳиба кӯмак расонанд. маслихат медихем geeksforgeeks, Прамп, Interviewing.io и CodeSignal.

Бо овози баланд гуфтани қарорро ёд гирифтан меарзад. Тавсия дода мешавад, ки ба довталабон дар бораи корҳое, ки шумо мекунед, нақл кунед, на танҳо дар тахта нависед (ё кодро ба компютер ворид кунед, инчунин хомӯшона). Бо ин роҳ, агар шумо дар код хато кунед, аммо роҳи ҳалли он умуман дуруст аст, шумо метавонед имконияти муваффақияти худро зиёд кунед.

Пеш аз оғози ҳалли он шумо бояд мушкилотро фаҳмед. Дар баъзе мавридҳо, шумо метавонед як вазифаро рӯякӣ фаҳмед ва сипас ба роҳи нодуруст равед. Мумкин аст, ки ба мусоҳиб чанд саволи равшан диҳанд.

Ба шумо лозим аст, ки бо дастнависии код машқ кунед, на дар компютер. Чунин мешавад, ки ҳангоми мусоҳиба ба довталаб маркер ва тахтаи сафед дода мешавад, ки дар он ҳеҷ маслиҳат ё форматкунии автоматӣ вуҷуд надорад. Ҳангоми ҷустуҷӯи роҳи ҳалли он, рамзи худро дар варақ ё бевосита дар тахта навиштан лозим аст. Агар шумо ҳама чизро дар сари худ нигоҳ доред, шумо метавонед як чизи муҳимро фаромӯш кунед.

Вазифаҳои қолабӣ дар JavaScript

Баъзе аз ин вазифаҳо шояд ба шумо аллакай шинос бошанд. Шумо ё мусоҳибаҳое доштед, ки дар он шумо бояд як чизи шабеҳро ҳал мекардед ё ҳангоми омӯзиши JavaScript бо онҳо амал мекардед. Хуб, ҳоло вақти он расидааст, ки онҳоро дубора ҳал кунем ва бо шарҳи муфассали раванд.

Палиндрома

Палиндрома калима, ҷумла ё пайдарпаии аломатҳоест, ки ҳам дар самти муқаррарӣ ва ҳам дар самти муқобил комилан якхела хонда мешаванд. Масалан, "Анна" палиндром аст, аммо "миз" ва "Ҷон" не.

Марҳилаи

Сатр дода мешавад; ба шумо лозим аст, ки функсияеро нависед, ки ба шумо имкон медиҳад, ки агар сатр палиндром бошад, ҳақиқӣ баргардад ва агар не, бардурӯғ. Дар ин ҳолат, шумо бояд фосилаҳо ва аломатҳои пунктуатсияро ба назар гиред.

палиндром ('погонка') === дуруст
палиндром('ҷадвал') === бардурӯғ

Биёед вазифаро таҳлил кунем

Идеяи асосӣ дар ин ҷо баргардонидани сатр аст. Агар сатри "акс" ба сатри аслӣ комилан шабеҳ бошад, пас мо палиндром гирифтем ва функсия бояд ҳақиқӣ баргардад. Агар не, дурӯғ.

ҳалли

Дар ин ҷо кодест, ки палиндромро ҳал мекунад.

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

Қадами аввал ин табдил додани аломатҳои сатри вуруд ба ҳарфҳои хурд аст. Ин кафолати он аст, ки барнома худи аломатҳоро муқоиса мекунад, на парванда ё чизи дигар.

Қадами дуюм ин баргардонидани хат аст. Ин корро кардан душвор нест: шумо бояд онро бо истифода аз усули .split() ба массив табдил диҳед (Китобхонаи сатр). Сипас мо бо истифода аз .reverse() (китобхонаи массив) массивро баргардонем. Қадами охирин ин табдил додани массиви баръакс ба сатр бо истифода аз .join() (китобхонаи массив) мебошад.

Ҳоло танҳо ба шумо лозим аст, ки сатри "барқарор" -ро бо сатри аслӣ муқоиса кунед ва натиҷаро дуруст ё бардурӯғ баргардонед.

FizzBuzz

Яке аз вазифаҳои маъмултарин дар мусоҳибаҳо.

Марҳилаи

Шумо бояд функсияеро нависед, ки рақамҳоро аз 1 то n ба консол чоп мекунад, ки дар он n ададест, ки функсия ҳамчун параметр қабул мекунад, бо шартҳои зерин:

  • баромади fizz ба ҷои чандкаратаи 3;
  • садои баромад ба ҷои рақамҳое, ки ба 5 баробаранд;
  • баромади fizzbuzz ба ҷои рақамҳое, ки ҳам 3 ва ҳам 5 мебошанд.

Мисол

Fizzbuzz (5)

Дар натиҷа

// 1
// 2
// физ
// 4
// садо

Биёед вазифаро таҳлил кунем

Дар ин ҷо чизи асосӣ роҳи дарёфти чандкаратаҳо бо истифода аз JavaScript мебошад. Онро бо истифода аз оператори модул ё боқимонда - % амалӣ кардан мумкин аст, ки имкон медиҳад боқимонда ҳангоми тақсим кардани ду адад нишон дода шавад. Агар боқимонда 0 бошад, ин маънои онро дорад, ки рақами якум чандкаратаи дуюм аст.

12% 5 // 2 -> 12 чандкаратаи 5 нест
12% 3 // 0 -> 12 чандкаратаи 3 аст

Ҳамин тавр, агар шумо 12-ро ба 5 тақсим кунед, шумо 2-ро бо боқимондаи 2 мегиред. Агар шумо 12-ро ба 3 тақсим кунед, шумо 4 бо боқимондаи 0 мегиред. Дар ҳолати аввал 12 чандкаратаи 5 нест, дар дуюм , 12 чандкаратаи 3 аст.

ҳалли

Ҳалли оптималии коди зерин хоҳад буд:

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

Функсия бо истифода аз изҳороти шартӣ санҷишҳои заруриро анҷом медиҳад ва натиҷаи аз ҷониби корбар талабшударо медиҳад. Дар масъала ба тартиби иборањои if...else таваљљўњ кардан лозим аст: бо шарти дугона (&&) оѓоз карда, бо њолате, ки ададњои сершумор пайдо нашуданд, ба охир мерасад. Дар натиҷа, мо ҳама вариантҳоро фаро мегирем.

Анаграмма

Ин номи калимаест, ки тамоми ҳарфҳои калимаи дигарро дар як адад, вале бо тартиби дигар дар бар мегирад.

Марҳилаи

Мо бояд функсияеро нависем, ки оё ду сатр анаграмма мебошанд ва парванда аҳамият надорад. Танҳо аломатҳо ҳисоб карда мешаванд; холй ё аломатхои пунктуация ба назар гирифта намешаванд.

anagram('finder', 'Friend') -> true
анаграмма('салом', 'хай') —> бардурӯғ

Биёед вазифаро таҳлил кунем

Чизи муҳиме, ки бояд дар ин ҷо ба назар гирифт, ин аст, ки шумо бояд ҳар як ҳарфро дар ду хати вуруд ва рақами онҳоро дар ҳар сатр тафтиш кунед.

ёбанда —> f: 1 дуст —> f: 1
i: 1 r: 1
n: 1 i: 1
д: 1 д: 1
д: 1 н: 1
р: 1 д: 1

Барои нигоҳ доштани маълумоти анаграмма, шумо бояд сохтореро, ба монанди объекти аслии JavaScript интихоб кунед. Калид дар ин ҳолат аломати ҳарф, арзиш шумораи такрорҳои он дар сатри ҷорӣ мебошад.

Шартҳои дигар вуҷуд доранд:

  • Шумо бояд боварӣ ҳосил кунед, ки ҳангоми муқоиса ҳолати ҳарфҳо ба назар гирифта намешавад. Мо танҳо ҳарду сатрро ба ҳарфи хурд ё калон табдил медиҳем.
  • Мо ҳама аломатҳои ғайрифаъолро аз муқоиса хориҷ мекунем. Беҳтарин барои кор бо ибораҳои муқаррарӣ.

ҳалли

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

Ба истифода диққат диҳед Object.keys() дар порчаи боло. Ин усул массиви дорои номҳо ё калидҳоро бо ҳамон тартибе, ки онҳо дар объект пайдо мешаванд, бармегардонад. Дар ин ҳолат массив чунин хоҳад буд:

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

Бо ин роҳ мо хосиятҳои объектро бидуни анҷом додани як ҳалқаи оммавӣ ба даст меорем. Дар мушкилот шумо метавонед ин усулро бо хосияти .length истифода баред, то тафтиш кунед, ки оё ҳарду сатр шумораи якхела доранд - ин як хусусияти муҳими анаграммаҳо мебошад.

Ҷустуҷӯи садонокҳо

Вазифаи хеле содда, ки аксар вақт дар мусоҳибаҳо ба миён меояд.

Марҳилаи

Шумо бояд функсияеро нависед, ки сатрро ҳамчун аргумент мегирад ва шумораи садонокҳои дар сатр мавҷудбударо бармегардонад.
Садонокҳо "а", "е", "и", "о", "у" мебошанд.

Мисол:

findVowels('салом') // —> 2
findVowels('чаро') // —> 0

ҳалли

Ин аст соддатарин вариант:

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
}

Ба истифодаи усули .includes() диққат додан муҳим аст. Он барои ҳам сатрҳо ва ҳам массивҳо дастрас аст. Он бояд барои муайян кардани он ки оё массив арзиши муайян дорад, истифода шавад. Ин усул ҳақиқиро бармегардонад, агар массив арзиши муайяншударо дар бар гирад ва агар ин набошад, нодуруст бошад.

Як роҳи ҳалли кӯтоҳтари мушкилот вуҷуд дорад:

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

Ин усули .match () -ро истифода мебарад, ки ба шумо имкон медиҳад ҷустуҷӯи муассирро амалӣ кунед. Агар ифодаи муқаррарӣ ҳамчун аргументи метод дар дохили сатри муайяншуда пайдо шавад, он гоҳ арзиши бозгашт массиви аломатҳои мувофиқ аст. Хуб, агар ягон мувофиқат вуҷуд надошта бошад, пас .match() нулро бармегардонад.

Фибоначчи

Вазифаи классикӣ, ки онро дар мусоҳибаҳо дар сатҳҳои гуногун пайдо кардан мумкин аст. Бояд хотиррасон кард, ки пайдарпаии Фибоначӣ як қатор ададҳоест, ки ҳар яки баъдӣ маблағи дуи қаблӣ мебошад. Ҳамин тариқ, даҳ рақами аввал чунинанд: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Марҳилаи

Шумо бояд функсияеро нависед, ки сабти n-ро бо пайдарпаии муайян баргардонад ва n рақамест, ки ҳамчун аргумент ба функсия дода мешавад.

Фибоначчи (3) // —> 2

Ин вазифа аз давра гузаштан ба миқдори маротибаи дар аргумент нишондодашуда, баргардонидани арзиш дар мавқеи мувофиқ иборат аст. Ин тарзи гузоштани мушкилот истифодаи ҳалқаҳоро талаб мекунад. Агар шумо ба ҷои он рекурсияро истифода баред, он метавонад мусоҳибаро шод кунад ва ба шумо чанд нуктаи иловагӣ диҳад.

ҳалли

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

Дар массиви натиҷаҳо, ду рақами аввал дар силсила мавҷуд аст, зеро ҳар як вуруд дар пайдарпай маблағи ду рақами қаблӣ мебошад. Дар ибтидо ду рақаме вуҷуд надорад, ки барои гирифтани рақами навбатӣ гирифтан мумкин аст, аз ин рӯ ҳалқа онҳоро ба таври худкор тавлид карда наметавонад. Аммо, тавре ки мо медонем, ду рақами аввал ҳамеша 0 ва 1 мебошанд. Аз ин рӯ, шумо метавонед массиви натиҷаҳоро дастӣ оғоз кунед.

Дар мавриди рекурсия, ҳама чиз соддатар ва ҳамзамон мураккабтар аст:

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

Мо ба Фибоначчи() занг мезанем, рақамҳои хурдтар ва хурдтарро ҳамчун далел мегузорем. Вақте ки аргументи гузашта 0 ё 1 бошад, мо қатъ мекунем.

хулоса

Эҳтимол дорад, ки шумо аллакай бо яке аз ин вазифаҳо дучор шудаед, агар шумо барои кори таҳиягари frontend ё JavaScript мусоҳиба шуда бошед (хусусан агар он дар сатҳи наврас бошад). Аммо агар шумо онҳоро надида бошед, онҳо метавонанд дар оянда муфид бошанд - ҳадди аққал барои рушди умумӣ.

Skillbox тавсия медиҳад:

Манбаъ: will.com

Илова Эзоҳ