هل JavaScript مناسبة لهياكل البيانات والخوارزميات؟
نعم، خاصةً إن كنت تتجه إلى وظائف الواجهة الأمامية أو التطوير الشامل، حيث هي اللغة التي ستجري بها مقابلتك. وهناك ثلاث خصائص غريبة تستحق أن تتعلمها مبكراً: لا توجد كومة أو طابور مدمج، وsort() تقارن العناصر كنصوص ما لم تمرّر دالة مقارنة، وكل رقم فيها عدد بفاصلة عائمة من 64 بت، لذا تحتاج الأعداد الصحيحة التي تتجاوز 2^53 إلى BigInt.
هل في JavaScript كومة أو طابور أولوية مدمج؟
لا. لديك Array وMap وSet ونسخها الضعيفة، وهذا كل شيء. في المقابلة إما أن تكتب كومة ثنائية صغيرة في نحو ثلاثين سطراً، وإما أن تقول إنك ستستخدم واحدة وتذكر تكاليفها؛ وفي الحالتين يجب أن تكون قد كتبت واحدة من قبل. والخطوة الثانية من هذا المسار هي حيث تفعل ذلك.
لماذا تُرجع [10, 9, 1].sort() النتيجة [1, 10, 9]؟
لأن Array.prototype.sort من دون دالة مقارنة تحوّل العناصر إلى نصوص وتقارنها بترتيب UTF-16، و'10' تأتي قبل '9'. رتّب الأرقام باستخدام nums.sort((a, b) => a - b). إنه أول خطأ برمجي يصادفه معظم الناس حين يبدؤون كتابة شيفرة ترتيب بلغة JavaScript.
هل تسأل مقابلات الواجهة الأمامية عن هياكل البيانات والخوارزميات؟
في كثير من الشركات الكبرى، نعم: عادةً جولة أو جولتان عن المصفوفات وجداول التجزئة والأشجار واجتياز الرسوم البيانية، بلغة JavaScript، إلى جانب جولات واجهة المستخدم وتصميم الأنظمة. أما الشركات الأصغر فتميل أكثر إلى المهام العملية. وفي الحالتين، معرفتك أن البحث في Map يتم بزمن ثابت وأن الحلقة المتداخلة على قائمتين ليست كذلك هي ما يفصل بين إجابة تعمل وإجابة سريعة.
ما الدورات في هذا المسار التي لا تُدرَّس بلغة JavaScript؟
ثلاث دورات: البرمجة الديناميكية وسلسلة مقابلات Python تُدرَّسان بلغة Python، وعمليات البتات بلغة C++. وهي مدرجة بعد الخطوات، ولكل منها رابط يفتحها بلغتها. وفي JavaScript معاملات البتات نفسها، إضافة إلى >>>، لكنها تطبّقها على أعداد صحيحة من 32 بت، وهذا ما يجدر تذكّره حين تنقل حيلة من لغة أخرى.
هل أحتاج إلى معرفة JavaScript قبل بدء هذا المسار؟
الدوال والمصفوفات والكائنات والأصناف على الأقل. إن كانت هذه جديدة عليك، فدورة JavaScript من Coddy تغطيها أولاً مجاناً، ويبدأ هذا المسار من حيث تنتهي.