أسئلة مقابلات Databases, ORMs & Transactions في Node.js
10 سؤال عن Databases, ORMs & Transactions من مسار Node.js. اقرأ الإجابة المختصرة لكل سؤال هنا، وافتح السؤال للشرح الكامل والأمثلة والأخطاء الشائعة والمصادر.
- متوسط
كيف تعمل حمامات الاتصال (Connection Pools) في قواعد البيانات وما مخاطر تشبعها في Node.js؟
تدير حمامات الاتصال مجموعة اتصالات مفتوحة مسبقاً وتشاركها بين الطلبات؛ وتشبعها يؤدي لتراكم الطلبات في طابور الانتظار وزيادة زمن الاستجابة والـ timeouts.
اقرأ الشرح الكامل - متوسط
كيف يعمل Prisma ORM في Node.js وما دور محرك الاستعلام (Query Engine / Query Compiler) فيه؟
يولّد Prisma عميل TypeScript مخصصًا من ملف schema.prisma ويترجم استدعاءاتك إلى SQL. كان التنفيذ يتم عبر محرك ثنائي مكتوب بـ Rust، أما الإصدارات الحديثة (متاحة منذ 6.16 وهي الأساس في Prisma 7) فتستخدم Query Compiler مكتوبًا بـ TypeScript مع driver adapters بدون محرك Rust.
اقرأ الشرح الكامل - متقدم
قارن بين Drizzle ORM و TypeORM من حيث الفلسفة المعمارية وسرعة الأداء في Node.js.
Drizzle هو SQL-like query builder خفيف وصفر التكلفة الإضافية بدون محركات ثنائية، بينما TypeORM هو ORM كلاسيكي مبني بنمط Data Mapper/Active Record ويعتمد على الانعكاس والـ decorators.
اقرأ الشرح الكامل - متوسط
كيف يدير Mongoose الاتصال بقواعد بيانات MongoDB وما دور الـ Buffering للأوامر؟
يوفر Mongoose طبقة ODM متقدمة؛ وميزة Command Buffering تسمح بتنفيذ استعلامات النماذج قبل اكتمال الاتصال الأولي الفعلي وتخزينها حتى ينجح الاتصال.
اقرأ الشرح الكامل - مبتدئ
كيف تحمي تطبيقات Node.js من ثغرات SQL Injection باستخدام الاستعلامات المجهزة (Parameterized Queries)؟
تفصل الاستعلامات المجهزة كود SQL عن البيانات عبر معلمات نائبة ($1, ?)، حيث ترسل للمحرك كبيانات حرفية بحتة لا يمكن تفسيرها كتعليمات برمجية.
اقرأ الشرح الكامل - متقدم
كيف تنفذ المعاملات المترابطة (Database Transactions) ومستويات العزل بأمان في Node.js؟
تنفذ بحجز عميل محدد من الـ pool، وتشغيل BEGIN، وتنفيذ العمليات، ثم COMMIT في حال النجاح أو ROLLBACK في كتلة catch.
اقرأ الشرح الكامل - متقدم
ما هي مشكلة N+1 في استعلامات قواعد البيانات وكيف تحلها مكتبة DataLoader في Node.js؟
تحدث عندما يُنفذ استعلام رئيسي يتبعه N استعلام لكل سجل لجلب علاقاته؛ تحلها DataLoader بتجميع (Batching) وتخزين (Caching) الطلبات في استعلام موحد.
اقرأ الشرح الكامل - متقدم
كيف تصمم معمارية توجيه الاستعلامات بين قاعدة البيانات الأساسية (Primary) والنسخ الثانوية (Read Replicas)؟
يتم إنشاء حمامي اتصالات منفصلين: حمام موجه للـ Primary لعمليات الكتابة والمعاملات، وحمام موجه للـ Replicas لعمليات القراءة مع موازنة الحمل.
اقرأ الشرح الكامل - متقدم
كيف تدير ترحيل قواعد البيانات (Database Migrations) دون توقف الخدمة (Zero-Downtime)؟
باتباع نمط Expand and Contract التوسعي؛ بحيث يدعم مخطط قاعدة البيانات كود التطبيق القديم والجديد بالتوازي أثناء مرحلة النشر.
اقرأ الشرح الكامل - متقدم
كيف تطبق الأقفال الموزعة (Distributed Locks) باستخدام Redis في بيئة خوادم Node.js متعددة؟
تطبق عبر أمر SET مع خيارات NX وPX لتسجيل رمز عشوائي بمهلة زمنية، وتحرير القفل بواسطة Lua script يتحقق من مطابقة الرمز.
اقرأ الشرح الكامل