frontend-interview-questions

1. چگونه یک معماری میکروفرانت‌اند برای یک برنامه بزرگ React که بین چندین تیم تقسیم شده طراحی می‌کنید؟

پاسخ:

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

رویکردها:

مثال (فدراسیون ماژول):

// Host (پوسته اپلیکیشن)
import('checkout/CheckoutApp');

// checkout webpack.config.js
new ModuleFederationPlugin({
  name: 'checkout',
  filename: 'remoteEntry.js',
  exposes: {
    './CheckoutApp': './src/CheckoutApp',
  },
});


2. رویکرد شما برای مدیریت وابستگی‌های مشترک در یک اکوسیستم میکروفرانت‌اند React چیست؟

پاسخ:

استفاده از پیکربندی shared فدراسیون ماژول Webpack برای جلوگیری از تکرار:

shared: {
  react: { singleton: true, requiredVersion: '^18.0.0' },
  'react-dom': { singleton: true },
}

ملاحظات کلیدی:


3. چگونه اشتراک وضعیت بین میکروفرانت‌اندها در یک برنامه React را مدیریت می‌کنید؟

پاسخ: یکی از موارد زیر را بر اساس نیازهای جداسازی استفاده کنید:

// هاست فروشگاه ریموت را مصرف می‌کند
import useCartStore from 'cart/store';

وضعیت مشترک را حداقل نگه دارید تا استقلال MFE حفظ شود.


4. استراتژی شما برای مسیریابی در یک برنامه میکروفرانت‌اند React چیست؟

پاسخ: دو استراتژی رایج:

<Route path="/checkout/*" element={<CheckoutApp />} />
<BrowserRouter basename="/checkout">...</BrowserRouter>

از پیشوندهای URL و ساختار مسیر ثابت برای جلوگیری از برخورد استفاده کنید.


5. چگونه ثبات رابط کاربری/تجربه کاربری را در میکروفرانت‌اندهای ساخته‌شده توسط تیم‌های مختلف تضمین می‌کنید؟

پاسخ:

اختیاری: اعمال تم‌سازی در زمان اجرا یا توکن‌های طراحی برای یکپارچه‌سازی برند.


6. رویکرد شما برای تست سرتاسری یک برنامه میکروفرانت‌اند React چیست؟

پاسخ:


7. چگونه میکروفرانت‌اندها را در یک خط لوله CI/CD برای یک پروژه React مستقر می‌کنید؟

پاسخ:

از نسخه‌بندی معنایی و ریموت‌های خاص محیط برای پشتیبانی از تست چندمحیطی استفاده کنید.


8. فرآیند شما برای اشکال‌زدایی یک برنامه میکروفرانت‌اند React وقتی مشکلات چندین ماژول را در بر می‌گیرند چیست؟

پاسخ:

  1. بازتولید مشکل در یک محیط توسعه یکپارچه.
  2. بررسی کنسول/شبکه مرورگر برای remoteEntry.js گمشده یا نادرست.
  3. استفاده از نقشه‌های منبع و لاگ‌های هاست برای قابلیت ردیابی.
  4. افزودن تگ‌های نسخه به هر MFE در طول ساخت.
  5. استفاده از واردات دینامیک با لاگ‌گیری برای تأیید رفتار بارگذاری.

پرچم‌های ویژگی را برای غیرفعال کردن انتخابی MFEها برای جداسازی سریع‌تر اضافه کنید.


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

پاسخ:

const CheckoutApp = React.lazy(() => import('checkout/CheckoutApp'));


10. چگونه یک تیم را برای پذیرش رویکرد میکروفرانت‌اند در یک کدبیس React آماده می‌کنید؟

پاسخ:

  1. ارائه مستندات معماری و دیاگرام‌های سطح بالا.
  2. راه‌اندازی مخازن قالب با ابزارها (مثل فدراسیون ماژول، تست).
  3. برگزاری جلسات آماده‌سازی و راهنمایی‌ها.
  4. معرفی یک پورتال توسعه‌دهنده برای کشف ریموت‌ها، ماژول‌های مشترک و استفاده از سیستم طراحی.
  5. برنامه‌نویسی جفتی + بررسی‌های کد با تمرکز بر مرزها و APIهای مبتنی بر قرارداد.

APIهای داخلی را ساده و مبتنی بر رابط نگه دارید تا جفت‌سازی تنگ به حداقل برسد.