اتخطّى للمحتوى

المرحلة 04 · الاحتراف والإنترفيودرس 21 من 218 دقيقة قراءةآخر تحديث:

Lesson 21 / 21

Final Review& Mock.

آخر يوم: مراجعة سريعة لكل المفاهيم، أسئلة سيناريو حقيقية زي اللي بيتسألوا في الإنترفيو، أسئلة سلوكية بطريقة STAR، وتشيك ليست ليوم الإنترفيو.

● Interview day Cheat Sheet Scenarios Behavioral Checklist

المراجعة النهائية بتجمع أهم مفاهيم Magento 2 قبل الإنترفيو في مكان واحد: cheat sheet للـ DI والـ Plugins والـ Observers والـ Data Layer، وأسئلة سريعة بإجابات قصيرة، وسيناريوهات عملية، وأسئلة سلوكية بطريقة STAR، و checklist ليوم الإنترفيو نفسه من التحضير لحد الأسئلة اللي تسألها إنت.

01

Quick Cheat Sheet

كل مفهوم أساسي في سطر واحد. راجعهم قبل الإنترفيو بساعة.

preference
يستبدل class بآخر في كل النظام (globally).
virtualType
configuration جديد باسم لـ class موجود، بدون ملف PHP.
Factory
instance جديدة كل مرة عن طريق ->create().
Proxy
lazy-load لـ dependency تقيلة لحد ما تتستخدم.
Object Manager
ممنوع تستخدمه مباشرة — استخدم constructor injection.
Plugin
يغيّر input/output لـ public method محددة (before/after/around).
Observer
يتفاعل مع event حصل (order placed) — pub/sub.
Preference
يستبدل الـ class بالكامل — أقوى وأخطر خيار.
i
الترتيب من الأخف للأثقل: after plugin → observer → before plugin → around plugin → preference. اختار الأخف اللي يحل المشكلة.
Model
entity واحدة + business logic.
ResourceModel
الطبقة الوحيدة اللي بتكلّم الـ DB.
Collection
سجلات كتير + filters + lazy loading.
Repository
الـ public API للبيانات (service contract).
EAV
Product / Category / Customer — مرن بس أبطأ.
• • •
02

Rapid-Fire Q&A

أسئلة قصيرة بإجابات مباشرة. لو عرفت تجاوب عليها كلها بسرعة، أنت جاهز.

Qالفرق بين setup:upgrade و setup:di:compile؟
ج: upgrade بيطبّق الـ modules والـ patches ويحدّث الـ schema. di:compile بيولّد الـ DI classes (factories, proxies, interceptors) للـ production.
Qإمتى تستخدم around plugin؟
ج: بس لما تحتاج تتحكم إذا كانت الـ method الأصلية هتشتغل أصلًا أو تعدّل قبل وبعد في نفس الوقت. غير كده استخدم before/after.
Qليه مانعملش new مباشرة؟
ج: بيكسّر الـ DI، بيخفي الـ dependencies، وبيمنع الـ plugins من الاشتغال على الـ object. استخدم constructor injection أو factory.
Qإيه الـ areas في Magento؟
ج: frontend, adminhtml, webapi_rest, webapi_soap, crontab, وgraphql. كل area ليه config خاص بيه.
Qفين بيتخزّن الكود المولّد؟
ج: في فولدر generated/ — الـ factories, proxies, interceptors كلها بتتولّد هنا.
Qإيه الفرق بين cache:clean و cache:flush؟
ج: clean يمسح عناصر Magento بس. flush يفضّي الـ storage بالكامل بما فيه تطبيقات تانية على نفس Redis.
Qإزاي تعمل override لـ template (.phtml)؟
ج: عن طريق الـ theme (نسخ المسار نفسه في الـ theme) أو عن طريق layout XML بـ setTemplate. مش بتعدّل ملف الـ core.
Qالفرق بين Block و ViewModel؟
ج: الـ ViewModel بيفصل منطق الـ view عن الـ Block، أخف وأسهل في الـ testing، وبيتحقن في الـ template عن طريق الـ layout XML. الاتجاه الحديث المفضّل.
Qإيه الـ dependency injection في عناصر مش-object زي arrays؟
ج: بتتحقن عن طريق <arguments> في الـ di.xml بأنواع زي array, string, boolean, object.
Qإزاي تمنع reindex ثقيل وقت الحفظ؟
ج: بتخلي الـ indexers على Update by Schedule عشان الـ cron يعالج التغييرات على دفعات بدل الفهرسة الفورية.
Qإيه الـ di.xml اللي بيتطبّق أولًا لو فيه تعارض؟
ج: الـ area-specific (مثلًا adminhtml) بيتجاوز الـ global. وترتيب الـ modules في الـ sequence بيأثر على أي preference بيكسب.
Qإزاي تعمل log في Magento؟
ج: بتحقن Psr\Log\LoggerInterface وتستخدم ->info() / ->error()، أو تعمل logger مخصوص بـ virtualType لملف منفصل.
• • •
03

Scenario Questions

"إزاي تعمل كذا؟" — أسئلة عملية بتقيس فهمك الحقيقي مش الحفظ.

SCENARIOعايزين نضيف 10% على سعر كل منتج في category معيّنة عند العرض. إزاي؟
الطريقة المثالية: after plugin على method الـ price (زي getPrice / getFinalPrice)، بتشيك على الـ category جوّه الـ plugin وتعدّل الـ result. مانعملش observer لأننا محتاجين نغيّر قيمة راجعة من method محددة، والـ plugin هو الأداة الصح لده.
SCENARIOلما order يتعمل، لازم نبعت بياناته لـ ERP خارجي — بس من غير ما نبطّئ الـ checkout. إزاي؟
الطريقة المثالية: Observer على event checkout_submit_all_after بيحط رسالة في Message Queue بدل ما يبعت مباشرة. الـ consumer بياخد الرسالة ويبعتها للـ ERP في الخلفية — كده الـ checkout يفضل سريع والـ integration async.
SCENARIOعايزين نعمل CRUD كامل لـ entity جديدة (مثلًا "Ticket") في الـ admin. إيه الخطوات؟
الخطوات:
  • عرّف الجدول في db_schema.xml.
  • اعمل Model + ResourceModel + Collection.
  • عرّف Api/Data/TicketInterface و TicketRepositoryInterface واربطهم بـ preferences.
  • اعمل الـ admin: routes.xml, acl.xml, menu.xml, controllers.
  • اعمل الـ UI Component grid (listing) و form مع DataProvider.
  • (اختياري) عرّض الـ repository كـ REST عن طريق webapi.xml.
SCENARIOالموقع بقى بطيء بعد ما نزّلت module جديد. إزاي تشخّص المشكلة؟
خطوات التشخيص: اتأكد إن الـ deploy mode على production وإن الـ caches شغّالة. راجع لو الـ module بيعمل around plugins كتير أو بيحمّل collections تقيلة في كل request. استخدم Xdebug profiler أو Blackfire، وشوف الـ N+1 queries في الـ loops. اتأكد إن الـ indexers مش على "on save".
• • •
04

Debugging & Best Practices

الحاجات اللي بتفرّق بين developer شغّال وdeveloper محترف. بيسألوا عنها عشان يقيسوا خبرتك العملية.

  • Xdebug — الـ step debugging الأساسي مع الـ IDE.
  • لوجات في var/log/system.log, exception.log, debug.log.
  • developer mode بيظهر الأخطاء بالتفصيل (متستخدمهوش في production).
  • bin/magento setup:di:compile بيكشف أخطاء الـ DI بدري.
  • الـ profilers: Blackfire / New Relic للـ performance.
  • عمرك ما تعدّل ملفات الـ core — استخدم plugins / preferences / events.
  • دايمًا اعتمد على service contracts (repositories) مش الـ models مباشرة.
  • اعمل type-hint على interfaces مش concrete classes.
  • تجنّب around plugins إلا للضرورة.
  • الـ indexers على schedule في production.
  • متعملش business logic في الـ templates — استخدم ViewModels.
  • استخدم declarative schema مش الـ install scripts القديمة.
i
لو المُقابِل سألك سؤال مفتوح، اذكر "أنا مبعدّلش الـ core أبدًا" و"بستخدم service contracts" — دول بيوضّحوا إنك بتفكر صح في الـ upgradability.
• • •
05

Behavioral (STAR)

مش كل الإنترفيو تقني. الأسئلة السلوكية بتتجاوب بطريقة STAR عشان تبقى منظّمة ومقنعة.

S
Situation — الموقف باختصار (السياق والمشكلة).
T
Task — إيه كان دورك ومسؤوليتك بالظبط.
A
Action — إيه اللي عملته أنت تحديدًا (مش الفريق).
R
Result — النتيجة، ويا حبذا بأرقام (سرعة، وقت، نسبة).
  • احكيلي عن bug صعب واجهته في Magento وإزاي حليته.
  • إزاي تتعامل مع deadline ضيّق ومهمة كبيرة؟
  • احكيلي عن مرة اختلفت فيها مع زميل في قرار تقني.
  • إزاي بتضمن إن كودك مش هيكسّر الـ upgrade الجاي؟
  • احكيلي عن performance issue حسّنته وإيه كان الأثر.
i
جهّز 2-3 قصص حقيقية من شغلك تقدر تلوّيها لأي سؤال. قصة عن bug صعب، وقصة عن performance، وقصة عن خلاف/شغل جماعي بتغطّي أغلب الأسئلة.

في آخر الإنترفيو بيسألوك "عندك أسئلة؟" — دايمًا يبقى عندك، ده بيوضّح اهتمامك.

  • إيه إصدار Magento اللي شغّالين عليه؟ Adobe Commerce ولا Open Source؟
  • إزاي بتتعاملوا مع الـ deployments والـ CI/CD؟
  • الفريق بيكتب unit / integration tests؟
  • إيه أكبر تحدي تقني بيواجه الفريق دلوقتي؟
  • إزاي بتتعاملوا مع الـ upgrades والـ security patches؟
• • •
06

Interview Day Checklist

آخر مراجعة قبل ما تدخل. لو كل دي متظبطة، أنت جاهز.

  • أعرف أشرح DI و preferences و virtualTypes بصوت عالي.
  • أعرف الفرق بين plugin و observer و preference وإمتى كل واحد.
  • أعرف أشرح EAV vs flat وليه.
  • أعرف خطوات عمل custom module + CRUD كاملة.
  • أعرف رحلة الـ request من index.php للـ response.
  • أعرف أهم أوامر الـ CLI.
  • عندي 2-3 قصص STAR جاهزة.
  • لو مش عارف إجابة، قول "مش متأكد بس هفكر بصوت عالي" — طريقة تفكيرك أهم من الحفظ.
  • اربط إجاباتك بـ تجارب حقيقية من شغلك.
  • اذكر دايمًا "مبعدّلش الـ core" و"بستخدم service contracts".
  • لو السؤال مبهم، اسأل توضيح قبل ما تجاوب — ده احترافي.
  • في أسئلة الكود، فكّر في الـ performance والـ upgradability مش بس "الحل يشتغل".
!
متقولش "بعدّل ملف الـ core" أبدًا في أي إجابة — دي أكبر علامة حمرا ممكن تقولها في إنترفيو Magento.

خلّصت الأربع أيام 🎉

دلوقتي عندك صورة كاملة: من الأساسيات، للـ database، للـ admin، للمراجعة النهائية. لو راجعت الأربع artifacts كويس وعرفت تشرحهم بصوت عالي، أنت في وضع قوي للإنترفيو.

خد نفس، ثق في تحضيرك، وفكّر بصوت عالي. بالتوفيق!

// magento 2 backend · 04-day track · part 04 · complete

خلّصت الدرس؟علّمه عشان تتابع تقدّمك في الكورس.

كاتب الدرس

Abdulrahman Masoud

عندك سؤال على الدرس أو محتاج مساعدة في مشروع Magento؟ كلّمني.

أسئلة شائعة

ما الفرق بين setup:upgrade و setup:di:compile في Magento 2؟

setup:upgrade بيطبّق الـ modules والـ patches ويحدّث الـ schema. أما setup:di:compile فبيولّد الـ DI classes زي الـ factories والـ proxies والـ interceptors في فولدر generated/، وده أساسي في الـ production.

ما الفرق بين cache:clean و cache:flush في Magento 2؟

cache:clean بيمسح عناصر Magento بس من الـ cache. أما cache:flush فبيفضّي الـ storage بالكامل، بما فيه بيانات أي تطبيقات تانية بتستخدم نفس الـ Redis، فخلّي بالك قبل ما تستخدمه.

ما الفرق بين Block و ViewModel في Magento 2؟

الـ ViewModel بيفصل منطق الـ view عن الـ Block، وبيبقى أخف وأسهل في الـ testing، وبيتحقن في الـ template عن طريق الـ layout XML. ده الاتجاه الحديث المفضّل، وبيخلّيك متحطّش business logic جوّه الـ templates.

ليه مينفعش أستخدم new أو الـ Object Manager مباشرة في Magento 2؟

الـ new بيكسّر الـ DI وبيخفي الـ dependencies وبيمنع الـ plugins من الاشتغال على الـ object، والـ Object Manager ممنوع تستخدمه مباشرة. البديل الصح هو constructor injection، ولو محتاج instance جديدة كل مرة استخدم Factory بـ ->create().

إيه هي الـ areas في Magento 2؟

الـ areas هي frontend وadminhtml وwebapi_rest وwebapi_soap وcrontab وgraphql، وكل area ليها config خاص بيها. عشان كده لو فيه تعارض، الـ di.xml الخاص بـ area معيّنة زي adminhtml بيتجاوز الـ di.xml الـ global.

إزاي أجاوب على الأسئلة السلوكية بطريقة STAR؟

رتّب إجابتك في أربع نقط: Situation (الموقف والمشكلة)، Task (دورك بالظبط)، Action (اللي عملته أنت تحديدًا مش الفريق)، وResult (النتيجة، ويا حبذا بأرقام). جهّز 2-3 قصص حقيقية من شغلك، زي bug صعب وperformance issue وخلاف تقني، تقدر تلوّيها لأغلب الأسئلة.

إزاي أعمل log في Magento 2؟

بتحقن Psr\Log\LoggerInterface وتستخدم ->info() أو ->error(). ولو عايز اللوجات تروح لملف منفصل، بتعمل logger مخصوص بـ virtualType.