مصاحبه کاری موقعیتی است که همه ما در مسیر شغلی خودمان با آن روبهرو میشویم. مصاحبه، به خصوص برای مشاغل برنامهنویسی در مقایسه با سایر مشاغل از اهمیت بالاتری برخوردار است. چرا که برنامهنویس باید بتواند در مصاحبه شغلی تمام تواناییهای فنی و انگیزه و اشتیاق خود برای برنامهنویسی و همکاری با یک شرکت را به نمایش بگذارد.
در مقاله قبل از سری مقالات آموزش جاوا اسکریپت، برخی از مهمترین سوالات مصاحبه برنامهنویس جاوا اسکریپت مخصوص برنامهنویسان مبتدی را بررسی کردیم. در قسمت دوم از این سری، سؤالات مصاحبه برنامهنویس جاوا اسکریپت مخصوص برنامهنویسان باتجربهتر را بررسی خواهیم کرد.
۱. الگوهای طراحی در جاوا اسکریپت را توضیح دهید.
الگوهای طراحی در جاوا اسکریپت به مجموعهای از روشها و الگوهای قابلتکرار گفته میشود که در برنامهنویسی برای حل مشکلات معمول به کار میروند. این الگوها به برنامهنویس کمک میکنند تا کد پایدارتر باشد یعنی در مدت زمان طولانی و در مقابل تغییرات و توسعه به راحتی قابل مدیریت باشد.
این الگوها بهطور کلی به سه دسته تقسیم میشوند:
- الگوهای طراحی ساختاری (Structural Design Patterns) کمک میکنند تا ارتباطات بین اجزا را با تعریف یک روش سادهتر تعیین کنیم.
- الگوهای طراحی سازنده (Creational Design Patterns) برای ایجاد اشیاء مناسب برای یک موقعیت خاص استفاده میشوند.
- الگوهای طراحی رفتاری (Behavioral Design Patterns) نمونههای ارتباط معمول بین اشیاء در جاوا اسکریپت را برجسته میکنند.
۲. تفاوت بین انواع وراثت Prototypal و Classical را توضیح دهید.
در برنامهنویسی دو نوع اصلی از وراثت وجود دارد: وراثت کلاسیک و وراثت پروتوتایپی.
وراثت کلاسیک: در این نوع وراثت، اشیاء از کلاسها ایجاد میشوند. به عنوان مثال، “خودرو” یک شیء از کلاس “وسایل نقلیه” است و از آن ارثبری میکند. به عبارت دیگر اشیاء نمونههای خاصی از یک کلاس هستند.
وراثت پروتوتایپی: این نوع وراثت به شکل متفاوتی عمل میکند. در وراثت پروتوتایپی، هر شیء میتواند از یک شیء دیگر کپی شود، حتی اگر از یک کلاس مشترک ارثبری نکنند. یعنی یک شیء میتواند به عنوان یک الگو برای اشیا دیگر عمل کند، بدون اینکه از یک کلاس مشخص ارثبری کند.
۳. منظور از Object Destructuring یا تخریب چیست؟
تخریب (Destructuring) یک ویژگی در جاوا اسکریپت است. و به برنامهنویس این امکان را میدهد تا اطلاعاتی را که در یک شی یا یک آرایه وجود دارد، به راحتی از داخل آن استخراج کند. این ویژگی در جاوا اسکریپت با انتشار استاندارد ES6، معرفی شد. در زیر دو نمونه کد برای تخریب اشیا و آرایه آورده شده است:
const classDetails = { strength: 78, benches: 39, blackBoard: 1 } const { strength: classStrength, benches: classBenches, blackBoard: classBlackBoard } = classDetails; console.log(classStrength); // نتیجه: 78 console.log(classBenches); // نتیجه: 39 console.log(classBlackBoard); // نتیجه: 1
const arr = [1, 2, 3, 4]; const [first, second, third, fourth] = arr; console.log(first); // نتیجه: 1 console.log(second); // نتیجه: 2 console.log(third); // نتیجه: 3 console.log(fourth); // نتیجه: 4
بیشتر بخوانید: “راهنمای جامع جاوا اسکریپت ES6“
۴. WeakSet را در جاوا اسکریپت توضیح دهید.
WeakSet در جاوا اسکریپت یک نوع داده (Data type) است که برای ذخیره مجموعهای از اشیاء منحصربهفرد و مرتب استفاده میشود. WeakSet مانند Set عمل میکند، اما با چند تفاوت مهم:
- WeakSet فقط اشیاء را در خود نگه میدارد و انواع دادههای دیگر مانند اعداد یا رشتهها را نمیپذیرد.
- ارتباط میان اشیاء داخل WeakSet ضعیف است. یعنی اگر هیچ مرجعی به یک شیء داخل WeakSet اشاره نکند، این شیء ممکن است توسط مکانیزم مدیریت حافظه جاوا اسکریپت (Garbage Collector) حذف شود.
- WeakSet تنها سه متد دارد: `()add` برای افزودن یک شیء به مجموعه، `()delete` برای حذف یک شیء، و `()has` برای بررسی وجود یک شیء در مجموعه.
const weakSet = new WeakSet(); let obj1 = { message: "Hello world" }; weakSet.add(obj1); console.log(weakSet.has(obj1)); // true weakSet.delete(obj1); console.log(weakSet.has(obj1)); // false
۵. توابع مولد یا Generator چه توابعی هستند؟
توابع مولد (Generator Functions) در جاوا اسکریپت نوع خاصی از توابع هستند که در ورژن ES6 معرفی شدند. یکی از ویژگیهای توابع مولد این است که میتوانند در حین اجرا متوقف شوند و سپس از جایی که متوقف شدهاند، ادامه دهند. توابع مولد با استفاده از کلمه کلیدی `function*` به جای `function` معمولی تعریف میشوند. به عنوان مثال:
function* genFunc(){ // انجام عملیات
یکی دیگر از تفاوتهای توابع مولد با توابع معمولی این است که در تابع معمولی از کلمه کلیدی `return` برای بازگشت یک مقدار استفاده میشود و به محض اجرای دستور `return`، اجرای تابع متوقف میشود. اما توابع مولد هنگامی که فراخوانی میشوند، کد را اجرا نمیکنند. بلکه یک شیء مولد را برمیگردانند که اجرای کد را کنترل میکند. شیء مولد شامل متد به نام `()next` است. وقتی این متد فراخوانی میشود، کد تا نزدیکترین دستور `yield` اجرا میشود و مقدار `yield` برگشت داده میشود. برای مثال کد زیر را در نظر بگیرید:
function* genFunc(){ yield 3; yield 4; } genFunc(); genFunc().next();
خروجی کد:
{value: 3, done: false}
همانطور که میبینید، متد `()next` یک شیء با ویژگیهای `value` و `done` برمیگرداند. ویژگی `value` مقدار `yield` را نشان میدهد و ویژگی `done` نشاندهنده این است که آیا اجرای کد تمام شده است یا خیر (اگر کد تمام شده باشد، `done` برابر با `true` خواهد بود).
۶. در جاوا اسکریپت، به چند روش میشود یک شیء ساخت؟
در جاوا اسکریپت، میتوانیم اشیاء را به چندین روش مختلف ایجاد یا تعریف کنیم:
- Object: با استفاده از کلمه کلیدی `Object` یک شیء ایجاد مکنیم.
- استفاده از Class: این روش امکان ایجاد اشیاء با ویژگیها و عملکردهای مشخص را به برنامهنویس میدهد.
- متد ()create: میشود از متد `create()` که به شیء اصلی اضافه شده است، برای ایجاد شیء جدید استفاده کرد.
- Literal (لیترال) شیء: میتوانیم با استفاده از لیترالها (مثل `{}` برای اشیاء و `[]` برای آرایهها) اشیاء را به سادگی ایجاد کنیم. این روش امکان مستقیم ایجاد و تعریف ویژگیهای شیء را میدهد.
- استفاده از تابع: میشود از توابع مثل کارخانههایی برای ایجاد اشیاء استفاده کرد. این روش امکان ایجاد اشیاء با ویژگیهای مشخصی را میدهد.
- Object Constructor: توابع سازنده اشیا توابعی هستند که با استفاده از کلمه کلیدی `new` ایجاد میشوند و شیء جدیدی با ویژگیهای مشخص ایجاد میکنند.
۷. چرا در برنامهنویسی جاوا اسکریپت از callbacks استفاده میشود؟
در برنامهنویسی جاوا اسکریپت با استفاده از callback میتوانید بگویید “کار A را انجام بده، وقتی که انجام شد، کار B را انجام بده، و بعد از انجام کار B، کار C را انجام بده، و الی آخر.” به این ترتیب، هر کار تنها زمانی انجام میشود که کار قبلی تمام شده باشد.
کاربرد اصلی callback در جاوا اسکریپت این است که به توسعهدهندگان امکان میدهد تا کدهایی را بنویسند که همزمان و منطقی اجرا میشوند و به رویدادها و عملیات زمانبر واکنش نشان میدهند. با استفاده از callbackها میشود عملیاتی را که زمانش نامعلوم است (مانند درخواستهای شبکه یا انتظار برای واکنش کاربر) مدیریت کرد.
به عنوان مثال، با استفاده از callbackها درخواستهای HTTP به سرور ارسال میشود و زمانی که پاسخ از سرور دریافت شد، کدهای واکنش به پاسخ اجرا میشود. این کاربرد اهمیت زیادی در توسعه برنامههای تحت وب دارد. چرا که بدون مسدود کردن اجرای کد، میشود همزمان با چند عملیات دیگر به دادههای سرور دسترسی داشته باشیم.
۸. هدف از کد زیر چیست؟
var scope = "global scope"; function check() { var scope = "local scope"; function f() { return scope; } return f; }
در این کد یک تابع به نام `check` تعریف شده که در داخل آن یک متغیر محلی به نام `scope` تعریف و مقدار “local scope” به آن داده شده است. سپس یک تابع دیگر به نام `f` تعریف شده که مقدار متغیر `scope` را برمیگرداند.
تابع `check` تابع `f` را به عنوان خروجی برمیگرداند. حالا اگر تابع `check` را فراخوانی کنیم و نتیجه را در یک متغیر ذخیره کنیم، این متغیر به یک تابع تبدیل میشود که مقدار “local scope” را برمیگرداند.
۹. Temporal Dead Zone چیست؟
Temporal Dead Zone (TDZ) یک وضعیت در جاوا اسکریپت است که وقتی از `let` و `const` برای تعریف متغیرها استفاده میشود، دسترسی به متغیرها قبل از مقداردهی اولیه، غیرممکن است. به عبارت دیگر، تا زمانی که متغیرها تعریف نشوند، نمیتوان به آنها دسترسی داشت و این ممکن است به خطاهای اجرایی منجر شود. به چنین وضعیتی که دسترسی به متغیر ممکن نیست، Temporal Dead Zone گفته میشود.
۱۰. نقش deferred scripts در جاوا اسکریپت چیست؟
زمانی که کاربر یک صفحه وب را باز میکند، مرورگر شروع به بارگذاری محتوای آن صفحه میکند. این محتوا شامل متن، تصاویر، و کدهای جاوا اسکریپت است. اگر کدهای جاوا اسکریپت در صفحه وب زیاد و یا پیچیده باشد، بارگذاری و اجرای آنها زمانبر خواهد بود. و این باعث تأخیر در نمایش صفحه به کاربر میشود.
Deferred scripts به عنوان یک روش بهینه برای مدیریت اسکریپتها عمل میکند. در این صورت به جای اجرای فوری کدهای صفحه، ابتدا دیگر محتوای صفحه مانند متن و تصویر بارگذاری و سپس اسکریپتهای جاوا اسکریپت اجرا میشوند. به این ترتیب، محتوای صفحه به سرعت به کاربر نمایش داده میشود و اسکریپتها نمیتوانند فرآیند بارگذاری صفحه را به تأخیر بندازند.
بیشتر بخوانید: “مهمترین مهارتها برای برنامهنویسان وب و اپلیکیشن“
کلام آخر
شاید اینطور به نظر برسد که مصاحبه برای برنامهنویسانی که دارای سابقهکاری هستند و تجربه بیشتری دارند، از اهمیت کمی برخوردار است. اما اینطور نیست. برنامهنویسان باتجربه و باسابقه نیز باید با شناخت و آمادگی کامل در جلسه مصاحبه استخدامی حاضر شوند. چهبسا ممکن است سؤالات مصاحبه برای آنها چالشیتر باشد.
در واقع، در مصاحبه کاری برنامهنویسان باتجربه معمولا سؤالات تخصصیتر و مبتنیبر تجربه مطرح میشوند. این سؤالات ممکن است به تجربههای گذشته، پروژههایی که در آنها شرکت کردهاند، مسائل پیشآمده در طول مسیر حرفهایشان و نیز رویکردهای تجارب شخصیشان مربوط شود. بنابراین، حتی برنامهنویسان باتجربه نیز نیاز به آمادگی و تمرین در مورد سؤالات مصاحبه دارند تا بتوانند بهترین نمایش را از تواناییها و تجربیات خود ارائه دهند و از فرصتهای شغلی مناسب بهرهمند شوند.
The post سوالات مصاحبه کاری جاوا اسکریپت (مخصوص برنامهنویسان حرفهای) appeared first on آمانج آکادمی مرکز آموزش های برنامه نویسی ، دیجیتال مارکتینگ و دیزاین.