5 عام JavaScript انٹرویو کے کام: تجزیہ اور حل

5 عام JavaScript انٹرویو کے کام: تجزیہ اور حل

مترجم سے: آپ کے لیے ایک مضمون شائع کیا ہے۔ ماریا انتونیٹا پرنا، جو جاوا اسکرپٹ کے عام کاموں کے بارے میں بات کرتی ہے۔، اکثر انٹرویو کے دوران ڈویلپر درخواست دہندگان کو پیش کی جاتی ہے۔ مضمون سب سے پہلے، نوسکھئیے پروگرامرز کے لیے مفید ہو گا۔

ٹیک کمپنیوں میں انٹرویوز طویل عرصے سے شہر کا چرچا رہے ہیں۔ یہ حیران کن نہیں ہونا چاہیے - کامیابی سے انٹرویو پاس کرنے سے آپ کو اچھی نوکری حاصل کرنے کا موقع ملتا ہے۔ لیکن یہ اتنا آسان نہیں ہے، کیونکہ پیچیدہ مسائل کو اکثر حل کرنے کی ضرورت ہوتی ہے۔

مزید یہ کہ، اکثر، ان میں سے زیادہ تر کام اس کام سے متعلق نہیں ہوتے جو درخواست دہندہ انجام دے گا، لیکن پھر بھی انہیں حل کرنے کی ضرورت ہے۔ بعض اوقات آپ کو گوگل یا کسی دوسرے ذریعہ سے چیک کیے بغیر اسے بورڈ پر کرنا پڑتا ہے۔ جی ہاں، صورتحال بتدریج بدل رہی ہے، اور کچھ کمپنیاں ایسے انٹرویوز کو ترک کر رہی ہیں، لیکن بہت سے آجر اب بھی اس روایت پر قائم ہیں۔ یہ مضمون جاوا اسکرپٹ کے مخصوص کاموں کے تجزیہ کے لیے وقف ہے جو اکثر ملازمت کے متلاشیوں کے لیے کام کے طور پر استعمال ہوتے ہیں۔

ہم آپ کو یاد دلاتے ہیں: "Habr" کے تمام قارئین کے لیے - "Habr" پروموشنل کوڈ کا استعمال کرتے ہوئے کسی بھی Skillbox کورس میں داخلہ لینے پر 10 rubles کی رعایت۔

Skillbox تجویز کرتا ہے: پریکٹیکل کورس "موبائل ڈویلپر پی آر او".

اہم بات یہ ہے کہ آپ اپنے انٹرویو کے لیے اچھی طرح سے تیاری کریں۔

ہاں، اس سے پہلے کہ ہم کاموں کو دیکھنا شروع کریں، آئیے انٹرویو کی تیاری کے کچھ عمومی نکات پر نظر ڈالیں۔

اہم چیز پیشگی تیاری کرنا ہے۔ جانچیں کہ آپ کو الگورتھم اور ڈیٹا سٹرکچر کتنی اچھی طرح یاد ہیں، اور اپنے علم کو ان شعبوں میں بہتر بنائیں جن سے آپ زیادہ واقف نہیں ہیں۔ بہت سے آن لائن پلیٹ فارم ہیں جو آپ کو انٹرویو کے لیے تیار کرنے میں مدد کر سکتے ہیں۔ ہم مشورہ دیتے ہیں۔ geeksforgeeks, پرمپ, Interviewing.io и کوڈسینگل.

فیصلہ بلند آواز میں کہنا سیکھنے کے قابل ہے۔ یہ مشورہ دیا جاتا ہے کہ درخواست دہندگان کو بتائیں کہ آپ کیا کرتے ہیں، اور نہ صرف بورڈ پر لکھیں (یا کمپیوٹر میں کوڈ ٹائپ کریں، خاموشی سے بھی)۔ اس طرح، اگر آپ کوڈ میں غلطی کرتے ہیں، لیکن حل عام طور پر درست ہوتا ہے، تو آپ کامیابی کے امکانات کو بڑھا سکتے ہیں۔

اس سے پہلے کہ آپ اسے حل کرنا شروع کریں آپ کو مسئلہ کو سمجھنے کی ضرورت ہے۔ کچھ معاملات میں، آپ کسی کام کو سطحی طور پر سمجھ سکتے ہیں اور پھر غلط راستے پر چل سکتے ہیں۔ انٹرویو لینے والے سے چند واضح سوالات پوچھنا قابل ہو سکتا ہے۔

آپ کو پی سی پر نہیں بلکہ ہاتھ سے کوڈ لکھنے کی مشق کرنے کی ضرورت ہے۔ ایسا ہوتا ہے کہ انٹرویو کے دوران درخواست دہندہ کو ایک مارکر اور وائٹ بورڈ دیا جاتا ہے، جہاں کوئی اشارے یا خودکار فارمیٹنگ نہیں ہوتی ہے۔ حل تلاش کرتے وقت، کاغذ کے ٹکڑے پر یا براہ راست بورڈ پر اپنا کوڈ لکھنا قابل قدر ہے۔ اگر آپ ہر چیز کو اپنے سر میں رکھتے ہیں، تو آپ کچھ اہم بھول سکتے ہیں۔

جاوا اسکرپٹ میں ٹیمپلیٹ کے کام

ان میں سے کچھ کام شاید آپ کو پہلے سے ہی معلوم ہیں۔ آپ نے یا تو ایسے انٹرویوز کیے ہیں جہاں آپ کو کچھ ایسا ہی حل کرنا تھا، یا جاوا اسکرپٹ سیکھنے کے دوران ان پر مشق کی۔ ٹھیک ہے، اب ان کو دوبارہ حل کرنے کا وقت ہے، اور عمل کی تفصیلی وضاحت کے ساتھ۔

پیلینڈروم

پیلینڈروم ایک لفظ، جملہ یا حروف کی ترتیب ہے جسے معمول کی سمت اور مخالف سمت دونوں میں بالکل یکساں پڑھا جاتا ہے۔ مثال کے طور پر، "انا" ایک پیلینڈروم ہے، لیکن "ٹیبل" اور "جان" نہیں ہیں۔

اسٹیجنگ

ایک تار دیا؛ آپ کو ایک فنکشن لکھنے کی ضرورت ہے جو آپ کو صحیح واپس کرنے کی اجازت دیتا ہے اگر سٹرنگ ایک پیلینڈروم ہے، اور اگر نہیں تو غلط۔ اس صورت میں، آپ کو خالی جگہوں اور اوقاف کے نشانات کو مدنظر رکھنا ہوگا۔

palindrome('racecar') === سچ
palindrome('table') === غلط

آئیے کام کا تجزیہ کرتے ہیں۔

یہاں بنیادی خیال سٹرنگ کو ریورس کرنا ہے۔ اگر "ریورس" سٹرنگ اصل سے مکمل طور پر مماثل ہے، تو ہمیں ایک پیلینڈروم موصول ہوا ہے اور فنکشن درست ہونا چاہئے۔ اگر نہیں تو جھوٹ۔

حل

یہ وہ کوڈ ہے جو پیلینڈروم کو حل کرتا ہے۔

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) کا استعمال کرتے ہوئے ارے کو ریورس کرتے ہیں۔ آخری مرحلہ یہ ہے کہ .join() (Array library) کا استعمال کرتے ہوئے ریورس ارے کو سٹرنگ میں تبدیل کریں۔

اب آپ کو بس "ریورس" سٹرنگ کا اصل سٹرنگ سے موازنہ کرنا ہے، نتیجہ درست یا غلط کو لوٹانا ہے۔

FizzBuzz

انٹرویو میں سب سے زیادہ مقبول کاموں میں سے ایک.

اسٹیجنگ

آپ کو ایک فنکشن لکھنے کی ضرورت ہے جو نمبر 1 سے n تک کنسول میں پرنٹ کرتا ہے، جہاں n ایک عدد عدد ہے جسے فنکشن پیرامیٹر کے طور پر لیتا ہے، درج ذیل شرائط کے ساتھ:

  • 3 کے ضرب کی بجائے آؤٹ پٹ فیز؛
  • نمبروں کے بجائے آؤٹ پٹ بز جو 5 کے ضرب ہیں؛
  • اعداد کے بجائے fizzbuzz آؤٹ پٹ جو 3 اور 5 دونوں کے ملٹیلز ہیں۔

مثال کے طور پر

Fizzbuzz(5)

نتیجہ

// 1۔
// 2۔
// فیز
// 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...else سٹیٹمنٹس کی ترتیب پر توجہ دینے کے قابل ہے: دوہری حالت (&&) سے شروع کریں اور اس صورت پر ختم کریں جہاں متعدد نمبر نہیں مل سکے۔ نتیجے کے طور پر، ہم تمام اختیارات کا احاطہ کرتے ہیں.

انگرام

یہ ایک ایسے لفظ کا نام ہے جس میں دوسرے لفظ کے تمام حروف ایک ہی تعداد میں، لیکن مختلف ترتیب میں ہوں۔

اسٹیجنگ

ہمیں ایک فنکشن لکھنے کی ضرورت ہے جو یہ چیک کرے کہ آیا دو تار ایناگرامس ہیں، اور کیس سے کوئی فرق نہیں پڑتا۔ صرف حروف کو شمار کیا جاتا ہے؛ خالی جگہوں یا اوقاف کے نشانات کو مدنظر نہیں رکھا جاتا ہے۔

انگرام ('فائنڈر'، 'فرینڈ') -> سچ
انگرام ('ہیلو'، 'بائے') -> غلط

آئیے کام کا تجزیہ کرتے ہیں۔

یہاں غور کرنے کی اہم بات یہ ہے کہ آپ کو دو ان پٹ لائنوں میں ہر ایک حرف اور ہر لائن میں ان کا نمبر چیک کرنے کی ضرورت ہے۔

تلاش کنندہ —> f: 1 دوست —> f: 1
i: 1 ر: 1
n: 1 i: 1
d: 1 e: 1
e: 1 n: 1
ر: 1 د: 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']

اس طرح ہمیں بلک لوپ کیے بغیر آبجیکٹ کی خصوصیات مل جاتی ہیں۔ کسی مسئلے میں، آپ اس طریقہ کو .length پراپرٹی کے ساتھ استعمال کر کے یہ چیک کر سکتے ہیں کہ آیا دونوں سٹرنگز میں حروف کی تعداد ایک جیسی ہے - یہ anagrams کی ایک اہم خصوصیت ہے۔

سروں کی تلاش کریں۔

کافی آسان کام جو اکثر انٹرویوز میں سامنے آتا ہے۔

اسٹیجنگ

آپ کو ایک فنکشن لکھنے کی ضرورت ہے جو سٹرنگ کو بطور دلیل لیتا ہے اور سٹرنگ میں موجود حرفوں کی تعداد کو لوٹاتا ہے۔
حرف "a"، "e"، "i"، "o"، "u" ہیں۔

: مثال کے طور پر

findVowels('ہیلو') // —> 2
findVowels('why') // —> 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 لوٹاتا ہے۔

فبونیکی

ایک کلاسک کام جو مختلف سطحوں پر انٹرویوز میں پایا جا سکتا ہے۔ یہ یاد رکھنے کے قابل ہے کہ فبونیکی ترتیب نمبروں کا ایک سلسلہ ہے جہاں ہر بعد والا ایک پچھلے دو کا مجموعہ ہے۔ تو، پہلے دس نمبر اس طرح نظر آتے ہیں: 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 ہو تو ہم رک جاتے ہیں۔

آؤٹ پٹ

زیادہ تر امکان ہے کہ، اگر آپ کو فرنٹ اینڈ یا جاوا اسکرپٹ ڈویلپر کی نوکری کے لیے انٹرویو دیا گیا ہے (خاص طور پر اگر یہ جونیئر لیول پر ہے) تو آپ کو ان میں سے کسی بھی کام کا سامنا کرنا پڑا ہے۔ لیکن اگر آپ ان کے سامنے نہیں آئے ہیں، تو وہ مستقبل میں کارآمد ہو سکتے ہیں - کم از کم عام ترقی کے لیے۔

Skillbox تجویز کرتا ہے:

ماخذ: www.habr.com

نیا تبصرہ شامل کریں