1. مبتدئ

    لماذا يجب القياس قبل تحسين الأداء؟

    لأن عنق الزجاجة الحقيقي نادرًا ما يكون حيث نتوقع، والتحسين دون قياس يضيف تعقيدًا قد لا يغير شيئًا، أو يحسّن جزءًا لا يمثل إلا نسبة ضئيلة من الزمن الكلي.

    اقرأ الشرح الكامل
  2. متوسط

    ما دور cProfile في تحليل الأداء؟

    يسجّل عدد استدعاءات كل دالة والزمن الذاتي (tottime) والتراكمي (cumtime)، فيساعدك في تحديد المسارات الساخنة (hot paths).

    اقرأ الشرح الكامل
  3. متوسط

    متى تستخدم collections.deque بدل list؟

    استخدم deque عندما تحتاج إضافة أو إزالة العناصر من الطرفين بكفاءة O(1)، مثل الطوابير والنوافذ المنزلقة، واستخدم list للوصول بالفهرس والإضافة في النهاية.

    اقرأ الشرح الكامل
  4. مبتدئ

    متى تحسّن generators استهلاك الذاكرة ومتى لا تحسّن الزمن؟

    تقلل الـ generators ذروة استهلاك الذاكرة لأنها تنتج العناصر عند الطلب، لكنها لا تسرّع المعالجة بالضرورة، وقد تكون أبطأ إذا احتجت المرور على البيانات عدة مرات.

    اقرأ الشرح الكامل
  5. متوسط

    كيف تستخدم functools.lru_cache بأمان؟

    تخزن نتائج الدالة حسب معاملاتها حتى حد أقصى (maxsize)، وتناسب الدوال النقية التي تكون معاملاتها hashable ونتيجتها لا تعتمد على حالة خارجية متغيرة.

    اقرأ الشرح الكامل
  6. مبتدئ

    لماذا يُفضل str.join غالبًا لتجميع النصوص؟

    لأن النصوص غير قابلة للتغيير، فالإضافة المتكررة بـ += داخل حلقة قد تنشئ نصًا جديدًا في كل خطوة بتكلفة تربيعية، بينما join تحسب الحجم الكلي وتبني النتيجة مرة واحدة.

    اقرأ الشرح الكامل
  7. متوسط

    كيف تقلل تكلفة إدخال عدد كبير من الصفوف في SQLite؟

    اجمع عمليات الإدخال في معاملة (transaction) واحدة واستخدم executemany، بدل تنفيذ commit لكل صف.

    اقرأ الشرح الكامل
  8. متقدم

    كيف تتعامل مع كثرة إنشاء الكائنات في حلقة ساخنة؟

    قِس أولًا، ثم قلل الكائنات المؤقتة غير الضرورية، واستخدم البنى والدوال المدمجة المكتوبة بـ C، أو انقل الحساب إلى NumPy أو امتداد مترجم إذا أثبت الـ profiler أن الحلقة هي عنق الزجاجة.

    اقرأ الشرح الكامل
  9. متوسط

    ماذا يقيس tracemalloc وكيف تستخدمه لكشف تسرب الذاكرة؟

    يتتبع tracemalloc عمليات حجز الذاكرة التي يجريها Python ومكان حدوثها في الكود، ويسمح بأخذ snapshots ومقارنتها لمعرفة الأسطر التي تنمو ذاكرتها.

    اقرأ الشرح الكامل
  10. متقدم

    كيف يغيّر اختيار بنية البيانات أداء البرنامج؟

    التعقيد الزمني للعمليات الأساسية يحدد الأداء أكثر من أي تحسين آخر: فحص العضوية في set أو dict متوسطه O(1)، بينما في list خطي O(n)، وهذا الفرق يتضخم مع حجم البيانات.

    اقرأ الشرح الكامل