Inhoudsopgave[Zich verstoppen][Laten zien]
- 1. Wat bedoel je met systeemontwerp?
- 2. Wat zijn de belangrijkste kenmerken van een systeemontwerper?
- 3. Wat is de CAP-stelling precies?
- 4. Wat verstaat u onder loadbalancing?
- 5. Wat is het verschil tussen asynchrone programmering en parallelle programmering?
- 6. Wat is het verschil tussen horizontaal en verticaal schalen?
- 7. Wat bedoel je precies met latentie, doorvoer en systeembeschikbaarheid?
- 8. Wat zijn ACID-eigenschappen?
- 9. Wat is sharding precies?
- 10. Wat is CDN?
- 11. Waarom CDN gebruiken?
- 12. Wat is het verschil tussen sharding en partitionering?
- 13. Wat is cachen precies?
- 14. Wat zijn CDN edge-servers?
- 15. Wat zijn de verschillende consistentiepatronen voor systeemontwerp?
- 16. Wat bedoel je met optimistische blokkering?
- 17. Wat bedoel je precies met "leidersverkiezing"?
- 18. Wat is uw aanpak voor het ontwerpen van een TinyURL-achtige URL-verkortingsservice?
- 19. Wat is jouw benadering van het ontwerpen van twitter?
- 20. Maak het nieuwsfeedsysteem voor Facebook
- 21. Wat is de BASE-eigenschap van een systeem?
- 22. Wat is taakverdeling met IP-adresaffiniteitstechniek?
- 23. Wat zijn algoritmen voor cachevervanging (of verwijderingsbeleid) precies?
- 24. Wat bedoel je precies met gedistribueerde transactie?
- 25. Wat is uithongering precies?
- Conclusie
Voordat u begint, raden we u aan onze inleidende gids over systeemontwerp om je fundamentele kennis op te frissen.
Wanneer u solliciteert voor een functie waarvoor kennis van systeemontwerp vereist is, krijgt u de kans om over uw achtergrond te praten en te laten zien dat u in staat bent ingewikkelde systemen te ontwikkelen.
Wanneer u met een potentiële werkgever spreekt, kan de manier waarop u uw expertise uitdrukt u helpen om aan te tonen dat u een competente kandidaat bent voor de functie.
U kunt zich voorbereiden op uw sollicitatiegesprek door basisontwerpconcepten te leren en na te denken over hoe u zult reageren op vragen hierover. We zullen enkele typische interviewvragen en antwoorden over systeemontwerp in dit bericht bespreken om u te helpen bij de voorbereiding op uw volgende interview.
1. Wat bedoel je met systeemontwerp?
Het proces van het vaststellen van systeemkenmerken, inclusief modules, architectuur, componenten en hun interfaces, en gegevens op basis van vooraf bepaalde criteria, staat bekend als systeemontwerp.
Het is het proces van het definiëren, creëren en ontwerpen van systemen om te voldoen aan de specifieke doelen en doelstellingen van een bedrijf of organisatie. Systeemontwerp gaat meer over systeemanalyse, architecturale patronen, API's, ontwerppatronen en alles aan elkaar lijmen dan over coderen.
2. Wat zijn de belangrijkste kenmerken van een systeemontwerper?
- Gebruikersinteractie
- Externe API-aanroep
- Offline processen
3. Wat is de CAP-stelling precies?
Volgens de CAP-stelling (Consistency-Availability-Partition Tolerance) kan een gedistribueerd systeem niet tegelijkertijd C, A en P garanderen. Het kan maximaal twee van de drie zekerheden bieden. Laten we een gedistribueerd databasesysteem gebruiken om ons te helpen dit te begrijpen.
- Consistentie: dit specificeert dat gegevens consistent moeten blijven zodra een databasetransactie is voltooid. Alle query's zouden bijvoorbeeld hetzelfde antwoord moeten retourneren na een database-update.
- Beschikbaarheid: de databases moeten te allen tijde beschikbaar en responsief zijn.
- Partitietolerantie: zelfs als de communicatie problematisch wordt, moet het databasesysteem blijven werken.
4. Wat verstaat u onder loadbalancing?
Load balancing is het proces van het efficiënt verspreiden van inkomend verkeer over een set backend-servers. Deze worden serverpools genoemd. Moderne websites zijn gebouwd om miljoenen vragen van klanten te behandelen en snel en betrouwbaar te beantwoorden. Er zullen meer servers nodig zijn om aan deze eisen te voldoen.
In dit geval is het van cruciaal belang om het aanvraagverkeer efficiënt over elke server te verdelen om overbelasting te voorkomen. De load balancer fungeert als verkeersagent, onderschept verzoeken en stuurt ze door naar beschikbare servers, zodat geen enkele server overbelast raakt, wat de prestaties van de applicatie mogelijk verslechtert.
5. Wat is het verschil tussen asynchrone programmering en parallelle programmering?
Wanneer u iets asynchroon uitvoert, betekent dit dat u niet hoeft te wachten tot het is voltooid voordat u verder kunt gaan met iets anders. Parallellisme verwijst naar de gelijktijdige uitvoering van veel taken.
Wanneer u banen in verschillende stukken arbeid kunt opsplitsen, werkt parallellisme effectief. Async en Callbacks zijn een middel (tool of mechanisme) om concurrency te vertegenwoordigen, dwz een groep entiteiten die kunnen communiceren en bronnen kunnen delen.
6. Wat is het verschil tussen horizontaal en verticaal schalen?
De toevoeging van nieuwe computerapparatuur aan een netwerk dat de verwerkings- en geheugenvraag over een verspreid netwerk van apparaten verspreidt, wordt horizontaal schalen genoemd. Simpel gezegd, er worden nieuwe serverinstanties toegevoegd aan de huidige pool en de verkeersbelasting wordt efficiënt verdeeld over deze apparaten.
Verticaal schalen verwijst naar het idee om de resourcecapaciteit van een enkele computer uit te breiden door RAM, efficiënte CPU's toe te voegen of te migreren naar een nieuwe machine met een hogere capaciteit. De functionaliteit van de server kan worden uitgebreid zonder dat er programmeerwijzigingen nodig zijn.
7. Wat bedoel je precies met latentie, doorvoer en systeembeschikbaarheid?
Prestaties zijn een essentieel aspect van systeemontwerp omdat het bijdraagt aan de snelheid en betrouwbaarheid van onze diensten. De drie belangrijkste prestatiemaatstaven zijn de volgende:
- De tijd die nodig is om een enkel bericht in milliseconden af te leveren, wordt latentie genoemd.
- De hoeveelheid gegevens die in een bepaalde periode met succes door een systeem is overgedragen, wordt doorvoer genoemd. Bits per seconde worden gebruikt om het te meten.
- De hoeveelheid tijd die een systeem beschikbaar is om op vragen te reageren, wordt bepaald door de beschikbaarheid ervan. System Uptime / (System Uptime+Downtime) is de formule om dit te berekenen.
8. Wat zijn ACID-eigenschappen?
- Atomiciteit: het zorgt ervoor dat databasewijzigingen alle of geen zijn.
- Consistentie: gegevenswaarden in de database zijn consistent.
- Isolatie: Het verwijst naar de scheiding van twee transacties.
- Duurzaamheid: gegevens blijven behouden, zelfs als de server uitvalt.
9. Wat is sharding precies?
Sharding is de techniek waarbij een enorme logische dataset wordt opgedeeld in vele databases. Het verwijst ook naar horizontale gegevenssplitsing omdat de gegevens op meerdere computers worden opgeslagen. Als gevolg hiervan kan een gedeelde database meer zoekopdrachten verwerken dan een enkele enorme computer.
10. Wat is CDN?
Een content delivery network is een wereldwijd netwerk van computers die samenwerken om snel internetinformatie te verstrekken. Het maakt de snelle levering mogelijk van elementen zoals HTML-pagina's, JavaScript-bestanden, stylesheets, afbeeldingen en video's die nodig zijn om internetinhoud te laden.
11. Waarom CDN gebruiken?
- Aangezien statische bronnen ongeveer 80% van een website uitmaken, vermindert het gebruik van een CDN de belasting van de oorspronkelijke server aanzienlijk.
- Omdat er minder afstand is om te reizen, wordt informatie sneller verstrekt aan website-eigenaren die bezoekers uit veel geografische gebieden hebben.
- Gebruikers van CDN's profiteren ook van de capaciteit om snel op en af te schalen als reactie op verkeerspieken.
12. Wat is het verschil tussen sharding en partitionering?
Database-sharding – Database-sharding is een methode om een enkele dataset in meerdere databases te partitioneren, zodat deze op verschillende werkstations kan worden opgeslagen. Grotere datasets kunnen in kleinere stukken worden opgedeeld en in verschillende dataknooppunten worden opgeslagen, waardoor de totale opslagcapaciteit van het systeem toeneemt.
Door de gegevens over veel machines te verspreiden, kan een gedeelde database meer query's verwerken dan een enkel systeem.
Databasepartitionering is het proces van het verdelen van opgeslagen databaseobjecten (tabellen, indexen en views) in afzonderlijke stukken. Om de beheersbaarheid, prestaties en beschikbaarheid te vergroten, worden grote databaseobjecten gepartitioneerd.
In sommige gevallen kan partitionering de snelheid verbeteren bij toegang tot gepartitioneerde gegevens. Partitionering kan de indexgrootte verkleinen en de kans vergroten dat de meest benodigde indexen in het geheugen worden gevonden door als leidende kolom in indexen te fungeren.
13. Wat is cachen precies?
Caching is de techniek waarbij bestandskopieën worden bewaard in een tijdelijk opslaggebied dat bekend staat als een cache, wat de toegang tot gegevens versnelt en de latentie van de site vermindert. Er kan slechts een bepaalde hoeveelheid gegevens in de cache worden opgeslagen.
Als gevolg hiervan is het van cruciaal belang om technieken voor het bijwerken van de cache te bepalen die het meest geschikt zijn voor de bedrijfsdoelstellingen.
14. Wat zijn CDN edge-servers?
De CDN-servers die materiaal cachen dat is verkregen van uw oorspronkelijke server of opslagcluster, worden edge-servers genoemd. Point of presence is een term die vaak wordt gebruikt om edge servers (POP) te beschrijven.
De edge-servers zijn fysiek gepositioneerd op een POP. Bij die POP kan informatie door veel edge-servers in de cache worden opgeslagen.
De mogelijkheid om delen van een website vanaf verschillende plaatsen aan te bieden, verkleint de afstand tussen de bezoeker en de webserver, wat resulteert in een lagere latentie. CDN edge-servers bereiken dit precieze doel.
15. Wat zijn de verschillende consistentiepatronen voor systeemontwerp?
Elk leesverzoek zou de meest recent geschreven gegevens moeten ophalen, volgens de CAP-stelling. Wanneer er veel gegevenskopieën toegankelijk zijn, wordt het een probleem om ze te synchroniseren zodat klanten continu nieuwe gegevens ontvangen. Dit zijn de mogelijke consistentiepatronen:
- Zwakke consistentie: na het schrijven van gegevens kan het leesverzoek de bijgewerkte gegevens al dan niet verkrijgen. Dit stabiliteitsniveau is ideaal voor real-time toepassingen zoals VoIP, videochat en multiplayer-gaming.
- Eventuele consistentie: Reads zullen uiteindelijk de meest recente gegevens bekijken binnen milliseconden nadat de gegevens zijn geschreven. De gegevens worden in dit geval asynchroon gedupliceerd. DNS- en e-mailsystemen zijn hier voorbeelden van. Dit werkt effectief in systemen met een hoge beschikbaarheid.
- Sterke consistentie: na het schrijven van gegevens zullen toekomstige lezers de meest recente gegevens bekijken. De gegevens worden in dit geval synchroon gekopieerd. Dit kan worden waargenomen in RDBMS en bestandssystemen, die geschikt zijn voor gegevensoverdracht.
16. Wat bedoel je met optimistische blokkering?
Optimistische vergrendeling is een mechanisme waarbij u een record leest, een versienummer noteert (alternatieve manieren zijn datums, tijdstempels of checksums/hashes) en vervolgens nogmaals controleert of de versie niet is gewijzigd voordat u deze terugschrijft.
Wanneer u het record terugschrijft, gebruikt u de versie om de update te filteren om ervoor te zorgen dat deze atomair is. (dat wil zeggen, is niet gewijzigd tussen het moment waarop u de versie controleert en wanneer u het record naar de schijf schrijft) en werk het allemaal tegelijk bij.
17. Wat bedoel je precies met "leidersverkiezing"?
In een gedistribueerd systeem met talloze servers die bijdragen aan de beschikbaarheid van de applicatie, kan het voorkomen dat slechts één server verantwoordelijk is voor het updaten van API's van derden, omdat meerdere servers problemen kunnen veroorzaken bij het gebruik van de API's.
Deze server staat bekend als de primaire server en de procedure om deze te selecteren staat bekend als leiderverkiezing. Wanneer de leiderserver faalt in een gedistribueerd systeem, moeten de servers de storing opmerken en een nieuwe leider kiezen. Met behulp van een consensustechniek is deze aanpak het meest geschikt voor toepassingen met hoge beschikbaarheid en sterke consistentie.
18. Wat is uw aanpak voor het ontwerpen van een TinyURL-achtige URL-verkortingsservice?
TinyURL transformeert een lange URL in een enkele, unieke korte URL. Deze technologieën kunnen ook een korte URL accepteren en de volledige URL retourneren.
Wat zijn enkele van de cruciale eigenschappen?
- Maak een URL die korter is dan het origineel.
- Bewaar de langere URL en vervang deze door de kortere.
- Sta omleiding in korte URL's toe.
- Korte URL's met aangepaste namen worden ondersteund.
- Meerdere vragen tegelijk afhandelen.
Wat zijn de meest voorkomende problemen?
- Hoe houdt u de databaseopslag bij?
- Wat gebeurt er als de gebruikersbelasting de verwachtingen overtreft?
- Wat als twee personen dezelfde aangepaste URL gebruiken?
Overweeg de volgende suggesties:
- Hashing is een begrip dat kan worden gebruikt om oude en nieuwe URL's met elkaar te verbinden.
- REST API kan worden gebruikt om front-end communicatie af te handelen en de zware last te balanceren.
- Multithreading is een begrip waarmee u meerdere verzoeken tegelijk kunt afhandelen.
- Originele URL's worden opgeslagen in NoSQL-databases.
19. Wat is jouw benadering van het ontwerpen van twitter?
Gegeven vereisten:
- Tweets versturen
- Andere gebruikers volgen
- Tweetfeed/newsfeed
- Systeem is schaalbaar
- Laadt snel
- Systeem is betrouwbaar
Je kunt beginnen met het bedenken van je Twitter API-ontwerp wanneer je de criteria hebt vastgesteld. Dit is hoe het eruit zou zien:
Om te beginnen schetsen we de belangrijkste eindpunten van de API. Hier zijn een paar voorbeelden:
- sendTweet(bericht)
- followUser(gebruikers-ID)
- niet meer volgenGebruiker(gebruikers-ID)
- getFeed(pagina)
Vervolgens kan de architectuur worden geschetst die deze kenmerken mogelijk maakt. We kunnen beginnen met de gebruiker die een serververzoek indient. We kunnen extra API-servers achter een load balancer installeren om grotere verkeersniveaus te helpen routeren om aan de schaalbaarheidsbehoefte te voldoen. We moeten nu een database toevoegen om onze tweets op te slaan.
Het is belangrijk om te onthouden dat de API die we bieden schaalbaar moet zijn. Om deze dienst schaalbaar te maken, kunnen we een van onze API-servers uit een aparte cache laten lezen voor onze nieuwsfeed. Daarbij moeten we ook een feedprovider gebruiken om onze feedcache up-to-date te houden.
20. Maak het nieuwsfeedsysteem voor Facebook
Met de nieuwsfeed op Facebook kunnen gebruikers zien wat er gaande is in de kringen van hun vrienden, favoriete pagina's en organisaties die ze hebben gevolgd.
Wat zijn enkele van de essentiële kenmerken?
- Maak een nieuwsfeed op basis van berichten van andere systeementiteiten die de gebruiker volgt.
- Tekst, afbeeldingen, audio en video kunnen allemaal worden gebruikt in nieuwsfeedberichten.
- Voeg in realtime nieuwe inhoud toe aan de nieuwsfeed van de gebruiker.
Wat zijn enkele van de meest voorkomende problemen?
- Wat als het lang duurt voordat het nieuwe bericht in de nieuwsfeed verschijnt?
- Kan het algoritme een piek in gebruikersactiviteit aan?
- Welke berichten moeten als eerste in de nieuwsfeed worden weergegeven?
Overweeg de volgende suggesties:
- Onderzoek het fanout-mechanisme voor het verspreiden van berichten onder volgers.
- Onderzoek hoe sharding kan worden gebruikt om hoge gebruikersbelastingen efficiënt af te handelen.
- De feedgegevens van een gebruiker mogen niet op meerdere servers worden gedupliceerd. Sharding kan in plaats daarvan worden gedaan op basis van gebruikers-ID's.
21. Wat is de BASE-eigenschap van een systeem?
De BASE-functies zijn alomtegenwoordig in NoSQL-databases die recentelijk zijn ontstaan. Een BASE-systeem biedt volgens de CAP-stelling geen consistentie. Dit is een verzonnen acroniem dat overeenkomt met de volgende eigenschap van de CAP-stelling van een systeem:
- De term "basis beschikbaar" betekent dat het systeem te allen tijde beschikbaar zal zijn.
- Een zachte toestand betekent dat de toestand van het systeem in de loop van de tijd kan variëren, zelfs als er geen input wordt geleverd. Dit komt vooral door de uiteindelijke consistentie van het model.
- Aangezien het systeem gedurende die periode geen invoer ontvangt, betekent uiteindelijke consistentie dat het systeem in de loop van de tijd consistent zal worden.
22. Wat is taakverdeling met IP-adresaffiniteitstechniek?
Een andere prominente methode voor taakverdeling is IP-adresaffiniteit. Het IP-adres van de client is bij deze methode verbonden met een serverknooppunt. Eén serverknooppunt verwerkt alle verzoeken van een client-IP-adres.
Deze methode is eenvoudig te implementeren omdat het IP-adres altijd toegankelijk is in de HTTP-aanvraagheader en er geen verdere instellingen nodig zijn. Als het waarschijnlijk is dat uw klanten cookies hebben uitgeschakeld, kan deze vorm van load balancing voordelig zijn.
23. Wat zijn algoritmen voor cachevervanging (of verwijderingsbeleid) precies?
Cache-algoritmen (ook bekend als cache-vervangingsalgoritmen, cache-vervangingsbeleid of cache-verwijderingsbeleid) zijn optimalisatie-instructies of algoritmen die een computerprogramma of een door hardware onderhouden structuur kunnen gebruiken om een cache met gegevens die op de computer zijn opgeslagen te beheren.
Caching verhoogt de snelheid door recent gebruikte of vaak gebruikte gegevens op te slaan in geheugengebieden die sneller of goedkoper toegankelijk zijn dan traditionele geheugenopslag. Als de cache vol is, moet het algoritme beslissen welke items verwijderd moeten worden om plaats te maken voor nieuwe.
24. Wat bedoel je precies met gedistribueerde transactie?
Een gedistribueerde transactie is elke omstandigheid waarin een enkele gebeurtenis de wijziging veroorzaakt van twee of meer afzonderlijke gegevensbronnen die niet atomair kunnen worden vastgelegd.
Het wordt veel ingewikkelder in de wereld van microservices, aangezien elke service een werkeenheid is en meestal moeten meerdere services samenwerken om een bedrijf succesvol te maken.
25. Wat is uithongering precies?
Wanneer een thread niet in staat is om regelmatig toegang te krijgen tot gedeelde bronnen, wordt er gezegd dat het uitgehongerd is. Dit gebeurt wanneer "hebzuchtige" threads of threads met een hogere "prioriteit" gedeelde bronnen voor langere tijd ontoegankelijk maken.
Overweeg een object dat een gesynchroniseerde methode biedt die vaak laat terugkeert. Als een thread deze methode herhaaldelijk aanroept, worden andere threads die regelmatig gesynchroniseerde toegang tot hetzelfde object vereisen, vaak geblokkeerd.
Conclusie
Een brainstormsessie is alles wat het systeemontwerpgesprek inhoudt. We hebben in dit bericht de meest voorkomende vragen over System Design-interviews behandeld.
Een volledig begrip van de methode die u volgt bij het maken van een specifiek systeem is van cruciaal belang om te slagen voor een System Design-interview.
Laat een reactie achter