frontend-interview-questions

1. حلقه رویداد جاوااسکریپت چگونه کار می‌کند و چه تأثیری بر رندر و به‌روزرسانی‌های وضعیت React دارد؟

حلقه رویداد به جاوااسکریپت (تک‌ریسمانی) امکان مدیریت عملیات‌های غیرهمزمان را با استفاده از پشته فراخوانی، صف وظایف (ماکروتسک‌ها) و صف میکروتسک‌ها می‌دهد.

در React:


2. مدل ذهنی شما برای درک کلوژرهای جاوااسکریپت چیست و چگونه از آن‌ها به‌طور مؤثر در یک برنامه React استفاده می‌کنید؟

کلوژر تابعی است که به حوزه لغوی خود دسترسی حفظ می‌کند، حتی زمانی که خارج از آن حوزه فراخوانی شود.

در React:

کلوژرها باید در افکت‌ها با دقت مدیریت شوند تا از مشکلات وضعیت قدیمی جلوگیری شود.


3. ارث‌بری پروتوتایپی در جاوااسکریپت را چگونه توضیح می‌دهید و چگونه با ارث‌بری کلاسیک متفاوت است؟

ارث‌بری پروتوتایپی اشیاء را از طریق زنجیره [[Prototype]] به یکدیگر متصل می‌کند و امکان اشتراک ویژگی‌ها را فراهم می‌کند.

برخلاف ارث‌بری کلاسیک:


4. اهمیت کلمه کلیدی this در جاوااسکریپت چیست و چگونه اتصال آن را در کامپوننت‌های React مدیریت می‌کنید؟

this به زمینه اجرا اشاره دارد. در کامپوننت‌های کلاسی React، this اغلب به نمونه کامپوننت اشاره می‌کند.

در کامپوننت‌های کلاسی:

this.handleClick = this.handleClick.bind(this);

در کامپوننت‌های تابعی:


5. ماهیت تک‌ریسمانی جاوااسکریپت چگونه بر رویکرد شما برای مدیریت وظایف محاسباتی سنگین در یک برنامه React تأثیر می‌گذارد؟

از آنجا که جاوااسکریپت روی یک ریسمان واحد اجرا می‌شود، وظایف سنگین رابط کاربری را مسدود می‌کنند.

استراتژی‌ها:


6. چگونه یک جریان کاری async/await قوی در یک برنامه React برای مدیریت چندین فراخوانی API طراحی می‌کنید؟

استفاده از async/await داخل useEffect، محصور در try/catch، و به‌صورت اختیاری استفاده از Promise.all.


7. تفاوت بین پرامیس‌ها و async/await در زیرساخت چیست و چگونه استفاده آن‌ها را در React بهینه می‌کنید؟

بهینه‌سازی‌ها:


8. چگونه یک ابزار مبتنی بر پرامیس سفارشی (مثل مکانیزم تلاش مجدد) برای یک برنامه React پیاده‌سازی می‌کنید؟

const retry = (fn, retries = 3, delay = 1000) =>
  fn().catch((err) => {
    if (retries === 0) throw err;
    return new Promise((res) => setTimeout(res, delay)).then(() =>
      retry(fn, retries - 1, delay)
    );
  });


9. چگونه میکروتسک‌ها و ماکروتسک‌ها را در یک برنامه React با عملیات‌های غیرهمزمان سنگین مدیریت می‌کنید؟

از میکروتسک‌ها برای زنجیره‌بندی منطق و ماکروتسک‌ها برای به تعویق انداختن اجرا استفاده کنید.


10. چگونه از پروتکل ایتراتور غیرهمزمان (مثل for await...of) در یک برنامه React برای داده‌های جریانی استفاده می‌کنید؟

برای APIهای جریانی (مثل SSE، تکه‌های فایل) استفاده می‌شود:

async function streamData(url) {
  const response = await fetch(url);
  for await (const chunk of response.body) {
    processChunk(chunk);
  }
}

در React:


11. چگونه از ماژول‌های ES6 در یک کدبیس بزرگ React برای اطمینان از قابلیت نگهداری و tree-shaking استفاده می‌کنید؟


12. درک شما از حوزه و بالابری (hoisting) در جاوااسکریپت چیست و چگونه از مشکلات رایج در React جلوگیری می‌کنید؟

پاسخ:

در React:


13. چگونه یک کتابخانه ابزار جاوااسکریپت برای یک تیم React طراحی می‌کنید که تعادل بین محصورسازی و قابلیت استفاده مجدد را حفظ کند؟

پاسخ:


14. چگونه اصول برنامه‌نویسی تابعی (مثل تغییرناپذیری، توابع خالص) را در یک برنامه React اعمال می‌کنید؟


15. رویکرد شما برای مموایز کردن محاسبات سنگین در جاوااسکریپت برای یک برنامه React چیست؟

استفاده از useMemo:

const filtered = useMemo(() => heavyFilter(data), [data]);

از بهینه‌سازی زودهنگام اجتناب کنید؛ ابتدا پروفایل کنید. اطمینان حاصل کنید که وابستگی‌ها درست هستند تا از مقادیر قدیمی یا بازمحاسبه جلوگیری شود.


16. چگونه عملکرد جاوااسکریپت را در یک برنامه React با به حداقل رساندن تغییرات شیء بهینه می‌کنید؟


17. چگونه از پروکسی‌ها یا Reflect جاوااسکریپت در یک برنامه React برای مدیریت وضعیت پویا یا اشکال‌زدایی استفاده می‌کنید؟

استفاده از Proxy برای ردیابی تغییرات یا ساخت بسته‌بندی‌های شبه‌ری‌اکتیو:

const state = new Proxy(
  {},
  {
    set(target, key, value) {
      console.log(`${key} changed to ${value}`);
      target[key] = value;
      return true;
    },
  }
);

مناسب برای اشکال‌زدایی، کتابخانه‌های فرم یا مشاهده‌پذیرهای سفارشی.


18. درک شما از جمع‌آوری زباله جاوااسکریپت چیست و چگونه از نشت حافظه در یک برنامه React جلوگیری می‌کنید؟

جاوااسکریپت از جمع‌آوری زباله علامت‌گذاری و جاروب استفاده می‌کند. نشت‌های حافظه زمانی رخ می‌دهند که اشیاء به‌طور ناخواسته ارجاع می‌مانند.

در React:


19. چگونه مشکلات دقت اعداد اعشاری جاوااسکریپت را در یک برنامه React مدیریت می‌کنید (مثل محاسبات مالی)؟

از اعداد اعشاری بومی برای پول اجتناب کنید. استفاده از:


20. رویکرد شما برای پلی‌فیل یا شیم کردن ویژگی‌های مدرن جاوااسکریپت برای مرورگرهای قدیمی در یک برنامه React چیست؟