5 සාමාන්‍ය JavaScript සම්මුඛ පරීක්ෂණ කාර්යයන්: විශ්ලේෂණය සහ විසඳුම්

5 සාමාන්‍ය JavaScript සම්මුඛ පරීක්ෂණ කාර්යයන්: විශ්ලේෂණය සහ විසඳුම්

පරිවර්තකයාගෙන්: ඔබ වෙනුවෙන් ලිපියක් පළ කළා පොදු JavaScript කාර්යයන් ගැන කතා කරන Maria Antonietta Perna, බොහෝ විට සම්මුඛ පරීක්ෂණ අතරතුර සංවර්ධක අයදුම්කරුවන්ට පිරිනමනු ලැබේ. ලිපිය ප්‍රයෝජනවත් වනු ඇත, පළමුව, නවක වැඩසටහන්කරුවන්ට.

තාක්ෂණික සමාගම්වල සම්මුඛ සාකච්ඡා බොහෝ කලක සිට නගරයේ කතාබහට ලක්ව ඇත. මෙය පුදුම විය යුතු නැත - සම්මුඛ පරීක්ෂණයක් සාර්ථකව සමත් වීමෙන් ඔබට හොඳ රැකියාවක් ලබා ගැනීමට අවස්ථාව ලැබේ. නමුත් මෙය එතරම් සරල නැත, මන්ද සංකීර්ණ ගැටළු බොහෝ විට විසඳිය යුතුය.

එපමණක් නොව, බොහෝ විට, මෙම කාර්යයන් බොහොමයක් අයදුම්කරු විසින් ඉටු කරනු ලබන කාර්යයට සම්බන්ධ නොවේ, නමුත් ඒවා තවමත් විසඳිය යුතුය. සමහර විට ඔබට එය Google හෝ වෙනත් මූලාශ්‍ර සමඟ පරීක්ෂා නොකර පුවරුවේ සිදු කිරීමට සිදුවේ. ඔව්, තත්වය ක්රමයෙන් වෙනස් වෙමින් පවතින අතර, සමහර සමාගම් එවැනි සම්මුඛ සාකච්ඡා අත්හැර දමයි, නමුත් බොහෝ සේවා යෝජකයින් තවමත් මෙම සම්ප්රදායට අනුගත වේ. මෙම ලිපිය බොහෝ විට රැකියා සොයන්නන් සඳහා කාර්යයන් ලෙස භාවිතා කරන සාමාන්‍ය ජාවාස්ක්‍රිප්ට් කාර්යයන් විශ්ලේෂණය කිරීමට කැප කෙරේ.

අපි ඔබට මතක් කරමු: "Habr" හි සියලුම පාඨකයින් සඳහා - "Habr" ප්‍රවර්ධන කේතය භාවිතයෙන් ඕනෑම Skillbox පාඨමාලාවකට ලියාපදිංචි වන විට රූබල් 10 ක වට්ටමක්.

Skillbox නිර්දේශ කරයි: ප්රායෝගික පාඨමාලාව "ජංගම සංවර්ධක PRO".

ප්රධාන දෙය නම් ඔබේ සම්මුඛ පරීක්ෂණය සඳහා හොඳින් සූදානම් වීමයි.

ඔව්, අපි කර්තව්‍යයන් දෙස බැලීමට පෙර, සාමාන්‍ය සම්මුඛ පරීක්ෂණ සඳහා සූදානම් වීමේ උපදෙස් කිහිපයක් බලමු.

ප්රධාන දෙය වන්නේ කල්තියා සූදානම් වීමයි. ඔබට ඇල්ගොරිතම සහ දත්ත ව්‍යුහයන් කොතරම් හොඳින් මතකදැයි පරීක්ෂා කරන්න, සහ ඔබ එතරම් හුරුපුරුදු නොවන ක්ෂේත්‍රවල ඔබේ දැනුම වැඩි දියුණු කරන්න. සම්මුඛ පරීක්ෂණ සඳහා සූදානම් වීමට ඔබට උපකාර කළ හැකි බොහෝ සබැඳි වේදිකා තිබේ. අපි උපදෙස් දෙනවා geeksforgeeks, ප්රම්ප්, Interviewing.io и කෝඩ් සිග්නල්.

තීරණය ශබ්ද නඟා පැවසීමට ඉගෙන ගැනීම වටී. ඔබ කරන දේ ගැන අයදුම්කරුවන්ට පැවසීම යෝග්‍ය වන අතර පුවරුවේ ලිවීම පමණක් නොව (හෝ පරිගණකයට කේතය ටයිප් කරන්න, නිහඬව). මේ ආකාරයෙන්, ඔබ කේතයේ වැරැද්දක් කළත්, විසඳුම සාමාන්යයෙන් නිවැරදි නම්, ඔබට සාර්ථක වීමේ අවස්ථා වැඩි කළ හැකිය.

ඔබ එය විසඳීමට පටන් ගැනීමට පෙර ගැටලුව තේරුම් ගත යුතුය. සමහර අවස්ථාවලදී, ඔබ යම් කාර්යයක් මතුපිටින් තේරුම් ගෙන වැරදි මාර්ගයට යා හැකිය. සම්මුඛ පරීක්ෂක වෙත පැහැදිලි ප්රශ්න කිහිපයක් ඇසීම වටී.

PC එකකින් නෙවෙයි අතින් code ලියන්න පුරුදු වෙන්න ඕන. සම්මුඛ පරීක්ෂණ වලදී අයදුම්කරුට ඉඟියක් හෝ ස්වයංක්‍රීය හැඩතල ගැන්වීමක් නොමැති සලකුණු කාරකයක් සහ සුදු පුවරුවක් ලබා දීම සිදු වේ. විසඳුමක් සොයන විට, ඔබේ කේතය කඩදාසි කැබැල්ලක හෝ කෙලින්ම පුවරුවේ ලිවීම වටී. ඔබ සෑම දෙයක්ම ඔබේ හිසෙහි තබා ගන්නේ නම්, ඔබට වැදගත් දෙයක් අමතක විය හැකිය.

JavaScript හි සැකිලි කාර්යයන්

මෙම සමහර කාර්යයන් ඔබට දැනටමත් හුරුපුරුදුය. ඔබට සමාන යමක් විසඳීමට සිදු වූ සම්මුඛ සාකච්ඡා පවත්වා ඇත, නැතහොත් ජාවාස්ක්‍රිප්ට් ඉගෙන ගන්නා අතරතුර ඒවා භාවිතා කර ඇත. හොඳයි, දැන් ඒවා නැවත විසඳීමට කාලයයි, සහ ක්රියාවලිය පිළිබඳ සවිස්තරාත්මක පැහැදිලි කිරීමක් සමඟ.

Palindrome

palindrome යනු වචනයක්, වාක්‍යයක් හෝ අක්ෂර අනුපිළිවෙලක් වන අතර එය සුපුරුදු දිශාවට සහ ප්‍රතිවිරුද්ධ දිශාවට හරියටම සමාන වේ. උදාහරණයක් ලෙස, "Anna" යනු palindrome, නමුත් "table" සහ "John" නොවේ.

වේදිකා ගත කිරීම

තන්තුවක් ලබා දී ඇත; තන්තුව palindrome නම් true ලෙසත්, එසේ නොවේ නම් false ලෙසත් ලබා දීමට ඔබට ඉඩ සලසන ශ්‍රිතයක් ලිවීමට අවශ්‍ය වේ. මෙම අවස්ථාවේදී, ඔබ අවකාශයන් සහ විරාම ලකුණු සැලකිල්ලට ගත යුතුය.

palindrome('racecar') === ඇත්ත
palindrome('වගුව') === බොරු

කාර්යය විශ්ලේෂණය කරමු

මෙහි ප්‍රධාන අදහස වන්නේ තන්තුව ආපසු හැරවීමයි. “ප්‍රතිලෝම” තන්තුව මුල් එකට සම්පූර්ණයෙන්ම සමාන නම්, අපට palindrome එකක් ලැබී ඇති අතර ශ්‍රිතය සත්‍ය විය යුතුය. එසේ නොවේ නම්, අසත්‍යය.

තීරණය

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

පළමු පියවර වන්නේ ආදාන තන්තුවෙහි අක්ෂර කුඩා අකුරු බවට පරිවර්තනය කිරීමයි. මෙය වැඩසටහන මඟින් චරිත සංසන්දනය කරන බවට සහතිකයක් වන අතර, නඩුව හෝ වෙනත් කිසිවක් නොවේ.

දෙවන පියවර වන්නේ රේඛාව ආපසු හැරවීමයි. මෙය සිදු කිරීම අපහසු නැත: ඔබ එය .split() ක්‍රමය (String library) භාවිතයෙන් අරාවක් බවට පරිවර්තනය කළ යුතුය. ඊට පස්සේ අපි .reverse() (Array library) භාවිතා කරලා array එක reverse කරනවා. අවසාන පියවර වන්නේ .join() (Array library) භාවිතයෙන් ප්‍රතිලෝම අරාව තන්තුවකට පරිවර්තනය කිරීමයි.

දැන් ඔබ කළ යුත්තේ "ප්‍රතිලෝම" තන්තුව මුල් තන්තුව සමඟ සංසන්දනය කර ප්‍රතිඵලය සත්‍ය හෝ අසත්‍ය ලෙස ලබා දීමයි.

FizzBuzz

සම්මුඛ සාකච්ඡා වලදී වඩාත් ජනප්රිය කාර්යයන්ගෙන් එකකි.

වේදිකා ගත කිරීම

ඔබ විසින් කොන්සෝලය වෙත 1 සිට n දක්වා සංඛ්‍යා මුද්‍රණය කරන ශ්‍රිතයක් ලිවීමට අවශ්‍ය වේ, එහිදී n යනු පහත කොන්දේසි සහිතව ශ්‍රිතය පරාමිතියක් ලෙස ගන්නා පූර්ණ සංඛ්‍යාවකි:

  • 3 ගුණාකාර වෙනුවට නිමැවුම් fizz;
  • 5 ගුණාකාර සංඛ්‍යා වෙනුවට ප්‍රතිදාන buzz;
  • 3 සහ 5 දෙකෙහි ගුණාකාර සංඛ්‍යා වෙනුවට fizzbuzz ප්‍රතිදානය.

උදාහරණ:

Fizzbuzz(5)

ප්රතිඵලය

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

කාර්යය විශ්ලේෂණය කරමු

මෙතන තියෙන ප්‍රධානම දේ තමයි 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

වෙනත් වචනයක සියලුම අකුරු එකම අංකයකින්, නමුත් වෙනත් අනුපිළිවෙලකින් අඩංගු වචනයක් සඳහා නම මෙයයි.

වේදිකා ගත කිරීම

තන්තු දෙකක් ඇනග්‍රෑම් ද යන්න පරීක්ෂා කරන ශ්‍රිතයක් ඔබ ලිවිය යුතු අතර, නඩුව වැදගත් නොවේ. ගණනය කරනු ලබන්නේ අක්ෂර පමණි; හිස්තැන් හෝ විරාම ලකුණු සැලකිල්ලට නොගනී.

anagram('finder', 'Friend') —> ඇත්ත
anagram('hello', 'bye') —> බොරු

කාර්යය විශ්ලේෂණය කරමු

මෙහිදී සලකා බැලිය යුතු වැදගත්ම දෙය නම්, ඔබ ආදාන රේඛා දෙකේ එක් එක් අකුර සහ එක් එක් පේළියේ ඒවායේ අංකය පරීක්ෂා කළ යුතුය.

සොයන්නා —> f: 1 මිතුරෙක් —> f: 1
i: 1 r: 1
n: 1 i: 1
ඈ: 1 ඉ: 1
e: 1 n: 1
r: 1 d: 1

anagram දත්ත ගබඩා කිරීම සඳහා, ඔබ 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']

මේ විදියට අපිට bulk loop එකක් නොකර object එකේ properties ලැබෙනවා. ගැටලුවකදී, ඔබට මෙම ක්‍රමය .length ගුණය සමඟින් භාවිතා කර තන්තු දෙකටම එකම අක්ෂර සංඛ්‍යාවක් තිබේදැයි පරීක්ෂා කළ හැක - මෙය ඇනග්‍රෑම් වල වැදගත් ලක්ෂණයකි.

ස්වර සඳහා සොයන්න

සම්මුඛ සාකච්ඡා වලදී බොහෝ විට පැමිණෙන තරමක් සරල කාර්යයක්.

වේදිකා ගත කිරීම

තන්තුවක් තර්කයක් ලෙස ගෙන තන්තුවෙහි අඩංගු ස්වර ගණන ආපසු ලබා දෙන ශ්‍රිතයක් ලිවීමට අවශ්‍ය වේ.
ස්වර "a", "e", "i", "o", "u" වේ.

උදාහරණ:

සොයන්න ස්වර ('හලෝ') // —> 2
ස්වර සොයන්න ('ඇයි') // —> 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() null ලබා දෙයි.

ෆිබොනාච්චි

විවිධ මට්ටම්වල සම්මුඛ සාකච්ඡා වලදී සොයා ගත හැකි සම්භාව්ය කාර්යයක්. Fibonacci අනුක්‍රමය යනු සංඛ්‍යා මාලාවක් වන අතර එහිදී එක් එක් ඊළඟ එක පෙර දෙකේ එකතුව වන බව සිහිපත් කිරීම වටී. ඉතින්, පළමු අංක දහය මේ ආකාරයෙන් පෙනේ: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

වේදිකා ගත කිරීම

n යනු ශ්‍රිතයට තර්කයක් ලෙස ලබා දෙන සංඛ්‍යාව සමඟින්, යම් අනුක්‍රමයක n වන වාර්තාව නැවත ලබා දෙන ශ්‍රිතයක් ලිවිය යුතුය.

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

අපි කුඩා හා කුඩා සංඛ්‍යා තර්ක ලෙස පසුකරමින් fibonacci() අමතමු. සම්මත වූ තර්කය 0 හෝ 1 වන විට අපි නතර කරමු.

නිගමනය

බොහෝ දුරට, ඔබ ඉදිරිපස හෝ JavaScript සංවර්ධක රැකියාවක් සඳහා සම්මුඛ පරීක්ෂණයට ලක් කර ඇත්නම් (විශේෂයෙන් එය කනිෂ්ඨ මට්ටමේ නම්) ඔබ දැනටමත් මෙම කාර්යයන් කිසිවක් මුහුණ දී ඇත. නමුත් ඔබ ඒවා හමු වී නොමැති නම්, ඒවා අනාගතයේදී ප්‍රයෝජනවත් විය හැකිය - අවම වශයෙන් සාමාන්‍ය සංවර්ධනය සඳහා.

Skillbox නිර්දේශ කරයි:

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න