أسئلة مقابلات Software Fundamentals مع الإجابات
100 سؤال من أسئلة مقابلات العمل في Software Fundamentals، مقسمة على 10 موضوعات: Object-Oriented Programming (OOP) وSOLID Principles وDesign Patterns وClean Code & Refactoring وData Structures وAlgorithms & Complexity وConcurrency & Multi-threading وSystem Design & Architecture وComputer Networks & Protocols وSoftware Testing & Quality. تغطي الأسئلة المستويات مبتدئ ومتوسط ومتقدم، ولكل سؤال إجابة مختصرة تقولها في الانترفيو، وشرح أعمق، وأخطاء شائعة، وروابط للمصادر الرسمية مع تاريخ آخر مراجعة.
الموضوعات
Object-Oriented Programming (OOP)
10 سؤال
SOLID Principles
9 سؤال
Design Patterns
11 سؤال
Clean Code & Refactoring
10 سؤال
Data Structures
10 سؤال
Algorithms & Complexity
10 سؤال
Concurrency & Multi-threading
10 سؤال
System Design & Architecture
10 سؤال
Computer Networks & Protocols
10 سؤال
Software Testing & Quality
10 سؤال
أسئلة مقابلات Object-Oriented Programming (OOP) في Software Fundamentals
- ما هي الأركان الأربعة للبرمجة كائنية التوجه (OOP) وما الفرق بين التغليف (Encapsulation) والتجريد (Abstraction)؟
- لماذا ينصح مبدأ 'Composition over Inheritance' بتفضيل التركيب على الوراثة الكلاسيكية؟
- ما هو تعدد الأشكال (Polymorphism) وما الفرق بين الإرسال الثابت (Static Dispatch) والإرسال الديناميكي (Dynamic Dispatch)؟
- ما هي معضلة الألماس (The Diamond Problem) في الوراثة المتعددة وكيف تحلها اللغات الحديثة؟
- ما الفرق المعماري الدقيق بين الفئة المجردة (Abstract Class) والواجهة (Interface)؟
- ما هو قانون ديميتر (Law of Demeter / Principle of Least Knowledge) وكيف تحمي الشفرة من سلاسل الاستدعاء الطويلة؟
- ما الفرق بين الاقتران (Coupling) والتماسك (Cohesion) ولماذا نسعى دائماً إلى 'High Cohesion, Low Coupling'؟
- ما هو الفرق الجوهري بين كائن القيمة (Value Object) والكيان (Entity) في النمذجة كائنية التوجه؟
- قارن بين نموذج الدومين الفقير (Anemic Domain Model) ونموذج الدومين الثري (Rich Domain Model)؟
- ما هي مفاهيم الـ Covariance والـ Contravariance في بارامترات وقيم إرجاع الدوال عند عمل Override؟
أسئلة مقابلات SOLID Principles في Software Fundamentals
- ما هو المعنى الحقيقي لمبدأ المسؤولية الواحدة (SRP) وما هو المقياس لتحديد 'المسؤولية'؟
- كيف تطبق مبدأ الانفتاح والإغلاق (Open/Closed Principle) دون الوقوع في فخ التعقيد المفرط؟
- اشرح مبدأ استبدال لسكوف (LSP) ومفهوم الشروط المسبقة (Preconditions) واللاحقة (Postconditions) ومثال المستطيل والمربع الشهير؟
- لماذا يحذر مبدأ فصل الواجهات (Interface Segregation Principle) من الواجهات الضخمة (Fat Interfaces)؟
- ما هو جوهر مبدأ عكس التبعية (Dependency Inversion Principle) وكيف يختلف عن حقن التبعية (DI)؟
- ما هو الفرق بين نمط Service Locator وحاويات حقن التبعيات (IoC Containers) ولماذا يُعتبر الأول مضاد نمط أحياناً؟
- متى يصبح تطبيق مبادئ SOLID مفرطاً وهندسة زائدة (Over-engineering) وما هي علامات رائحة الكود Speculative Generality؟
- كيف تبدأ بإعادة هيكلة كود قديم معقد (Legacy Code) ليتوافق مع مبادئ SOLID بأمان تام ودون كسر الوظائف الحالية؟
- ما الفرق بين التكرار الحقيقي (True Duplication) والتكرار العرضي (Accidental Duplication) ومتى يكون تكرار الكود أفضل من التجريد الخاطئ؟
أسئلة مقابلات Design Patterns في Software Fundamentals
- ما هي دورات حياة الكائنات في حاويات DI (Transient, Scoped, Singleton) وما هي مشكلة التبعية الأسيرة (Captive Dependency)؟
- ما هي التصنيفات الثلاثة الرئيسية لأنماط التصميم (Design Patterns) وما هو الغرض الأساسي لكل فئة؟
- ما هو الفرق الجوهري بين نمط Factory Method ونمط Abstract Factory؟
- لماذا يعتبر نمط السينجلتون (Singleton Pattern) مضاد نمط (Anti-pattern) في معظم تطبيقات المؤسسات الحديثة؟
- ما الفرق بين نمط الاستراتيجية (Strategy Pattern) ونمط الحالة (State Pattern) رغم تشابه هيكل الكود بينهما؟
- ما الفرق المعماري بين نمط المراقب (Observer Pattern) ونمط الناشر والمشترك (Publish-Subscribe Pattern)؟
- قارن بين الأنماط الهيكلية الثلاثة المتشابهة: Decorator و Adapter و Proxy من حيث الغرض؟
- متى نستخدم نمط الباني (Builder Pattern) وكيف يحل مشكلة المنشئات التلسكوبية (Telescoping Constructors)؟
- كيف يعمل نمط الأمر (Command Pattern) وكيف يتيح ميزة التراجع والإعادة (Undo/Redo) وجدولة العمليات؟
- ما هو الغرض المشترك لنمطي المستودع (Repository) ووحدة العمل (Unit of Work) في إدارة المعاملات وقواعد البيانات؟
- كيف يعمل نمط سلسلة المسؤولية (Chain of Responsibility) وما علاقته بمعمارية الـ Middleware في خوادم الويب الحديثة؟
أسئلة مقابلات Clean Code & Refactoring في Software Fundamentals
- ما هي قواعد التسمية المعبرة ومبدأ فصل الأوامر عن الاستعلامات (Command-Query Separation - CQS) في الشفرة النظيفة؟
- ما هي روائح الكود (Code Smells) واشرح رائحتي 'God Object' و 'Feature Envy' وكيف تتخلص منهما؟
- ما هو مقياس التعقيد الدوري (Cyclomatic Complexity) وكيف تقلله لتحسين قابلية الاختبار؟
- ما هي قاعدة الكشافة (The Boy Scout Rule) في إدارة وتخفيض الدين الفني (Technical Debt)؟
- ما هي أفضل ممارسات معالجة الاستثناءات ومبدأ الإخفاق السريع (Fail-Fast) وتجنب ابتلاع الأخطاء (Exception Swallowing)؟
- قارن بين البرمجة الدفاعية (Defensive Programming) ومبدأ التصميم بالتعاقد (Design by Contract - DbC)؟
- اشرح تقنيتي إعادة الهيكلة: Extract Method و Replace Conditional with Polymorphism ومتى تطبقهما؟
- ما هي معايير مراجعة الكود الفعالة (Code Review) وكيف تفرق بين التنسيقات السطحية والنقاشات المعمارية؟
- ما هي رائحة الكود المسماة هوس الأنواع الأولية (Primitive Obsession) وكيف يحلها إنشاء Value Objects؟
- ما هما مبدآ KISS و YAGNI ولماذا يعتبران أهم صمام أمان ضد تعقيد وتضخم المشاريع؟
أسئلة مقابلات Data Structures في Software Fundamentals
- لماذا تتفوق المصفوفات (Arrays) على القوائم المترابطة (Linked Lists) في سرعة التكرار حتى لو كانت بنفس التعقيد الزمني O(N)؟
- كيف تعمل جداول التجزئة (Hash Tables) وما الفرق بين حل التصادمات عبر Chaining وعبر Open Addressing؟
- ما هي أشجار البحث الثنائية (BST) ولماذا نحتاج لأشجار متوازنة ذاتياً مثل AVL و Red-Black Trees؟
- قارن بين الطابور (Queue) والمكدس (Stack) وما هي المكدسات الرتيبة (Monotonic Stacks)؟
- كيف يعمل الكوم الثنائي (Binary Heap) وكيف تمثله مصفوفة بسيطة بدون مؤشرات عقد مع عملية Heapify؟
- ما الفرق بين مصفوفة التجاور (Adjacency Matrix) وقائمة التجاور (Adjacency List) في تمثيل الرسوم البيانية (Graphs)؟
- كيف تعمل شجرة البادئات (Trie / Prefix Tree) ولماذا تتفوق على جداول التجزئة في البحث بالبادئة والإكمال التلقائي؟
- كيف تصمم ذاكرة مؤقتة بنظام الأقل استخداماً مؤخراً (LRU Cache) تحقق عمليات Get و Put بزمن O(1) صارم؟
- متى نستخدم شجرة المقاطع (Segment Tree) وشجرة فينويك (Fenwick Tree / BIT) في استعلامات النطاقات؟
- ما الفرق الجوهري بين ذاكرة المكدس (Stack Memory) وذاكرة الكومة (Heap Memory) في إدارة موارد البرنامج؟
أسئلة مقابلات Algorithms & Complexity في Software Fundamentals
- ما هو الفرق الدقيق بين ترميزات Big-O و Big-Omega و Big-Theta في تحليل تعقيد الخوارزميات؟
- قارن بين خوارزميتي QuickSort و MergeSort من حيث التعقيد المكاني، استقرار الترتيب (Stability)، وأسوأ سيناريو؟
- كيف تعمل خوارزمية البحث الثنائي (Binary Search) وما هي الحيل الرياضية لتفادي مشكلة Integer Overflow؟
- قارن بين البحث بالعرض (BFS) والبحث بالعمق (DFS) في استكشاف الرسوم البيانية ومتى تختار كلاً منهما؟
- متى تخفق خوارزمية ديكسترا (Dijkstra) في إيجاد أقصر مسار ولماذا نلجأ إلى خوارزمية بلمان-فورد (Bellman-Ford)؟
- كيف تحول تقنيتا المؤشرين (Two Pointers) والنافذة المنزلقة (Sliding Window) المسائل التربيعية O(N^2) إلى خطية O(N)؟
- ما هي الشروط الأساسية لتطبيق البرمجة الديناميكية (DP) وما الفرق بين Memoization و Tabulation؟
- ما هي خاصية الاختيار الجشع (Greedy Choice Property) ولماذا تنجح الخوارزميات الجشعة في Fractional Knapsack وتفشل في 0/1 Knapsack؟
- كيف تعمل خوارزميات التراجع (Backtracking) وما هو دور التقليم (Pruning) في استكشاف شجرة فضاء الحالات لمسألة N-Queens؟
- ما هي أهم حيل معالجة البتات (Bit Manipulation) مثل فحص القوى الثنائية وحساب عدد البتات وإيجاد العنصر الفريد عبر XOR؟
أسئلة مقابلات Concurrency & Multi-threading في Software Fundamentals
- ما هو الفرق الجوهري بين العمليات (Processes) وخيوط التنفيذ (Threads) وتكلفة التبديل السياقي (Context Switching)؟
- ما هي حالة السباق (Race Condition) وما هو القسم الحرج (Critical Section) في البرمجة المتزامنة؟
- قارن بين أدوات المزامنة: Mutex و Semaphore و Spinlock و Read-Write Lock ومتى تختار كلاً منها؟
- ما هي شروط كوفمان الأربعة (Coffman Conditions) لحدوث الجمود (Deadlock) وكيف تكسر أحدها لحل المشكلة؟
- ما هي مشكلة رؤية الذاكرة (Memory Visibility) وما هو دور الكلمة المفتاحية volatile وحواجز الذاكرة (Memory Barriers)؟
- كيف تعمل خوارزميات المقارنة والتبديل (Compare-And-Swap - CAS) وبناء هياكل البيانات غير المقفلة (Lock-Free)؟
- كيف تدير أحواض الخيوط (Thread Pools) المهام وما هي معادلة الحجم المثالي للـ CPU-bound مقابل I/O-bound؟
- قارن بين نموذج الخيط لكل طلب (Thread-per-request) ونموذج حلقة الأحداث غير المحجوبة (Event Loop with Non-blocking I/O)؟
- كيف تصمم نمط المنتج والمستهلك (Producer-Consumer) باستخدام حاجز مقيد (Bounded Buffer) مع الضغط العكسي (Backpressure)؟
- قارن بين القفل التفاؤلي (Optimistic Concurrency) والقفل التشاؤمي (Pessimistic Concurrency) في قواعد البيانات والذاكرة؟
أسئلة مقابلات System Design & Architecture في Software Fundamentals
- ما الفرق بين التوسع الأفقي (Horizontal Scaling) والتوسع الرأسي (Vertical Scaling) ولماذا تعتبر الخوادم عديمة الحالة (Stateless) شرطاً أساسياً؟
- اشرح نظرية CAP ونظرية PACELC وما الذي تختاره الأنظمة الموزعة عند حدوث انقطاع في الشبكة (Network Partition)؟
- قارن بين استراتيجيات التخزين المؤقت: Cache-Aside و Write-Through و Write-Back وما هي ظاهرة تدافع الكاش (Cache Stampede)؟
- كيف تعمل خوارزمية التجزئة المتسقة (Consistent Hashing) ولماذا تتفوق على خوارزمية Modulo التقليدية في توزيع الأحمال والكاش؟
- ما هو تقسيم قواعد البيانات (Sharding) وما هي تحديات اختيار مفتاح التقسيم (Shard Key) والاستعلامات المشتركة؟
- قارن بين قواعد البيانات العلائقية (SQL) وغير العلائقية (NoSQL) من حيث معايير ACID مقابل BASE؟
- قارن بين وسيط الرسائل المعتمد على الطوابير (RabbitMQ) وسجل الالتزام الموزع (Apache Kafka) ومتى تستخدم كلاً منهما؟
- كيف تعمل خوارزميات تحديد معدل الطلبات (Rate Limiting): خوارزمية Token Bucket وخوارزمية Leaky Bucket؟
- كيف يحمي نمط قاطع الدائرة (Circuit Breaker) الأنظمة الموزعة من الانهيار المتسلسل (Cascading Failure)؟
- كيف تدير المعاملات الموزعة في بنية المايكروسيرفس وما الفرق بين Two-Phase Commit ونمط Saga؟
أسئلة مقابلات Computer Networks & Protocols في Software Fundamentals
- قارن بين نموذج OSI المكون من 7 طبقات ونموذج TCP/IP وكيف تعمل عملية التغليف (Encapsulation) لحزم البيانات؟
- قارن بين بروتوكول TCP وبروتوكول UDP وكيف تضمن مصافحة الـ 3-Way Handshake موثوقية الاتصال؟
- تتبع التطور التاريخي لبروتوكول HTTP: من HTTP/1.1 إلى HTTP/2 والـ Multiplexing وصولاً إلى HTTP/3 ومحرك QUIC القائم على UDP؟
- كيف تؤمن بروتوكولات HTTPS و TLS الاتصالات وما هي مراحل مصافحة TLS (TLS Handshake) وتبادل المفاتيح؟
- كيف تجري دورة حياة دقة نظام أسماء النطاقات (DNS Resolution) وما الفرق بين الاستعلامات المتكررة والمتتالية؟
- قارن بين تقنيات الاتصال اللحظي: WebSockets و Server-Sent Events (SSE) و Long Polling ومتى تختار كلاً منها؟
- ما هي مبادئ معمارية REST وما معنى أن تكون العملية متكررة النتائج (Idempotent)؟
- ما هي آلية مشاركة الموارد عبر الأصول (CORS) ولماذا يرسل المتصفح طلب Preflight من نوع OPTIONS تلقائياً؟
- كيف تحدث هجمات الرجل في المنتصف (MITM) وهجمات إغراق المزامنة (SYN Flood) وكيف تعمل تقنية SYN Cookies؟
- كيف تعمل شبكات توصيل المحتوى (CDNs) وكيف توجه تقنية Anycast Routing المستخدمين لأقرب خادم حافة (Edge Server)؟
أسئلة مقابلات Software Testing & Quality في Software Fundamentals
- ما هو هرم الاختبارات (The Test Pyramid) وما هو التوازن المثالي بين اختبارات الوحدة، التكامل، والاختبارات الشاملة (E2E)؟
- ما هي الدورة الثلاثية للتطوير الموجه بالاختبارات (TDD: Red-Green-Refactor) وما هي ميزتها التصميمية وليست الاختبارية فقط؟
- اشرح تصنيف بدلاء الاختبار (Test Doubles) بحسب جيرارد ميسزاروس: ما الفرق بين Dummy و Stub و Fake و Mock و Spy؟
- ما هي مبادئ F.I.R.S.T الخمسة لكتابة اختبارات وحدة احترافية وموثوقة؟
- لماذا تعتبر نسبة تغطية الكود (Code Coverage) مقياساً مضللاً أحياناً وما هي اختبارات الطفرات (Mutation Testing)؟
- ما هي الاختبارات المتقلبة (Flaky Tests) وما هي أسبابها الجذرية وكيف تقضي عليها في بيئات الـ CI/CD؟
- ما هو الاختبار القائم على الخصائص (Property-Based Testing) وكيف يكشف حالات الحافة المجهولة مقارنة بالاختبار القائم على الأمثلة؟
- ما هو التطوير الموجه بالسلوك (Behavior-Driven Development - BDD) وصيغة Given-When-Then؟
- ما هي اختبارات التعاقد (Contract Testing) وكيف تحمي خدمات المايكروسيرفس الموزعة دون الحاجة لتشغيل بيئات E2E مجمعة؟
- كيف تحسن زمن تنفيذ الاختبارات في مسارات التكامل المستمر (CI Pipelines) عبر التوازي وتقسيم الأحمال؟