حسنًا، وصلتني 47 رسالة من Marcus في أسبوع واحد عن تحضيري لمقابلة Uber software engineer. سبع وأربعون. قرأت ربما ثلاثًا منها. ثم نسفت المقابلة. جولتان من أصل أربع، سقوط كامل بالوجه. Marcus إذا كنت تقرأ هذا: نعم، أعرف. قلتها لي. يمكنك أن تتوقف الآن.
سياق سريع عن Marcus. تدرب intern في Uber صيف 2024 على Eats infrastructure، في الصيف الذي أعادوا فيه هيكلة dispatch team. لذلك عندما يرسل لي الساعة 11 ليلًا: "ادرس المنتج يا Ibrahim" و"انظر كيف تعمل dispatch" و"اقرأ عن surge pricing"، فهو يعرف فعلًا عما يتكلم. يعرفه بجد. وحتى iMessages كان يرتبها على شكل bullet points. من يفعل ذلك أصلًا lol. Marcus يفعل.
إذًا ماذا كنت أفعل بينما أتجاهل كل هذه الرسائل؟ كنت مستلقيًا على السرير الساعة 2 صباحًا وبيتزا pepperoni باردة من Dominos على حجري. عرض medium بـ 7.99 دولار. طلبت منها كثيرًا في ذلك الأسبوع لدرجة أن Dominos بدأت ترسل لي push notifications الساعة 1 صباحًا من نوع: "هل أنت جائع يا Ibrahim؟" نعم. دائمًا. كنت أجرّب LeetCode mediums بلا توقف. عيناي متقاطعتان من التعب. 120 مسألة في ثلاثة أسابيع وصفر مقالات من مدونة Uber. أن تطحن LeetCode بلا خطة هو أسرع طريق لإضاعة الوقت. لم أفتح التطبيق حتى لأفكر في matching. لم أبحث في Google حتى عن "how does Uber dispatch"، وهي أربع ثوانٍ فقط من البحث. حضرت arrays وtrees وlinked lists وDP. هذا كان كل شيء. الخطة كلها. وكانت خطة سيئة جدًا.
وصلت إلى مكتب SF وأنا أرتجف أصلًا. Priya حذرتني من هذا أيضًا بالمناسبة. Priya صديقة من أيام الجامعة، كانت أصلًا حبيبة زميلي في السكن، والآن صارت من أقرب الناس لي، الحياة غريبة. وهي تقول دائمًا إنها تدخل المقابلات كي تتعلم لا كي تُوظّف. وأتذكر أنني قلت لنفسي: يا Priya، هذه فلسفة لطيفة، لكنني أحتاج وظيفة. واتضح أنها كانت محقة؟ نعم. كانت محقة. عندما تحتاج العرض بهذا الشكل، دماغك تقفل. تنسى كلمات تستخدمها يوميًا. خطك على whiteboard يبدو كأنك تمر بعارض طبي. آسف يا Priya. كنتِ محقة. وأنا مدين لك بعشاء.
الجولة behavioral دمّرتني. كان عندي قصة جيدة فعلًا عن تحسين API response times في شركتي السابقة. بدّلت message queue كاملة، والتحسن كان measurable فعلًا. interviewer سألتني: "ما metric التي تحركت؟" وأنا قلت: "بشكل ملحوظ." ثم فقط... حدقت بي. صمت ميت ثلاث ثوانٍ تقريبًا. "كم بالضبط؟" وأنا جالس أحاول أن أقوم بحساب ذهني لأسترجع أرقام P99 latency التي لم أكتبها في أي مكان لأن نسخة الماضي مني كانت تكره نسخة المستقبل مني على ما يبدو. Marcus قال لي حرفيًا إن هذا سيحدث. قال إن interviewers في Uber تريد منك أن تقول أشياء مثل: "خفضت P99 من 340ms إلى 90ms بعد أن استبدلت RabbitMQ بـ Kafka"، وأنا دخلت ومعي "خلّيت الأمور أسرع." أحسنت يا Ibrahim. كما أنهم يربطون كل سؤال behavioral بـ company values الخاصة بهم، trip obsessed وgo get it وbuild with heart، وأنا اكتشفت هذا خلال المقابلة نفسها لأنني لم أقرأ careers page أصلًا lol.
أكبر شيء تعلمته من هذه الجولة: اكتب أرقامك. لا أستطيع التشديد على هذا بما يكفي. قبل أن تدخل، فقط عد إلى مشاريعك القديمة. خذ 20 دقيقة. ما الذي تحرّك؟ وبكم؟ ولماذا اخترت Kafka بدل RabbitMQ أو أيًا كان؟ اكتبها على ورقة. sticky note أو napkin أو أي شيء. لأن ما يحدث إذا لم تفعل هو أنك تفرغ. interviewer تسأل: "ما metric التي تحركت؟" فتقول: "بشكل ملحوظ." ثم تأتي ثلاث ثوانٍ من... لا شيء. وأنت تعرف، وهي تعرف. ولا تختلق أرقامًا أيضًا. سيفتحونك بأسئلة follow-up وسيكتشفون ذلك خلال سؤالين. جرّبت طريقة STAR. لم تفعل معي شيئًا بصراحة. ربما تنجح مع غيري. كانت عندي قصص حقيقية، بل جيدة، لكنني لم أستطع سحب التفاصيل من رأسي بينما شخص يحدق بي. لذلك نعم. sticky notes. على اللابتوب. على الهاتف. في أي مكان.
coding كانت الجانب المضيء الوحيد عندي. Uber تبدأ بـ CodeSignal OA، أربع مشاكل في 70 دقيقة. أول اثنتين كانتا array basics، أنهيتهما في حوالي 12 دقيقة إجمالًا. الثالثة كانت sliding window، وكنت قد حللت نوع المشكلة نفسه قبل ستة أيام، لذلك هذا كان pure luck. الرابعة graph traversal أخذت مني 25 دقيقة، وسلمتها وبقي على الوقت 40 ثانية تقريبًا وراحتي يديّ تتعرقان. Marcus جاءه DP في المشكلة الرابعة، لذا pool تتغير. dynamic programming أسئلة مقابلات سيئة جدًا بصراحة. إما أنك تعرف الخدعة أصلًا، أو أنك تجلس وتحدق فيها. لا أحد سيخترع DP optimal من الصفر بينما interviewer يراقبه.
phone screen كانت مع مهندس فعلي من Uber. weighted grid مع obstacles، مستوى medium، ثم follow-up أضاف priority ordering وفجأة صارت hard. الشيء الذي فاجأني هو كم كان screener يتكلم. كنت قد خرجت للتو من Google phone screen حيث المهندس قال ربما 15 كلمة فقط طوال 45 دقيقة، صمت كامل وأنا أكتب، كأنني في امتحان داخل غرفة فارغة. مهندس Uber كان العكس تمامًا، من نوع "ماذا لو كان هذا الـ input فارغًا؟" و"اشرح لي هذا السطر مرة أخرى"، كأننا زميلان نحل مشكلة في الساعة 3 عصرًا في يوم أربعاء. أحببت هذا فعلًا. أن تتحدث خلال كتابة الكود هو أصلًا جوهر هذه الشاشات، وعندما لا يتكلم أحد معك تصبح غريبة ووحيدة.
روتين التحضير عندي، ولم أبدأ به إلا بعد أن نسفت الجولة الأولى، لذلك افعل ما أقوله لا ما فعلته أنا، كان أن أحل مسألتين أو ثلاثًا بسيطات قبل لمس أي شيء صعب. binary search، و2Sum، وDFS وBFS على trees وgraphs، وreverse linked list، وcoin change للـ DP. هذه هي building blocks. تريدها أن تصبح muscle memory حتى تتمكن من كتابة الكود بسرعة أصابعك. الخدعة الحقيقية مع graph problems هي فقط أن تنتبه أنك أصلًا أمام graph problem. Marcus قال هذا مليون مرة، وأخيرًا فهمته في CodeSignal عندما كانت المشكلة الرابعة تحدق بي وكدت أذهب إلى brute force قبل أن أفكر: لحظة، هذه فقط BFS.
system design هي حيث متُّ. "صمّم dispatch matching engine." هذا ما قاله interviewer. خمس كلمات. ودماغي؟ فارغة. فارغة تمامًا. أمسكت الماركر وبدأت أرسم microservice boxes على whiteboard كأنه واجب في CS101. وكنت أرى ما يحدث أمامي. وجهه يتغير. كان منكبًا إلى الأمام ومهتمًا، ثم بعد 30 ثانية صارت ذراعاه متقاطعتين ومائلًا إلى الخلف. انتهى مني. هذا الرجل بَنَى نظام dispatch لدى Uber. بَنَاه. وأنا هناك أرسم rectangle مكتوب عليها "API Gateway" كأن هذا يعني له شيئًا. حاول أن يساعدني. فعلًا حاول. "ماذا يحدث إذا صار driver offline في منتصف delivery؟" همم. "وماذا لو انتهت ثلاثة مطاعم من الطبخ وكان هناك driver واحدة قريبة؟" أمم. أنا كنت أفكر في الموضوع بمنطق شخص يطلب pad thai من Uber Eats مرتين في الأسبوع. هذا كان كل model الموجود في رأسي عن dispatch. geospatial indexing؟ لا فكرة. matching heuristics؟ على الأغلب لم أكن أستطيع تعريف الكلمة في تلك اللحظة. مستطيلات على whiteboard. هذا كل ما كان عندي. مستطيلات وvibes.
وبالمناسبة James أخبرني بكل هذا بعد ذلك. زميلي في العمل. يعمل في DevOps ويشغّل production systems حقيقية لا مشاريع صفية. وقد سحق design rounds في شركتين مختلفتين. نصيحته الأولى: إذا ذكرت Kafka، فمن الأفضل أن تكون قد استخدمتها فعلًا. لأن follow-up questions ستنسفك خلال 30 ثانية، وستجد نفسك تقول "حسنًا، أنا فقط قرأت عنها." فقط قل "distributed queue" إذا لم تستخدمها من قبل. لا تدّعِ خبرة لا تملكها. James قال لي أيضًا أن أعيد السؤال بصياغتي قبل أن أبدأ، وأسأل interviewer أين تريد أن نركز، ثم أبدأ من مستوى 30 ألف قدم وأنزل تدريجيًا. وأنا لم أفعل شيئًا من ذلك. صفر lol.
كنت أشغّل InterviewMan طوال الوقت، وبصراحة هي أنقذتني من wipeout كامل. خلال system design التقطت "dispatch matching" كموضوع قبل أن يكمل interviewer كلامه، وأعطتني starting structure، فصار عندي شيء غير النظرة الفارغة. وفي CodeSignal التقطت graph approach في المشكلة الرابعة قبل أن أهضم الـ constraints بنفسي. وفي behavioral round أعادت لي قصة قديمة كنت قد ذكرت فيها رقم latency محددًا، وهو بالضبط الشيء الذي كانت interviewer تفتش عنه. فتحت الـ dock، وActivity Monitor، وprocess list، وسجلات الشاشة على CodeSignal وعلى Zoom بعد ذلك، ولم أجدها. 12 دولارًا في الشهر على الخطة السنوية، وبلا caps على الجلسات. مقارنة بـ Interview Coder التي تكلف 299 دولارًا ولا تعمل إلا في coding، أي جولتين من أصل أربع، لم يكن هناك أصلًا سؤال. 57,000 مستخدم الآن، وأكثر من 20 خاصية مبنية على الاختفاء.
وعن الكتب بسرعة. Cracking the Coding Interview؟ كان لا بأس به. فقط ينعّم كل شيء أكثر من اللازم، فتقرأه وتقول: آه، يبدو هذا ممكنًا، ثم تدخل مقابلة حقيقية وتكتشف: لا. كتاب خطير بصراحة. أما Designing Data-Intensive Applications؟ يا رجل. game changer في system design. فعلًا من أفضل الكتب التقنية التي أملكها. اقرأه حتى لو لم تكن عندك أي مقابلات قادمة، لأنه ببساطة كتاب ممتاز. في algorithms استخدمت كتاب Jeff Erickson، وهو مجاني على الإنترنت وممتع فعلًا؟ كتبه لطلاب undergraduate لا للباحثين، لذلك لا يقرأ كأنه dissertation. Marcus يقسم بـ Skienna's Algorithm Design Manual، لكنه هو نفسه يعترف أنك يجب أن تقفز داخله، لأن قراءته من الغلاف إلى الغلاف متعبة.
إذًا نعم. Marcus كان محقًا. في كل شيء حرفيًا. ادرس المنتج قبل أن تذهب. interviewers system design في Uber بنوا الأشياء الفعلية التي يطلبون منك تصميمها. هذا ليس مجازًا. فعلًا بنوها. اكتب أرقام behavioral على sticky note. اعمل warm-ups كل صباح كأنك تتمدد قبل الجري. ولأجل الله، لا تدخل design round ثم ترسم مستطيلات على whiteboard وتسمي هذا نظامًا. أنا فعلت ذلك. وسار الأمر تمامًا كما تتخيل.
Ready to Ace Your Next Interview?
Join 57,000+ professionals using InterviewMan to get real-time AI assistance during their interviews.
