Skip to content

RamiAlkhateeb/Job-interview

Repository files navigation

مقدمة

مرحبًا بكم في هذا المشروع 👋

يهدف هذا المستودع إلى توثيق طرق ومهارات التقدّم لوظائف هندسة البرمجيات، ومشاركة الخبرات والموارد التي اكتسبتها خلال عملية البحث عن عمل.
ستجدون هنا مجموعة من الملفات التي تتضمن:

  • نصائح وأدوات لتحسين فرص الحصول على وظيفة في مجال تطوير البرمجيات.
  • تجاربي الشخصية مع شركات مختلفة داخل ألمانيا وخارجها.

أهدف من خلال هذا المشروع إلى تنظيم عملية البحث عن وظيفة ومساعدة الآخرين الذين يسلكون الطريق نفسه.
أتمنى أن يجد كل مطوّر هنا ما يفيده في بناء مسيرته المهنية بثقة ووضوح.

كتابة السيرة الذاتية لمهندس برمجيات

١. إعداد قالب سيرة ذاتية متوافق مع أنظمة ATS

ابدأ باستخدام قالب سيرة ذاتية بسيط ومنسق بشكل يدعم أنظمة تتبع المتقدمين (ATS).
استخدم خطوطًا قياسية فقط مثل Arial أو Calibri أو Garamond، وتأكد أن حجم الخط لا يقل عن 10px لضمان الوضوح عند القراءة.
تجنّب الخطوط الجديدة أو غير المألوفة لأنها قد تُحوّل الحروف إلى رموز غير مقروءة من قبل النظام.

٢. تعبئة القالب بمحتوى منظم وواضح

املأ القالب بمعلوماتك المهنية بشكل منسق ومنطقي.
رتّب الأقسام بوضوح: الملخص المهني، الخبرات العملية، التعليم، المهارات التقنية.

٣. تحسين السيرة الذاتية بالكلمات المفتاحية والأولوية

استخدم كلمات مفتاحية مرتبطة بالوظيفة المطلوبة لزيادة فرصة مرور السيرة الذاتية عبر أنظمة ATS.
قدّم أهم المهارات والخبرات في البداية، خاصة تلك المطلوبة في الوصف الوظيفي.

٤. كتابة الخبرة العملية

اعرض الخبرات بترتيب زمني عكسي، من الأحدث إلى الأقدم، وفق البنية التالية:

[Company or Organization], [Location] | [Job Title] | [Start and end dates formatted as MM/YYYY]

مثال:
Facebook, Singapore | Front End Engineering Lead | 08/2018 - Present

لكل وظيفة، اذكر:

  • نطاق المهام والمهارات المستخدمة.
  • الإنجازات بأسلوب يوضح النتيجة:
    [ملخص الإنجاز] : [الإجراء المتخذ] أدى إلى [النتيجة القابلة للقياس].

٥. اختبار وتحسين السيرة الذاتية بالأدوات المجانية

استخدم أدوات مجانية لمراجعة سيرتك الذاتية وجودة تنسيقها مثل:

  • Tech Interview Handbook Resume Review للحصول على تعليقات من مهندسين ومراجعين تقنيين.
  • Resume Worded أو AI Resume Judge لاختبار مدى توافق سيرتك الذاتية مع أنظمة ATS.
  • Targeted Resume أو Resume Shortlister لتقييم مدى توافق سيرتك مع متطلبات وظيفة محددة وإضافة الكلمات المفتاحية اللازمة.

باتباع هذه الخطوات، يمكنك إعداد سيرة ذاتية احترافية ومهيّأة لعبور أنظمة الفرز والوصول إلى المقابلات التقنية.

اسئلة شائعة (.NET )

1. ما الفرق بين أنواع القيمة (Value Types) والأنواع المرجعية (Reference Types)؟

نوع القيمة مثل أن تحمل النقود (الكاش) في جيبك؛ هي معك مباشرة. النوع المرجعي مثل أن تحمل مفتاح خزانة في النادي. المفتاح ليس هو الملابس، بل هو مجرد أداة تدلك على مكان وجود الملابس.

أنواع القيمة (مثل int و struct) تحمل البيانات مباشرة وتُخزن عادةً في (Stack). بينما الأنواع المرجعية (مثل class و string) تخزن مرجعاً (عنوان ذاكرة) للبيانات، وتكون البيانات نفسها مخزنة في (Heap).

2. متى يجب عليك استخدام الواجهة (Interface) مقابل الفئة المجردة (Abstract Class)؟

الفئة المجردة Abstract Class مثل مخطط "المركبة"؛ يحدد أن لها محركاً وعجلات. أما الواجهة Abstract Class فهي مثل "رخصة التاكسي". السيارة هي مركبة (وراثة)، ولديها رخصة تاكسي (واجهة). القارب أيضاً يمكن أن يحصل على رخصة تاكسي (واجهة) رغم أنه ليس سيارة.

استخدم Abstract Class عندما تريد توفير وظائف مشتركة جاهزة للصفوف classes المشتقة - علاقة "هو يكون" is-a - استخدم الواجهة لتعريف عقد أو قدرة يمكن لصفوف غير مرتبطة ببعضها تنفيذها - علاقة "يستطيع أن يفعل" أو "can-do" - ولدعم الوراثة المتعددة.

3. ما هو (Dependency Injection) ولماذا يُستخدم في .NET Core؟

تخيل أنك تبني منزلاً أثاثه ملتصق بالأرضية. إذا أردت تغيير الأريكة، عليك هدم غرفة المعيشة. هذا ما يحدث عندما تُضمّن التبعيات بشكل ثابت (باستخدام الكلمة المفتاحية new) داخل صفوفك البرمجية.

هو نمط تصميم يُستخدم لتحقيق "عكس التحكم" (IoC). فهو يسمح لك بحقن الخدمات ( dependencies ) داخل الصف بدلاً من إنشائها داخل الصف نفسه. هذا يجعل الكود أكثر قابلية للاختبار، والصيانة، وأقل ارتباطاً (Loosely coupled).

img

4. اشرح الغرض من الكلمات المفتاحية async و await.

البرمجة العادية تشبه نادلاً يقف أمام الطباخ وينتظر حتى يجهز طعامك. Async/Await تشبه نادلاً يوصل طلبك للمطبخ، ثم يذهب لخدمة زبائن آخرين بينما يطبخ الشيف. عندما يجهز الطعام، يعود ليقدمه لك.

تُستخدم للبرمجة غير المتزامنة. async تميز الدالة بأنها غير متزامنة، و await توقف تنفيذ تلك الدالة مؤقتاً حتى تكتمل المهمة المنتظرة، دون حجب الخيط الرئيسي (Thread)، وهو أمر ضروري لاستجابة واجهات المستخدم والتعامل مع حركة مرور الويب العالية.

5. كيف يعمل جمع القمامة (Garbage Collection) في .NET؟

في المطعم، أنت لا تغسل صحنك بنفسك. عندما تنتهي وتغادر الطاولة (إزالة المرجع)، يأتي عامل التنظيف (GC)، يرى الصحن الفارغ، ويزيله لتصبح الطاولة جاهزة لزبون آخر.

يقوم جامع القمامة بإدارة تخصيص الذاكرة تلقائياً. فهو يتحقق بشكل دوري من كومة الذاكرة (Heap) بحثاً عن الكائنات التي لم يعد التطبيق يستخدمها (لا توجد مراجع لها) ويستعيد تلك الذاكرة. يستخدم "الأجيال" (0، 1، 2) لتحسين الأداء.

6. ما الفرق بين IEnumerable و IQueryable؟

اولاً IEnumerable مثل استعارة كل الكتب من المكتبة وأخذها للمنزل للبحث عن الكتب الحمراء. IQueryable هو أن تطلب من أمين المكتبة: "من فضلك، أحضر لي الكتب الحمراء فقط".

وفي التعريف IEnumerable يسحب كل البيانات من قاعدة البيانات إلى الذاكرة ثم يقوم بتصفيتها (فلترة عند العميل). أما IQueryable فيقوم ببناء جملة SQL وينفذ التصفية داخل قاعدة البيانات (فلترة عند الخادم)، وهو أفضل للأداء مع البيانات الضخمة.

img

7. هل يمكنك شرح مبادئ SOLID؟

تخيل البناء بمكعبات "ليغو". إذا اتبعت القواعد (SOLID)، كل قطعة تركب مكانها، ويمكنك تغيير السقف دون كسر الأرضية. إذا ألصقت قطعاً عشوائية ببعضها (تصميم سيء)، فلن تستطيع تعديل أي شيء لاحقاً.

هي مجموعة من خمسة مبادئ تصميمية تهدف لجعل تصميم البرمجيات أكثر وضوحاً، ومرونة، وقابلية للصيانة.

8. ما هما الـ Boxing والـ Unboxing؟

اولاً Boxing هو وضع هاتف (قيمة) داخل صندوق كرتوني وتغليفه (Object). Unboxing هو تمزيق الصندوق لاستخراج الهاتف. القيام بهذا الأمر آلاف المرات يضيع الكثير من الوقت والجهد.

وهذا يعني ان Boxing هو عملية تحويل "نوع القيمة" إلى "نوع مرجعي" (Object). Unboxing هو استخراج القيمة مرة أخرى من الـ Object. هذه العملية تستهلك موارد النظام (Performance Cost).

9. ما هو الـ Middleware في .NET Core وكيف يعمل؟

تشبه نقاط التفتيش في المطار. أولاً يتم فحص تذكرتك (توثيق)، ثم فحص الحقائب (تحقق). إذا مررت من جميع النقاط، تصل إلى الطائرة (Controller).

هي مكونات برمجية تُرتّب في "خط أنابيب" (Pipeline) لمعالجة الطلبات والردود. كل مكون يقرر إما تمرير الطلب للمكون التالي أو معالجته وإيقافه.

10. ما هي دورات حياة الخدمة المختلفة (Singleton, Scoped, Transient) في حقن التبعية؟

اولاً Transient: مثل الكوب البلاستيكي؛ تستخدمه مرة وترميه.

ثانياً Scoped: مثل زجاجة مياه مخصصة لرحلة معينة؛ تبقى معك حتى تنتهي الرحلة.

ثالثاً Singleton: مثل "سبيل الماء" العام؛ الجميع يشرب من نفس الصنبور طوال الوقت.

وبشكل رسمي اكثر اولاً Transient: يتم إنشاء نسخة جديدة في كل مرة يُطلب فيها.

ثانياً Scoped: يتم إنشاء نسخة واحدة لكل طلب HTTP (لكل مستخدم في تلك اللحظة).

ثالثاً Singleton: يتم إنشاء نسخة واحدة فقط عند بدء التطبيق وتستخدمها كل الطلبات طوال الوقت.

img

11. متى يجب عليك استخدام Dictionary بدلاً من List؟

البحث في List يشبه قراءة دفتر ملاحظات صفحة بصفحة حتى تجد الاسم. البحث في Dictionary يشبه استخدام دليل هاتف منظم، حيث تذهب فوراً لحرف "س" لتجد "سعيد".

اللائحة List تخزن العناصر بشكل متسلسل ويتم الوصول إليها عبر الفهرس (الترتيب). Dictionary تخزن أزواجاً من (مفتاح-قيمة) وتستخدم جدول تجزئة (Hash Table) للوصول السريع جداً باستخدام المفتاح.

12. ما هو الغرض من كتلة finally في معالجة الاستثناءات؟

تخيل أنك تعمل في مكتب (try). قد تنهي عملك بنجاح، أو قد يرن جرس الإنذار (catch). بغض النظر عما حدث، يجب عليك إطفاء الأنوار (finally) قبل المغادرة.

كتلة finally في هيكلية try-catch تُستخدم لتنفيذ كود معين بغض النظر عما إذا حدث خطأ أم لا. تُستخدم عادة لتنظيف الموارد (إغلاق الملفات أو اتصالات قاعدة البيانات).

13. ما هو Entity Framework ولماذا نستخدمه؟

قاعدة البيانات تتحدث لغة "SQL" وكودك يتحدث "C#". Entity Framework هو المترجم الفوري الواقف في المنتصف، يترجم كلامك من C# إلى SQL لتفهمك قاعدة البيانات.

هو أداة (ORM) تمكن المبرمجين من التعامل مع قاعدة البيانات باستخدام كائنات .NET (Objects) بدلاً من كتابة أكواد SQL المعقدة يدوياً.

14. ما الفرق بين REST API و SOAP؟

اولاً SOAP يشبه إرسال رسالة قانونية رسمية ومختومة بالشمع؛ آمنة لكنها ثقيلة وبطيئة. REST يشبه إرسال بطاقة بريدية أو رسالة "واتساب"؛ سريعة، خفيفة، وسهلة القراءة.

هذا يعني أن SOAP هو بروتوكول صارم يستخدم XML ومعايير أمان عالية. REST هو نمط معماري أكثر مرونة، يستخدم طرق HTTP القياسية، وغالباً ما يستخدم تنسيق JSON.

15. ما هو JWT وفيما يُستخدم؟

في الفندق، بدلاً من فحص هويتك عند كل باب، يعطونك سواراً (JWT). أنت تحمل السوار معك، ومجرد إظهاره يثبت من أنت وما هي الأماكن المسموح لك بدخولها.

هو وسيلة مدمجة وآمنة لنقل "المطالبات" (البيانات) بين طرفين. يُستخدم عادةً للمصادقة في تطبيقات الويب (Stateless Authentication).

16. ما الفرق بين الـ Managed Code والـ Unmanaged Code؟

الإجابة الرسمية: Managed Code هو الكود الذي يتم تنفيذه تحت إشراف بيئة التشغيل (CLR)، حيث تتولى هي مهام مثل جمع القمامة ومعالجة الاستثناءات. أما Unmanaged Code فهو الكود الذي يتم تنفيذه مباشرة من قبل نظام التشغيل خارج بيئة الـ .NET (مثل كود C++ القديم)، والمبرمج هو المسؤول عن إدارة الذاكرة فيه.

💡 التشبيه (الطفل في الحديقة): Managed Code مثل طفل يلعب في "منطقة ألعاب مغلقة" تحت إشراف المربين؛ إذا سقط أو أفسد شيئاً، هناك من يساعده وينظف المكان. أما Unmanaged Code فهو مثل طفل يلعب في "غابة مفتوحة"؛ هو المسؤول تماماً عن سلامته وتدبير أموره.

17. ما هو الـ Reflection في .NET؟

الإجابة الرسمية: هي ميزة تسمح للبرنامج بفحص بياناته الخاصة (Metadata) أثناء وقت التشغيل (Runtime)، مثل معرفة أسماء الدوال أو الخصائص داخل الـ Assembly دون معرفتها مسبقاً، ويمكن حتى استدعاؤها ديناميكياً.

💡 التشبيه (المراية): تخيل أن الكود ينظر في المرآة ليرى تفاصيل وجهه. بدلاً من أن تخبر الكود بما لديه، هو يلقي نظرة على نفسه ويعرف: "آه، أنا عندي دالة اسمها 'X' ومعاملاتها 'Y'".

18. ما الفرق بين String و StringBuilder؟

الإجابة الرسمية: الـ String هو Immutable (غير قابل للتعديل)؛ أي أن أي عملية تعديل عليه تخلق نسخة جديدة في الذاكرة. أما StringBuilder فهو Mutable؛ يسمح بتعديل النص في نفس المكان في الذاكرة، مما يجعله أسرع بكثير عند إجراء تعديلات كثيرة.

💡 التشبيه (اللوحة الزيتية vs السبورة): الـ String مثل "اللوحة الزيتية"؛ إذا أردت تغيير تفصيل صغير، عليك إعادة رسم اللوحة بالكامل. أما StringBuilder فهو مثل "السبورة"؛ يمكنك مسح كلمة وكتابة أخرى في نفس المكان بسهولة.

19. ما هو الـ Deadlock في البرمجة المتعددة (Multithreading)؟

الإجابة الرسمية: هو حالة تحدث عندما ينتظر "خيطان" (Threads) بعضهما البعض لتحرير موارد محجوزة، مما يؤدي لتوقف البرنامج بالكامل لأن كل طرف يرفض التنازل عما لديه حتى يحصل على ما عند الطرف الآخر.

💡 التشبيه (عناد السيارات): تخيل سيارتين متقابلتين في شارع ضيق جداً. السيارة (أ) تنتظر السيارة (ب) لترجع للخلف، والسيارة (ب) تنتظر (أ) لترجع للخلف. النتيجة؟ لا أحد يتحرك والشارع يتوقف تماماً.

20. ما هي الـ Extension Methods؟

الإجابة الرسمية: هي ميزة تسمح لك بإضافة دوال جديدة لأنواع موجودة مسبقاً (مثل string أو int) دون الحاجة لتعديل الكود الأصلي لتلك الأنواع أو الوراثة منها.

💡 التشبيه (الإضافات في المطبخ): تخيل أن لديك "خلاطاً" عادياً، وقمت بشراء "قطعة إضافية" تركب عليه لجعله يقطع الخضار أيضاً. أنت لم تفتح الموتور وتعدله، بل أضفت له ميزة من الخارج.

21. ما الفرق بين الـ Overloading والـ Overriding؟

الإجابة الرسمية: Overloading هو وجود أكثر من دالة بنفس الاسم في نفس الفئة ولكن بمعاملات مختلفة. أما Overriding فهو إعادة كتابة دالة موجودة في الفئة الأب داخل الفئة الابن لتغيير سلوكها.

💡 التشبيه (آلة القهوة vs وصفة العائلة): Overloading مثل آلة قهوة فيها عدة أزرار "قهوة"؛ زر يعطيك قهوة سادة، وزر قهوة بحليب (نفس الاسم لكن المحتوى مختلف). Overriding مثل ابن أخذ "وصفة الطبخ" من أبيه، لكنه قرر تغيير المقادير ليجعل الطعم مختلفاً بطريقته الخاصة.

22. ما هو الـ LINQ؟

الإجابة الرسمية: هي اختصار لـ Language Integrated Query، وهي ميزة في .NET تسمح بكتابة استعلامات (Queries) للبيانات (سواء كانت مصفوفات، قواعد بيانات، أو XML) مباشرة داخل كود الـ C# بأسلوب موحد وسهل القراءة.

💡 التشبيه (المنخل الذكي): تخيل أن لديك صندوقاً مليئاً بالألعاب، وبدلاً من البحث يدوياً، لديك "منخل سحري" تقل له: "أعطني فقط السيارات الحمراء التي صنعت بعد عام 2020"، فيقوم بفرزها لك بلحظة.

23. ما الفرق بين الـ Authentication والـ Authorization؟

الإجابة الرسمية: Authentication هي عملية التأكد من هوية المستخدم (من أنت؟). أما Authorization فهي التأكد من الصلاحيات المسموحة لهذا المستخدم (ماذا يحق لك أن تفعل؟).

💡 التشبيه (موظف الاستقبال): عند دخولك شركة، يطلب منك الحارس "الهوية" ليتأكد أنك الشخص المطلوب (Authentication). بعد الدخول، يحاول دخول غرفة المدير فيمنعك الحارس لأنك لا تملك مفتاحها (Authorization).

24. ما هو الـ Unit Testing؟

الإجابة الرسمية: هو كتابة كود صغير لاختبار "وحدة" معينة من البرنامج (مثل دالة واحدة) للتأكد من أنها تعمل بشكل صحيح وتعطي النتائج المتوقعة في حالات مختلفة.

💡 التشبيه (فحص قطع السيارة): قبل تجميع السيارة، يقوم المصنع باختبار "المصباح" لوحده، و"الموتور" لوحده. إذا تأكدنا أن كل قطعة تعمل بامتياز، فمن المرجح أن السيارة ككل ستعمل بشكل جيد.

25. ما المقصود بـ Stateless في الـ Web APIs؟

الإجابة الرسمية: تعني أن الخادم (Server) لا يحتفظ بأي معلومات عن "حالة" المستخدم بين الطلبات المختلفة. كل طلب يصل للخادم يجب أن يحتوي على كل المعلومات اللازمة لمعالجته بشكل مستقل تماماً.

💡 التشبيه (جهاز الصراف الآلي): جهاز الصراف لا يتذكرك بمجرد وقوفك أمامه. في كل عملية تريد القيام بها، يجب أن تضع البطاقة وتدخل الرقم السري؛ هو لا يقول لك: "أهلاً، أنت الذي سحبت نقوداً قبل قليل، تفضل بدون رقم سري".

26. تسريب الذاكرة (Memory Leaks) في .NET

  • سؤال: كيف يمكن أن يحدث "تسريب ذاكرة" في .NET رغم وجود جامع القمامة (GC)؟
  • الإجابة الرسمية: يحدث التسريب عندما تبقى الكائنات "حية" في الذاكرة لأن هناك مراجع (References) لا تزال تشير إليها. أشهر الأسباب: عدم إلغاء الاشتراك في الأحداث (Event Handlers)، استخدام الكائنات الساكنة (Static Objects) بشكل خاطئ، أو عدم إغلاق الاتصالات الخارجية (Unmanaged Resources).
  • 💡 التشبيه (مفتاح الفندق): تخيل إنك استأجرت غرفة بفندق وطلعت منها، بس "نسيت تسلم المفتاح" للإدارة. بالنسبة للفندق، الغرفة لسه محجوزة وما حدا بيقدر ينظفها أو يسكن فيها غيرك، رغم إنك فعلياً مو جواتها.

**27. الفرق بين Span<T> و Memory<T>**

  • سؤال: متى نستخدم Span<T> وكيف يساهم في تحسين الأداء؟
  • الإجابة الرسمية: هما تراكيب بيانات تسمح بالتعامل مع أجزاء من الذاكرة (مثل المصفوفات أو النصوص) بدون الحاجة لعمل "نسخ" (Copy) لها. Span<T> يُخزن في الـ Stack وهو سريع جداً للعمليات اللحظية، بينما Memory<T> يمكن تخزينه في الـ Heap ويُستخدم في العمليات غير المتزامنة (Async).
  • 💡 التشبيه (الشباك والبرداية): بدل ما تقص قطعة من "برداية" طويلة (Copy) مشان تشوف زخرفتها، أنت بس بتفتح "شباك" (Span) وبتركز نظرك على هي القطعة. هيك أنت شفت اللي بدك ياه بدون ما تخرب أو تقص البرداية الأصلية.

28. ترتيب الـ Middleware (Order Matters)

  • سؤال: لماذا يعتبر ترتيب الـ Middleware في Program.cs أمراً حرجاً؟
  • الإجابة الرسمية: لأن الطلب (Request) يمر عبرها بالتسلسل. إذا وضعت الـ Authorization قبل الـ Authentication مثلاً، سيحاول النظام التحقق من صلاحيات مستخدم لم يتم التعرف على هويته أصلاً، مما يؤدي لخطأ منطقي.
  • 💡 التشبيه (حاجز المطار): ما بصير تمر من "تفتيش الشنط" قبل ما "تختم جوازك". إذا خربطت بالترتيب، رح ترجع من نص الطريق وتعيد العملية كلها، أو رح تفوت ناس مالهن مصلحة.

29. نمط الـ Saga في Microservices

  • سؤال: كيف تعالج مشكلة العمليات الموزعة (Distributed Transactions) في المعماريات المصغرة؟
  • الإجابة الرسمية: نستخدم نمط الـ Saga. وهو تقسيم العملية الكبيرة لعدة عمليات صغيرة مستقلة. إذا فشلت واحدة، نقوم بعملية "تعويضية" (Compensating Transaction) لإلغاء مفعول العمليات التي نجحت قبلها لضمان اتساق البيانات.
  • 💡 التشبيه (طلب البيتزا): طلبت بيتزا أونلاين، التطبيق حجز المصاري، بس المطعم طلع مسكر. هون الـ Saga بتتدخل: بما إنه الطلب ما كمل، السيستم آلياً بيعمل "عملية عكسية" وبيرجعلك المصاري لحسابك.

30. الـ CQRS (Command Query Responsibility Segregation)

  • سؤال: ما هو نمط الـ CQRS وفائدته في الأنظمة الضخمة؟
  • الإجابة الرسمية: هو فصل عمليات "القراءة" (Queries) عن عمليات "الكتابة والتعديل" (Commands). هذا يسمح بتطوير قاعدة بيانات سريعة جداً للقراءة (مثل Elasticsearch) وقاعدة بيانات أخرى متينة للكتابة، مما يحسن الأداء بشكل هائل.
  • 💡 التشبيه (المطعم السريع): بدل ما يكون فيه "شباك واحد" للعالم اللي بدها تطلب والناس اللي بدها تستلم، بنعمل "كاونتر للطلب" و "كاونتر للتسليم". هيك الطابور بيمشي أسرع وما حدا بيعطل التاني.

31. البث غير المتزامن (IAsyncEnumerable)

  • سؤال: ما الفائدة من استخدام IAsyncEnumerable<T> بدلاً من Task<List<T>>؟
  • الإجابة الرسمية: تسمح بمعالجة البيانات فور وصولها من المصدر (مثل Database) قطعة بقطعة، بدلاً من انتظار تحميل القائمة كاملة في الذاكرة. هذا يوفر استهلاك الذاكرة ويحسن زمن الاستجابة الأول.
  • 💡 التشبيه (يوتيوب vs تحميل فيلم): Task<List> متل لما تحمل فيلم كامل لتقدر تشوفه. أما IAsyncEnumerable فهي متل "الستريمينغ" على يوتيوب؛ بتبلش تحضر أول دقيقة والفيلم لسه عم يكمل تحميل بالخلفية.

32. الفرق بين الـ Concurrency والـ Parallelism

  • سؤال: اشرح الفرق بين التزامن (Concurrency) والتوازي (Parallelism).
  • الإجابة الرسمية: التزامن هو التعامل مع عدة مهام في نفس الوقت (تبديل بينها)، أما التوازي فهو تنفيذ عدة مهام فعلياً في نفس اللحظة باستخدام معالجات (CPU Cores) متعددة.
  • 💡 التشبيه (الشيف بالمطبخ): التزامن: شيف واحد عم يطبخ طبختين، بيحرك هي شوي وبيروح بيقطع خضرة لهي شوي. التوازي: شيفين عم يطبخوا بنفس المطبخ، كل واحد ماسك طبخة وعم يشتغل فيها بنفس اللحظة.

33. الـ Reflection vs Source Generators

  • سؤال: لماذا نفضل الـ Source Generators في .NET الحديثة على الـ Reflection التقليدي؟
  • الإجابة الرسمية: الـ Reflection يعمل أثناء التشغيل (Runtime) وهو بطيء ويستهلك موارد. أما Source Generators فتقوم بتوليد الكود أثناء بناء المشروع (Compile-time)، مما يجعل البرنامج أسرع بكثير ويدعم الـ AOT (Ahead-of-Time compilation).
  • 💡 التشبيه (الأكل الجاهز vs طبخ العزيمة): Reflection: متل لما يجوا الضيوف وتدخل عالمطبخ تفكر شو بدك تطبخ وتدور عالاغراض (بطيء). Source Generators: متل لما تجهز الأكل كله وتغلفه قبل ما يوصلوا الضيوف، بس يوصلوا بتقدمه فوراً (سريع وجاهز).

34. الـ Deadlocks وكيفية تجنبها

  • سؤال: كيف يمكن تجنب حدوث Deadlock في تطبيقات الـ ASP.NET Core؟
  • الإجابة الرسمية: تجنب استخدام .Result أو .Wait() على المهام غير المتزامنة، واستخدم دائماً async/await للنهاية. أيضاً، يفضل استخدام ConfigureAwait(false) في مكتبات الكود (Libraries) لعدم إجبار المهمة على العودة لنفس الـ Context.
  • 💡 التشبيه (الباب الدوار): تخيل شخصين فايتين بباب دوار، واحد عم يدفع لجهة والتاني عم يدفع عكسه. إذا ضلوا متمسكين برأيهن (الـ Thread ناطر التاني)، الباب مارح يدور. الحل إنه واحد يترك ويخلي التاني يمر أول.

35. الـ Yield Return وكيفية عملها

  • سؤال: ماذا يحدث فعلياً خلف الكواليس عند استخدام كلمة yield؟
  • الإجابة الرسمية: يقوم المترجم (Compiler) ببناء "آلة حالة" (State Machine) معقدة. هي تحفظ مكان توقف الدالة، وعند طلب العنصر التالي، تعود الدالة للعمل من حيث توقفت تماماً، دون إعادة التنفيذ من البداية.
  • 💡 التشبيه (بياع الخضرة): متل لما تطلب من البياع كيلو تفاح، بيعطيك تفاحة وتفاحة.. مو شرط يعطيك السحارة كلها مرة وحدة. هو بيتذكر وين وصل، وكل ما تطلب "كمان وحدة"، بيعطيك ياها من اللي جنبه.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •