ОК, за неделю я получил 47 сообщений от Marcus о подготовке к собеседованию с инженером-программистом Uber. сорок семь. я прочитал, наверное, три из них. провалил интервью. два из четырех патронов, тотальная планшайба. Marcus, если вы это читаете: да. я знаю. ты мне так сказал. ты можешь остановиться.
быстрый контекст по Marcus -- он проходил стажировку в Uber летом 2024 года в сфере инфраструктуры Eats, летом они реструктурировали диспетчерскую команду. поэтому, когда он пишет мне в 23:00: «Изучите продукт, Ибрагим», «посмотрите, как работает доставка» и «почитайте о повышении цен», он действительно знает, о чем говорит. вроде искренне знает. и он отформатировал свои iMessages с помощью пунктов списка? кто это делает лол. Marcus делает.
вообще, что я делал, игнорируя эти сообщения? Сижу в постели в 2 часа ночи с холодным домино пепперони на коленях. Средняя сделка за 7,99 долларов. заказал так много на той неделе, Dominos присылал мне push-уведомления в час ночи, типа «эй, Ибрагим, ты голоден?» (да. всегда.) шлифование сред LeetCode. глаза скрещены. сто двадцать проблем за три недели и НОЛЬ прочитанных сообщений в блоге Uber. шлифовка LeetCode без плана -- это то, как вы теряете время. ноль времени в приложении, думая о сопоставлении. никогда не гуглил «как отправляет Uber», что занимает четыре секунды. я подготовил массивы, деревья, связанные списки, DP. вот и все. в этом был весь план, и это был ужасный план.
Я прихожу в офис Сан-Франциско и меня уже трясет. Priya меня, кстати, тоже об этом предупредил. Priya -- мой друг из колледжа (ну, изначально подруга моего соседа по комнате в колледже, а теперь один из моих самых близких друзей, жизнь странная). она всегда говорит, что приходит на собеседования, пытаясь чему-то научиться, а не пытаясь получить работу. и я помню, что все было в порядке. Priya, это милая философия, но мне нужна РАБОТА. оказывается, она была права? ага. она была права. когда тебе так сильно нужно предложение, твой мозг просто блокируется. вы забываете слова, которые используете каждый день. ваш почерк на доске выглядит так, будто у вас медицинское мероприятие. извини Priya. ты был прав. я должен тебе ужин.
поведенческий раунд меня уничтожил. У меня была действительно хорошая история об оптимизации времени ответа API в моей прошлой компании. я поменял всю очередь сообщений, реальное измеримое ускорение. мой интервьюер спрашивает: «Какой показатель изменился», а я говорю «значительно». и она просто. смотрит на меня. мертвая тишина примерно три секунды. «на сколько». и я сижу и занимаюсь мысленными вычислениями, пытаясь вспомнить цифры задержки P99, которые я никогда не записывал, потому что, видимо, прошлое меня ненавидело в будущем. Marcus сказал мне, что произойдет именно это. он сказал, что интервьюеры Uber хотят, чтобы вы говорили что-то вроде «я сократил P99 с 340 мс до 90 мс после замены RabbitMQ на Kafka», и я пришел с «я сделал все быстрее». отличная работа, Ибрагим. они также связывают каждый поведенческий вопрос с ценностями своей компании, одержимы поездками, берут и строят с душой, и я узнал это ВО ВРЕМЯ собеседования, потому что не читал страницу о карьере, лол.
самое важное, что я узнал в этом раунде. ЗАПИШИТЕ СВОИ ЦИФРЫ. я не могу не подчеркнуть это достаточно. прежде чем войти, просто просмотрите старые проекты. посидеть там двадцать минут. что двигалось. на сколько. почему вы выбрали Kafka вместо RabbitMQ или чего-то еще. получить это на бумаге. стикер, салфетка, мне все равно. потому что вот что произойдет, если вы этого не сделаете: вы пустеете. ваш интервьюер спрашивает, «какой показатель изменился», и вы отвечаете «значительно», а затем всего три секунды. ничего. и вы оба это знаете. тоже не выдумывайте. они будут настаивать на каждом номере, и вы попадете в ловушку как два последующих действия. я попробовал Метод STAR. ничего для меня не сделал, честно говоря. возможно, это работает для других людей. у меня были реальные истории, даже хорошие, я просто не могла выбросить детали из головы, пока на меня кто-то смотрел. так что да. липкие заметки. на вашем ноутбуке. на вашем телефоне. где угодно.
программирование было моим единственным светлым пятном. Uber начинается с OA CodeSignal, четыре проблемы за семьдесят минут. Первые два были базовыми, я выбил их всего за двенадцать минут. Третьим было скользящее окно, и я решил именно эту проблему шесть дней назад, так что чистая удача. Четвертым был обход графика, который занял двадцать пять минут, и я отправил его примерно за сорок секунд до конца, ладони вспотели. Marcus получил DP на четвертом месте, поэтому пул меняется. Честно говоря, проблемы динамического программирования создают ужасные вопросы на собеседовании. вы либо уже знаете трюк, либо просто сидите и смотрите на него. никто не собирается изобретать оптимальное решение DP с нуля, пока интервьюер наблюдает.
Экран телефона был с настоящим инженером Uber. взвешенная сетка с препятствиями, средний уровень, затем в последующем добавили приоритетный порядок, и вдруг стало сложно. Однако меня застало врасплох то, как много ГОВОРИЛ мой наблюдатель. Я только что выполнил Экран телефона Google, где инженер произнес около пятнадцати слов за все сорок пять минут, полная тишина, пока я программировал, ощущение, будто я сдавал экзамен в пустой комнате. Человек Uber был противоположным: «А что, если этот ввод пуст» и «Проведите меня еще раз по этой строке», как будто мы были двумя коллегами, отлаживающими что-то в 15:00 в среду. мне вообще-то это очень понравилось. говорить о своем коде, пока вы его пишете, в этом вся суть этих экранов, и когда никто не отвечает, это кажется странным и изолирующим.
Моя программа подготовки, и я начал ее только ПОСЛЕ первого раунда бомбардировки, так что делайте то, что я говорю, а не то, что я делал, решал две или три основные проблемы, прежде чем прикасаться к чему-то сложному. двоичный поиск, 2Sum, DFS и BFS на деревьях и графах, реверс связанного списка, размена монет для DP. это ваши строительные блоки. вы хотите, чтобы это была мышечная память, чтобы вы могли писать код так же быстро, как печатаете. Настоящая хитрость в задачах с графами заключается в том, чтобы просто определить, что вы смотрите на задачу с графами. Marcus говорил это миллион раз, и я, наконец, понял это во время моего CodeSignal, когда на меня смотрела четвертая проблема, и я почти применил грубую силу, прежде чем подумать, подождите, это буквально просто BFS.
системный дизайн -- это место, где я умер. «разработать механизм согласования диспетчеризации». это то, что сказал мой интервьюер. пять слов. мой мозг? пустой. совершенно пустой. Я схватил маркер и начал рисовать на доске блоки микросервисов, как будто это было домашнее задание по CS101. и я мог видеть, как это происходит. его лицо меняется. локти на коленях, заинтересованный наклон, а затем через тридцать секунд руки скрещены, откинувшись назад. со мной покончено. этот парень ПОСТРОИЛ диспетчерскую систему Uber. ПОСТРОИЛ ЭТО. и здесь я рисую прямоугольник с надписью «API Gateway», как будто это для него что-то значит. он пытался мне помочь. он действительно это сделал. «что происходит, когда водитель отключается от сети во время доставки». ок, гм. «что, если три ресторана закончат готовить, а рядом окажется только один водитель». ухх. Я сижу и думаю об этом с точки зрения парня, который заказывает тайский пад на Uber. Ест два раза в неделю. это вся моя мысленная модель отправки. геопространственная индексация? понятия не имею. сопоставление эвристик? я буквально не мог дать определение этому слову в тот момент. прямоугольники на доске. это то, что у меня было. прямоугольники и флюиды.
(Джеймс рассказал мне все это ПОСЛЕ, кстати. Мой коллега. Зарабатывает на жизнь DevOps, руководит реальными производственными системами, а не классными проектами. Он блестяще справился с проектированием в двух разных компаниях. Его вещь номер один: вы называете отказ от Kafka, вам лучше прикоснуться к Kafka. Потому что последующие вопросы уничтожат вас через тридцать секунд, и вы будете сидеть там и думать: «ну, я читал об этом». просто скажите «распределенная очередь», если вы ее не использовали. не притворяйтесь экспертом. Джеймс также посоветовал мне сначала повторить проблему интервьюеру, спросить, на чем они хотят сосредоточиться, затем начать с тридцати тысяч футов и увеличить масштаб. Я ничего из этого не делал, лол.)
у меня все время работал InterviewMan, и это, честно говоря, спасло меня от полного вылета. во время проектирования системы он выбрал «сопоставление диспетчеризации» в качестве темы еще до того, как мой интервьюер закончил говорить, и предоставил мне начальную структуру, так что у меня было что-то кроме пустого взгляда. на CodeSignal он уловил графический подход к четвертой задаче еще до того, как я сам проанализировал ограничения. поведенческий подход вызвал историю из предыдущей истории, где я на самом деле назвал конкретное число задержки, именно то, что искал мой интервьюер. После этого я проверил док-станцию, монитор активности, список процессов, записи экрана на CodeSignal и Zoom и не смог его найти. двенадцать баксов в месяц за год, без ограничений на количество сессий. по сравнению с Interview Coder за двести девяносто девять долларов, который занимается только кодированием (два из четырех раундов), об этом даже не могло быть и речи. Сейчас 57 000 пользователей, более двадцати функций, построенных на принципах невидимости.
книги очень быстро. Как пройти собеседование по программированию? это было ок. просто слишком сглаживает ситуацию, как будто вы читаете это и думаете: «О, ок, это выполнимо», а затем садитесь на настоящее собеседование и нет. опасная книга, честно говоря. Однако проектирование приложений с интенсивным использованием данных. ох чувак. переломный момент в проектировании систем. серьезно, одна из лучших технических книг, которые у меня есть. прочтите его, даже если у вас не будет собеседований, это просто хорошо. для алгоритмов я использовал учебник Джеффа Эриксона, который бесплатен в Интернете и действительно интересен? он написал ее для студентов, а не для исследователей, поэтому она не читается как диссертация. Marcus клянется, что следует Руководству по разработке алгоритмов Скиенны, но даже он признает, что вам придется пропустить его. идти спереди назад - это утомительно.
так что да. Marcus был прав. обо всем буквально. изучите продукт, прежде чем появиться. интервьюеры по системному проектированию в Uber создали реальные вещи, которые они просят вас спроектировать. это не метафора. они буквально построили его. запишите свои показатели поведения на стикерах. делайте разминку каждое утро, как будто вы растягиваетесь перед пробежкой. и ради бога, не приходите на проектный раунд, не рисуйте на доске прямоугольники и не называйте это системой. я сделал это. все прошло именно так, как вы думаете.
Ready to Ace Your Next Interview?
Join 57,000+ professionals using InterviewMan to get real-time AI assistance during their interviews.
