Beste antwoord
Hier zijn er een paar die ik me herinner uit mijn escapades interviewen:
- Ontwerp instagram of een soort inhoudsfeed. Deze is eigenlijk SUPER gebruikelijk, i moet het 3 of 4 keer bij verschillende bedrijven hebben gekregen. Het is een mooie koekjesvorm en is waarschijnlijk wat de interviewers die te lui zijn om een betere vraag te stellen, zullen stellen.
- Design type-ahead / autocomplete. Heb deze ook meerdere keren ontvangen, soms met kleine variaties. Het is meestal gebaseerd op een Trie-gegevensstructuur. Dit is geweldig om te oefenen!
- Ontwerp een berichtenbus (apache kafka / zeromq / rabbitmq). U kunt zoiets krijgen als u solliciteert voor een infra-georiënteerde softwarerol. Dit is een geweldige die veel verschillende focusgebieden en subvragen kan voortbrengen.
- Ontwerp een LRU-cache. komt meestal neer op het implementeren van een dubbel gelinkte lijst om een constante tijdverwijdering te krijgen voor minst recent gebruikte elementen wanneer de cache vol is.
- Ontwerp een gedistribueerde cache. Nogmaals, misschien voor een rol die infra-georiënteerd is. Kan ook in veel verschillende richtingen worden genomen.
- Ontwerp databasetabellen / datawarehouse. Dit is misschien voor een meer op data-engineer georiënteerde rol, maar komt ook vaak voor bij SWEs, aangezien goed data-ontwerp enorm belangrijk is.
Hier zijn er een paar die ik NIET persoonlijk heb gezien , ondanks dat het algemeen wordt aanvaard als gebruikelijk:
- Ontwerp een URL-verkorter
- Ontwerp een webshop / e-commerce site
Ik hoop dat dit helpt! Ik durf te wedden dat de top 4–5 de MEESTE van uw systeemontwerpinterviews beslaat – en voor degenen die ze niet behandelen, zou de kennis die u opdoet door ze te bestuderen goed moeten worden overgebracht naar verschillende variaties van de vragen.
Antwoord
System Design Interviews testen uw ontwerpvaardigheden en uw vermogen om te werken met complexe en schaalbare services. Uw functioneren in deze gesprekken bepaalt welke functie en salaris u wordt aangeboden. Als je lovenswaardige ontwerpvaardigheden hebt, krijg je een hoger bod. Een goede bron om je voor te bereiden op dit interview: Grokking the System Design Interview
Enkele voorbeelden van ontwerpproblemen zijn:
- Het ontwerpen van een URL-verkortingsservice zoals TinyURL
- Instagram ontwerpen
- Twitter ontwerpen
- YouTube ontwerpen
- Facebook Messenger ontwerpen
- Dropbox ontwerpen
- Typeahead-suggestie ontwerpen
- Facebooks ontwerpen Nieuwsfeed
- Yelp ontwerpen
- Ontwerpen Uber
Het is ook een goed idee om vertrouwd te raken met concepten van gedistribueerde systemen, zoals Consistente hashing, Gegevenspartitionering , Load Balancing , Redundantie en replicatie , CAP-stelling , enz.
In mijn ervaring volgden kandidaten die beter hebben gepresteerd in het ontwerpen van sollicitatiegesprekken deze zeven stappen:
Stap 1: verduidelijkingen van vereisten: stel altijd vragen om de exacte omvang van het probleem dat u aan het oplossen bent te vinden.
Stap 2: Definitie systeeminterface: Definieer welke APIs van het systeem worden verwacht. Dit zorgt er ook voor dat u geen enkele vereiste verkeerd heeft begrepen.
Stap 3: schatting van de achterkant van de envelop: Het is altijd een goed idee om een schatting te maken van de schaal van het systeem dat u gaat ontwerpen.
Stap 4: definieer een gegevensmodel: hoewel het niet in het begin vereist, dit zal verduidelijken hoe gegevens tussen verschillende componenten van het systeem zullen stromen en zal u later ook begeleiden bij het partitioneren van gegevens.
Stap 5: Ontwerp op hoog niveau: teken een blokdiagram met 5-6 vakken die de kerncomponenten van uw systeem vertegenwoordigen.
Stap 6: Gedetailleerd componentontwerp : Graaf dieper in 2-3 componenten; feedback van interviewers moet u altijd leiden naar welke delen van het systeem u verder wilt uitleggen.
Stap 7: knelpunten: probeer te bespreken zoveel mogelijk knelpunten en verschillende benaderingen om deze te verhelpen.
Ik hoop dat dit heeft geholpen.