ok så jag fick 47 sms från Marcus på en vecka om min Uber-programvaruingenjörsförberedelse. fyrtiosju. Jag läste kanske tre av dem. bombade intervjun. två av fyra omgångar, total faceplant. Marcus om du läser detta: ja. jag vet. du sa det till mig. du kan sluta.
snabbt sammanhang om Marcus -- han arbetade på Uber sommaren 2024 på Eats infrastruktur, sommaren de omstrukturerade utsändningsteamet. så när han sms:ar mig vid 23-tiden och säger "studera produkten Ibrahim" och "titta på hur leverans fungerar" och "läs om surge pricing" vet han faktiskt vad han pratar om. som verkligen vet. och han formaterade sina iMessages med punktpunkter? vem gör det lol. Det gör Marcus.
hur som helst, vad gjorde jag när jag ignorerade dessa texter? sitter i sängen vid 02:00 med kalla pepperoni dominos i mitt knä. 7,99 $ medium erbjudande. beställde så många den veckan Dominos skickade push-meddelanden till mig klockan 01.00 som hej Ibrahim är du hungrig? (ja. alltid.) slipning av LeetCode-medier. ögon i kors. hundra tjugo problem på tre veckor och NOLL Uber-blogginlägg lästa. slipning LeetCode utan en plan är hur du slösar tid. noll tid i appen funderar på att matcha. har aldrig googlat "hur skickar Uber" vilket tar fyra sekunder. Jag förberedde arrayer, träd, länkade listor, DP. det var det. det var hela planen och det var en fruktansvärd plan.
Jag dyker upp till SF-kontoret och jag skakar redan. Priya varnade mig också för detta. Priya är min vän från college (ja, min rumskamrats flickvän ursprungligen, nu en av mina närmaste vänner, livet är konstigt). hon säger alltid att hon går in i intervjuer för att försöka lära sig saker och inte försöka bli anställd. och jag minns att jag gick ok Priya det är en söt filosofi men jag behöver ett JOBB. visar det sig att hon hade rätt? ja. hon hade rätt. när du behöver ett erbjudande som dåligt din hjärna bara låser sig. du glömmer ord som du använder varje dag. din whiteboard-handstil ser ut som om du har en medicinsk händelse. förlåt Priya. du hade rätt. jag är skyldig dig middag.
beteenderunda förstörde mig. Jag hade den här riktigt bra historien om att optimera API svarstider på mitt senaste företag. Jag bytte ut hela meddelandekön, verklig mätbar speedup. min intervjuare säger "vilket mätvärde har flyttats" och jag säger "betydligt." och hon bara. stirrar på mig. död tystnad i typ tre sekunder. "med hur mycket." och jag sitter där och gör mental matematik och försöker komma ihåg P99 latensnummer som jag aldrig skrev ner eftersom jag tydligen hatade framtida mig. Marcus sa till mig att exakt det här skulle hända. han sa att Ubers intervjuare vill att du ska säga saker som "jag klippte P99 från 340 ms till 90 ms efter att ha bytt RabbitMQ mot Kafka" och jag dök upp med "jag gjorde saker snabbare." bra jobbat Ibrahim. de kopplar också varje beteendefråga tillbaka till sina företagsvärderingar, blir besatta och skaffar det och bygger med hjärtat, och jag fick reda på detta UNDER intervjun eftersom jag inte läste karriärsidan lol.
det största jag lärde mig från den omgången. SKRIV NED DINA NUMMER. jag kan inte betona detta nog. innan du går in, gå bara igenom gamla projekt. sitta där i tjugo minuter. vad som rörde sig. med hur mycket. varför valde du Kafka framför RabbitMQ eller vad som helst. få det på papper. en klisterlapp, en servett, jag bryr mig inte. för det här är vad som händer om du inte gör det: du tom. din intervjuare frågar "vilket mätvärde har flyttats" och du säger "betydligt" och sedan är det tre sekunder av bara. ingenting. och det vet ni båda. hitta inte på saker heller. de kommer att trycka på varje nummer och du kommer att fastna i som två uppföljningar. jag provade STAR metod. gjorde ingenting för mig ärligt talat. kanske fungerar det för andra människor. Jag hade riktiga historier, bra till och med, jag kunde bara inte dra ut detaljerna ur mitt huvud medan någon stirrade på mig. så ja. klisterlappar. på din bärbara dator. på din telefon. varhelst.
kodning var min enda ljuspunkt. Uber börjar med en CodeSignal OA, fyra problem på sjuttio minuter. de två första var grundläggande array-grejer, jag slog ut dem på kanske tolv minuter totalt. tredje var ett skjutfönster och jag hade löst den exakta typen av problem sex dagar tidigare, så ren tur. den fjärde var en genomgång av grafen som tog tjugofem minuter och jag skickade in med ungefär fyrtio sekunder kvar, svettande i handflatorna. Marcus fick DP på sin fjärde så poolen roterar. dynamiska programmeringsproblem gör hemska intervjufrågor ärligt talat. antingen kan du redan tricket eller så sitter du bara och stirrar på det. ingen kommer att uppfinna en optimal DP-lösning från grunden medan deras intervjuare tittar på.
telefonens skärm var med en riktig Uber-ingenjör. viktat rutnät med hinder, medelhög nivå, sedan en uppföljning lagt till prioritetsordning och plötsligt var det svårt. det som fångade mig var hur mycket min screener PRATADE dock. jag hade precis gjort en Google telefonskärm där ingenjören sa kanske femton ord under hela fyrtiofem minuterna, total tystnad medan jag kodade, kändes som om jag gjorde en tentamen i ett tomt rum. Uber-personen var motsatsen och sa "tänk om den här ingången är tom" och "led mig igenom den linjen igen" som om vi var två kollegor som felsökte något klockan 15 på en onsdag. jag gillade det faktiskt. att prata igenom din kod medan du skriver det är typ hela poängen med dessa skärmar och när ingen pratar tillbaka känns det konstigt och isolerande.
min förberedande rutin, och jag började först EFTER bombningsomgång ett så gör vad jag säger inte vad jag gjorde, var att lösa två eller tre grundläggande problem innan jag rörde något hårt. binär sökning, 2Sum, DFS och BFS på träd och grafer, vänd en länkad lista, myntbyte för DP. det här är dina byggstenar. du vill att de ska vara muskelminne så att du kan skriva koden så snabbt du kan skriva. det verkliga tricket med grafproblem är bara att identifiera att du tittar på ett grafproblem. Marcus sa detta en miljon gånger och jag fick det äntligen under min CodeSignal när problem fyra stirrade på mig och jag blev nästan brutal innan jag tänkte vänta, det här är bokstavligen bara BFS.
systemdesign det är där jag dog. "designa leveransmatchningsmotorn." det var vad min intervjuare sa. fem ord. min hjärna? tömma. helt tom. Jag tog tag i markören och började rita mikroservicerutor på whiteboardtavlan som om det vore CS101-läxa. och jag kunde se det hända. hans ansikte förändras. armbågar på knäna lutade sig in, intresserade, och sedan trettio sekunder senare armarna korsade, lutade sig tillbaka. klar med mig. den här killen BYGDE Ubers utskickssystem. BYGDE DET. och här ritar jag en rektangel märkt "API Gateway" som det betyder något för honom. han försökte hjälpa mig. det gjorde han verkligen. "vad händer när en förare går offline mitt i leveransen." okej um. "tänk om tre restauranger slutar laga mat och bara en chaufför är i närheten." åhhh. Jag sitter och tänker på det här ur en killes perspektiv som beställer pad thai på Uber Eats två gånger i veckan. det är hela min mentala modell för utskick. geospatial indexering? ingen aning. matchande heuristik? Jag kunde bokstavligen inte ha definierat det ordet i det ögonblicket. rektanglar på en whiteboard. det är vad jag hade. rektanglar och vibbar.
(James berättade för mig allt det här EFTER förresten. min kollega. driver DevOps för sitt uppehälle, driver faktiska produktionssystem inte klassprojekt. han gjorde sina designrundor på två olika företag. hans nummer ett: you name drop Kafka, you better have berört Kafka. eftersom uppföljningsfrågorna kommer att förstöra dig inom trettio sekunder och du kommer att sitta där och gå "ja, säg det, jag har inte läst om det." inte falsk expertis. James sa också till mig att först upprepa problemet till intervjuaren, fråga vad de vill fokusera på och sedan börja från trettio tusen fot och zooma in. Jag gjorde noll av dessa saker.)
Jag hade InterviewMan igång hela tiden och det räddade mig ärligt talat från en total wipeout. under systemdesignen tog det upp "utskicksmatchning" som ämne innan min intervjuare ens hade pratat färdigt och gav mig en startstruktur så jag hade något annat än en tom blick. på CodeSignal fångade den grafmetoden på problem fyra innan jag ens analyserade begränsningarna själv. beteenderunda det drog upp en historia från tidigare där jag faktiskt hade sagt ett konkret latensnummer, exakt vad min intervjuare fiskade efter. Jag kollade docka, Activity Monitor, processlista, skärminspelningar på både CodeSignal och Zoom efteråt och kunde inte hitta den. tolv dollar i månaden på årsvis, inga tak på sessioner. jämfört med Interview Coder på tvåhundranittionio dollar som bara gör kodning (två av fyra omgångar) var det inte ens en fråga. 57 000 användare nu, tjugo plus funktioner byggda kring att vara osynliga.
böcker riktigt snabbt. Knäcker du kodningsintervjun? det var okej. slätar bara ut saker för mycket, som att du läser det och tänker oh ok, det här är genomförbart och sedan sätter du dig ner för en riktig intervju och nej. farlig bok ärligt talat. Utformar dock dataintensiva applikationer. åh man. spelväxlare för systemdesign. seriöst en av de bästa tekniska böckerna jag äger. läs den även om du inte har några intervjuer på gång, den är bara bra. för algoritmer använde jag Jeff Ericksons lärobok som är gratis online och faktiskt kul? han skrev den för studenter, inte forskare, så den läser inte som en avhandling. Marcus svär vid Skiennas Algorithm Design Manual men till och med han medger att du måste hoppa runt. att gå fram och bak är ett slag.
så ja. Marcus hade rätt. om bokstavligen allt. studera produkten innan du dyker upp. systemdesignintervjuarna på Uber byggde de faktiska sakerna de ber dig designa. det är ingen metafor. de byggde den bokstavligen. skriv dina beteendesiffror på en lapp. gör uppvärmningar varje morgon som om du stretchar innan en löprunda. och för Guds kärlek, gå inte in i en designrunda och rita rektanglar på en whiteboard och kalla det ett system. jag gjorde det. det gick precis som du tror det gick.
Ready to Ace Your Next Interview?
Join 57,000+ professionals using InterviewMan to get real-time AI assistance during their interviews.
