لقد أنشأت هذه في الأصل كقائمة قصيرة من مواضيع الدراسة التي يجب القيام بها لكي أصبح مهندس برمجيات، لكنها تطورت إلى القائمة الكبيرة التي تراها اليوم. بعد الانتهاء من هذه الخطة الدراسية، تم تعييني كمهندس تطوير برمجيات في أمازون! ربما لن تضطر إلى الدراسة بقدر ما فعلت. على أية حال، كل ما تحتاجه موجود هنا.
كنت أدرس حوالي 8-12 ساعة يوميًا لعدة أشهر. هذه هي قصتي: لماذا درست بدوام كامل لمدة 8 أشهر لإجراء مقابلة على Google
يرجى ملاحظة: لن تحتاج إلى الدراسة بقدر ما فعلت. لقد أهدرت الكثير من الوقت في أشياء لم أكن بحاجة إلى معرفتها. مزيد من المعلومات حول ذلك أدناه. سأساعدك على الوصول إلى هناك دون إضاعة وقتك الثمين.
العناصر المذكورة هنا ستعدك جيدًا لإجراء مقابلة فنية في أي شركة برمجيات تقريبًا، بما في ذلك الشركات العملاقة: Amazon، وFacebook، وGoogle، وMicrosoft.
حظا سعيدا لك!
البهاسا الاندونيسية
البلغارية
الاسبانية
الألمانية
اليابانية (日本語)
المهاراتية
بولندي
البرتغالية البرازيلية
الروسية
تينغ فيت - فيتنامية
الأردية - اردو
الأوزبكية
বংলLA - البنغالية
ខ្មែរ - الخمير
简体中文
繁體中文
الأفريكانية
عربي
فرنسي
اليونانية
ايطالي
الكورية (한국어)
المالايالامية
الفارسية - الفارسية
التيلجو
التايلاندية
تركي
أوكرانيا
عبرية
الهندية
كن راعيًا وادعم جامعة مقابلة البرمجة!
هذه هي خطتي الدراسية لعدة أشهر لكي أصبح مهندس برمجيات في شركة كبيرة.
مطلوب:
خبرة قليلة في البرمجة (المتغيرات، الحلقات، الأساليب/الوظائف، إلخ)
الصبر
وقت
لاحظ أن هذه خطة دراسية لهندسة البرمجيات ، وليست هندسة الواجهة الأمامية أو التطوير الكامل. توجد بالفعل خرائط طريق ودورات دراسية رائعة لتلك المسارات الوظيفية في أماكن أخرى (راجع https://roadmap.sh/ لمزيد من المعلومات).
هناك الكثير لنتعلمه في برنامج علوم الكمبيوتر بالجامعة، ولكن معرفة حوالي 75% فقط أمر جيد بما يكفي لإجراء مقابلة، لذلك هذا ما أغطيه هنا. للحصول على برنامج كامل للتدريس الذاتي لعلوم الكمبيوتر، تم تضمين الموارد الخاصة بخطتي الدراسية في خريطة طريق علوم الكمبيوتر الخاصة بكمران أحمد: https://roadmap.sh/computer-science
ما هذا؟
لماذا استخدامه؟
كيفية استخدامه
لا تشعر أنك لست ذكيا بما فيه الكفاية
ملاحظة حول موارد الفيديو
اختر لغة برمجة
كتب لهياكل البيانات والخوارزميات
كتب التحضير للمقابلة
لا ترتكب أخطائي
ما لن تراه مغطى
الخطة اليومية
ممارسة أسئلة الترميز
مشاكل الترميز
التعقيد الخوارزمي / Big-O / التحليل المقارب
هياكل البيانات
المصفوفات
القوائم المرتبطة
كومة
طابور
جدول التجزئة
المزيد من المعرفة
بحث ثنائي
عمليات البت
الأشجار
الأشجار - مقدمة
أشجار البحث الثنائية: BSTs
كومة / قائمة انتظار الأولوية / كومة ثنائية
أشجار البحث المتوازنة (المفهوم العام وليس التفاصيل)
الاجتياز: الطلب المسبق، الطلب الداخلي، الطلب اللاحق، BFS، DFS
فرز
اختيار
الإدراج
كومة
فرز سريع
دمج
الرسوم البيانية
موجه
غير موجه
مصفوفة الجوار
قائمة المجاورة
اجتياز: BFS، DFS
المزيد من المعرفة
العودية
البرمجة الديناميكية
أنماط التصميم
التوافقيات (ن اختر ك) والاحتمالات
خوارزميات NP وNP-Complete والتقريب
كيف تقوم أجهزة الكمبيوتر بمعالجة البرنامج
مخابئ
العمليات والخيوط
اختبار
سلسلة البحث والتلاعب
يحاول
أرقام النقطة العائمة
يونيكود
إنديانيس
الشبكات
المراجعة النهائية
قم بتحديث سيرتك الذاتية
ابحث عن وظيفة
عملية المقابلة والإعداد العام للمقابلة
فكر في الأمر عندما تأتي المقابلة
لديك أسئلة للمقابلة
بمجرد حصولك على الوظيفة
---------------- كل ما هو تحت هذه النقطة اختياري ----------------
كتب إضافية
تصميم النظام وقابلية التوسع ومعالجة البيانات (إذا كانت لديك خبرة تزيد عن 4 سنوات)
التعلم الإضافي
أشجار AVL
أشجار سبلاي
أشجار حمراء/سوداء
2-3 أشجار البحث
2-3-4 أشجار (ويعرف أيضًا باسم 2-4 أشجار)
أشجار N-ary (K-ary، M-ary).
ب- الأشجار
المجمعين
إيماكس والسادس (م)
أدوات سطر أوامر يونكس
نظرية المعلومات
قانون التكافؤ والهامينغ
إنتروبيا
التشفير
ضغط
أمن الكمبيوتر
جمع القمامة
البرمجة الموازية
أنظمة المراسلة والتسلسل وقائمة الانتظار
أ*
تحويل فورييه السريع
مرشح بلوم
HyperLogLog
التجزئة الحساسة للمكان
أشجار فان إمدي بواس
هياكل البيانات المعززة
أشجار البحث المتوازنة
أشجار كيلو د
تخطي القوائم
تدفقات الشبكة
مجموعات مفككة والعثور على الاتحاد
الرياضيات للمعالجة السريعة
فخ
البرمجة الخطية
الهندسة، بدن محدب
الرياضيات المنفصلة
تفاصيل إضافية عن بعض المواضيع
سلسلة فيديو
دورات علوم الكمبيوتر
أوراق
إذا كنت ترغب في العمل كمهندس برمجيات في شركة كبيرة، فهذه هي الأشياء التي يجب أن تعرفها.
إذا فاتتك فرصة الحصول على شهادة في علوم الكمبيوتر، كما فعلت أنا، فسوف يلحق بك هذا الأمر وينقذ أربع سنوات من حياتك.
عندما بدأت هذا المشروع، لم أكن أعرف المكدس من الكومة، ولم أكن أعرف أي شيء عن Big-O، أو أي شيء عن الأشجار، أو كيفية اجتياز الرسم البياني. إذا اضطررت إلى برمجة خوارزمية فرز، فيمكنني أن أخبرك أن الأمر سيكون فظيعًا. كل بنية بيانات استخدمتها على الإطلاق كانت مدمجة في اللغة، ولم أكن أعرف كيف تعمل تحت الغطاء على الإطلاق. لم أضطر مطلقًا إلى إدارة الذاكرة إلا إذا كانت العملية التي كنت أقوم بتشغيلها ستؤدي إلى ظهور خطأ "نفاد الذاكرة"، وبعد ذلك يجب أن أجد حلاً بديلاً. لقد استخدمت عددًا قليلًا من المصفوفات متعددة الأبعاد في حياتي وآلاف المصفوفات الترابطية، لكنني لم أقوم أبدًا بإنشاء هياكل بيانات من الصفر.
إنها خطة طويلة. قد يستغرق منك أشهر. إذا كنت على دراية بالكثير من هذا بالفعل، فسوف يستغرق الأمر وقتًا أقل بكثير.
⬆ العودة إلى الأعلى
كل شيء أدناه هو مخطط تفصيلي، ويجب عليك التعامل مع العناصر بالترتيب من الأعلى إلى الأسفل.
أنا أستخدم نكهة تخفيض السعر الخاصة بـ GitHub، بما في ذلك قوائم المهام لتتبع التقدم.
المزيد عن تخفيض السعر بنكهة GitHub
في هذه الصفحة، انقر فوق زر "الرمز" الموجود بالقرب من الجزء العلوي، ثم انقر فوق "تنزيل ملف ZIP". قم بفك ضغط الملف ويمكنك العمل مع الملفات النصية.
إذا كنت منفتحًا على محرر أكواد برمجية يفهم تخفيض السعر، فسترى كل شيء منسقًا بشكل جيد.
قم بإنشاء فرع جديد حتى تتمكن من التحقق من عناصر مثل هذه، فقط ضع علامة x بين القوسين: [x]
Fork the GitHub repo: https://github.com/jwasham/coding-interview-university
من خلال النقر على زر Fork.
استنساخ إلى الريبو المحلي الخاص بك:
استنساخ بوابة https://github.com/<YOUR_GITHUB_USERNAME>/coding-interview-university.gitcd coding-interview-university git Remote إضافة المنبع https://github.com/jwasham/coding-interview-university.git git Remote set-url --push upstream DISABLE # حتى لا تدفع تقدمك الشخصي إلى الريبو الأصلي
قم بتمييز كافة المربعات بعلامة X بعد الانتهاء من التغييرات:
git Commit -am "تقدم شخصي ملحوظ" git pull upstream main # حافظ على تحديث شوكتك من خلال التغييرات من repogit Push # الأصلي، ما عليك سوى الضغط على شوكتك
⬆ العودة إلى الأعلى
مهندسو البرمجيات الناجحون أذكياء، لكن الكثير منهم يشعرون بعدم الأمان لأنهم ليسوا أذكياء بما فيه الكفاية.
قد تساعدك مقاطع الفيديو التالية في التغلب على انعدام الأمان هذا:
أسطورة المبرمج العبقري
من الخطر أن تسير بمفردك: محاربة الوحوش غير المرئية في مجال التكنولوجيا
⬆ العودة إلى الأعلى
لا تتوفر بعض مقاطع الفيديو إلا من خلال التسجيل في فصل دراسي على Coursera أو EdX. وتسمى هذه الدورات MOOCs. في بعض الأحيان لا تكون الفصول الدراسية منعقدة، لذلك يتعين عليك الانتظار بضعة أشهر، لذلك لا يمكنك الوصول إليها.
سيكون من الرائع استبدال موارد الدورة التدريبية عبر الإنترنت بمصادر عامة مجانية ومتاحة دائمًا، مثل مقاطع فيديو YouTube (ويفضل أن تكون محاضرات جامعية)، حتى يتمكن الأشخاص من دراستها في أي وقت، وليس فقط عندما تكون هناك دورة تدريبية معينة عبر الإنترنت.
⬆ العودة إلى الأعلى
ستحتاج إلى اختيار لغة برمجة لمقابلات البرمجة التي تجريها، ولكنك ستحتاج أيضًا إلى العثور على لغة يمكنك استخدامها لدراسة مفاهيم علوم الكمبيوتر.
ويفضل أن تكون اللغة هي نفسها، بحيث لا تحتاج إلا إلى إتقان لغة واحدة.
عندما قمت بإعداد خطة الدراسة، استخدمت لغتين في معظمها: C وPython
ج: مستوى منخفض جدًا. يتيح لك التعامل مع المؤشرات وتخصيص/إلغاء تخصيص الذاكرة، حتى تشعر بهياكل البيانات والخوارزميات الموجودة في عظامك. في اللغات ذات المستوى الأعلى مثل Python أو Java، تكون هذه الأشياء مخفية عنك. يعد هذا أمرًا رائعًا في العمل اليومي، ولكن عندما تتعلم كيفية إنشاء هياكل البيانات ذات المستوى المنخفض هذه، فمن الرائع أن تشعر بالقرب من المعدن.
هذا كتاب قصير، لكنه سيمنحك معرفة جيدة بلغة C وإذا مارستها قليلًا، ستتقنها سريعًا. يساعدك فهم لغة C على فهم كيفية عمل البرامج والذاكرة.
لا تحتاج إلى التعمق في الكتاب (أو حتى إنهائه). ما عليك سوى الوصول إلى المكان الذي تشعر فيه بالراحة في القراءة والكتابة بلغة C.
ج في كل مكان. سترى أمثلة في الكتب والمحاضرات ومقاطع الفيديو في كل مكان أثناء دراستك.
لغة البرمجة C، الطبعة الثانية
بايثون: حديثة ومعبرة جدًا، لقد تعلمتها لأنها مفيدة جدًا وتسمح لي أيضًا بكتابة تعليمات برمجية أقل في المقابلة.
هذا هو المفضل لدي. أنت تفعل ما تريد، بالطبع.
ربما لا تحتاج إليها، لكن إليك بعض المواقع لتعلم لغة جديدة:
ممارسة الرياضة
حروب كودية
HackEarth
موضوعات المقياس (Java، C++)
تحديات مجتمع PRO Programiz)
يمكنك استخدام لغة ترتاح لها للقيام بالجزء الترميزي من المقابلة، ولكن بالنسبة للشركات الكبيرة، فهذه خيارات قوية:
سي ++
جافا
بايثون
يمكنك أيضًا استخدام هذه الأشياء، لكن اقرأ أولاً. قد تكون هناك تحذيرات:
جافا سكريبت
روبي
إليك مقال كتبته حول اختيار لغة للمقابلة: اختر لغة واحدة لمقابلة البرمجة. هذه هي المقالة الأصلية التي استندت إليها رسالتي: اختيار لغة برمجة للمقابلات
يجب أن تكون مرتاحًا جدًا في اللغة وأن تكون واسع المعرفة.
اقرأ المزيد عن الاختيارات:
اختر اللغة المناسبة لمقابلة البرمجة الخاصة بك
انظر الموارد الخاصة باللغة هنا
⬆ العودة إلى الأعلى
سيشكل هذا الكتاب أساسك لعلوم الكمبيوتر.
ما عليك سوى اختيار واحدة باللغة التي تناسبك. سوف تقوم بالكثير من القراءة والبرمجة.
الخوارزميات في لغة C، الأجزاء 1-5 (الحزمة)، الطبعة الثالثة
الأساسيات، وهياكل البيانات، والفرز، والبحث، وخوارزميات الرسم البياني
هياكل البيانات والخوارزميات في بايثون
بواسطة جودريتش، تاماسيا، جولدفاسر
أحببت هذا الكتاب. لقد غطت كل شيء وأكثر.
كود بايثونيك
تقرير كتابي المتوهج: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/
اختيارك:
جودريتش، تاماسيا، جولدفاسر
هياكل البيانات والخوارزميات في جافا
سيدجويك وواين:
الخوارزميات أنا
الخوارزميات II
الخوارزميات
دورة مجانية من كورسيرا تغطي الكتاب (يدرسها المؤلفون!):
اختيارك:
جودريتش، تاماسيا، وماونت
هياكل البيانات والخوارزميات في C++، الطبعة الثانية
سيدجويك وواين
الخوارزميات في لغة C++، الأجزاء 1-4: الأساسيات، بنية البيانات، الفرز، البحث
الخوارزميات في C++ الجزء 5: خوارزميات الرسم البياني
⬆ العودة إلى الأعلى
لا تحتاج لشراء مجموعة من هذه. بصراحة، ربما يكون "إتقان مقابلة البرمجة" كافيًا، لكنني اشتريت المزيد لأمنح نفسي المزيد من التدريب. لكنني دائما أفعل الكثير.
اشتريت كل من هذه. لقد أعطوني الكثير من الممارسة.
مقابلات البرمجة المكشوفة: الترميز طريقك من خلال المقابلة، الطبعة الرابعة
الإجابات في C ++ وجافا
يعد هذا تمهيدًا جيدًا لكسر مقابلة البرمجة
ليست صعبة للغاية. قد تكون معظم المشاكل أسهل مما ستراه في المقابلة (مما قرأته)
تكسير مقابلة الترميز، الطبعة السادسة
الإجابات في جافا
اختر واحدًا:
عناصر مقابلات البرمجة (إصدار C++)
عناصر مقابلات البرمجة في بايثون
عناصر مقابلات البرمجة (إصدار جافا) - مشروع مصاحب - كعب الأسلوب وحالات الاختبار لكل مشكلة في الكتاب
⬆ العودة إلى الأعلى
نمت هذه القائمة على مدى عدة أشهر، ونعم، خرجت عن نطاق السيطرة.
فيما يلي بعض الأخطاء التي ارتكبتها حتى تحصل على تجربة أفضل. وسوف توفر أشهر من الوقت.
شاهدت ساعات من مقاطع الفيديو وسجلت ملاحظات كثيرة، وبعد أشهر كان هناك الكثير مما لم أتذكره. قضيت ثلاثة أيام في مراجعة ملاحظاتي وصنع البطاقات التعليمية حتى أتمكن من المراجعة. لم أكن بحاجة إلى كل هذه المعرفة.
من فضلك، اقرأ حتى لا تقع في أخطائي:
الاحتفاظ بالمعرفة في علوم الكمبيوتر.
لحل المشكلة، أنشأت موقعًا صغيرًا للبطاقات التعليمية حيث يمكنني إضافة نوعين من البطاقات التعليمية: عامة ورمزية. كل بطاقة لها تنسيق مختلف. لقد أنشأت موقعًا إلكترونيًا على الهاتف المحمول أولاً، حتى أتمكن من المراجعة على هاتفي أو جهازي اللوحي، أينما كنت.
اصنع بنفسك مجانا:
الريبو موقع البطاقات التعليمية
أنا لا أوصي باستخدام البطاقات التعليمية الخاصة بي. هناك الكثير منها ومعظمها تافهة لا تحتاج إليها.
ولكن إذا كنت لا تريد الاستماع إلي، فإليك ما يلي:
قاعدة بيانات البطاقات التعليمية الخاصة بي (1200 بطاقة):
قاعدة بيانات بطاقات الفلاش الخاصة بي (المتطرفة - 1800 بطاقة):
ضع في اعتبارك أنني بالغت في الأمر ولدي بطاقات تغطي كل شيء بدءًا من لغة التجميع ومعلومات بايثون وحتى التعلم الآلي والإحصائيات. إنه أكثر من اللازم بالنسبة لما هو مطلوب.
ملاحظة على البطاقات التعليمية: في المرة الأولى التي تعرف فيها أنك تعرف الإجابة، لا تضع عليها علامة "معروفة". عليك أن ترى نفس البطاقة وتجيب عليها عدة مرات بشكل صحيح قبل أن تعرفها حقًا. التكرار سيضع هذه المعرفة بشكل أعمق في دماغك.
البديل لاستخدام موقع البطاقات التعليمية الخاص بي هو Anki، والذي أوصيت به عدة مرات. ويستخدم نظام التكرار لمساعدتك على التذكر. إنه سهل الاستخدام، ومتوفر على جميع الأنظمة الأساسية، ويحتوي على نظام مزامنة سحابي. يكلف 25 دولارًا على نظام التشغيل iOS ولكنه مجاني على الأنظمة الأساسية الأخرى.
قاعدة بيانات البطاقات التعليمية الخاصة بي بتنسيق Anki: https://ankiweb.net/shared/info/25173560 (شكرًاxiewenya).
ذكر بعض الطلاب مشكلات التنسيق المتعلقة بالمساحة البيضاء والتي يمكن إصلاحها عن طريق القيام بما يلي: فتح المجموعة، وتحرير البطاقة، والنقر فوق البطاقات، وتحديد زر الاختيار "التصميم"، وإضافة العضو "المسافة البيضاء: pre;" إلى فئة البطاقة.
هذا مهم جدًا.
ابدأ في الإجابة على أسئلة مقابلة الترميز أثناء تعلم هياكل البيانات والخوارزميات.
تحتاج إلى تطبيق ما تتعلمه لحل المشكلات، وإلا ستنسى. لقد ارتكبت هذا الخطأ.
بمجرد أن تتعلم موضوعًا ما، وتشعر ببعض الراحة تجاهه، على سبيل المثال، القوائم المرتبطة :
افتح أحد كتب مقابلات البرمجة (أو مواقع الويب الخاصة بمشكلات البرمجة، المدرجة أدناه)
قم بطرح سؤالين أو ثلاثة أسئلة بخصوص القوائم المرتبطة.
انتقل إلى موضوع التعلم التالي.
لاحقًا، ارجع وقم بحل مشكلتين أو ثلاث مسائل أخرى تتعلق بالقائمة المرتبطة.
افعل ذلك مع كل موضوع جديد تتعلمه.
استمر في حل المشكلات أثناء تعلم كل هذه الأشياء، وليس بعد ذلك.
لا يتم تعيينك من أجل المعرفة، ولكن من أجل كيفية تطبيق المعرفة.
هناك العديد من الموارد لذلك، المذكورة أدناه. يستمر في التقدم.
هناك الكثير من عوامل التشتيت التي يمكن أن تستغرق وقتًا ثمينًا. التركيز والتركيز صعب. قم بتشغيل بعض الموسيقى بدون كلمات وستكون قادرًا على التركيز جيدًا.
⬆ العودة إلى الأعلى
هذه تقنيات سائدة ولكنها ليست جزءًا من خطة الدراسة هذه:
جافا سكريبت
HTML وCSS وتقنيات الواجهة الأمامية الأخرى
SQL
⬆ العودة إلى الأعلى
تتناول هذه الدورة الكثير من المواضيع. من المحتمل أن يستغرق كل منها بضعة أيام، أو ربما حتى أسبوعًا أو أكثر. ذلك يعتمد على الجدول الزمني الخاص بك.
كل يوم، خذ الموضوع التالي في القائمة، وشاهد بعض مقاطع الفيديو حول هذا الموضوع، ثم اكتب تنفيذًا لبنية البيانات أو الخوارزمية باللغة التي اخترتها لهذه الدورة.
يمكنك رؤية الكود الخاص بي هنا:
ج
سي ++
بايثون
لا تحتاج إلى حفظ كل خوارزمية. كل ما عليك فعله هو أن تكون قادرًا على فهمه بدرجة كافية حتى تتمكن من كتابة التنفيذ الخاص بك.
⬆ العودة إلى الأعلى
Why is this here? I'm not ready to interview.
ثم ارجع واقرأ هذا.
لماذا تحتاج إلى التدرب على حل مشاكل البرمجة:
التعرف على المشكلات، والمكان الذي تتلاءم فيه هياكل البيانات والخوارزميات الصحيحة
جمع متطلبات المشكلة
تحدث عن طريقك خلال المشكلة كما تفعل في المقابلة
الترميز على السبورة أو الورق، وليس على الكمبيوتر
التوصل إلى تعقيد الزمان والمكان لحلولك (انظر Big-O أدناه)
اختبار الحلول الخاصة بك
هناك مقدمة رائعة لحل المشكلات المنهجية والتواصلية في المقابلة. ستحصل على هذا من كتب مقابلات البرمجة أيضًا، لكنني وجدت هذا رائعًا: لوحة تصميم الخوارزمية
اكتب التعليمات البرمجية على السبورة أو الورق، وليس على جهاز الكمبيوتر. اختبار مع بعض المدخلات العينة. ثم اكتبه واختبره على جهاز الكمبيوتر.
إذا لم يكن لديك سبورة بيضاء في المنزل، فاختر لوحة رسم كبيرة من متجر فني. يمكنك الجلوس على الأريكة والتدرب. هذه هي "السبورة البيضاء للأريكة" الخاصة بي. أضفت القلم في الصورة فقط من أجل القياس. إذا كنت تستخدم قلمًا، فسوف تتمنى أن تتمكن من مسحه. يصبح فوضوي بسرعة. أستخدم قلم رصاص وممحاة.
لا تتعلق ممارسة أسئلة البرمجة بحفظ إجابات مشاكل البرمجة.
⬆ العودة إلى الأعلى
لا تنسَ كتب مقابلات البرمجة الرئيسية هنا.
حل المشاكل:
كيفية العثور على حل
كيفية تشريح بيان مشكلة Topcoder
فيديوهات أسئلة مقابلة البرمجة:
إيديسيرفي (88 فيديو)
توشار روي (5 قوائم تشغيل)
ممتاز للإرشادات التفصيلية لحلول المشكلات
نيك وايت - حلول LeetCode (187 فيديو)
شرح جيد للحل والكود
يمكنك مشاهدة العديد منها في وقت قصير
فيشركودر - حلول LeetCode
مواقع التحدي/التدريب:
LeetCode
موقعي المفضل لمشاكل الترميز. إنه يستحق أموال الاشتراك لمدة شهر أو شهرين من المحتمل أن تقوم بالتحضير لها.
راجع مقاطع فيديو Nick White وFisherCoder أعلاه للتعرف على التعليمات البرمجية.
HackerRank
TopCoder
قوات التشفير
اللطافة
المهوسون للمهوسون
AlgoExpert
يُعد هذا الموقع، الذي أنشأه مهندسو Google، مصدرًا ممتازًا لصقل مهاراتك.
مشروع أويلر
يركز بشكل كبير على الرياضيات، وغير مناسب حقًا لإجراء مقابلات البرمجة
⬆ العودة إلى الأعلى
حسنًا، يكفي كلامًا، فلنتعلم!
لكن لا تنسَ حل مسائل البرمجة من الأعلى أثناء التعلم!
لا يوجد شيء للتنفيذ هنا، أنت فقط تشاهد مقاطع الفيديو وتدون الملاحظات! ياي!
هناك الكثير من أشرطة الفيديو هنا. فقط شاهد بما فيه الكفاية حتى تفهم ذلك. يمكنك دائما العودة والمراجعة.
لا تقلق إذا كنت لا تفهم كل الرياضيات وراء ذلك.
كل ما عليك فعله هو فهم كيفية التعبير عن تعقيد الخوارزمية من حيث Big-O.
هارفارد CS50 - التدوين المقارب (فيديو)
Big O Notations (برنامج تعليمي سريع عام) (فيديو)
ترميز Big O (وأوميغا وثيتا) - أفضل تفسير رياضي (فيديو)
سكينا (فيديو)
جامعة كاليفورنيا في بيركلي بيج أو (فيديو)
التحليل المطفأ (فيديو)
TopCoder (يتضمن علاقات التكرار والنظرية الرئيسية):
التعقيد الحسابي: القسم 1
التعقيد الحسابي: القسم 2
ورقة الغش
[مراجعة] تحليل الخوارزميات (قائمة التشغيل) في 18 دقيقة (فيديو)
حسنا، هذا يكفي عن ذلك.
عندما تمر بـ "Cracking the Coding Interview"، يوجد فصل حول هذا الأمر، وفي النهاية يوجد اختبار لمعرفة ما إذا كان بإمكانك تحديد مدى تعقيد وقت التشغيل للخوارزميات المختلفة. إنها مراجعة واختبار فائقان.
⬆ العودة إلى الأعلى
متجاورة في الذاكرة، فالقرب يساعد على الأداء
المساحة المطلوبة = (سعة المصفوفة، وهي >= n) * حجم العنصر، ولكن حتى لو كانت 2n، فلا يزال O(n)
O(1) للإضافة/الإزالة في النهاية (يتم إطفاؤها للتخصيصات لمزيد من المساحة) أو الفهرس أو التحديث
O(n) للإدراج/الإزالة في مكان آخر
تدرب على البرمجة باستخدام المصفوفات والمؤشرات، ورياضيات المؤشر للانتقال إلى فهرس بدلاً من استخدام الفهرسة.
مجموعة بيانات أولية جديدة مع الذاكرة المخصصة
الحجم () - عدد العناصر
السعة () - عدد العناصر التي يمكنها الاحتفاظ بها
is_empty()
at(index) - يقوم بإرجاع العنصر عند فهرس معين، ويتم تفجيره إذا كان الفهرس خارج الحدود
دفع (البند)
إدراج (الفهرس، العنصر) - يدرج العنصر في الفهرس، وينقل قيمة الفهرس والعناصر اللاحقة إلى اليمين
إضافة مسبقة (عنصر) - يمكن استخدام الإدخال أعلاه في الفهرس 0
pop() - إزالة من النهاية، وإرجاع القيمة
حذف (الفهرس) - حذف العنصر الموجود في الفهرس، مع نقل جميع العناصر اللاحقة إلى اليسار
إزالة (العنصر) - يبحث عن القيمة ويزيل الفهرس الذي يحملها (حتى لو كان في أماكن متعددة)
find(item) - يبحث عن القيمة ويعيد الفهرس الأول بهذه القيمة، -1 إذا لم يتم العثور عليه
تغيير الحجم (new_capacity) // وظيفة خاصة
يمكن تخصيص مجموعة int تحت الغطاء، فقط لا تستخدم ميزاته
ابدأ بـ 16، أو إذا كان رقم البداية أكبر، استخدم قوة 2 - 16، 32، 64، 128
عندما تصل إلى السعة، قم بتغيير الحجم لمضاعفة الحجم
عند ظهور عنصر ما، إذا كان الحجم هو 1/4 من السعة، فقم بتغيير الحجم إلى النصف
المصفوفات CS50 جامعة هارفارد
المصفوفات (فيديو)
جامعة كاليفورنيا في بيركلي CS61B - المصفوفات الخطية ومتعددة الأبعاد (فيديو) (ابدأ المشاهدة من 15 دقيقة و32 ثانية)
المصفوفات الديناميكية (فيديو)
المصفوفات الخشنة (فيديو)
حول المصفوفات:
تنفيذ متجه (صفيف قابل للتغيير مع تغيير الحجم التلقائي):
وقت
فضاء
الوصف (فيديو)
لا حاجة للتنفيذ
size() - يُرجع عدد عناصر البيانات في القائمة
فارغ () - يُرجع المنطق صحيحًا إذا كان فارغًا
value_at(index) - تُرجع قيمة العنصر n (بدءًا من 0 للعنصر الأول)
Push_front(value) - يضيف عنصرًا إلى مقدمة القائمة
pop_front() - قم بإزالة العنصر الأمامي وإرجاع قيمته
Push_back(value) - يضيف عنصرًا في النهاية
pop_back() - يزيل العنصر النهائي ويعيد قيمته
front() - احصل على قيمة العنصر الأمامي
back() - احصل على قيمة العنصر النهائي
إدراج (الفهرس، القيمة) - إدراج قيمة في الفهرس، بحيث تتم الإشارة إلى العنصر الحالي في هذا الفهرس بواسطة العنصر الجديد في الفهرس
مسح (الفهرس) - يزيل العقدة في الفهرس المحدد
value_n_from_end(n) - تُرجع قيمة العقدة في الموضع n من نهاية القائمة
عكس () - يعكس القائمة
Remove_value(value) - يزيل العنصر الأول في القائمة بهذه القيمة
مؤشرات إلى مؤشرات
القوائم المرتبطة الأساسية مقابل المصفوفات (فيديو)
في العالم الحقيقي، القوائم المرتبطة مقابل المصفوفات (فيديو)
القوائم المرتبطة CS50 جامعة هارفارد - هذا يبني الحدس.
القوائم المرتبطة منفردة (فيديو)
CS 61B - القوائم المرتبطة 1 (فيديو)
CS 61B - القوائم المرتبطة 2 (فيديو)
[مراجعة] القوائم المرتبطة في 4 دقائق (فيديو)
وصف:
رمز C (الفيديو) - ليس الفيديو بأكمله، بل أجزاء فقط حول بنية العقدة وتخصيص الذاكرة
القائمة المرتبطة مقابل المصفوفات:
لماذا يجب عليك تجنب القوائم المرتبطة (فيديو)
مسكتك: أنت بحاجة إلى معرفة المؤشر: (لأنه عندما تقوم بتمرير مؤشر إلى وظيفة قد تغير العنوان الذي يشير إليه هذا المؤشر) هذه الصفحة هي فقط للحصول على فهم حول ptr إلى ptr. لا أوصي بأسلوب اجتياز القائمة هذا. سهولة القراءة وقابلية الصيانة تعاني بسبب الذكاء.
تنفيذ (فعلت مع مؤشر الذيل وبدون):
قائمة مرتبطة بشكل مزدوج
الأكوام (فيديو)
[مراجعة] الأكوام في 3 دقائق (فيديو)
لن تنفذ. التنفيذ مع المصفوفة أمر تافه
التنفيذ السيئ باستخدام قائمة مرتبطة حيث تضعها في قائمة الانتظار في الرأس وتضعها في الذيل سيكون O(n) لأنك ستحتاج إلى العنصر التالي للأخير، مما يتسبب في اجتياز كامل لكل قائمة انتظار
قائمة الانتظار: O(1) (قائمة مطفأة ومرتبطة ومصفوفة [تحقيق])
dequeue: O(1) (قائمة ومصفوفة مرتبطة)
فارغ: O(1) (قائمة ومصفوفة مرتبطة)
enqueue(value) - يضيف عنصرًا في نهاية مساحة التخزين المتاحة
dequeue() - تقوم بإرجاع القيمة وإزالة العناصر المضافة مؤخرًا
فارغ()
ممتلىء()
enqueue(value) - يضيف قيمة في موضع عند الذيل
dequeue () - إرجاع القيمة وإزالة العناصر المضافة مؤخرًا (الأمامية)
فارغ()
قائمة الانتظار (فيديو)
المخزن المؤقت الدائري/FIFO
[مراجعة] قوائم الانتظار في 3 دقائق (فيديو)
التنفيذ باستخدام القائمة المرتبطة، مع مؤشر الذيل:
التنفيذ باستخدام مصفوفة ذات حجم ثابت:
يكلف:
hash(k, m) - m هو حجم جدول التجزئة
add(key, value) - إذا كان المفتاح موجودًا بالفعل، فقم بتحديث القيمة
موجود (مفتاح)
الحصول على (المفتاح)
إزالة (مفتاح)
جداول التجزئة الأساسية (فيديو)
هياكل البيانات (فيديو)
مشكلة في دفتر الهاتف (فيديو)
جداول التجزئة الموزعة:
التحميلات الفورية وتحسين التخزين في Dropbox (فيديو)
جداول التجزئة الموزعة (فيديو)
التجزئة مع التسلسل (فيديو)
مضاعفة الطاولة، كارب رابين (فيديو)
العنونة المفتوحة والتجزئة المشفرة (فيديو)
PyCon 2010: القاموس العظيم (فيديو)
PyCon 2017: القاموس أقوى (فيديو)
(متقدم) التوزيع العشوائي: التجزئة الشاملة والكمال (فيديو)
(متقدم) التجزئة المثالية (فيديو)
[مراجعة] جداول التجزئة في 4 دقائق (فيديو)
الفيديوهات:
الدورات عبر الإنترنت:
التنفيذ باستخدام المصفوفة باستخدام الفحص الخطي
⬆ العودة إلى الأعلى
البحث الثنائي (على مجموعة مرتبة من الأعداد الصحيحة)
البحث الثنائي باستخدام العودية
البحث الثنائي (فيديو)
البحث الثنائي (فيديو)
التفاصيل
مخطط
[مراجعة] البحث الثنائي في 4 دقائق (فيديو)
ينفذ:
عدد صحيح مطلق
تبديل
4 طرق لحساب البتات في البايت (فيديو)
عدد البتات
كيفية حساب عدد البتات المحددة في عدد صحيح 32 بت
الثنائي: الزائد والناقص (لماذا نستخدم مكمل الاثنين) (فيديو)
تكملة 1S
تكملة 2S
كلمات
مقدمة جيدة: التلاعب بالبت (فيديو)
البرنامج التعليمي للبرمجة بلغة C 2-10: عوامل تشغيل Bitwise (فيديو)
التلاعب بالبت
عملية Bitwise
بيثاكس
ذا بت تويدلر
بت تويدلر التفاعلية
الاختراقات الصغيرة (فيديو)
عمليات الممارسة
يجب أن تعرف العديد من قوى 2 من (2^1 إلى 2^16 و2^32)
ورقة الغش بت
احصل على فهم جيد للتعامل مع البتات باستخدام: &، |، ^، ~، >>، <<
تكملة 2s و 1s
عد مجموعة البتات
قيم المبادلة:
القيمة المطلقة:
⬆ العودة إلى الأعلى
ملاحظات BFS:
ملاحظات إدارة الخدمات المالية:
ترتيب المستوى (BFS، باستخدام قائمة الانتظار)
التعقيد الزمني: O(n)
التعقيد المكاني: الأفضل: O(1)، الأسوأ: O(n/2)=O(n)
التعقيد الزمني: O(n)
تعقيد الفضاء: الأفضل: O(log n) - avg. ارتفاع الشجرة الأسوأ: O(n)
بالترتيب (DFS: يسار، ذاتي، يمين)
طلب لاحق (DFS: يسار، يمين، ذاتي)
الطلب المسبق (DFS: ذاتي، يسار، يمين)
مقدمة عن الأشجار (فيديو)
اجتياز الشجرة (فيديو)
BFS (بحث العرض الأول) وDFS (بحث العمق الأول) (فيديو)
[مراجعة] بحث العرض الأول في 4 دقائق (فيديو)
[مراجعة] بحث العمق الأول في 4 دقائق (فيديو)
[مراجعة] اجتياز الشجرة (قائمة التشغيل) في 11 دقيقة (فيديو)
أدخل // أدخل القيمة في الشجرة
get_node_count // احصل على عدد القيم المخزنة
print_values // يطبع القيم الموجودة في الشجرة، من الحد الأدنى إلى الحد الأقصى
delete_tree
is_in_tree // يُرجع صحيحًا في حالة وجود قيمة معينة في الشجرة
get_height // يُرجع الارتفاع في العقد (ارتفاع العقدة الواحدة هو 1)
get_min // يُرجع الحد الأدنى للقيمة المخزنة في الشجرة
get_max // يُرجع الحد الأقصى للقيمة المخزنة في الشجرة
is_binary_search_tree
delete_value
get_successor // يُرجع القيمة التالية الأعلى في الشجرة بعد القيمة المعطاة، -1 إذا لم يكن هناك شيء
شجرة البحث الثنائية - التنفيذ في C/C++ (فيديو)
تنفيذ BST - تخصيص الذاكرة في المكدس والكومة (فيديو)
البحث عن عنصر الحد الأدنى والحد الأقصى في شجرة البحث الثنائية (فيديو)
العثور على ارتفاع الشجرة الثنائية (فيديو)
اجتياز الشجرة الثنائية - إستراتيجيات العرض أولاً والعمق أولاً (فيديو)
الشجرة الثنائية: اجتياز ترتيب المستوى (فيديو)
اجتياز الشجرة الثنائية: الطلب المسبق، الطلب الداخلي، الطلب اللاحق (فيديو)
تحقق مما إذا كانت الشجرة الثنائية هي شجرة بحث ثنائية أم لا (فيديو)
حذف عقدة من شجرة البحث الثنائية (فيديو)
خليفة غير مرتب في شجرة البحث الثنائية (فيديو)
مراجعة شجرة البحث الثنائية (فيديو)
مقدمة (فيديو)
معهد ماساتشوستس للتكنولوجيا (فيديو)
ج/ج++:
ينفذ:
إدراج
sift_up - مطلوب للإدراج
get_max - يقوم بإرجاع الحد الأقصى للعنصر دون إزالته
get_size() - إرجاع عدد العناصر المخزنة
is_empty() - يُرجع صحيحًا إذا كانت الكومة لا تحتوي على عناصر
extract_max - يقوم بإرجاع الحد الأقصى للعنصر وإزالته
sift_down - مطلوب لـ extract_max
إزالة (x) - إزالة العنصر الموجود في الفهرس x
heapify - إنشاء كومة من مجموعة من العناصر المطلوبة لـ heap_sort
heap_sort() - خذ مصفوفة غير مصنفة وقم بتحويلها إلى مصفوفة مرتبة في مكانها باستخدام الكومة القصوى أو الكومة الدنيا
يمكن تصورها كشجرة، ولكنها عادة ما تكون خطية في التخزين (مصفوفة، قائمة مرتبطة)
كومة
مقدمة (فيديو)
الأشجار الثنائية (فيديو)
ملاحظة ارتفاع الشجرة (فيديو)
العمليات الأساسية (فيديو)
الأشجار الثنائية الكاملة (فيديو)
الكود الزائف (فيديو)
فرز الكومة - القفزات للبدء (فيديو)
فرز الكومة (فيديو)
بناء كومة (فيديو)
معهد ماساتشوستس للتكنولوجيا 6.006 مقدمة في الخوارزميات: الأكوام الثنائية
CS 61B المحاضرة 24: قوائم الانتظار ذات الأولوية (فيديو)
الوقت الخطي BuildHeap (الحد الأقصى للكومة)
[مراجعة] الكومة (قائمة التشغيل) في 13 دقيقة (فيديو)
تنفيذ الحد الأقصى للكومة:
⬆ العودة إلى الأعلى
ملحوظات:
لا أوصي بفرز قائمة مرتبطة، ولكن فرز الدمج أمر ممكن.
دمج الفرز للقائمة المرتبطة
فرز استقرار الخوارزمية
الاستقرار في فرز الخوارزميات
الاستقرار في فرز الخوارزميات
فرز الخوارزميات - الاستقرار
لا يوجد نوع فقاعي - إنه أمر فظيع - O(n^2)، إلا عندما يكون n <= 16
تنفيذ عمليات الفرز ومعرفة أفضل الحالات/أسوأ الحالات ومتوسط التعقيد لكل منها:
الاستقرار في خوارزميات الفرز ("هل الفرز السريع مستقر؟")
ما الخوارزميات التي يمكن استخدامها في القوائم المرتبطة؟ والتي على المصفوفات؟ أي منهما؟
بالنسبة لفرز الكومة، راجع بنية بيانات الكومة أعلاه. فرز الكومة رائع، ولكنه غير مستقر
سيدجويك - دمج (5 مقاطع فيديو)
1. دمج الفرز
2. فرز الدمج من أسفل إلى أعلى
3. تعقيد الفرز
4. المقارنات
5. الاستقرار
Sedgewick - الفرز السريع (4 مقاطع فيديو)
1. الفرز السريع
2. الاختيار
3. المفاتيح المكررة
4. أنواع النظام
جامعة كاليفورنيا في بيركلي:
CS 61B المحاضرة 29: الفرز 1 (فيديو)
CS 61B المحاضرة 30: الفرز 2 (فيديو)
CS 61B المحاضرة 32: الفرز 3 (فيديو)
CS 61B المحاضرة 33: الفرز الخامس (فيديو)
CS 61B 2014-04-21: فرز الجذر (فيديو)
الفرز الفقاعي (فيديو)
تحليل فرز الفقاعات (فيديو)
فرز الإدراج، فرز الدمج (فيديو)
فرز الإدراج (فيديو)
دمج الفرز (فيديو)
فرز سريع (فيديو)
فرز التحديد (فيديو)
دمج رمز الفرز:
استخدام صفيف الإخراج (C)
استخدام مصفوفة الإخراج (بيثون)
في المكان (C++)
رمز الفرز السريع:
التنفيذ (ج)
التنفيذ (ج)
التنفيذ (بايثون)
[مراجعة] فرز (قائمة التشغيل) في 18 دقيقة
فرز سريع في 4 دقائق (فيديو)
فرز الكومة في 4 دقائق (فيديو)
دمج الفرز في 3 دقائق (فيديو)
فرز الفقاعات في دقيقتين (فيديو)
فرز التحديد في 3 دقائق (فيديو)
فرز الإدراج في دقيقتين (فيديو)
ينفذ:
Mergesort: O(n log n) المتوسط والأسوأ