من أحد المترجمين: نشرنا لك مقالة كتبها ماريا بيرنا (ماريا أنتونيتا بيرنا) ، والتي تتحدث عن المهام النموذجية في جافا سكريبت ، وغالبًا ما يتم تقديمها للباحثين عن عمل الباحثين عن عمل في المقابلات. هذه المادة ستكون مفيدة في المقام الأول للمبرمجين المبتدئين. فيما يلي أمثلة لحل المشكلات ، إذا بدا لك أنها ليست جيدة جدًا ، وهناك خيار أفضل - اقترح بديلاً في التعليقات.لطالما كانت المقابلات في شركات التكنولوجيا بمثابة كلمة مرور. هذا لا يجب أن يفاجأ - المقابلة الناجحة تمنحك الفرصة للحصول على وظيفة جيدة. ولكن هذا ليس بهذه البساطة ، لأنه غالبا ما يكون من الضروري حل المشاكل المعقدة.
وفي أغلب الأحيان ، لا ترتبط معظم هذه المهام بالعمل الذي سيؤديه مقدم الطلب ، لكنها لا تزال بحاجة إلى حل. في بعض الأحيان ، يتعين عليك القيام بذلك على السبورة ، دون التحقق من Google أو أي مصدر آخر. نعم ، يتغير الوضع تدريجياً ، وترفض بعض الشركات إجراء مثل هذه المقابلات ، لكن العديد من أرباب العمل ما زالوا يلتزمون بهذا التقليد. هذه المقالة مخصصة لتحليل مهام جافا سكريبت النموذجية ، والتي تستخدم غالبًا كمهام لمقدمي الطلبات.
نذكرك: لجميع قراء "Habr" - خصم بقيمة 10،000 روبل عند التسجيل في أي دورة تدريبية في Skillbox باستخدام الرمز الترويجي "Habr".
توصي Skillbox بما يلي: دورة عملية "Mobile Developer PRO" .
الشيء الرئيسي هو الاستعداد الدقيق لمقابلتك
نعم ، قبل البدء في تفكيك المهام ، دعونا نلقي نظرة على نصائح عامة للتحضير للمقابلة.
الشيء الرئيسي هو التحضير مقدما. تحقق من مدى تذكرك للخوارزميات وهياكل البيانات ، واسحب المعرفة في المناطق التي لا تعرفها جيدًا. هناك العديد من المنصات عبر الإنترنت التي تساعد في التحضير للمقابلات. نوصي
بـ GeeksforGeeks و
Pramp و
Interviewing.io و
CodeSignal .
يجدر تعلم نطق القرار بصوت عالٍ. يُنصح بإخبار المتقدمين بما تفعله ، وليس فقط الكتابة على السبورة (أو كتابة الكود في الكمبيوتر ، أيضًا بصمت). وبالتالي ، إذا ارتكبت خطأً في الكود ، لكن القرار سيكون صحيحًا بشكل عام ، يمكنك زيادة فرصك في النجاح.
يجب فهم المشكلة قبل متابعة الحل. في بعض الحالات ، يمكنك فهم المهمة بشكل سطحي ثم السير في الطريق الخطأ. قد يكون من المفيد طرح بعض الأسئلة التوضيحية على القائم بإجراء المقابلة.
تحتاج إلى ممارسة كتابة التعليمات البرمجية يدويًا ، وليس على جهاز كمبيوتر. يحدث أنه أثناء المقابلات يتم إعطاء علامة ومجلس إدارة حيث لا توجد نصائح أو التنسيق التلقائي. عند البحث عن حل ، اكتب الرمز الخاص بك على قطعة من الورق أو مباشرة على السبورة. إذا وضعت كل شيء في الاعتبار ، يمكنك أن تنسى شيئًا مهمًا.
مهام قالب جافا سكريبت
ربما تكون بعض هذه المهام مألوفة لك بالفعل. إما أنك مرت بمقابلات حيث كان عليك حل شيء مشابه ، أو قمت بممارستها أثناء تعلم JavaScript. حسنًا ، حان الوقت لحلها مرة أخرى ، مع شرح مفصل للعملية.
سياق متناظرpalindrome هي كلمة أو جملة أو تسلسل من الأحرف التي يمكن قراءتها كما هي ، سواء في الاتجاه المعتاد أو في الاتجاه المعاكس. على سبيل المثال ، "Anna" هي طبقة متناظرة ، لكن "table" و "John" ليست كذلك.
إنتاجإعطاء سلسلة ؛ تحتاج إلى كتابة وظيفة تسمح لك بالعودة صوابًا إذا كانت السلسلة متناظرة ، وغير صحيحة إن لم تكن كذلك. في هذه الحالة ، تحتاج إلى مراعاة المسافات وعلامات الترقيم.
palindrome ('racecar') === صحيح
palindrome ('table') === falseنحن تفكيك المهمةالفكرة الرئيسية هنا هي قلب الخط في الاتجاه المعاكس. إذا كان الخط "العكسي" مطابقًا تمامًا للخط الأصلي ، فحينئذٍ حصلنا على متناظرة ويجب أن تعود الوظيفة إلى حقيقة. إذا لم يكن كذلك ، خطأ.
قرارهنا هو الرمز الذي يحل palindrome.
const palindrome = str => {
الخطوة الأولى هي تحويل أحرف سلسلة الإدخال إلى أحرف صغيرة. هذا هو ضمان أن البرنامج سوف يقارن بالضبط الشخصيات نفسها ، وليس القضية أو أي شيء آخر.
والخطوة الثانية هي عكس الخط. من السهل القيام بذلك: تحتاج إلى تحويله إلى صفيف باستخدام طريقة .split () (مكتبة السلسلة). ثم نقلب المجموعة باستخدام .reverse () (مكتبة الصفيف). الخطوة الأخيرة هي تحويل الصفيف العكسي إلى سلسلة باستخدام .join () (مكتبة صفيف).
الآن كل ما نحتاج إليه هو مقارنة السلسلة "العكسية" بالسلسلة الأصلية ، وإرجاع النتيجة صحيحة أو خاطئة.
FizzBuzzواحدة من المهام المقابلة الأكثر شعبية.
إنتاجيجب كتابة دالة تعرض الأرقام من 1 إلى n على وحدة التحكم ، حيث n عبارة عن عدد صحيح تأخذه المعلمة كمعلمة ، بالشروط التالية:
- إخراج الدهون بدلا من مضاعفات 3 ؛
- إخراج buzz بدلاً من مضاعفات 5؛
- إخراج fizzbuzz بدلاً من الأرقام التي هي مضاعفات كل من 3 و 5.
مثالFizzbuzz (5)يؤدي// 1
// 2
// fizz
// 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++) {
تقوم الوظيفة بإجراء الفحوصات اللازمة باستخدام عبارات شرطية وتنتج النتيجة التي يحتاجها المستخدم. يجب أن تنتبه المهمة لترتيب عبارات if ... else: ابدأ بشرط مزدوج (&&) وانتهي بالحالة عندما يتعذر العثور على أرقام متعددة. نتيجة لذلك ، نحن نغطي جميع الخيارات.
إعادة ترتيب الأحرفهذا هو اسم الكلمة التي تحتوي على جميع أحرف كلمة أخرى بنفس الكمية ، ولكن بترتيب مختلف.
إنتاجتحتاج إلى كتابة وظيفة تتحقق مما إذا كان سطرين من الجناس ، وحالة الحروف لا تهم. تؤخذ فقط الأحرف في الاعتبار ؛ لا تؤخذ المسافات أو علامات الترقيم في الاعتبار.
الجناس الناقص ('مكتشف' ، 'صديق') -> صحيح
الجناس الناقص ('مرحبا' ، 'وداعا') -> خطأنحن تفكيك المهمةمن المهم مراعاة أنه من الضروري التحقق من كل حرف في سطرين إدخال ورقمهما في كل سطر.
مكتشف -> f: 1 صديق -> f: 1
أنا: 1 ص: 1
n: 1 i: 1
d: 1 e: 1
ه: 1 ن: 1
ص: 1 د: 1لتخزين بيانات الجناس ، يجب عليك اختيار بنية مثل كائن JavaScript الحرفي. المفتاح في هذه الحالة هو رمز الحرف ، والقيمة هي عدد التكرارات في السطر الحالي.
هناك شروط أخرى:
- تحتاج إلى التأكد من عدم مراعاة حالة الأحرف عند المقارنة. فقط قم بتحويل كلا السلاسل إلى أحرف صغيرة أو كبيرة.
- نستبعد من المقارنة جميع الأحرف غير. من الأفضل العمل مع التعبيرات العادية .
قرار
لاحظ استخدام
Object.keys () في المقتطف أعلاه. تقوم هذه الطريقة بإرجاع صفيف يحتوي على الأسماء أو المفاتيح بنفس الترتيب الذي تظهر به في الكائن. في هذه الحالة ، سيكون الصفيف مثل هذا:
['f' ، 'i' ، 'n' ، 'd' ، 'e' ، 'r']وبالتالي ، نحصل على خصائص الكائن دون الحاجة إلى إجراء دورة حجم. في هذه المهمة ، يمكنك استخدام هذه الطريقة مع خاصية .length - للتحقق مما إذا كان نفس عدد الأحرف في كلا الخطين - وهذه ميزة مهمة من الجناس.
بحث حرفيمهمة بسيطة إلى حد ما وغالبًا ما تأتي عبر المقابلات.
إنتاجتحتاج إلى كتابة دالة تأخذ سلسلة كوسيطة وتقوم بإرجاع عدد حروف العلة المضمنة في السلسلة.
الحروف المتحركة هي "a" ، "e" ، "i" ، "o" ، "u".
مثال:findVowels ('hello') // -> 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 (). وهو متاح لكلا السلاسل والمصفوفات. يجب استخدامه لتحديد ما إذا كان صفيف يحتوي على قيمة محددة. تقوم هذه الطريقة بإرجاع true إذا كان الصفيف يحتوي على القيمة المحددة ، و false إن لم يكن.
يوجد حل أكثر إيجازًا للمشكلة:
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.
إنتاجنحتاج إلى كتابة دالة تُرجع السجل nth في تسلسل معين ، و n هو الرقم الذي يتم تمريره كوسيطة للدالة.
فيبوناتشي (3) // -> 2تتضمن هذه المهمة تكرار الحلقات عدة مرات كما هو محدد في الوسيطة ، مع إعادة القيمة في الموضع المناسب. طريقة بيان المشكلة هذه تتطلب استخدام الدورات. إذا كنت تستخدم العودية بدلاً من ذلك ، فقد يعجبك القائم بإجراء المقابلة ويعطيك بعض النقاط الإضافية.
قرار const fibonacci = num => {
في صفيف النتائج ، يوجد أول رقمين في صف واحد ، حيث أن كل سجل في التسلسل يتكون من مجموع الرقمين السابقين. في البداية ، لا يوجد رقمان يمكنك الحصول عليهما للحصول على الرقم التالي ، لذلك لا يمكن للدورة إنشاءهما في الوضع التلقائي. ولكن ، كما نعلم ، يكون الرقمان الأوليان دائمًا 0 و 1. لذلك ، يمكنك تهيئة مجموعة من النتائج يدويًا.
بالنسبة للتكرار ، كل شيء هنا أبسط وأكثر تعقيدًا في نفس الوقت:
const fibonacci = num => {
ما زلنا ندعو فيبوناتشي () ، ويمر بأعداد أصغر باستمرار كوسائل نتوقف عندما تكون الحجة التي تم تمريرها هي 0 أو 1.
استنتاج
على الأرجح ، واجهت بالفعل أي من هذه المهام إذا تمت مقابلتك عن عمل مطور الواجهة الأمامية أو جافا سكريبت (خاصة إذا كان هذا هو المستوى المبتدئ). لكن إذا لم يأتوا إليك ، فيمكنهم أن يكونوا في متناول اليد في المستقبل - على الأقل من أجل التنمية العامة.
توصي Skillbox بما يلي: