Beste svaret
Her er noen få som jeg husker fra min intervjuer escapades:
- Design instagram eller en slags innholdsfeed. Denne er faktisk SUPER vanlig, jeg må ha fått det 3 eller 4 ganger hos forskjellige selskaper. Det er ganske cookie cutter og er sannsynligvis det intervjuerne som er for late til å komme med et bedre spørsmål vil stille.
- Designtype fremover / autofullføring. Har også mottatt denne flere ganger, noen ganger med små variasjoner. Det er vanligvis basert på en Trie-datastruktur. Dette er flott å øve på!
- Design en meldingsbuss (apache kafka / zeromq / rabbitmq). Du kan få noe slikt hvis du intervjuer for en inforientert programvarerolle. Dette er flott som kan gyte mange forskjellige fokusområder og delspørsmål.
- Design en LRU-cache. Vanligvis kommer det til å implementere en dobbeltkoblet liste for å få konstant tidsfjerning for minst brukte elementer når hurtigbufferen er full.
- Design en distribuert cache. Igjen, kan være for en rolle som er infrarettet. Kan også tas i mange forskjellige retninger.
- Design databasetabeller / datalager. Dette kan være for en mer dataingeniørorientert rolle, men er også vanlig for SWE-er, gitt at god datadesign er veldig viktig.
Her er noen som jeg IKKE har sett personlig , til tross for å være generelt akseptert som vanlig:
- Design en URL-forkortelse
- Design en nettbutikk / e-handelsside
Håper dette hjelper! Jeg vil være villig til å satse på at topp 4–5 vil dekke DE FLESTE av systemdesignintervjuene dine – og for de de ikke dekker, bør kunnskapen du får ved å studere dem overføre til forskjellige varianter av spørsmålene.
Svar
Systemdesignintervjuer tester dine designferdigheter og din evne til å jobbe med komplekse og skalerbare tjenester. Resultatene dine i disse intervjuene avgjør hvilken stilling og lønn du vil bli tilbudt. Hvis du har prisverdige designferdigheter, vil du få et høyere tilbud. En god ressurs for å forberede seg på dette intervjuet: Grokking av systemdesignintervjuet
Noen få eksempler på designproblemer er:
- Designe en URL Shortening-tjeneste som TinyURL
- Designe Instagram
- Designe Twitter
- Designe Youtube
- Designe Facebook Messenger
- Designe Dropbox
- Design Typeahead Suggestion
- Designe Facebooks Newsfeed
- Designe Yelp
- Designing Uber
Det er også en god ide å gjøre deg kjent med distribuerte systemkonsepter som Consistent Hashing, Datapartisjonering , Lastbalansering , Redundans og replikering , CAP Theorem , etc.
Etter min erfaring fulgte kandidater som har prestert bedre i desingintervjuer disse syv trinnene:
Trinn 1: Kravavklaringer: Still alltid spørsmål for å finne det nøyaktige omfanget av problemet du løser.
Trinn 2: Definisjon av systemgrensesnitt: Definer hvilke APIer som forventes av systemet. Dette vil også sikre at du ikke har fått feil krav.
Trinn 3: Beregning av konvolutt: Det er alltid lurt å estimere skalaen til systemet du skal designe.
Trinn 4: Definer datamodell: Selv om det er ikke nødvendig tidlig, vil dette avklare hvordan data vil flyte mellom forskjellige komponenter i systemet, og senere vil du også lede deg mot datadeling.
Trinn 5: Design på høyt nivå: Tegn et blokkdiagram med 5-6 bokser som representerer kjernekomponenter i systemet ditt.
Trinn 6: Detaljert komponentdesign : Grav dypere i 2-3 komponenter; intervjuernes tilbakemeldinger bør alltid veilede deg mot hvilke deler av systemet han vil at du skal forklare nærmere.
Trinn 7: Flaskehalser: Prøv å diskutere så mange flaskehalser som mulig, og forskjellige tilnærminger for å dempe dem.
Håper dette hjalp.