Table of Contents[Ferstopje][Toanje]
- 1. Wat bedoele jo mei systeemûntwerp?
- 2. Wat binne de wichtichste skaaimerken fan in systeem ûntwerper?
- 3. Wat is krekt de CAP-stelling?
- 4. Wat ferstean jo ûnder load balancing?
- 5. Wat is it ferskil tusken asynchrone programmearring en parallel programmearring?
- 6. Wat is it ferskil tusken horizontale en fertikale skaalfergrutting?
- 7. Wat bedoele jo krekt mei latency, trochstreaming en systeembeskikberens?
- 8. Wat binne ACID eigenskippen?
- 9. Wat is krekt sharding?
- 10. Wat is CDN?
- 11. Wêrom brûke CDN?
- 12. Wat is it ferskil tusken sharding en partitioning?
- 13. Wat is krekt caching?
- 14. Wat binne CDN edge tsjinners?
- 15. Wat binne de ferskillende Consistency patroanen foar systeem design?
- 16. Wat bedoele jo mei optimistysk slot?
- 17. Wat bedoele jo krekt mei "liedersferkiezing"?
- 18. Wat is jo oanpak foar it ûntwerpen fan in TinyURL-like URL-ferkoartingstsjinst?
- 19. Wat is dyn oanpak foar it ûntwerpen fan twitter?
- 20. Meitsje it nijsfeedsysteem foar Facebook
- 21. Wat is in systeem syn BASE eigendom?
- 22. Wat is load balancing mei IP-adres Affinity Technique?
- 23. Wat binne krekt Cache Replacement (of Eviction Policy) algoritmen?
- 24. Wat krekt bedoele jo mei ferdield transaksje?
- 25. Wat is krekt honger?
- Konklúzje
Foardat jo begjinne, riede wy oan om ús te lêzen ynliedende gids op System Design om jo fûnemintele kennis te ferfarskjen.
As jo ynterviewje foar in posysje dy't kennis fan systeemûntwerp fereasket, hawwe jo de kâns om te praten oer jo eftergrûn en jo fermogen te demonstrearjen om yngewikkelde systemen te ûntwikkeljen.
As jo prate mei in potinsjele wurkjouwer, kin de manier wêrop jo jo saakkundigens útdrukke jo helpe om te bewizen dat jo in foechhawwende kandidaat binne foar de posysje.
Jo kinne jo tariede op jo baanpetear troch basisûntwerpbegripen te learen en te tinken oer hoe't jo sille reagearje op fragen oer har. Wy geane oer wat typyske fragen en antwurden foar ynterviews foar systeemûntwerp yn dizze post om jo te helpen tariede op jo folgjende ynterview.
1. Wat bedoele jo mei systeemûntwerp?
It proses fan it fêststellen fan systeemkenmerken ynklusyf modules, arsjitektuer, komponinten, en har ynterfaces, en gegevens basearre op foarbepaalde kritearia is bekend as systeemûntwerp.
It is it proses fan it definiearjen, oanmeitsjen en ûntwerpen fan systemen om te foldwaan oan de spesifike doelen en doelstellingen fan in bedriuw as organisaasje. Systeemûntwerp giet mear oer systeemanalyse, arsjitektoanyske patroanen, API's, ûntwerppatroanen, en it allegear byinoar lijmen dan it giet oer kodearring.
2. Wat binne de wichtichste skaaimerken fan in systeem ûntwerper?
- Ynteraksje fan brûkers
- Eksterne API-oprop
- Offline prosessen
3. Wat is krekt de CAP-stelling?
Neffens de CAP-stelling (Consistency-Availability-Partition Tolerance) kin in ferdield systeem net tagelyk C, A en P garandearje. It kin allinich twa fan 'e trije garânsjes leverje. Litte wy in ferspraat databanksysteem brûke om ús te helpen dit te begripen.
- Konsistinsje: Dit spesifisearret dat gegevens konsekwint bliuwe moatte as in databanktransaksje foltôge is. Bygelyks, alle fragen moatte itselde antwurd weromjaan nei in databaseupdate.
- Beskikberens: De databases moatte altyd beskikber en responsyf wêze.
- Partition Tolerance: Sels as kommunikaasje problematysk wurdt, moat it databanksysteem trochgean te wurkjen.
4. Wat ferstean jo ûnder load balancing?
Loadbalansearring is it proses fan it effisjint fersprieden fan ynkommende ferkear ûnder in set fan backend-tsjinners. Dizze wurde oantsjutten as serverpools. Moderne websiden binne boud om miljoenen fragen fan klanten te behanneljen en fluch en betrouber op har te reagearjen. Mear servers sille nedich wêze om dizze easken te behanneljen.
Yn dit gefal is it kritysk om fersykferkear effisjint te ferdielen ûnder elke server om te foarkommen dat se oerbelêste wurde. De load balancer fungearret as in ferkearsman, ûnderskept oanfragen en rout se tusken beskikbere servers sadat gjinien tsjinner oerbelêste wurdt, wat de prestaasjes fan applikaasjes mooglik ferneatiget.
5. Wat is it ferskil tusken asynchrone programmearring en parallel programmearring?
As jo wat asynchronysk útfiere, betsjuttet it dat jo net hoege te wachtsjen oant it is foltôge foardat jo kinne trochgean nei wat oars. Parallelisme ferwiist nei de simultane útfiering fan in protte taken.
As jo banen kinne brekke yn ferskate stikken arbeid, wurket parallelisme effektyf. Async en Callbacks binne in middel (ark as meganisme) om concurrency te fertsjintwurdigjen, ie in groep entiteiten dy't boarnen kinne kommunisearje en diele.
6. Wat is it ferskil tusken horizontale en fertikale skaalfergrutting?
De tafoeging fan nije kompjûterapparatuer oan in netwurk dat de ferwurkings- en ûnthâldfraach ferspriedt oer in ferspraat netwurk fan apparaten wurdt oantsjut as horizontale skaalfergrutting. Gewoan sein, nije servereksimplaren wurde tafoege oan it hjoeddeistige swimbad, en de ferkearslading wurdt effisjint ferspraat tusken dizze apparaten.
Fertikale skaalfergrutting ferwiist nei it idee fan it útwreidzjen fan de boarnekapasiteit fan in inkele kompjûter troch it tafoegjen fan RAM, effisjinte CPU's, of migrearje nei in nije masine mei hegere kapasiteit. De funksjonaliteit fan 'e tsjinner kin wurde ferhege sûnder programmearringswizigingen nedich.
7. Wat bedoele jo krekt mei latency, trochstreaming en systeembeskikberens?
Prestaasje is in essinsjeel aspekt fan systeemûntwerp, om't it bydraacht oan de snelheid en betrouberens fan ús tsjinsten. De trije wichtichste prestaasjesmaatregels binne as folget:
- De tiid dy't it nimt om in inkeld berjocht yn millisekonden te leverjen wurdt latency neamd.
- De hoemannichte gegevens mei súkses oerdroegen troch in systeem yn in bepaalde perioade wurdt oantsjutten as trochfier. Bits per sekonde wurde brûkt om it te mjitten.
- De hoemannichte tiid dat in systeem beskikber is om te reagearjen op fragen wurdt bepaald troch de beskikberens. Systeem Uptime / (Systeem Uptime + Downtime) is de formule foar it berekkenjen fan it.
8. Wat binne ACID eigenskippen?
- Atomiteit: It soarget derfoar dat databankferoarings alles of gjin binne.
- Konsistinsje: Gegevenswearden yn 'e databank binne konsekwint.
- Isolaasje: It ferwiist nei de skieding fan twa transaksjes.
- Duorsumens: Gegevens wurde bewarre sels as de tsjinner mislearret.
9. Wat is krekt sharding?
Sharding is de technyk fan it dielen fan in enoarme logyske dataset yn in protte databases. It ferwiist ek nei horizontale gegevenssplitsing, om't de gegevens op ferskate kompjûters wurde opslein. As resultaat kin in dielde databank mear queries behannelje as in inkele enoarme kompjûter.
10. Wat is CDN?
In netwurk foar levering fan ynhâld is in wrâldwide netwurk fan kompjûters dy't gearwurkje om rap ynternetynformaasje te leverjen. It makket de snelle levering mooglik fan eleminten lykas HTML-siden, JavaScript-bestannen, stylblêden, ôfbyldings en fideo's dy't nedich binne om ynternetynhâld te laden.
11. Wêrom brûke CDN?
- Yn betinken nommen dat statyske boarnen sawat 80% fan in webside útmeitsje, ferminderet it oannimmen fan in CDN de spanning op 'e oarsprongserver signifikant.
- Om't d'r minder ôfstân is om te reizgjen, sil ynformaasje rapper wurde levere oan webside-eigners dy't besikers hawwe út in protte geografyske gebieten.
- Brûkers fan CDN's profitearje ek fan 'e kapasiteit om fluch op en del te skaaljen yn reaksje op ferkearsfluch.
12. Wat is it ferskil tusken sharding en partitioning?
Database Sharding - Database Sharding is in metoade foar it partitionearjen fan in inkele dataset yn ferskate databases, sadat it kin wurde opslein op ferskate wurkstasjons. Gruttere datasets kinne wurde ferdield yn lytsere brokken en opslein yn ferskate gegevensknooppunten, wêrtroch de totale opslachkapasiteit fan it systeem ferheget.
Troch de gegevens oer in protte masines te fersprieden, kin in dielde databank mear queries behannelje as in inkeld systeem.
Database Partitioning is it proses fan it dielen fan bewarre databankobjekten (tabellen, yndeksen en werjeften) yn aparte stikken. Om kontrolearberens, prestaasjes en beskikberens te fergrutsjen, wurde grutte databankobjekten ferdield.
Yn guon gefallen kin partitioning de snelheid ferbetterje by tagong ta partitioneare gegevens. Partitioning kin ferminderjen yndeks grutte en fergrutsjen de kâns fan in lokalisearjen fan de meast nedige yndeksen yn it ûnthâld troch te fungearjen as in liedende kolom yn yndeksen.
13. Wat is krekt caching?
Caching is de technyk fan it bewarjen fan triemkopyen yn in tydlik opslachgebiet bekend as in cache, wat gegevenstagong fersnelt en side-latinsje ferminderet. Allinich in bepaalde hoemannichte gegevens kin wurde opslein yn 'e cache.
As resultaat is it bepalen fan cache-fernijingstechniken dy't it meast geskikt binne foar de bedriuwsdoelen kritysk.
14. Wat binne CDN edge-tsjinners?
De CDN-tsjinners dy't materiaal yn cache hawwe krigen fan jo oarspronklike tsjinner of opslachkluster binne bekend as edge-servers. Point of presence is in term dy't faak brûkt wurdt om edge-servers (POP) te beskriuwen.
De râne-tsjinners binne fysyk pleatst by in POP. Op dat POP kin ynformaasje wurde bewarre troch in protte edge-tsjinners.
De mooglikheid om seksjes fan in webside fan ferskate plakken te leverjen ferminderet de ôfstân tusken de besiker en de webserver, wat resulteart yn in legere latency. CDN-rântsjinners berikke dit krekte doel.
15. Wat binne de ferskillende Consistency patroanen foar systeem design?
Elk lêsfersyk moat de meast resint skreaune gegevens ophelje, neffens it CAP-teorema. As in protte gegevenskopyen tagonklik binne, wurdt it syngronisearjen fan har sadat klanten kontinu farske gegevens krije in muoite. De folgjende binne de mooglike konsistinsjepatroanen:
- Swakke konsistinsje: Nei in gegevensskriuwen kin it lêsfersyk de bywurke gegevens wol of net krije. Dit nivo fan stabiliteit is ideaal foar real-time applikaasjes lykas VoIP, fideochat, en multiplayer-gaming.
- Eventuele konsistinsje: Lêzen sille úteinlik de meast resinte gegevens besjen binnen millisekonden nei't de gegevens skreaun binne. De gegevens wurde yn dit gefal asynchronysk duplikearre. DNS- en e-postsystemen binne hjir foarbylden fan. Dit wurket effektyf yn systemen mei hege beskikberens.
- Sterke konsistinsje: Nei in gegevensskriuwen sille takomstige lêzers de meast resinte gegevens besjen. De gegevens wurde yn dit gefal synchroon kopiearre. Dit kin wurde waarnommen yn RDBMS en bestânsystemen, dy't passend binne foar gegevensferfier.
16. Wat bedoele jo mei optimistysk slot?
Optimistysk beskoatteljen is in meganisme wêryn jo in record lêze, in ferzjenûmer notearje (alternatyf manieren omfetsje datums, tiidstempels, of kontrôlesummen/hashes), en dan dûbel kontrolearje dat de ferzje net feroare is foardat jo it weromskriuwe.
As jo it rekord weromskriuwe, brûke jo de ferzje om de fernijing te filterjen om te soargjen dat it atoom is. (dat is, is net feroare tusken wannear't jo de ferzje kontrolearje en as jo it rekord op 'e skiif skriuwe) en fernije it allegear tagelyk.
17. Wat bedoele jo krekt mei "liedersferkiezing"?
Yn in ferspraat systeem mei in protte servers dy't bydrage oan de beskikberens fan 'e applikaasje, kinne d'r tiden wêze dat mar ien server ferantwurdlik is foar it bywurkjen fan API's fan tredden, om't meardere servers problemen kinne feroarsaakje by it brûken fan de API's.
Dizze tsjinner stiet bekend as de primêre tsjinner, en de proseduere foar it selektearjen is bekend as liederferkiezing. As de liedertsjinner mislearret yn in ferspraat systeem, moatte de tsjinners de mislearring opmerke en in nije lieder kieze. Mei help fan in konsensustechnyk is dizze oanpak it bêste geskikt foar applikaasjes mei hege beskikberens en sterke konsistinsje.
18. Wat is jo oanpak foar it ûntwerpen fan in TinyURL-like URL-ferkoartingstsjinst?
TinyURL transformearret in lange URL yn ien, unike koarte URL. Dizze technologyen kinne ek in koarte URL akseptearje en de folsleine URL weromjaan.
Wat binne guon fan 'e krúsjale kwaliteiten?
- Meitsje in URL dy't koarter is as it orizjineel.
- Hâld de langere URL en ferfange it troch de koartere.
- Tastean omlieding yn koarte URL's.
- Koarte URL's mei oanpaste nammen wurde stipe.
- Behannelje ferskate fragen tagelyk.
Wat binne de meast foarkommende problemen?
- Hoe hâlde jo databankopslach by?
- Wat bart der as de brûkerslading de ferwachtings oertreft?
- Wat as twa persoanen deselde oanpaste URL brûke?
Tink oan de folgjende suggestjes:
- Hashing is in begryp dat kin wurde brûkt om âlde en nije URL's te ferbinen.
- REST API kin brûkt wurde om front-end kommunikaasje te behanneljen en de swiere lading te balansearjen.
- Multithreading is in begryp wêrmei jo ferskate oanfragen tagelyk kinne behannelje.
- Orizjinele URL's wurde opslein yn NoSQL-databases.
19. Wat is dyn oanpak foar it ûntwerpen fan twitter?
Oantsjutte easken:
- Tweets ferstjoere
- Folgje oare brûkers
- Tweet feed / nijsfeed
- Systeem is skalberber
- Laadt fluch
- Systeem is betrouber
Jo kinne begjinne te tinken oer jo Twitter API-ûntwerp as jo de kritearia hawwe fêststeld. Dit is hoe't it soe ferskine:
Om te begjinnen, sille wy de wichtichste einpunten fan 'e API sketse. Hjir binne in pear foarbylden:
- stjoerTweet (berjocht)
- followUser (brûkers-ID)
- unfollowUser (brûkers-ID)
- getFeed (side)
De arsjitektuer dy't dizze skaaimerken mooglik meitsje sil, kin dan sketst wurde. Wy kinne begjinne mei de brûker dy't in tsjinner fersyk yntsjinnet. Wy kinne ekstra API-tsjinners ynstalleare efter in loadbalancer om te helpen by de rûte fan gruttere ferkearsnivo's om te foldwaan oan de skalberensbehoefte. Wy moatte no in database tafoegje om ús tweets op te slaan.
It is wichtich om te ûnthâlden dat de API dy't wy leverje, skalberber wêze moat. Om dizze tsjinst skalberber te meitsjen, kinne wy ien fan ús API-tsjinners lêze út in aparte cache foar ús nijsfeed. Wylst wy dat dogge, moatte wy ek in feedprovider brûke om ús feedcache bywurke te hâlden.
20. Meitsje it nijsfeedsysteem foar Facebook
De nijsfeed op Facebook lit brûkers sjen wat der bart yn 'e sirkels fan har freonen, favorite siden en organisaasjes dy't se hawwe folge.
Wat binne guon fan 'e essensjele skaaimerken?
- Meitsje in nijsoanfier basearre op berjochten fan oare systeementiteiten dy't de brûker folget.
- Tekst, ôfbyldings, audio en fideo kinne allegear brûkt wurde yn Newsfeed-postings.
- Foegje yn realtime nije ynhâld ta oan de nijsfeed fan de brûker.
Wat binne guon fan 'e meast foarkommende problemen?
- Wat as de nije post in lange tiid duorret om yn 'e nijsfeed te ferskinen?
- Kin it algoritme in pyk yn brûkersaktiviteit beheare?
- Hokker berjochten moatte earst werjûn wurde yn 'e nijsfeed?
Tink oan de folgjende suggestjes:
- Undersykje it fanoutmeganisme foar it fersprieden fan berjochten oan folgers.
- Undersykje hoe't sharding kin wurde brûkt om effisjint omgean mei hege brûkerslasten.
- De feedgegevens fan in brûker moatte net duplisearre wurde oer ferskate servers. Sharding kin ynstee dien wurde basearre op brûkers-ID's.
21. Wat is in systeem syn BASE eigendom?
De BASE-funksjes binne ubiquitêr yn NoSQL-databases dy't koartlyn opkommen binne. In BASE-systeem leveret gjin konsistinsje, neffens de CAP-stelling. Dit is in opmakke akronym dat oerienkomt mei de folgjende eigenskip fan in systeem fan 'e CAP-stelling:
- De term "yn prinsipe beskikber" betsjut dat it systeem sil wêze beskikber op alle tiden.
- In sêfte steat betsjut dat it systeem syn steat kin fariearje oer de tiid, sels as gjin ynfier wurdt levere. Dit is meast te tankjen oan de úteinlike konsistinsje fan it model.
- Sjoen dat it systeem yn dy perioade gjin ynput krijt, betsjut úteinlike konsistinsje dat it systeem oer de tiid konsekwint wurdt.
22. Wat is load balancing mei IP-adres Affinity Technique?
In oare promininte metoade fan load balancing is IP-adres affiniteit. It IP-adres fan de client is ferbûn mei in tsjinnerknooppunt yn dizze metoade. Ien tsjinnerknooppunt behannelet alle oanfragen fan in kliïnt IP-adres.
Dizze metoade is ienfâldich te ymplementearjen, om't it IP-adres altyd tagonklik is yn 'e HTTP-fersykkop en gjin fierdere ynstellingen binne nedich. As jo kliïnten wierskynlik cookies hawwe deaktivearre, kin dizze foarm fan load balancing foardielich wêze.
23. Wat binne krekt Cache Replacement (of Eviction Policy) algoritmen?
Cache-algoritmen (ek bekend as cache-ferfangingsalgoritmen, cache-ferfangingsbelied, of cache-eviction-belied) binne optimalisaasje-ynstruksjes, of algoritmen, dy't in kompjûterprogramma of in hardware-ûnderhâlden struktuer brûke kin om in cache fan gegevens op 'e kompjûter te behearjen.
Caching fergruttet de snelheid troch resint brûkte of faak tagonklike gegevens op te slaan yn ûnthâldregio's dy't rapper of minder djoer binne om tagong te krijen as tradisjonele ûnthâldopslach. As de cache fol is, moat it algoritme beslute hokker items te ferwiderjen om in plak te meitsjen foar nije.
24. Wat krekt bedoele jo mei ferdield transaksje?
In ferdielde transaksje is elke omstannichheid wêryn in inkeld barren de feroaring feroarsaket fan twa of mear ûnderskate boarnen fan gegevens dy't net atomysk kinne wurde begien.
It wurdt folle komplisearre yn 'e wrâld fan mikrotsjinsten, om't elke tsjinst in ienheid fan wurk is, en meastentiids moatte in protte tsjinsten gearwurkje om in bedriuw suksesfol te meitsjen.
25. Wat is krekt honger?
As in tried net by steat is om reguliere tagong te krijen ta dielde boarnen, wurdt sein dat it úthongere. Dit bart as "gierige" diskusjes of diskusjes mei hegere "prioriteit" dielde boarnen foar lange perioaden ûnberikber meitsje.
Beskôgje in objekt dat in syngronisearre metoade leveret dy't faaks let weromkomt. As ien thread dizze metoade hieltyd wer ropt, wurde oare diskusjes dy't faak syngronisearre tagong ta itselde objekt nedich binne faak blokkearre.
Konklúzje
In brainstorming sesje is alles dat it ynterview mei systeemûntwerp meibringt. Wy hawwe de meast foarkommende fraachpetearen foar systeemûntwerp yn dizze post behannele.
In wiidweidich begryp fan 'e metoade dy't jo nimme by it meitsjen fan in spesifyk systeem is kritysk foar it trochjaan fan in ynterview mei systeemûntwerp.
Leave a Reply