5 የተለመዱ የጃቫስክሪፕት ቃለመጠይቅ ችግሮች፡- ትንተና እና መፍትሄዎች

5 የተለመዱ የጃቫስክሪፕት ቃለመጠይቅ ችግሮች፡- ትንተና እና መፍትሄዎች

ከአስተርጓሚው፡- ለእርስዎ አንድ ጽሑፍ አሳተመ ስለ የተለመዱ የጃቫ ስክሪፕት ተግባራት የምትናገረው ማሪያ አንቶኒታ ፐርና, በቃለ መጠይቅ ብዙ ጊዜ ለአመልካቾች-ገንቢዎች ይቀርባል። ጽሑፉ በመጀመሪያ ደረጃ ለጀማሪ ፕሮግራመሮች ጠቃሚ ይሆናል።

በቴክኖሎጂ ኩባንያዎች ውስጥ የተደረጉ ቃለመጠይቆች የከተማው መነጋገሪያ ሆነው ቆይተዋል። ይህ የሚያስገርም አይደለም - የቃለ መጠይቁ በተሳካ ሁኔታ መጠናቀቁ ጥሩ ሥራ ለማግኘት ያስችላል. ግን ይህ በጣም ቀላል አይደለም, ምክንያቱም ብዙውን ጊዜ ውስብስብ ችግሮችን መፍታት አስፈላጊ ነው.

ከዚህም በላይ አብዛኛውን ጊዜ እነዚህ ተግባራት አመልካቹ ከሚያከናውነው ሥራ ጋር የተገናኙ አይደሉም, ነገር ግን አሁንም መፍታት አለባቸው. አንዳንድ ጊዜ ከ Google ወይም ከሌላ ምንጭ ጋር ሳያረጋግጡ በቦርዱ ላይ ማድረግ አለብዎት. አዎን, ሁኔታው ​​ቀስ በቀስ እየተለወጠ ነው, እና በአንዳንድ ኩባንያዎች ውስጥ እንደዚህ አይነት ቃለመጠይቆችን አይቀበሉም, ነገር ግን ብዙ ቀጣሪዎች አሁንም ይህንን ወግ አጥብቀው ይይዛሉ. ይህ ጽሑፍ ብዙውን ጊዜ ለአመልካቾች እንደ ተግባር የሚያገለግሉ የተለመዱ የጃቫ ስክሪፕት ተግባራትን ለመተንተን ያተኮረ ነው።

እኛ እናስታውስዎታለን- ለሁሉም የ "ሀብር" አንባቢዎች - የ "Habr" የማስተዋወቂያ ኮድን በመጠቀም በማንኛውም የ Skillbox ኮርስ ውስጥ ሲመዘገቡ የ 10 ሩብልስ ቅናሽ.

Skillbox ይመክራል፡ ተግባራዊ ኮርስ "ሞባይል ገንቢ PRO".

ዋናው ነገር ለቃለ መጠይቅዎ በጥንቃቄ መዘጋጀት ነው.

አዎ፣ ተግባራቶቹን ማፍረስ ከመጀመራችን በፊት፣ ለቃለ መጠይቅ ለመዘጋጀት አንዳንድ አጠቃላይ ምክሮችን እንመልከት።

ዋናው ነገር አስቀድመው ማዘጋጀት ነው. ስልተ ቀመሮችን እና የውሂብ አወቃቀሮችን ምን ያህል እንደሚያስታውሱ ያረጋግጡ እና እርስዎ በደንብ በማያውቋቸው አካባቢዎች እውቀትዎን ያሻሽሉ። ለቃለ መጠይቅ ለመዘጋጀት የሚያግዙዎት ብዙ የመስመር ላይ መድረኮች አሉ። እንመክራለን። geeksforgeeks, ፕራምፕ, ቃለ መጠይቅ.io и የኮድ ምልክት.

ውሳኔውን ጮክ ብሎ መናገር መማር ጠቃሚ ነው. ምን እየሰሩ እንደሆነ ለአመልካቾች መንገር ተገቢ ነው፣ እና በቦርዱ ላይ መጻፍ ብቻ ሳይሆን (ወይም በኮምፒዩተር ላይ ኮድ ይተይቡ ፣ እንዲሁም በፀጥታ)። ስለዚህ, በኮዱ ውስጥ ስህተት ከሰሩ, ነገር ግን መፍትሄው በአጠቃላይ ትክክል ከሆነ, የስኬት እድሎችን ከፍ ማድረግ ይችላሉ.

መፍትሄው ከመጀመሩ በፊት ችግሩን መረዳት ያስፈልጋል. በአንዳንድ ሁኔታዎች ስራውን በጉልበት ተረድተው ወደ ተሳሳተ መንገድ መሄድ ይችላሉ። ለጠያቂው ጥቂት ግልጽ ጥያቄዎችን መጠየቅ ጠቃሚ ሊሆን ይችላል።

በፒሲ ላይ ሳይሆን በእጅ መጻፍ መለማመድ ያስፈልግዎታል. በቃለ-መጠይቆች ላይ አመልካቹ ምንም ምክሮች ወይም አውቶማቲክ ቅርጸቶች የሌሉበት ምልክት ማድረጊያ እና ሰሌዳ ሲሰጣቸው ይከሰታል። መፍትሄ በሚፈልጉበት ጊዜ, ኮድዎን በወረቀት ላይ ወይም በትክክል በቦርዱ ላይ ይፃፉ. ሁሉንም ነገር በጭንቅላቱ ውስጥ ካስቀመጡ, አንድ አስፈላጊ ነገር መርሳት ይችላሉ.

በጃቫስክሪፕት ውስጥ የአብነት ተግባራት

ከእነዚህ ተግባራት ውስጥ አንዳንዶቹን አስቀድመው ያውቁ ይሆናል። ተመሳሳይ የሆነ ነገር መፍታት ያለብዎት ቃለመጠይቆችን ወስደዋል ወይም ጃቫ ስክሪፕት እየተማሩ በእነሱ ላይ ተለማመዱ። ደህና, አሁን እነሱን እንደገና ለመፍታት ጊዜው አሁን ነው, እና ስለ ሂደቱ ዝርዝር ማብራሪያ.

ፓሊንድረም

ፓሊንድረም ማለት በተለመደው አቅጣጫ እና በተቃራኒ አቅጣጫ የሚነበብ ቃል፣ ዓረፍተ ነገር ወይም የቁምፊዎች ቅደም ተከተል ነው። ለምሳሌ "አና" ፓሊንድሮም ነው, ግን "ጠረጴዛ" እና "ዮሐንስ" አይደሉም.

መጋረጃ

አንድ ሕብረቁምፊ ተሰጥቷል; ሕብረቁምፊው palindrome ከሆነ እውነትን እንድትመልስ የሚፈቅድልህን ተግባር መፃፍ አለብህ፣ ካልሆነ ደግሞ ሐሰት። በዚህ ሁኔታ, ክፍተቶች እና ስርዓተ-ነጥብ ምልክቶች ግምት ውስጥ መግባት አለባቸው.

palindrome ('racecar') === እውነት
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() method (የሕብረቁምፊ ቤተ-መጽሐፍት) በመጠቀም ወደ ድርድር መቀየር ያስፈልግዎታል። ከዚያም ድርድርን .reverse() (Array Library) በመጠቀም እንገለበጣለን። የመጨረሻው እርምጃ .join() (የአደራደር ቤተ-መጽሐፍትን) በመጠቀም የተገላቢጦሹን ድርድር ወደ ሕብረቁምፊ መቀየር ነው።

አሁን የሚያስፈልገው ሁሉ "የተገላቢጦሽ" ሕብረቁምፊን ከመጀመሪያው ጋር ማወዳደር ነው, ውጤቱን እውነት ወይም ሐሰት በመመለስ.

fizzbuzz

በጣም ታዋቂ ከሆኑ የስራ ቃለ መጠይቆች አንዱ።

መጋረጃ

ከ 1 እስከ n ቁጥሮችን ወደ ኮንሶሉ ለማሳየት ተግባር ለመፃፍ ያስፈልጋል ፣ n ተግባሩ እንደ መለኪያ የሚወስደው ኢንቲጀር ሲሆን ከሚከተሉት ሁኔታዎች ጋር።

  • ከ 3 ብዜቶች ይልቅ የውጤት fizz;
  • ከ 5 ብዜቶች ይልቅ የ buzz ውፅዓት;
  • ከሁለቱም 3 እና 5 ብዜቶች ይልቅ fizzbuzz ውፅዓት።

ለምሳሌ:

ፊዝቡዝ(5)

ውጤት

// 1 እ.ኤ.አ.
// 2 እ.ኤ.አ.
// fizz
// 4 እ.ኤ.አ.
// buzz

ተግባሩን መተንተን

እዚህ ያለው ዋናው ነገር ጃቫ ስክሪፕትን በመጠቀም ብዜቶችን ለማግኘት የሚቻልበት መንገድ ነው. ሞጁሉን ኦፕሬተር ወይም ቀሪውን -% በመጠቀም ሊተገበር ይችላል, ይህም ሁለት ቁጥሮችን ሲከፋፍሉ ቀሪውን ለማሳየት ያስችልዎታል. ቀሪው 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 ... ሌሎች መግለጫዎች ቅደም ተከተል ትኩረት መስጠት ተገቢ ነው: በድርብ ሁኔታ (&&) በመጀመር እና ብዙ ቁጥሮች ሊገኙ በማይችሉበት ጊዜ በጉዳዩ ያበቃል. በውጤቱም, ሁሉንም አማራጮች እንሸፍናለን.

አናግራም

ይህ የሌላ ቃል ፊደላትን በሙሉ በተመሳሳይ ቁጥር የያዘ ቃል ስም ነው, ግን በተለየ ቅደም ተከተል.

መጋረጃ

ሁለት ሕብረቁምፊዎች አናግራሞች መሆናቸውን የሚፈትሽ ተግባር መፃፍ አለብን፣ እና የፊደሎች ጉዳይ ምንም አይደለም። ቁምፊዎች ብቻ ይቆጠራሉ; ክፍተቶች ወይም ስርዓተ-ነጥብ ምልክቶች ግምት ውስጥ አይገቡም.

አናግራም ('ፈላጊ'፣ 'ጓደኛ') --> እውነት
አናግራም ('ሄሎ'፣ 'ባይ') --> ውሸት

ተግባሩን መተንተን

እዚህ እያንዳንዱን ፊደል በሁለት የግብዓት መስመሮች እና በእያንዳንዱ መስመር ቁጥራቸውን ማረጋገጥ አስፈላጊ መሆኑን ግምት ውስጥ ማስገባት አስፈላጊ ነው.

ፈላጊ -> ረ፡ 1 ጓደኛ -> ረ፡ 1
እኔ፡ 1ር፡ 1
n፡ 1 እኔ፡ 1
መ፡ 1 ሠ፡ 1
ሠ፡ 1 n፡ 1
አር፡1 ደ፡1

የአናግራም መረጃን ለማከማቸት እንደ ጃቫስክሪፕት ነገር በጥሬው ያለ መዋቅር መምረጥ አለብዎት። በዚህ ጉዳይ ላይ ቁልፉ የደብዳቤው ባህሪ ነው, እሴቱ አሁን ባለው መስመር ውስጥ ያለው ድግግሞሽ ብዛት ነው.

ሌሎች ሁኔታዎችም አሉ፡-

  • በማነፃፀር ጊዜ የደብዳቤዎች ጉዳይ ግምት ውስጥ የማይገባ መሆኑን ማረጋገጥ አለብዎት. ሁለቱንም ሕብረቁምፊዎች ወደ ትንሽ ወይም ትልቅ ሆሄ ይለውጡ።
  • ሁሉንም ገጸ-ባህሪያት ከንፅፅር እናወጣለን. ጋር ለመስራት ምርጥ መደበኛ መግለጫዎች.

ዉሳኔ

// 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']

በዚህ መንገድ ትልቅ ዑደት ሳያደርጉ የነገሩን ባህሪያት እናገኛለን. በአንድ ተግባር ውስጥ ፣ ይህንን ዘዴ ከ .ርዝመት ንብረት ጋር መጠቀም ይችላሉ - ሁለቱም ሕብረቁምፊዎች ተመሳሳይ የቁምፊዎች ብዛት እንዳላቸው ለማረጋገጥ - ይህ የአናግራሞች አስፈላጊ ባህሪ ነው።

አናባቢ ፍለጋ

በቃለ መጠይቅ ውስጥ ብዙ ጊዜ የሚመጣ ቀላል ቀላል ተግባር።

መጋረጃ

ሕብረቁምፊን እንደ ክርክር የሚወስድ እና ሕብረቁምፊው የያዘውን የአናባቢዎች ብዛት የሚመልስ ተግባር መፃፍ ያስፈልግዎታል።
አናባቢዎቹ "a", "e", "i", "o", "u" ናቸው.

ለምሳሌ:

FindVowels('ሄሎ') // --> 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
}

የ.መጫወቻ () ዘዴ እዚህ ጥቅም ላይ ይውላል, ይህም ቀልጣፋ ፍለጋን ተግባራዊ ለማድረግ ያስችላል. የመደበኛ አገላለጽ እንደ ስልት ነጋሪ እሴት በተጠቀሰው ሕብረቁምፊ ውስጥ ከተገኘ፣ የመመለሻ ዋጋው የሚዛመድ የቁምፊዎች ድርድር ነው። ደህና፣ ተዛማጆች ከሌሉ፣ .ተዛማጅ() ባዶ ይመለሳል።

ፋይቦናቺ

በተለያዩ ደረጃዎች ቃለ-መጠይቆች ላይ ሊሟላ የሚችል የታወቀ ተግባር። የ Fibonacci ቅደም ተከተል ተከታታይ ቁጥሮች መሆኑን ማስታወስ ጠቃሚ ነው, እያንዳንዱ ተከታይ የቀደሙት ሁለት ድምር ነው. ስለዚህ የመጀመሪያዎቹ አስር ቁጥሮች ይህን ይመስላል፡- 0፣ 1፣ 1፣ 2፣ 3, 5, 8, 13, 21, 34.

መጋረጃ

የ nth መዝገብን በተወሰነ ቅደም ተከተል የሚመልስ ተግባር መፃፍ ያስፈልግዎታል ፣ እና 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 ሲሆን እናቆማለን።

መደምደሚያ

ምናልባት ከፊት ለፊት ወይም ለጃቫ ስክሪፕት ገንቢ ስራ (በተለይም ጁኒየር ደረጃ ከሆነ) ቃለ መጠይቅ እየሰጡ ከሆነ ከእነዚህ ተግባራት ውስጥ አንዳቸውንም አጋጥመውዎት ይሆናል። ግን ካላጋጠሟቸው ፣ ለወደፊቱ ጠቃሚ ሊሆኑ ይችላሉ - ቢያንስ ለአጠቃላይ ልማት።

Skillbox ይመክራል፡

ምንጭ: hab.com

አስተያየት ያክሉ