مقالات عملية مرتبة حسب المجال والمستوى، اختر المجال المناسب واقرأ من مستوى مبتدئ إلى محترف.
لو جربت 0.1 + 0.2 في JavaScript أو Python الناتج بيطلع 0.30000000000000004 مش 0.3. ده مش bug في اللغة، ده سلوك معياري في IEEE 754 موجود في كل لغة تقريبًا. المقال يشرح القصة من الصفر بمثال بسيط، ثم التفسير العلمي الدقيق، مع سيناريو خسارة فلوس حقيقية، كود JS/Python شغّال، 4 طرق علاج موثّقة، وحالات ما تنفعش فيها.
لو عندك جدول 10 مليون صف، الـ LIMIT 20 OFFSET 10000 بتاعتك مش بتتخطى 10,000 سجل — هي فعليًا بتقرأهم كلهم قبل ما ترميهم. Cursor Pagination بيثبت الزمن على 2ms بدل ما يوصل 1800ms في الصفحات البعيدة. كود PostgreSQL + Node.js شغّال، قياس فعلي، ومتى لا تستخدمها.
كل cache لازمله سياسة إزالة. LRU هي الأشهر. المقال يشرح الفكرة بمثال رف الألعاب، ثم ينفّذها من الصفر بـ HashMap + Doubly Linked List في 40 سطر Python، مع قياس فعلي وحالات ما تنفعش فيها ومصادر رسمية.
الـ HashMap مش دايمًا O(1). لو الـ hash function ضعيفة أو المهاجم بيبعت مفاتيح خبيثة، كل الإدخالات بتقع في bucket واحد وسرعة الـ lookup بتطلع من نانو ثانية لـ ثواني. شرح مبسّط بمثال المكتبة، كود Java/Python شغّال، قياس فعلي، وحالات هجوم HashDoS حقيقية مع المصادر.
لو بتفتح ملف أو اتصال قاعدة بيانات بدون with وبتنسى تقفله، الـ file descriptors بتخلص والسيرفر بيقع بعد ساعات. Context manager بيقفل المورد تلقائيًا حتى لو الكود رمى استثناء. كود شغّال، بروتوكول __enter__ و __exit__ بالتفصيل، ومصادر رسمية.
لو جربت تقرا ملف 10GB بـ fs.readFile الـ Node بيقع بـ ENOMEM حتى لو عندك 16GB RAM. Streams بتحل المشكلة بـ chunk صغير بدل الملف كامل، وبتخلي استهلاك الذاكرة ثابت. كود شغال، أرقام قياس حقيقية، وحالات ما تستخدمهاش فيها.
لو عندك search box بيقترح كلمات من قاموس مليون كلمة، Array.filter بياخد 180ms في كل ضغطة. Trie بيعمل نفس النتيجة في 0.4ms، لكن بياكل ذاكرة 4× أكتر. كود JavaScript شغّال، قياس حقيقي، وحالات ما ينفعش فيها.
في Go، لما تحتاج أكتر من goroutine تشتغل على نفس البيانات، الـ mutex مش دايمًا الحل. Channels بتخلّيك تنقل الملكية بدل ما تقفل — بأرقام، وكود worker pool شغّال، وحالات الـ mutex فيها أسرع بـ 4 أضعاف.
لو عندك مليون email مسجل ومحتاج تشيك كل طلب جديد هل موجود قبل كده، hash table هتاكل 75MB ذاكرة. Bloom Filter بيعملها بـ 1MB، ومع ذلك في trade-off محدد لازم تعرفه قبل ما تستخدمه في production.
لو عندك response بيرجّع success أو error والـ TypeScript مش بيميز بينهم، المشكلة في شكل الـ type مش في الـ compiler. Discriminated unions بتحلها بخانة tag بنوع literal. كود شغّال، مقارنة مع optional properties، exhaustiveness check، وحالات ما تنفعش فيها.