ما أسئلة مقابلة .NET التي ينبغي أن أتوقعها؟
بقلم Aaron Cao · آخر تحديث

توقع أسئلة عن بيئة التشغيل (CLR، وجمع البيانات المهملة، وأنواع القيم مقابل الأنواع المرجعية)، وأسئلة عن اللغة (async وawait، وLINQ، والأنواع العامة، والسجلات)، وأسئلة عن إطار العمل (البرمجيات الوسيطة وحقن التبعيات في ASP.NET Core، وEF Core)، وسيناريوهات مثل تسرب الذاكرة في خدمة تعمل لمدة طويلة أو بطء نقطة نهاية API. يقيّم المحاورون طريقة التفكير.
ما أسئلة بيئة التشغيل واللغة التي تبدأ بها مقابلة .NET؟
يبدأ المحاورون من حيث يبدأ إطار العمل: بيئة التشغيل. توقع أن تشرح ما تفعله بيئة تشغيل اللغة المشتركة (تحميل التجميعات، وترجمة اللغة الوسيطة في الوقت المناسب، وإدارة الذاكرة)، ثم التعمق مستوى إضافيا في جمع البيانات المهملة. تسلسل الأسئلة اللاحقة متوقع: لماذا يعمل جامع البيانات المهملة بنظام الأجيال، وما الذي يجعل كائنا يبقى حتى جيل لاحق، وما الغرض من كومة الكائنات الكبيرة، ولماذا يوجد IDisposable وusing أصلا إذا كانت الذاكرة مدارة. أجب عن السؤال الأخير بالإشارة إلى الموارد غير المدارة مثل مقابض الملفات والاتصالات، التي لا يعرف جامع البيانات المهملة كيفية تحريرها بسرعة.
- أنواع القيم والأنواع المرجعية. أين يوجد كل منها، وماذا يعني النسخ لكل نوع، وما تكلفة التحويل إلى كائن.
- async وawait. اشرح أن المهمة المنتظرة تحرر الخيط المستدعي بدلا من حجبه، ولماذا يقتصر
async voidعلى معالجات الأحداث، وما المأزق الذي يقصده الناس عند التحذير من.Result. - LINQ. التنفيذ المؤجل هو الفخ: يعمل استعلام
IEnumerableعند تعداده، لا عند كتابته، ولا يتحول الاستعلام الموجه إلى موفر قاعدة بيانات إلى SQL إلا للتعبيرات التي يفهمها الموفر. - الأنواع العامة والواجهات والسجلات. القيود، ولماذا تفضل الواجهات على الفئات الأساسية لتسهيل الاختبار، وما الفائدة التي تمنحك إياها مساواة القيم في السجل.
أجب عن كل نقطة بذكر الآلية وإحدى نتائجها. القول إن جمع بيانات الجيل الصفري منخفض التكلفة لأن معظم الكائنات تموت مبكرا هو المستوى الذي يريده المحاورون؛ أما تسمية الأجيال دون ذكر السبب فلا تكفي.
كيف تبدو أسئلة ASP.NET Core وEF Core؟
أنت واثق من كتابة وحدات التحكم، لكنك قلق من أن تدور الأسئلة حول البنية الداخلية التي نادرا ما تتعامل معها. وهذا القلق في محله، لأن أسئلة إطار العمل تتركز هنا؛ لذا إليك هذه البنية بالترتيب الذي تسأل به عادة، مع السؤال اللاحق لكل نقطة.
- مسار الطلب. تعمل البرمجيات الوسيطة بالترتيب الذي سجلت به، ويقرر كل مكون إن كان سيستدعي المكون التالي. السؤال اللاحق: أين تقع المصادقة بالنسبة إلى التخويل، وماذا يحدث إذا سجلتهما بترتيب عكسي؟
- دورات حياة حقن التبعيات. يعيش singleton طوال مدة عمل التطبيق، ويعيش scoped خلال طلب واحد، وينشأ transient في كل مرة يجري فيها حله. الفخ التقليدي هو حقن خدمة scoped، مثل سياق قاعدة بيانات، داخل singleton؛ فكن مستعدا لشرح سبب كون ذلك خطأ برمجيا.
- الإعدادات والخيارات. المصادر متعددة الطبقات، وتجاوزات البيئة، ونمط الخيارات للإعدادات ذات الأنواع المحددة.
- EF Core. تتبع التغييرات ومتى تعطله في استعلامات القراءة فقط، ومشكلة N+1 وكيف يتجنبها التحميل المتعجل أو الإسقاط، وعمليات الترحيل، والنقطة الواقعية التي يتفوق عندها استعلام مكتوب يدويا على LINQ.
- الاختبار. كيف تجعل الواجهات وحاوية DI الخدمة قابلة للاختبار، وما الذي يثبته موفر يعمل في الذاكرة وما لا يثبته بشأن قاعدة بيانات حقيقية.
يربط أقوى المرشحين بين هذه النقاط: سياق scoped يجري حله داخل خدمة خلفية من نوع singleton ليس سؤال معلومات عامة، بل هو خطأ في الذاكرة والصحة سبق أن أطلقه المحاورون فعليا إلى بيئة الإنتاج، وهم يريدون سماع أنك ستنشئ نطاقا صراحة.
كيف تسير أسئلة السيناريوهات؟
تعرض جولات مقابلات المناصب العليا عرضا لمشكلة وتراقب منهجك. إليك مثالا شائعا: يقال لمهندس أنظمة خلفية يجري مقابلة لدور رفيع في شركة لوجستية إن ذاكرة API مبنية باستخدام ASP.NET Core تستمر في الارتفاع لأيام حتى يعاد تشغيل الحاوية. الإجابة القوية لا تخمن. بل تسأل عما تغير، وتتحقق من الكائنات التي تحتفظ بها ذاكرات التخزين المؤقت الثابتة أو اشتراكات الأحداث طويلة العمر، وتبحث عن خدمات scoped تحتفظ بها كائنات singleton، وتفحص نمو كومة الكائنات الكبيرة، وتلجأ إلى لقطة للذاكرة قبل اقتراح حل. يقيّم المحاور ترتيب خطوات التحقيق.
ومن السيناريوهات الأخرى المتكررة: نقطة نهاية لا تتباطأ إلا تحت الضغط، حيث تنتقل الإجابة من استدعاءات قاعدة البيانات المتزامنة إلى async، واستنفاد مخزون الاتصالات، والتخزين المؤقت؛ وحالة تسابق في مجموعة مشتركة وتكلفة خيارات المجموعات المتزامنة والأقفال؛ وطلب يجب أن يستدعي ثلاث خدمات لاحقة وكيفية التعامل مع انتهاء المهلة وإعادة المحاولة والفشل الجزئي؛ وعملية ترحيل يجب أن تضيف عمودا دون توقف الخدمة. في كل حالة، اذكر القيد، واختر آلية، ووضح المفاضلة بصوت مسموع.
تصبح هذه الأسئلة أسهل بكثير عندما تتدرب عليها بصوت مرتفع مع أسئلة متابعة، وهذا ما صمم من أجله وضع المقابلة التجريبية؛ أما بنوك الأسئلة الخاصة باللغات والأدوار الأخرى فمجموعة ضمن أسئلة المقابلات حسب الدور والموضوع.
هل يمكن لمساعد مقابلات بالذكاء الاصطناعي المساعدة في أسئلة .NET؟
نعم في الجولات الحوارية، ضمن الحدود المعلنة. يلتقط تطبيق SubcueAI الأصلي لسطح المكتب على macOS وWindows صوت النظام والميكروفون، ويعرض اقتراحات قصيرة للإجابة في طبقة محلية؛ لذلك عندما يسأل المحاور لماذا يعد وجود سياق scoped داخل singleton خطأ، تكون الآلية أمامك على الشاشة بينما تشرحها بكلماتك. تغطي إضافة المتصفح المكالمات داخل علامات تبويب Chrome وEdge من خلال التقاط صوت علامة تبويب الاجتماع فقط. لا ينضم أي روبوت إلى المكالمة ولا يحقن أي شيء في صفحة الاجتماع؛ وتوجد خطوات الإعداد في صفحة الدليل التعليمي.
أما الحدود فهي: التقييم الخاضع للمراقبة، أو تسجيل الشاشة، أو الحاسوب المحمول الذي تديره الشركة، أو تمرين برمجة مباشر تكتب فيه C# تحت المراقبة؛ فجميعها خارج النطاق، ويكون المساعد في أضعف حالاته تحديدا عندما تطلب منك المقابلة كتابة شيفرة. وتظهر قوته في أسئلة بيئة التشغيل وإطار العمل والمفاضلات المذكورة أعلاه. زوده بسيرتك الذاتية أولا كي تعكس الاقتراحات الأنظمة التي بنيتها فعلا؛ ففي منشئ السيرة الذاتية يوجد هذا الملف التعريفي.