Innehållsförteckning[Dölj][Visa]
- 1. Vad menar du med systemdesign?
- 2. Vilka är de viktigaste egenskaperna hos en systemdesigner?
- 3. Vad exakt är CAP-satsen?
- 4. Vad förstår du med lastbalansering?
- 5. Vad är skillnaden mellan asynkron programmering och parallell programmering?
- 6. Vad är skillnaden mellan horisontell och vertikal skalning?
- 7. Vad exakt menar du med latens, genomströmning och systemtillgänglighet?
- 8. Vad är ACID-egenskaper?
- 9. Vad är sharding egentligen?
- 10. Vad är CDN?
- 11. Varför använda CDN?
- 12. Vad är skillnaden mellan sönderdelning och partitionering?
- 13. Vad exakt är cachning?
- 14. Vad är CDN edge-servrar?
- 15. Vilka är de olika konsistensmönstren för systemdesign?
- 16. Vad menar du med optimistisk låsning?
- 17. Vad exakt menar du med "ledarval"?
- 18. Vad är ditt tillvägagångssätt för att designa en TinyURL-liknande URL-förkortningstjänst?
- 19. Vad är ditt sätt att designa twitter?
- 20. Skapa nyhetsflödessystemet för Facebook
- 21. Vad är ett systems BASE-egenskap?
- 22. Vad är lastbalansering med IP-adressaffinitetsteknik?
- 23. Vad exakt är algoritmer för Cache-ersättning (eller Vräkningspolicy)?
- 24. Vad exakt menar du med distribuerad transaktion?
- 25. Vad är egentligen svält?
- Slutsats
Innan du börjar rekommenderar vi att du läser vår introduktionsguide om systemdesign för att fräscha upp dina grundläggande kunskaper.
När du intervjuar för en tjänst som kräver kunskap om systemdesign har du chansen att prata om din bakgrund och visa din förmåga att utveckla komplicerade system.
När du pratar med en potentiell arbetsgivare kan sättet du uttrycker din expertis på hjälpa dig att visa att du är en kompetent kandidat för tjänsten.
Du kan förbereda dig för din anställningsintervju genom att lära dig grundläggande designkoncept och tänka på hur du kommer att svara på förfrågningar om dem. Vi kommer att gå över några typiska systemdesignintervjufrågor och svar i det här inlägget för att hjälpa dig förbereda dig för din nästa intervju.
1. Vad menar du med systemdesign?
Processen att etablera systemegenskaper inklusive moduler, arkitektur, komponenter och deras gränssnitt och data baserat på förutbestämda kriterier kallas systemdesign.
Det är processen att definiera, skapa och designa system för att möta ett företags eller organisations specifika mål och mål. Systemdesign handlar mer om systemanalys, arkitektoniska mönster, API:er, designmönster och att limma ihop det hela än om kodning.
2. Vilka är de viktigaste egenskaperna hos en systemdesigner?
- Användarinteraktion
- Externt API-anrop
- Offlineprocesser
3. Vad exakt är CAP-satsen?
Enligt CAP-satsen (Consistency-Availability-Partition Tolerance) kan ett distribuerat system inte säkerställa C, A och P samtidigt. Den kan bara leverera högst två av de tre försäkringarna. Låt oss använda ett distribuerat databassystem för att hjälpa oss att förstå detta.
- Konsistens: Detta anger att data måste förbli konsekventa när en databastransaktion har slutförts. Till exempel bör alla frågor returnera samma svar efter en databasuppdatering.
- Tillgänglighet: Databaserna måste alltid vara tillgängliga och responsiva.
- Partitionstolerans: Även om kommunikationen blir problematisk bör databassystemet fortsätta att fungera.
4. Vad förstår du med lastbalansering?
Lastbalansering är processen att effektivt sprida inkommande trafik bland en uppsättning backend-servrar. Dessa kallas serverpooler. Moderna webbplatser är byggda för att hantera miljontals frågor från kunder och svara på dem snabbt och tillförlitligt. Fler servrar kommer att behövas för att hantera dessa krav.
I det här fallet är det viktigt att dela förfrågningstrafiken effektivt mellan varje server för att undvika att överbelasta dem. Lastbalanseraren fungerar som en trafikpolis som avlyssnar förfrågningar och dirigerar dem mellan tillgängliga servrar så att ingen server är överbelastad, vilket potentiellt försämrar applikationens prestanda.
5. Vad är skillnaden mellan asynkron programmering och parallell programmering?
När du kör något asynkront innebär det att du inte behöver vänta på att det ska slutföra innan du kan gå vidare till något annat. Parallellism hänvisar till att många uppgifter utförs samtidigt.
När du kan dela upp jobb i olika arbetsbitar fungerar parallellism effektivt. Async och Callbacks är ett sätt (verktyg eller mekanism) för att representera samtidighet, dvs en grupp av enheter som kan kommunicera och dela resurser.
6. Vad är skillnaden mellan horisontell och vertikal skalning?
Tillägget av ny datorutrustning till ett nätverk som sprider bearbetnings- och minnesbehovet över ett spritt nätverk av enheter kallas horisontell skalning. Enkelt sagt, nya serverinstanser läggs till i den nuvarande poolen och trafikbelastningen sprids effektivt mellan dessa enheter.
Vertikal skalning hänvisar till tanken att utöka en enskild dators resurskapacitet genom att lägga till RAM, effektiva processorer eller migrera till en ny maskin med högre kapacitet. Serverns funktionalitet kan utökas utan att det krävs några programmeringsändringar.
7. Vad exakt menar du med latens, genomströmning och systemtillgänglighet?
Prestanda är en viktig aspekt av systemdesign eftersom den bidrar till våra tjänsters snabbhet och tillförlitlighet. De tre viktigaste prestationsmåtten är följande:
- Tiden det tar att leverera ett enda meddelande i millisekunder kallas latens.
- Mängden data som framgångsrikt överförts genom ett system under en viss tidsperiod kallas för genomströmning. Bitar per sekund används för att mäta det.
- Den tid ett system är tillgängligt för att reagera på frågor definieras av dess tillgänglighet. System Uptime / (System Uptime+Downtime) är formeln för att beräkna den.
8. Vad är ACID-egenskaper?
- Atomicitet: Det säkerställer att databasändringar är antingen alla eller inga.
- Konsistens: Datavärdena i databasen är konsekventa.
- Isolering: Det hänvisar till separationen av två transaktioner.
- Hållbarhet: Data bevaras även om servern misslyckas.
9. Vad är sharding egentligen?
Sharding är tekniken för att dela upp en enorm logisk datauppsättning i många databaser. Det hänvisar också till horisontell datauppdelning eftersom data kommer att lagras på flera datorer. Som ett resultat kan en delad databas hantera fler frågor än en enda stor dator.
10. Vad är CDN?
Ett nätverk för leverans av innehåll är ett världsomspännande nätverk av datorer som samarbetar för att snabbt tillhandahålla internetinformation. Det möjliggör snabb leverans av element som HTML-sidor, JavaScript-filer, stilmallar, bilder och videor som är nödvändiga för att ladda internetinnehåll.
11. Varför använda CDN?
- Med tanke på att statiska resurser utgör cirka 80 % av en webbplats, minskar antagandet av ett CDN belastningen på ursprungsservern avsevärt.
- Eftersom det är mindre avstånd att resa, kommer information att tillhandahållas snabbare till webbplatsägare som har besökare från många geografiska områden.
- Användare av CDN drar också nytta av kapaciteten att snabbt skala upp och ner som svar på trafikökningar.
12. Vad är skillnaden mellan sönderdelning och partitionering?
Databasdelning – Databasdelning är en metod för att partitionera en enskild datauppsättning i flera databaser så att den kan lagras på olika arbetsstationer. Större datamängder kan delas upp i mindre bitar och lagras i flera datanoder, vilket ökar systemets totala lagringskapacitet.
Genom att sprida data över många maskiner kan en delad databas hantera fler frågor än ett enda system.
Databaspartitionering är processen att dela upp lagrade databasobjekt (tabeller, index och vyer) i separata delar. För att öka kontrollerbarhet, prestanda och tillgänglighet partitioneras stora databasobjekt.
I vissa fall kan partitionering förbättra hastigheten vid åtkomst till partitionerad data. Partitionering kan minska indexstorleken och öka chansen att hitta de mest nödvändiga indexen i minnet genom att fungera som en ledande kolumn i index.
13. Vad exakt är cachning?
Cachning är tekniken för att förvara filkopior i ett temporärt lagringsområde som kallas cache, vilket påskyndar dataåtkomst och minskar platsfördröjningen. Endast en viss mängd data kan lagras i cachen.
Som ett resultat är det avgörande att fastställa cacheuppdateringstekniker som är mest lämpade för affärsmålen.
14. Vad är CDN edge-servrar?
CDN-servrarna som cachelagrar material som erhållits från din ursprungsserver eller lagringskluster är kända som edge-servrar. Point of presence är en term som ofta används för att beskriva edge-servrar (POP).
Edge-servrarna är fysiskt placerade vid en POP. Vid den POP kan information cachelagras av många edge-servrar.
Möjligheten att tillhandahålla delar av en webbplats från flera platser minskar avståndet mellan besökaren och webbservern, vilket resulterar i lägre latens. CDN edge-servrar uppnår detta exakta mål.
15. Vilka är de olika konsistensmönstren för systemdesign?
Varje läsbegäran bör hämta de senast skrivna data, enligt CAP-satsen. När många datakopior är tillgängliga blir det svårt att synkronisera dem så att kunderna får färsk data kontinuerligt. Följande är de möjliga konsistensmönstren:
- Svag konsistens: Efter en dataskrivning kan läsbegäran eventuellt få den uppdaterade datan. Denna stabilitetsnivå är idealisk för realtidsapplikationer som VoIP, videochatt och multiplayer-spel.
- Eventuell konsistens: Reads kommer så småningom att se de senaste uppgifterna inom millisekunder efter att data har skrivits. Data dupliceras asynkront i detta fall. DNS och e-postsystem är exempel på detta. Detta fungerar effektivt i system med hög tillgänglighet.
- Stark konsistens: Efter en dataskrivning kommer framtida läsare att se de senaste uppgifterna. Data kopieras i detta fall synkront. Detta kan observeras i RDBMS och filsystem, som är lämpliga för dataöverföringar.
16. Vad menar du med optimistisk låsning?
Optimistisk låsning är en mekanism där du läser en post, noterar ett versionsnummer (alternativa sätt inkluderar datum, tidsstämplar eller kontrollsummor/hash) och sedan dubbelkollar att versionen inte har ändrats innan du skriver tillbaka den.
När du skriver tillbaka posten använder du versionen för att filtrera uppdateringen för att säkerställa att den är atomär. (dvs. har inte ändrats mellan när du kontrollerar versionen och när du skriver posten till disken) och uppdatera allt på en gång.
17. Vad exakt menar du med "ledarval"?
I ett distribuerat system med många servrar som bidrar till applikationens tillgänglighet kan det finnas tillfällen då endast en server är ansvarig för uppdatering av tredje parts API:er, eftersom flera servrar kan orsaka problem när API:erna används.
Denna server är känd som den primära servern, och proceduren för att välja den är känd som ledareval. När ledarservern misslyckas i ett distribuerat system måste servrarna märka felet och välja en ny ledare. Genom att använda en konsensusteknik är detta tillvägagångssätt bäst lämpat för tillämpningar med hög tillgänglighet och stark konsistens.
18. Vad är ditt tillvägagångssätt för att designa en TinyURL-liknande URL-förkortningstjänst?
TinyURL omvandlar en lång URL till en enda, unik kort URL. Dessa tekniker kan också acceptera en kort URL och returnera hela URL:en.
Vilka är några av de avgörande egenskaperna?
- Gör en URL som är kortare än originalet.
- Behåll den längre webbadressen och ersätt den med den kortare.
- Tillåt omdirigering i korta webbadresser.
- Korta webbadresser med anpassade namn stöds.
- Hantera flera förfrågningar samtidigt.
Vilka är de vanligaste problemen?
- Hur håller du koll på databaslagring?
- Vad händer om användarbelastningen överträffar förväntningarna?
- Vad händer om två personer använder samma anpassade webbadress?
Överväg följande förslag:
- Hashing är ett begrepp som kan användas för att koppla ihop gamla och nya webbadresser.
- REST API kan användas för att hantera front-end kommunikation och balansera den tunga belastningen.
- Multithreading är ett begrepp som låter dig hantera flera förfrågningar samtidigt.
- Ursprungliga webbadresser lagras i NoSQL-databaser.
19. Vad är ditt sätt att designa twitter?
Angivna krav:
- Skickar tweets
- Följer andra användare
- Tweetflöde/nyhetsflöde
- Systemet är skalbart
- Laddar snabbt
- Systemet är pålitligt
Du kan börja tänka ut din Twitter API-design när du har fastställt kriterierna. Så här skulle det se ut:
Till att börja med skissar vi upp API:ns viktigaste slutpunkter. Här är några exempel:
- sendTweet(meddelande)
- followUser(användar-ID)
- unfollowUser(användar-ID)
- getFeed(sida)
Arkitekturen som möjliggör dessa egenskaper kan sedan skissas upp. Vi kan börja med användaren som skickar en serverförfrågan. Vi kan installera ytterligare API-servrar bakom en lastbalanserare för att hjälpa till att dirigera större trafiknivåer för att uppfylla skalbarhetsbehovet. Vi måste lägga till en databas för att lagra våra tweets nu.
Det är viktigt att komma ihåg att API:et vi tillhandahåller bör vara skalbart. För att göra den här tjänsten skalbar kan vi låta en av våra API-servrar läsas från en separat cache för vårt nyhetsflöde. Samtidigt som vi gör det bör vi också använda en flödesleverantör för att hålla vår flödescache uppdaterad.
20. Skapa nyhetsflödessystemet för Facebook
Nyhetsflödet på Facebook låter användare se vad som händer i sina vänners cirklar, favoritsidor och organisationer som de har följt.
Vilka är några av de väsentliga egenskaperna?
- Skapa ett nyhetsflöde baserat på inlägg från andra systemenheter som användaren följer.
- Text, bilder, ljud och video kan alla användas i nyhetsflödesinlägg.
- Lägg till nytt innehåll i användarens nyhetsflöde i realtid.
Vilka är några av de vanligaste problemen?
- Vad händer om det tar lång tid innan det nya inlägget visas i nyhetsflödet?
- Kan algoritmen hantera en topp i användaraktivitet?
- Vilka inlägg ska visas först i nyhetsflödet?
Överväg följande förslag:
- Undersök fanout-mekanismen för att distribuera inlägg till följare.
- Undersök hur skärning kan användas för att effektivt hantera höga användarbelastningar.
- En användares flödesdata bör inte dupliceras över flera servrar. Delning kan istället göras baserat på användar-ID.
21. Vad är ett systems BASE-egenskap?
BASE-funktionerna finns överallt i NoSQL-databaser som nyligen har dykt upp. Ett BASE-system ger inte konsistens, enligt CAP-satsen. Detta är en påhittad akronym som motsvarar CAP-satsens följande egenskap hos ett system:
- Termen "basicly available" betyder att systemet kommer att vara tillgängligt hela tiden.
- Ett mjukt tillstånd innebär att systemets tillstånd kan variera över tiden, även om ingen ingång tillhandahålls. Detta beror mest på modellens eventuella konsistens.
- Med tanke på att systemet inte tar emot input under den perioden innebär eventuell konsekvens att systemet blir konsekvent över tiden.
22. Vad är lastbalansering med IP-adressaffinitetsteknik?
En annan framträdande metod för lastbalansering är IP-adressaffinitet. Klientens IP-adress är ansluten till en servernod i denna metod. En servernod hanterar alla förfrågningar från en klients IP-adress.
Denna metod är enkel att implementera eftersom IP-adressen alltid är tillgänglig i HTTP-förfrågningshuvudet och inga ytterligare inställningar krävs. Om dina kunder sannolikt har cookies avaktiverade kan denna form av lastbalansering vara fördelaktig.
23. Vad exakt är algoritmer för Cache-ersättning (eller Vräkningspolicy)?
Cachealgoritmer (även känd som cacheersättningsalgoritmer, cacheersättningspolicyer eller cache-eviction-policyer) är optimeringsinstruktioner, eller algoritmer, som ett datorprogram eller en hårdvaruunderhållen struktur kan använda för att hantera en cache med data som lagras på datorn.
Cachning ökar hastigheten genom att lagra nyligen använda eller ofta åtkomna data i minnesområden som är snabbare eller billigare att komma åt än traditionell minneslagring. När cachen är full måste algoritmen bestämma vilka objekt som ska tas bort för att skapa en plats för nya.
24. Vad exakt menar du med distribuerad transaktion?
En distribuerad transaktion är varje omständighet där en enskild händelse orsakar ändring av två eller flera distinkta datakällor som inte kan begås atomärt.
Det blir mycket mer komplicerat i en värld av mikrotjänster eftersom varje tjänst är en arbetsenhet, och för det mesta måste många tjänster samarbeta för att göra ett företag framgångsrikt.
25. Vad är egentligen svält?
När en tråd inte kan få regelbunden tillgång till delade resurser sägs den vara svältande. Detta inträffar när "giriga" trådar eller trådar med högre "prioritet" gör delade resurser otillgängliga under långa perioder.
Tänk på ett objekt som tillhandahåller en synkroniserad metod som ofta återkommer sent. Om en tråd upprepade gånger anropar den här metoden kommer andra trådar som kräver frekvent synkroniserad åtkomst till samma objekt ofta att blockeras.
Slutsats
En brainstormingsession är allt som systemdesignintervjun innebär. Vi har tagit upp de vanligaste intervjufrågorna för systemdesign i det här inlägget.
Ett heltäckande grepp om metoden du använder när du skapar ett specifikt system är avgörande för att klara en systemdesignintervju.
Kommentera uppropet