خطة دراسة مقابلات البرمجة - ما تدرسه وتتدرب عليه حسب الوقت المتبقي
من أهم الأسئلة الواجب الإجابة عنها في بداية تحضيرك لمقابلات البرمجة: ما موضوعات الدراسة وأسئلة التدريب التي ينبغي إنجازها للاستعداد بأكبر كفاءة لمقابلات البرمجة؟
هناك موارد وفيرة على الإنترنت، لكن قد يصعب معرفة كيف تتناسب مع الوقت المتبقي لديك للتحضير. لحسن الحظ، سيساعدك هذا المقال في ذلك.
لقد خضت شخصياً عملية مقابلات مهندس البرمجيات المرهقة عدة مرات وأعددت خطط دراستي الخاصة، محسّناً إياها في كل مرة.
في هذا المقال، سأشارك خطة الدراسة البالغة 3 أشهر التي أستخدمها شخصياً للتحضير لمقابلات البرمجة. ستجد الموضوعات الدقيقة للدراسة (مع روابط موصى بها) والأسئلة الدقيقة للتدريب (مع روابط التدريب).
وقت التحضير والنهج الموصى بهما
كم من الوقت تحتاج للتحضير لمقابلات البرمجة؟ عموماً، 3 أشهر (إذا استطعت تخصيص 11 ساعة أسبوعياً) هي المدة الموصى بها لتحضير أكثر شمولاً. سأشارك خطط دراسة موصى بها لمدة 3 أشهر (المدة الموصى بها)، لكن يمكنك توليد خطط دراسة لأسئلة التدريب لأي إطار زمني تحتاجه عبر أداة Grind 75 (من بنائي). خيارات إضافية مثل الترشيح بالصعوبة والموضوعات والتجميعات البديلة للأسئلة متوفرة هناك.
بغض النظر عن طول المدة لديك، إذا لم تكن ملماً بالمعرفة الأساسية لـData Structures والـAlgorithms، يُنصح بمراجعتها قبل البدء في التدرب على أسئلة مقابلات البرمجة. الناس يختلفون في أساليب التدريب وعليك فعل ما يناسبك أكثر. الأساليب الممكنة المختلفة هي:
- التحضير بالعرض أولاً - راجع كل موضوع ثم ابدأ التدرب على أسئلة متنوعة عبر جميع الموضوعات. تُنصح بهذه الاستراتيجية إذا كان لديك نحو شهر فائض.
- التحضير بالعمق أولاً - تناول موضوعاً واحداً في كل مرة - راجع مواد موضوع، وتدرب على أسئلة كثيرة لذلك الموضوع. بعد التأكد من إتقان موضوع، انتقل إلى الموضوع التالي. كرر ذلك لجميع الموضوعات أو موضوعات مختارة. إذا لم يكن لديك وقت كثير، فقد تكون هذه أفضل طريقة للتحضير. يمكنك التركيز على الموضوعات عالية الأولوية في خطتنا الدراسية الموصى بها.
- التحضير بالعمق ثم بالعرض - تناول موضوعاً واحداً في كل مرة - راجع مواد موضوع، وتدرب على بضعة أسئلة لذلك الموضوع. بعد التأكد من الإتقان، انتقل إلى الموضوع التالي. كرر ذلك لجميع الموضوعات. وفي النهاية، تدرب على أسئلة متنوعة عبر جميع الموضوعات. تستغرق هذه الاستراتيجية وقتاً أطول من غيرها، لذا تُنصح بها إذا كان لديك أكثر من شهر.
توصيتي الشخصية هي التحضير بالعرض أولاً أو التحضير بالعمق ثم بالعرض. من المهم أن يكون في جدولك شكل من الدراسة/التدريب على مستوى العرض كي لا تنسى الموضوعات المبكرة بينما تنتقل إلى موضوعات لاحقة.
خطة الدراسة البالغة 3 أشهر - مع موارد دراسة موصى بها وروابط أسئلة التدريب
في كل خطة دراسة، ستجد قائمة بموضوعات مقابلات البرمجة مع موارد وأسئلة تدريب ينبغي إنجازها حسب الأولوية كل أسبوع.
للاستفادة المثلى منها، ينبغي إنشاء قالب تقسم فيه الأيام المتبقية والساعات المتبقية يومياً، كي تملأ لاحقاً الموضوعات/الأسئلة الواجب تغطيتها يومياً.
اجعل التقدير متحفظاً نسبياً كي لا ينتهي بك الأمر إلى الإنهاك.
الأسابيع 1 - 4: دراسة موضوعية + تدريب
هذه جميع الموضوعات التي ينبغي دراستها، حسب الأولوية. موارد التعلم المرتبطة هي أوراقي المرجعية للـAlgorithms - التي تمنحك نظرة عامة على ما يجب تذكره مثل الـtime complexity والحالات الحدية والتقنيات المفيدة الخاصة بكل موضوع، إضافة إلى أسئلة تدريب أساسية وموصى بها.
لا تنس تطبيق سلوكيات أفضل ممارسات مقابلات البرمجة وأساليب تقنيات مقابلات البرمجة مبكراً أثناء تدريبك!
الأسبوع 1
| الموضوع | الأولوية | الوقت المطلوب |
|---|---|---|
| الـArrays | عالية | ساعتان |
| الـStrings | عالية | 3 ساعات |
| الـHash Table | متوسطة | 3 ساعات |
| الاستدعاء الذاتي | متوسطة | 3 ساعات |
الأسبوع 2
| الموضوع | الأولوية | الوقت المطلوب |
|---|---|---|
| الترتيب والبحث | عالية | 3 ساعات |
| الـMatrix | عالية | ساعة واحدة |
| القائمة المتصلة | متوسطة | 3 ساعات |
| الـQueue | متوسطة | ساعتان |
| الـStack | متوسطة | ساعتان |
الأسبوع 3
| الموضوع | الأولوية | الوقت المطلوب |
|---|---|---|
| الـTree | عالية | 4 ساعات |
| الرسم البياني | عالية | 4 ساعات |
| الـHeap | متوسطة | 3 ساعات |
| Trie | متوسطة | 3 ساعات |
الأسبوع 4
| الموضوع | الأولوية | الوقت المطلوب |
|---|---|---|
| الفواصل الزمنية | متوسطة | ساعتان |
| الـDynamic Programming | منخفضة | 4 ساعات |
| الثنائي | منخفضة | ساعتان |
| الرياضيات | منخفضة | ساعة واحدة |
| الهندسة | منخفضة | ساعة واحدة |
الأسابيع 5 - 12: تدريب معمّق
هنا، سردت 75 سؤالاً ينبغي حلها لتكون مستعداً استعداداً كاملاً لمقابلات البرمجة. هذه القائمة من الأسئلة مولّدة من أداة Grind 75 (من بنائي)، التي تولّد خطط دراسة موصى بها لمقابلات البرمجة بناءً على الوقت المتبقي لديك. خيارات إضافية مثل الترشيح بالصعوبة والموضوعات والتجميعات البديلة للأسئلة متوفرة هناك.
- إذا اتبعت خطة دراسة الأسابيع 1 - 4، فستكون قد حللت بعض هذه الأسئلة هنا. لا تتردد في تخطيها أو حلها مجدداً.
- لا تتردد في تخطي أسئلة الـDynamic Programming إذا لم تكن قد درستها أو شعرت أنها لن تكون ذات صلة. فكثير من أسئلة الـDynamic Programming يمكن حلها بالاستدعاء الذاتي/التراجع على أي حال.
لا تنس تطبيق سلوكيات أفضل ممارسات مقابلات البرمجة وأساليب تقنيات مقابلات البرمجة مبكراً أثناء تدريبك!
نوصي باستخدام أداة Grind 75 التي تتيح لك تتبع تقدمك في التدريب.
الأسبوع 5
| المسألة | الصعوبة | المدة |
|---|---|---|
| Two Sum | سهل | 15 دقيقة |
| Valid Parentheses | سهل | 20 دقيقة |
| Merge Two Sorted Lists | سهل | 20 دقيقة |
| Best Time to Buy and Sell Stock | سهل | 20 دقيقة |
| Valid Palindrome | سهل | 15 دقيقة |
| Invert Binary Tree | سهل | 15 دقيقة |
| Valid Anagram | سهل | 15 دقيقة |
| Binary Search | سهل | 15 دقيقة |
| Flood Fill | سهل | 20 دقيقة |
| Lowest Common Ancestor of a Binary Search Tree | متوسط | 20 دقيقة |
| Balanced Binary Tree | سهل | 15 دقيقة |
| Linked List Cycle | سهل | 20 دقيقة |
الأسبوع 6
| المسألة | الصعوبة | المدة |
|---|---|---|
| Implement Queue using Stacks | سهل | 20 دقيقة |
| First Bad Version | سهل | 20 دقيقة |
| Ransom Note | سهل | 15 دقيقة |
| Climbing Stairs | سهل | 20 دقيقة |
| Longest Palindrome | سهل | 20 دقيقة |
| Reverse Linked List | سهل | 20 دقيقة |
| Majority Element | سهل | 20 دقيقة |
| Add Binary | سهل | 15 دقيقة |
| Diameter of Binary Tree | سهل | 30 دقيقة |
| Middle of the Linked List | سهل | 20 دقيقة |
| Maximum Depth of Binary Tree | سهل | 15 دقيقة |
| Contains Duplicate | سهل | 15 دقيقة |
الأسبوع 7
| المسألة | الصعوبة | المدة |
|---|---|---|
| Min Stack | متوسط | 20 دقيقة |
| Maximum Subarray | متوسط | 20 دقيقة |
| Insert Interval | متوسط | 25 دقيقة |
| 01 Matrix | متوسط | 30 دقيقة |
| K Closest Points to Origin | متوسط | 30 دقيقة |
| Longest Substring Without Repeating Characters | متوسط | 30 دقيقة |
| 3Sum | متوسط | 30 دقيقة |
| Binary Tree Level Order Traversal | متوسط | 20 دقيقة |
| Clone Graph | متوسط | 25 دقيقة |
| Evaluate Reverse Polish Notation | متوسط | 30 دقيقة |
الأسبوع 8
| المسألة | الصعوبة | المدة |
|---|---|---|
| Course Schedule | متوسط | 30 دقيقة |
| Implement Trie (Prefix Tree) | متوسط | 35 دقيقة |
| Coin Change | متوسط | 25 دقيقة |
| Product of Array Except Self | متوسط | 30 دقيقة |
| Validate Binary Search Tree | متوسط | 20 دقيقة |
| Number of Islands | متوسط | 25 دقيقة |
| Rotting Oranges | متوسط | 30 دقيقة |
| Search in Rotated Sorted Array | متوسط | 30 دقيقة |
الأسبوع 9
| المسألة | الصعوبة | المدة |
|---|---|---|
| Combination Sum | متوسط | 30 دقيقة |
| Permutations | متوسط | 30 دقيقة |
| Merge Intervals | متوسط | 30 دقيقة |
| Lowest Common Ancestor of a Binary Tree | متوسط | 25 دقيقة |
| Time Based Key-Value Store | متوسط | 35 دقيقة |
| Accounts Merge | متوسط | 30 دقيقة |
| Sort Colors | متوسط | 25 دقيقة |
| Word Break | متوسط | 30 دقيقة |
الأسبوع 10
| المسألة | الصعوبة | المدة |
|---|---|---|
| Partition Equal Subset Sum | متوسط | 30 دقيقة |
| String to Integer (atoi) | متوسط | 25 دقيقة |
| Spiral Matrix | متوسط | 25 دقيقة |
| Subsets | متوسط | 30 دقيقة |
| Binary Tree Right Side View | متوسط | 20 دقيقة |
| Longest Palindromic Substring | متوسط | 25 دقيقة |
| Unique Paths | متوسط | 20 دقيقة |
| Construct Binary Tree from Preorder and Inorder Traversal | متوسط | 25 دقيقة |
| Container With Most Water | متوسط | 35 دقيقة |
الأسبوع 11
| المسألة | الصعوبة | المدة |
|---|---|---|
| Letter Combinations of a Phone Number | متوسط | 30 دقيقة |
| Word Search | متوسط | 30 دقيقة |
| Find All Anagrams in a String | متوسط | 30 دقيقة |
| Minimum Height Trees | متوسط | 30 دقيقة |
| Task Scheduler | متوسط | 35 دقيقة |
| LRU Cache | متوسط | 30 دقيقة |
| Kth Smallest Element in a BST | متوسط | 25 دقيقة |
| Minimum Window Substring | صعب | 30 دقيقة |
الأسبوع 12
| المسألة | الصعوبة | المدة |
|---|---|---|
| Serialize and Deserialize Binary Tree | صعب | 40 دقيقة |
| Trapping Rain Water | صعب | 35 دقيقة |
| Find Median from Data Stream | صعب | 30 دقيقة |
| Word Ladder | صعب | 45 دقيقة |
| Basic Calculator | صعب | 40 دقيقة |
| Maximum Profit in Job Scheduling | صعب | 45 دقيقة |
| Merge k Sorted Lists | صعب | 30 دقيقة |
| Largest Rectangle in Histogram | صعب | 35 دقيقة |
خصص وقتاً لنبذتك التعريفية وأسئلتك الختامية ومقابلات البرمجة التجريبية
إضافة إلى الدراسة والتدريب لمقابلات البرمجة، ينبغي أيضاً تحضير نبذتك التعريفية وأسئلتك الختامية، وتجربة مقابلات برمجة تجريبية.
حضّر نبذة تعريفية عن النفس وأسئلة ختامية لطرحها
أقترح تخصيص نحو 3 ساعات لصياغة نبذتك التعريفية وتحضير بعض الأسئلة الختامية لطرحها. يمكنك الرجوع إلى دليل النبذة التعريفية ودليل الأسئلة الختامية لطرحها اللذين ينبغي أن يساعداك على إتمام هذه الخطوات بسرعة إلى حد ما.
جدول مقابلات برمجة تجريبية
ينبغي البدء بجدولة مقابلات البرمجة التجريبية عندما تبلغ 60% من خطة دراستك وتدريبك لمقابلات البرمجة. خانات المقابلات يوفرها المُقابِلون عادة، لذا يمكنك الاطلاع عليها مسبقاً وحجزها. المنصة التي استخدمتها شخصياً وأوصي بها هي interviewing.io. اقرأ المزيد عن منصات مقابلات البرمجة التجريبية المختلفة هنا.
المصدر والرخصة
هذه الصفحة منسوخة من Tech Interview Handbook للمؤلف يانغشون تاي (Yangshun Tay)، النسخة المرجعية e1d28e8، وتُستخدم بموجب رخصة MIT — حقوق النشر (c) 2017-Present ليانغشون تاي. نص الرخصة محفوظ محلياً في /licenses/tech-interview-handbook.txt.
