Bästa svaret
Här är några som jag minns från mina intervjuar eskapader:
- Design instagram eller någon typ av innehållsflöde. Den här är faktiskt SUPER vanligt, jag måste ha fått det tre eller fyra gånger hos olika företag. Det är ganska cookie cutter och är förmodligen vad intervjuarna som är för lata för att komma med en bättre fråga kommer att ställa.
- Designtyp framåt / autoslutförande. Har också fått den här flera gånger, ibland med små variationer. Det baseras vanligtvis på en Trie-datastruktur. Det här är bra att träna!
- Designa en meddelandebuss (apache kafka / zeromq / rabbitmq). Du kan få något liknande om du intervjuar för en infrarienterad programvaruroll. Det här är bra som kan skapa många olika fokusområden och underfrågor.
- Designa en LRU-cache. Det handlar vanligtvis om att implementera en dubbelt länkad lista för att få bort konstant tid för de senast använda elementen när cachen är full.
- Design en distribuerad cache. Återigen kan det handla om en roll som är inforienterad. Kan också tas i många olika riktningar.
- Designa databastabeller / datalager. Detta kan vara för en mer dataingenjörsinriktad roll, men är också vanligt för SWE med tanke på att bra datadesign är väldigt viktigt.
Här är några som jag INTE har sett personligen , trots att de är allmänt accepterade som vanliga:
- Skapa en URL-förkortare
- Designa en webbshop / e-handelswebbplats
Hoppas det hjälper! Jag skulle vara villig att satsa på att topp 4–5 kommer att täcka DE flesta av dina systemdesignintervjuer – och för de de inte täcker bör den kunskap du får genom att studera dem överföras väl till olika varianter av frågorna.
Svar
Systemdesignintervjuer testar dina designfärdigheter och din förmåga att arbeta med komplexa och skalbara tjänster. Din prestation i dessa intervjuer avgör vilken position och lön du kommer att erbjudas. Om du har prisvärda designfärdigheter får du ett högre erbjudande. En bra resurs för att förbereda sig för denna intervju: Grottning av systemdesignintervjun
Några exempel på designproblem är:
- Designa en URL-förkortningstjänst som TinyURL
- Designa Instagram
- Designa Twitter
- Designa Youtube
- Designa Facebook Messenger
- Designa Dropbox
- Design Typeahead Suggestion
- Designa Facebook Nyhetsfeed
- Designa Yelp
- Designa Uber
Det är också en bra idé att bekanta dig med distribuerade systemkoncept som Consistent Hashing, Datapartitionering , Lastbalansering , Redundans och replikering , CAP Theorem , etc.
Enligt min erfarenhet följde kandidater som presterat bättre i desingintervjuer dessa sju steg:
Steg 1: Krav på förtydliganden: Ställ alltid frågor för att hitta den exakta omfattningen av problemet du löser.
Steg 2: Definition av systemgränssnitt: Definiera vilka API: er som förväntas av systemet. Detta säkerställer också om du inte har gjort något fel.
Steg 3: Uppskattning av kuvertets baksida: Det är alltid en bra idé att uppskatta skalan för det system du ska utforma.
Steg 4: Definiera datamodell: Även om det är inte krävs tidigt, detta kommer att klargöra hur data kommer att strömma mellan olika komponenter i systemet och senare kommer du också att vägleda dig mot datadelning.
Steg 5: Design på hög nivå: Rita ett blockschema med 5-6 rutor som representerar kärnkomponenter i ditt system.
Steg 6: Detaljerad komponentdesign : Gräva djupare i 2-3 komponenter; intervjuarens feedback bör alltid vägleda dig mot vilka delar av systemet han vill att du ska förklara vidare.
Steg 7: Flaskhalsar: Försök diskutera så många flaskhalsar som möjligt och olika tillvägagångssätt för att mildra dem.
Hoppas det hjälpte.