Innholdsfortegnelse[Gjemme seg][Forestilling]
- 1. Hva mener du med systemdesign?
- 2. Hva er de viktigste egenskapene til en systemdesigner?
- 3. Hva er egentlig CAP-teoremet?
- 4. Hva forstår du med lastbalansering?
- 5. Hva er forskjellen mellom asynkron programmering og parallell programmering?
- 6. Hva er forskjellen mellom horisontal og vertikal skalering?
- 7. Hva mener du egentlig med ventetid, gjennomstrømning og systemtilgjengelighet?
- 8. Hva er ACID-egenskaper?
- 9. Hva er egentlig sharding?
- 10. Hva er CDN?
- 11. Hvorfor bruke CDN?
- 12. Hva er forskjellen mellom sharding og partisjonering?
- 13. Hva er egentlig caching?
- 14. Hva er CDN edge-servere?
- 15. Hva er de forskjellige konsistensmønstrene for systemdesign?
- 16. Hva mener du med optimistisk låsing?
- 17. Hva mener du egentlig med «ledervalg»?
- 18. Hva er din tilnærming til å designe en TinyURL-lignende URL-forkortingstjeneste?
- 19. Hva er din tilnærming til å designe twitter?
- 20. Lag nyhetsfeedsystemet for Facebook
- 21. Hva er et systems BASE-egenskap?
- 22. Hva er lastbalansering med IP-adressetilhørighetsteknikk?
- 23. Hva er egentlig Cache Replacement (eller Eviction Policy) algoritmer?
- 24. Hva mener du egentlig med distribuert transaksjon?
- 25. Hva er egentlig sult?
- konklusjonen
Før du begynner, anbefaler vi å lese vår introduksjonsguide om systemdesign for å friske opp din grunnleggende kunnskap.
Når du intervjuer for en stilling som krever kunnskap om systemdesign, har du sjansen til å snakke om bakgrunnen din og demonstrere din evne til å utvikle kompliserte systemer.
Når du snakker med en potensiell arbeidsgiver, kan måten du uttrykker din ekspertise på hjelpe deg med å vise at du er en kompetent kandidat for stillingen.
Du kan forberede deg til jobbintervjuet ditt ved å lære grunnleggende designkonsepter og tenke på hvordan du vil svare på henvendelser om dem. Vi vil gå over noen typiske systemdesignintervjuspørsmål og svar i dette innlegget for å hjelpe deg med å forberede deg til neste intervju.
1. Hva mener du med systemdesign?
Prosessen med å etablere systemegenskaper inkludert moduler, arkitektur, komponenter og deres grensesnitt, og data basert på forhåndsbestemte kriterier er kjent som systemdesign.
Det er prosessen med å definere, skape og designe systemer for å møte en bedrifts eller organisasjons spesifikke mål og mål. Systemdesign handler mer om systemanalyse, arkitektoniske mønstre, APIer, designmønstre og å lime det hele sammen enn om koding.
2. Hva er de viktigste egenskapene til en systemdesigner?
- Brukerinteraksjon
- Eksternt API-kall
- Offline prosesser
3. Hva er egentlig CAP-teoremet?
I følge CAP (Consistency-Availability-Partition Tolerance) teoremet kan ikke et distribuert system sikre C, A og P samtidig. Den kan bare levere to av de tre forsikringene på det meste. La oss bruke et distribuert databasesystem for å hjelpe oss med å forstå dette.
- Konsistens: Dette spesifiserer at data må forbli konsistente når en databasetransaksjon er fullført. For eksempel skal alle spørringer returnere det samme svaret etter en databaseoppdatering.
- Tilgjengelighet: Databasene skal være tilgjengelige og responsive til enhver tid.
- Partisjonstoleranse: Selv om kommunikasjonen blir problematisk, bør databasesystemet fortsette å fungere.
4. Hva forstår du med lastbalansering?
Lastbalansering er prosessen med å effektivt spre innkommende trafikk blant et sett med backend-servere. Disse omtales som serverpooler. Moderne nettsteder er bygget for å håndtere millioner av forespørsler fra kunder og svare på dem raskt og pålitelig. Flere servere vil være nødvendig for å håndtere disse kravene.
I dette tilfellet er det viktig å dele forespørselstrafikk effektivt mellom hver server for å unngå å overbelaste dem. Lastbalanseren fungerer som en trafikkbetjent, avskjærer forespørsler og dirigerer dem mellom tilgjengelige servere slik at ingen server blir overbelastet, noe som potensielt forringer applikasjonsytelsen.
5. Hva er forskjellen mellom asynkron programmering og parallell programmering?
Når du kjører noe asynkront, betyr det at du ikke trenger å vente til det er ferdig før du kan gå videre til noe annet. Parallelisme refererer til samtidig utførelse av mange oppgaver.
Når du kan dele opp jobber i forskjellige deler av arbeidskraft, fungerer parallellisme effektivt. Async og Callbacks er et middel (verktøy eller mekanisme) for å representere samtidighet, dvs. en gruppe enheter som kan kommunisere og dele ressurser.
6. Hva er forskjellen mellom horisontal og vertikal skalering?
Tillegget av nytt datautstyr til et nettverk som sprer prosesserings- og minnebehovet over et spredt nettverk av enheter, kalles horisontal skalering. Enkelt sagt, nye serverforekomster legges til det nåværende bassenget, og trafikkbelastningen fordeles effektivt mellom disse enhetene.
Vertikal skalering refererer til ideen om å utvide en enkelt datamaskins ressurskapasitet ved å legge til RAM, effektive CPUer eller migrere til en ny maskin med høyere kapasitet. Serverens funksjonalitet kan økes uten at det kreves noen programmeringsendringer.
7. Hva mener du egentlig med ventetid, gjennomstrømning og systemtilgjengelighet?
Ytelse er et viktig aspekt ved systemdesign siden det bidrar til hastigheten og påliteligheten til tjenestene våre. De tre viktigste resultatmålene er som følger:
- Tiden det tar å levere en enkelt melding i millisekunder kalles latency.
- Mengden data som er vellykket overført gjennom et system i en bestemt tidsperiode, refereres til som gjennomstrømning. Bits per sekund brukes til å måle det.
- Hvor lang tid et system er tilgjengelig for å reagere på forespørsler, er definert av tilgjengeligheten. System Oppetid / (System Oppetid+Netid) er formelen for å beregne den.
8. Hva er ACID-egenskaper?
- Atomitet: Det sikrer at databaseendringer enten er alle eller ingen.
- Konsistens: Dataverdiene i databasen er konsistente.
- Isolasjon: Det refererer til separasjon av to transaksjoner.
- Holdbarhet: Data bevares selv om serveren svikter.
9. Hva er egentlig sharding?
Sharding er teknikken for å dele et stort logisk datasett i mange databaser. Det refererer også til horisontal datadeling fordi dataene vil bli lagret på flere datamaskiner. Som et resultat kan en delt database håndtere flere spørringer enn en enkelt stor datamaskin.
10. Hva er CDN?
Et innholdsleveringsnettverk er et verdensomspennende nettverk av datamaskiner som samarbeider for å gi Internett-informasjon raskt. Det muliggjør rask levering av elementer som HTML-sider, JavaScript-filer, stilark, bilder og videoer som er nødvendige for å laste Internett-innhold.
11. Hvorfor bruke CDN?
- Med tanke på at statiske ressurser utgjør rundt 80 % av et nettsted, reduserer å ta i bruk et CDN belastningen på opprinnelsesserveren betydelig.
- Ettersom det er mindre avstand til reise, vil informasjon bli gitt raskere til nettstedeiere som har besøkende fra mange geografiske områder.
- Brukere av CDN-er drar også nytte av kapasiteten til å raskt skalere opp og ned som svar på trafikkøkninger.
12. Hva er forskjellen mellom sharding og partisjonering?
Databasedeling – Databasedeling er en metode for å partisjonere et enkelt datasett i en rekke databaser slik at det kan lagres på forskjellige arbeidsstasjoner. Større datasett kan deles opp i mindre biter og lagres i flere datanoder, noe som øker den totale lagringskapasiteten til systemet.
Ved å spre dataene på mange maskiner, kan en delt database håndtere flere spørringer enn et enkelt system.
Databasepartisjonering er prosessen med å dele lagrede databaseobjekter (tabeller, indekser og visninger) i separate deler. For å øke kontrollerbarheten, ytelsen og tilgjengeligheten er store databaseobjekter partisjonert.
I noen tilfeller kan partisjonering forbedre hastigheten når du får tilgang til partisjonerte data. Partisjonering kan redusere indeksstørrelsen og øke sjansen for å finne de mest nødvendige indeksene i minnet ved å fungere som en ledende kolonne i indekser.
13. Hva er egentlig caching?
Bufring er teknikken for å holde filkopier i et midlertidig lagringsområde kjent som en hurtigbuffer, noe som øker datatilgangen og reduserer forsinkelsen på nettstedet. Bare en viss mengde data kan lagres i cachen.
Som et resultat er det avgjørende å bestemme cacheoppdateringsteknikker som er best egnet for forretningsmålene.
14. Hva er CDN edge-servere?
CDN-serverne som cacher materiale hentet fra opprinnelsesserveren eller lagringsklyngen, er kjent som edge-servere. Point of presence er et begrep som ofte brukes for å beskrive edge-servere (POP).
Edgeserverne er fysisk plassert ved en POP. Ved den POP-en kan informasjon bli bufret av mange edge-servere.
Muligheten til å tilby deler av et nettsted fra flere steder reduserer avstanden mellom den besøkende og webserveren, noe som resulterer i lavere ventetid. CDN edge-servere oppnår dette nøyaktige målet.
15. Hva er de forskjellige konsistensmønstrene for systemdesign?
Hver leseforespørsel skal hente de sist skrevne dataene, ifølge CAP-teoremet. Når mange datakopier er tilgjengelige, blir det vanskelig å synkronisere dem slik at kundene mottar ferske data på en kontinuerlig basis. Følgende er de mulige konsistensmønstrene:
- Svak konsistens: Etter en dataskriving kan leseforespørselen kanskje eller ikke være i stand til å få de oppdaterte dataene. Dette stabilitetsnivået er ideelt for sanntidsapplikasjoner som VoIP, videochat og flerspillerspill.
- Eventuell konsistens: Reads vil til slutt vise de nyeste dataene innen millisekunder etter at dataene er skrevet. Dataene dupliseres asynkront i dette tilfellet. DNS- og e-postsystemer er eksempler på dette. Dette fungerer effektivt i systemer med høy tilgjengelighet.
- Sterk konsistens: Etter en dataskriving vil fremtidige lesere se de nyeste dataene. Dataene kopieres synkront i dette tilfellet. Dette kan observeres i RDBMS og filsystemer, som er passende for dataoverføringer.
16. Hva mener du med optimistisk låsing?
Optimistisk låsing er en mekanisme der du leser en post, noterer et versjonsnummer (alternative måter inkluderer datoer, tidsstempler eller sjekksummer/hasher), og deretter dobbeltsjekker at versjonen ikke er endret før du skriver den tilbake.
Når du skriver tilbake posten, bruker du versjonen til å filtrere oppdateringen for å sikre at den er atomær. (dvs. har ikke blitt endret mellom når du sjekker versjonen og når du skriver posten til disken) og oppdater alt på en gang.
17. Hva mener du egentlig med «ledervalg»?
I et distribuert system med mange servere som bidrar til applikasjonens tilgjengelighet, kan det være tider når bare én server er ansvarlig for å oppdatere tredjeparts API-er, ettersom flere servere kan forårsake problemer ved bruk av API-ene.
Denne serveren er kjent som den primære serveren, og prosedyren for å velge den er kjent som ledervalg. Når lederserveren svikter i et distribuert system, må serverne legge merke til feilen og velge en ny leder. Ved å bruke en konsensusteknikk er denne tilnærmingen best egnet for applikasjoner med høy tilgjengelighet og sterk konsistens.
18. Hva er din tilnærming til å designe en TinyURL-lignende URL-forkortingstjeneste?
TinyURL forvandler en lang URL til en enkelt, unik kort URL. Disse teknologiene kan også godta en kort URL og returnere hele URLen.
Hva er noen av de avgjørende egenskapene?
- Lag en URL som er kortere enn originalen.
- Behold den lengre URL-en og erstatt den med den kortere.
- Tillat omdirigering i korte nettadresser.
- Korte nettadresser med egendefinerte navn støttes.
- Behandle flere henvendelser samtidig.
Hva er de mest utbredte problemene?
- Hvordan holder du styr på databaselagring?
- Hva skjer hvis brukerbelastningen overgår forventningene?
- Hva om to personer bruker samme egendefinerte URL?
Vurder følgende forslag:
- Hashing er en forestilling som kan brukes til å koble sammen gamle og nye nettadresser.
- REST API kan brukes til å håndtere front-end kommunikasjon og balansere den tunge belastningen.
- Multithreading er en idé som lar deg håndtere flere forespørsler samtidig.
- Originale URL-er lagres i NoSQL-databaser.
19. Hva er din tilnærming til å designe twitter?
Oppgitte krav:
- Sender tweets
- Følger andre brukere
- Tweet feed/nyhetsfeed
- Systemet er skalerbart
- Laster raskt
- Systemet er pålitelig
Du kan begynne å tenke på Twitter API-designet ditt når du har etablert kriteriene. Slik vil det se ut:
Til å begynne med vil vi skissere API-ens viktigste endepunkter. Her er noen eksempler:
- sendTweet(melding)
- followUser(brukerID)
- unfollowUser (bruker-ID)
- getFeed(side)
Arkitekturen som vil muliggjøre disse egenskapene kan deretter skisseres. Vi kan begynne med brukeren som sender inn en serverforespørsel. Vi kan installere flere API-servere bak en lastbalanser for å hjelpe til med å rute større trafikknivåer for å oppfylle skalerbarhetsbehovet. Vi må legge til en database for å lagre tweetene våre nå.
Det er viktig å huske at API-en vi leverer bør være skalerbar. For å gjøre denne tjenesten skalerbar kan vi få en av API-serverne våre til å lese fra en egen hurtigbuffer for nyhetsfeeden vår. Mens vi gjør det, bør vi også bruke en feedleverandør for å holde feedbufferen oppdatert.
20. Lag nyhetsfeedsystemet for Facebook
Nyhetsstrømmen på Facebook lar brukere se hva som skjer i vennenes kretser, favorittsider og organisasjoner de har fulgt.
Hva er noen av de viktigste egenskapene?
- Lag en nyhetsstrøm basert på innlegg fra andre systemenheter brukeren følger.
- Tekst, bilder, lyd og video kan alle brukes i nyhetsfeedinnlegg.
- Legg til nytt innhold i brukerens nyhetsfeed i sanntid.
Hva er noen av de vanligste problemene?
- Hva om det tar lang tid før det nye innlegget vises i nyhetsstrømmen?
- Kan algoritmen håndtere en økning i brukeraktivitet?
- Hvilke innlegg skal vises først i nyhetsstrømmen?
Vurder følgende forslag:
- Undersøk fanout-mekanismen for å distribuere innlegg til følgere.
- Undersøk hvordan sharding kan brukes for å effektivt håndtere høye brukerbelastninger.
- En brukers feeddata bør ikke dupliseres på tvers av flere servere. Deling kan i stedet gjøres basert på bruker-IDer.
21. Hva er et systems BASE-egenskap?
BASE-funksjonene er allestedsnærværende i NoSQL-databaser som nylig har dukket opp. Et BASE-system gir ikke konsistens, ifølge CAP-teoremet. Dette er et sammensatt akronym som tilsvarer CAP-teoremets følgende egenskap til et system:
- Begrepet "i utgangspunktet tilgjengelig" betyr at systemet vil være tilgjengelig til enhver tid.
- En myk tilstand betyr at systemets tilstand kan variere over tid, selv om ingen input er gitt. Dette skyldes mest modellens eventuelle konsistens.
- Gitt at systemet ikke mottar input i den perioden, betyr eventuell konsistens at systemet vil bli konsistent over tid.
22. Hva er lastbalansering med IP-adressetilhørighetsteknikk?
En annen fremtredende metode for lastbalansering er IP-adressetilhørighet. Klientens IP-adresse er koblet til en servernode i denne metoden. Én servernode håndterer alle forespørsler fra en klient-IP-adresse.
Denne metoden er enkel å implementere siden IP-adressen alltid er tilgjengelig i HTTP-forespørselshodet og ingen ytterligere innstillinger er nødvendig. Hvis kundene dine sannsynligvis vil få informasjonskapsler deaktivert, kan denne formen for lastbalansering være fordelaktig.
23. Hva er egentlig Cache Replacement (eller Eviction Policy) algoritmer?
Cache-algoritmer (også kjent som cache-erstatningsalgoritmer, cache-erstatningspolicyer eller cache-eviction-policyer) er optimaliseringsinstruksjoner, eller algoritmer, som et dataprogram eller en maskinvarevedlikeholdt struktur kan bruke til å administrere en cache med data som er lagret på datamaskinen.
Bufring øker hastigheten ved å lagre nylig brukte eller ofte brukte data i minneområder som er raskere eller rimeligere å få tilgang til enn tradisjonell minnelagring. Når cachen er full, må algoritmen bestemme hvilke elementer som skal fjernes for å få plass til nye.
24. Hva mener du egentlig med distribuert transaksjon?
En distribuert transaksjon er enhver omstendighet der en enkelt hendelse forårsaker endring av to eller flere distinkte datakilder som ikke kan begås atomisk.
Det blir mye mer komplisert i verden av mikrotjenester siden hver tjeneste er en arbeidsenhet, og mesteparten av tiden må mange tjenester samarbeide for å gjøre en bedrift vellykket.
25. Hva er egentlig sult?
Når en tråd ikke er i stand til å få regelmessig tilgang til delte ressurser, sies den å være sulten. Dette skjer når "grådige" tråder eller tråder med høyere "prioritet" gjør delte ressurser utilgjengelige i lengre perioder.
Tenk på et objekt som gir en synkronisert metode som ofte returnerer sent. Hvis en tråd gjentatte ganger kaller denne metoden, vil andre tråder som krever hyppig synkronisert tilgang til det samme objektet ofte bli blokkert.
konklusjonen
En idédugnad er alt systemdesignintervjuet innebærer. Vi har tatt opp de vanligste System Design-intervjuspørsmålene i dette innlegget.
En omfattende forståelse av metoden du bruker når du oppretter et spesifikt system er avgjørende for å bestå et systemdesignintervju.
Legg igjen en kommentar