Cuprins[Ascunde][Spectacol]
- 1. Ce înțelegeți prin proiectarea sistemului?
- 2. Care sunt cele mai importante caracteristici ale unui proiectant de sistem?
- 3. Ce este mai exact teorema CAP?
- 4. Ce înțelegeți prin echilibrarea încărcăturii?
- 5. Care este diferența dintre programarea asincronă și programarea paralelă?
- 6. Care este diferența dintre scalarea orizontală și verticală?
- 7. Ce anume înțelegeți prin latență, debit și disponibilitatea sistemului?
- 8. Care sunt proprietățile ACIDE?
- 9. Ce este mai exact sharding-ul?
- 10. Ce este CDN?
- 11. De ce să folosiți CDN?
- 12. Care este diferența dintre sharding și partitioning?
- 13. Ce este mai exact memoria cache?
- 14. Ce sunt serverele CDN edge?
- 15. Care sunt diferitele modele de consistență pentru proiectarea sistemului?
- 16. Ce înțelegi prin blocare optimistă?
- 17. Ce anume înțelegeți prin „alegerea liderului”?
- 18. Care este abordarea dumneavoastră pentru proiectarea unui serviciu de scurtare URL asemănător TinyURL?
- 19. Care este abordarea ta în ceea ce privește proiectarea twitter?
- 20. Creați sistemul de flux de știri pentru Facebook
- 21. Care este proprietatea BASE a unui sistem?
- 22. Ce este echilibrarea sarcinii cu tehnica de afinitate a adresei IP?
- 23. Ce sunt mai exact algoritmii de înlocuire a memoriei cache (sau politica de evacuare)?
- 24. Ce anume înțelegeți prin tranzacție distribuită?
- 25. Ce este mai exact foametea?
- Concluzie
Înainte de a începe, vă recomandăm să citiți ghid introductiv pentru proiectarea sistemului pentru a vă reîmprospăta cunoștințele fundamentale.
Când intervievați pentru o poziție care necesită cunoștințe de proiectare a sistemelor, aveți șansa de a vorbi despre trecutul dvs. și de a vă demonstra capacitatea de a dezvolta sisteme complicate.
Când vorbiți cu un potențial angajator, modul în care vă exprimați expertiza vă poate ajuta să demonstrați că sunteți un candidat competent pentru postul.
Vă puteți pregăti pentru interviul de angajare învățând concepte de design de bază și gândindu-vă la modul în care veți răspunde la întrebările despre acestea. Vom trece peste câteva întrebări și răspunsuri tipice pentru interviul de proiectare a sistemului în această postare pentru a vă ajuta să vă pregătiți pentru următorul interviu.
1. Ce înțelegeți prin proiectarea sistemului?
Procesul de stabilire a caracteristicilor sistemului, inclusiv modulele, arhitectura, componentele și interfețele acestora și datele bazate pe criterii predeterminate este cunoscut sub numele de proiectare a sistemului.
Este procesul de definire, creare și proiectare a sistemelor pentru a îndeplini scopurile și obiectivele specifice ale unei companii sau organizații. Proiectarea sistemului este mai mult despre analiza sistemului, modele arhitecturale, API-uri, modele de proiectare și lipirea totul împreună decât despre codificare.
2. Care sunt cele mai importante caracteristici ale unui proiectant de sistem?
- Interacțiunea cu utilizatorul
- Apel API extern
- Procese offline
3. Ce este mai exact teorema CAP?
Conform teoremei CAP (Consistency-Availability-Partition Tolerance), un sistem distribuit nu poate asigura C, A și P toate în același timp. Poate oferi cel mult două dintre cele trei asigurări. Să folosim un sistem de baze de date distribuite pentru a ne ajuta să înțelegem acest lucru.
- Consecvență: Aceasta specifică faptul că datele trebuie să rămână consecvente odată ce o tranzacție în baza de date este finalizată. De exemplu, toate interogările ar trebui să returneze același răspuns după o actualizare a bazei de date.
- Disponibilitate: bazele de date trebuie să fie disponibile și receptive în orice moment.
- Toleranța la partiții: chiar dacă comunicarea devine problematică, sistemul de baze de date ar trebui să continue să funcționeze.
4. Ce înțelegeți prin echilibrarea încărcăturii?
Echilibrarea sarcinii este procesul de dispersare eficientă a traficului de intrare între un set de servere backend. Acestea sunt denumite pool-uri de servere. Site-urile web moderne sunt create pentru a gestiona milioane de interogări din partea clienților și pentru a le răspunde rapid și fiabil. Vor fi necesare mai multe servere pentru a face față acestor solicitări.
În acest caz, este esențial să împărțiți eficient traficul de cereri între fiecare server pentru a evita supraîncărcarea acestora. Echilibratorul de încărcare funcționează ca un polițist de trafic, interceptând cererile și direcționându-le între serverele disponibile, astfel încât niciun server să nu fie supraîncărcat, putând degrada performanța aplicației.
5. Care este diferența dintre programarea asincronă și programarea paralelă?
Când rulați ceva asincron, înseamnă că nu trebuie să așteptați ca acesta să se termine înainte de a putea trece la altceva. Paralelismul se referă la executarea simultană a mai multor sarcini.
Când puteți împărți locurile de muncă în diferite bucăți de muncă, paralelismul funcționează eficient. Async și Callback-urile sunt un mijloc (instrument sau mecanism) de a reprezenta concurența, adică un grup de entități care ar putea comunica și partaja resurse.
6. Care este diferența dintre scalarea orizontală și verticală?
Adăugarea de noi echipamente de calcul la o rețea care răspândește cererea de procesare și memorie într-o rețea dispersă de dispozitive este denumită scalare orizontală. Pur și simplu spus, noi instanțe de server sunt adăugate la pool-ul actual, iar încărcarea de trafic este răspândită eficient între aceste dispozitive.
Scalare verticală se referă la noțiunea de extindere a capacității de resurse a unui singur computer prin adăugarea de memorie RAM, procesoare eficiente sau migrarea către o nouă mașină cu capacitate mai mare. Funcționalitatea serverului poate fi mărită fără a necesita modificări de programare.
7. Ce anume înțelegeți prin latență, debit și disponibilitatea sistemului?
Performanța este un aspect esențial al proiectării sistemului, deoarece contribuie la viteza și fiabilitatea serviciilor noastre. Cele mai importante trei măsuri de performanță sunt următoarele:
- Timpul necesar pentru livrarea unui singur mesaj în milisecunde se numește latență.
- Cantitatea de date transferată cu succes printr-un sistem într-o anumită perioadă de timp este denumită debit. Biți pe secundă sunt folosiți pentru a o măsura.
- Timpul în care un sistem este disponibil pentru a reacționa la interogări este definit de disponibilitatea acestuia. System Uptime / (System Uptime+Downtime) este formula de calcul.
8. Care sunt proprietățile ACIDE?
- Atomicitate: asigură că modificările bazei de date sunt fie toate, fie deloc.
- Consecvență: Valorile datelor din baza de date sunt consecvente.
- Izolare: se referă la separarea a două tranzacții.
- Durabilitate: Datele sunt păstrate chiar dacă serverul eșuează.
9. Ce este mai exact sharding-ul?
Sharding este tehnica de împărțire a unui set de date logic uriaș în mai multe baze de date. De asemenea, se referă la împărțirea orizontală a datelor deoarece datele vor fi stocate pe mai multe computere. Ca rezultat, o bază de date partajată poate gestiona mai multe interogări decât un singur computer imens.
10. Ce este CDN?
O rețea de livrare de conținut este o rețea mondială de computere care colaborează pentru a furniza rapid informații pe Internet. Permite livrarea rapidă a elementelor precum pagini HTML, fișiere JavaScript, foi de stil, imagini și videoclipuri care sunt necesare pentru încărcarea conținutului de pe Internet.
11. De ce să folosiți CDN?
- Având în vedere că resursele statice reprezintă aproximativ 80% dintr-un site web, adoptarea unui CDN reduce în mod semnificativ presiunea pe serverul de origine.
- Întrucât distanța de călătorie este mai mică, informațiile vor fi furnizate mai rapid proprietarilor de site-uri web care au vizitatori din multe zone geografice.
- Utilizatorii CDN-urilor beneficiază, de asemenea, de capacitatea de a crește și scădea rapid ca răspuns la creșterea traficului.
12. Care este diferența dintre sharding și partitioning?
Partajarea bazei de date – Partajarea bazei de date este o metodă de partiționare a unui singur set de date în numeroase baze de date, astfel încât să poată fi stocat pe diferite stații de lucru. Seturile de date mai mari pot fi împărțite în bucăți mai mici și stocate în mai multe noduri de date, crescând capacitatea totală de stocare a sistemului.
Prin răspândirea datelor pe mai multe mașini, o bază de date partajată poate gestiona mai multe interogări decât un singur sistem.
Partiționarea bazei de date este procesul de împărțire a obiectelor bazei de date stocate (tabele, indecși și vederi) în bucăți separate. Pentru a crește controlabilitatea, performanța și disponibilitatea, obiectele mari de baze de date sunt partiționate.
În unele cazuri, partiționarea poate îmbunătăți viteza la accesarea datelor partiționate. Partiționarea poate reduce dimensiunea indexului și crește șansa de a localiza cei mai necesari indecși în memorie, acționând ca o coloană principală în indecși.
13. Ce este mai exact memoria cache?
Memorarea în cache este tehnica de păstrare a copiilor fișierelor într-o zonă de stocare temporară cunoscută sub numele de cache, care accelerează accesul la date și reduce latența site-ului. Doar o anumită cantitate de date poate fi stocată în cache.
Ca rezultat, determinarea tehnicilor de actualizare a memoriei cache care sunt cele mai potrivite pentru obiectivele de afaceri este critică.
14. Ce sunt serverele CDN edge?
Serverele CDN care memorează în cache materialul achiziționat de la serverul de origine sau de la clusterul de stocare sunt cunoscute ca servere edge. Punctul de prezență este un termen care este folosit frecvent pentru a descrie serverele edge (POP).
Serverele edge sunt poziționate fizic la un POP. La acel POP, informațiile ar putea fi stocate în cache de multe servere edge.
Capacitatea de a furniza secțiuni ale unui site web din mai multe locuri reduce distanța dintre vizitator și serverul web, rezultând o latență mai mică. Serverele CDN edge realizează acest obiectiv precis.
15. Care sunt diferitele modele de consistență pentru proiectarea sistemului?
Fiecare cerere de citire ar trebui să recupereze cele mai recente date scrise, conform teoremei CAP. Atunci când multe copii de date sunt accesibile, sincronizarea acestora astfel încât clienții să primească date noi în mod continuu devine o dificultate. Următoarele sunt modelele posibile de consistență:
- Consecvență slabă: în urma unei scrieri de date, cererea de citire poate sau nu să poată obține datele actualizate. Acest nivel de stabilitate este ideal pentru aplicații în timp real, cum ar fi VoIP, chat video și jocuri multiplayer.
- Consecvență eventuală: Citirile vor vedea în cele din urmă cele mai recente date în câteva milisecunde după ce datele sunt scrise. În acest caz, datele sunt duplicate asincron. DNS și sistemele de e-mail sunt exemple în acest sens. Acest lucru funcționează eficient în sistemele cu disponibilitate ridicată.
- Consecvență puternică: în urma unei scrieri de date, viitorii cititori vor vedea cele mai recente date. Datele sunt copiate sincron în acest caz. Acest lucru poate fi observat în RDBMS și sistemele de fișiere, care sunt adecvate pentru transferurile de date.
16. Ce înțelegi prin blocare optimistă?
Blocarea optimistă este un mecanism prin care citiți o înregistrare, notați un număr de versiune (modalitățile alternative includ date, marcaje temporale sau sume de control/hash-uri) și apoi verificați din nou dacă versiunea nu s-a schimbat înainte de a o scrie înapoi.
Când scrieți înapoi înregistrarea, utilizați versiunea pentru a filtra actualizarea pentru a vă asigura că este atomică. (adică, nu a fost schimbat între momentul în care verificați versiunea și când scrieți înregistrarea pe disc) și actualizați totul dintr-o dată.
17. Ce anume înțelegeți prin „alegerea liderului”?
Într-un sistem distribuit cu numeroase servere care contribuie la disponibilitatea aplicației, pot exista momente când un singur server este responsabil pentru actualizarea API-urilor terțe, deoarece mai multe servere pot cauza probleme la utilizarea API-urilor.
Acest server este cunoscut drept serverul principal, iar procedura de selectare este cunoscută sub denumirea de alegere a liderului. Când serverul lider eșuează într-un sistem distribuit, serverele trebuie să observe eșecul și să aleagă un nou lider. Folosind o tehnică de consens, această abordare este cea mai potrivită pentru aplicații de înaltă disponibilitate și consecvență puternică.
18. Care este abordarea dumneavoastră pentru proiectarea unui serviciu de scurtare URL asemănător TinyURL?
TinyURL transformă o adresă URL lungă într-o adresă URL scurtă unică. Aceste tehnologii pot accepta, de asemenea, o adresă URL scurtă și pot returna adresa URL completă.
Care sunt unele dintre calitățile esențiale?
- Creați o adresă URL mai scurtă decât originalul.
- Păstrați adresa URL mai lungă și înlocuiți-o cu una mai scurtă.
- Permite redirecționarea în adrese URL scurte.
- Sunt acceptate adrese URL scurte cu nume personalizate.
- Gestionați mai multe întrebări deodată.
Care sunt cele mai răspândite probleme?
- Cum țineți evidența stocării bazei de date?
- Ce se întâmplă dacă încărcarea utilizatorului depășește așteptările?
- Ce se întâmplă dacă două persoane folosesc aceeași adresă URL personalizată?
Luați în considerare următoarele sugestii:
- Hashing este o noțiune care poate fi folosită pentru a conecta adrese URL vechi și noi.
- API-ul REST poate fi folosit pentru a gestiona comunicarea frontală și pentru a echilibra sarcina grea.
- Multithreading-ul este o noțiune care vă permite să gestionați mai multe solicitări simultan.
- URL-urile originale sunt stocate în baze de date NoSQL.
19. Care este abordarea ta în ceea ce privește proiectarea twitter?
Cerințe date:
- Trimiterea de tweet-uri
- Urmărirea altor utilizatori
- Tweet feed/newsfeed
- Sistemul este scalabil
- Se încarcă rapid
- Sistemul este fiabil
Puteți începe să vă gândiți designul API-ului Twitter când ați stabilit criteriile. Cam asa ar arata:
Pentru început, vom schița punctele finale cheie ale API. Iată câteva exemple:
- trimiteTweet(mesaj)
- followUser(ID utilizator)
- unfollowUser(ID utilizator)
- getFeed(pagina)
Arhitectura care va permite aceste caracteristici poate fi apoi schițată. Putem începe cu utilizatorul care trimite o cerere de server. Putem instala servere API suplimentare în spatele unui echilibrator de încărcare pentru a ajuta la niveluri mai mari de trafic pentru a îndeplini nevoia de scalabilitate. Va trebui să adăugăm o bază de date pentru a stoca tweet-urile noastre acum.
Este important să rețineți că API-ul pe care îl oferim ar trebui să fie scalabil. Pentru a face acest serviciu scalabil, putem avea unul dintre serverele noastre API să fie citit dintr-un cache separat pentru fluxul nostru de știri. În timp ce facem acest lucru, ar trebui să folosim și un furnizor de feed pentru a menține cache-ul de feed actualizat.
20. Creați sistemul de flux de știri pentru Facebook
Fluxul de știri de pe Facebook le permite utilizatorilor să vadă ce se întâmplă în cercurile de prieteni, paginile preferate și organizațiile pe care le-au urmărit.
Care sunt unele dintre caracteristicile esențiale?
- Creați un flux de știri bazat pe postări de la alte entități de sistem pe care utilizatorul le urmărește.
- Textul, imaginile, sunetul și videoclipurile pot fi folosite toate în postările din Newsfeed.
- În timp real, adăugați conținut nou în fluxul de știri al utilizatorului.
Care sunt unele dintre cele mai frecvente probleme?
- Ce se întâmplă dacă noua postare durează mult să apară în fluxul de știri?
- Poate algoritmul să gestioneze o creștere a activității utilizatorilor?
- Ce postări ar trebui să fie afișate mai întâi în fluxul de știri?
Luați în considerare următoarele sugestii:
- Examinați mecanismul de distribuire a postărilor către adepți.
- Examinați modul în care sharding-ul poate fi utilizat pentru a gestiona eficient sarcinile mari ale utilizatorilor.
- Datele de feed ale unui utilizator nu ar trebui să fie duplicate pe numeroase servere. În schimb, împărțirea se poate face pe baza ID-urilor de utilizator.
21. Care este proprietatea BASE a unui sistem?
Caracteristicile BASE sunt omniprezente în bazele de date NoSQL care au apărut recent. Un sistem BASE nu oferă consistență, conform teoremei CAP. Acesta este un acronim alcătuit care corespunde următoarei proprietăți a unui sistem a teoremei CAP:
- Termenul „disponibil în principiu” înseamnă că sistemul va fi disponibil în orice moment.
- O stare soft înseamnă că starea sistemului poate varia în timp, chiar dacă nu este furnizată nicio intrare. Acest lucru se datorează în mare parte consistentei eventuale a modelului.
- Având în vedere că sistemul nu primește input în acea perioadă, eventuala consistență înseamnă că sistemul va deveni consistent în timp.
22. Ce este echilibrarea sarcinii cu tehnica de afinitate a adresei IP?
O altă metodă proeminentă de echilibrare a sarcinii este afinitatea adresei IP. Adresa IP a clientului este conectată cu un nod de server în această metodă. Un nod de server se ocupă de toate solicitările de la adresa IP a unui client.
Această metodă este simplu de implementat, deoarece adresa IP este întotdeauna accesibilă în antetul solicitării HTTP și nu sunt necesare alte setări. Dacă clienții dvs. sunt susceptibili să aibă cookie-urile dezactivate, această formă de echilibrare a încărcăturii poate fi avantajoasă.
23. Ce sunt mai exact algoritmii de înlocuire a memoriei cache (sau politica de evacuare)?
Algoritmii de cache (cunoscuți și ca algoritmi de înlocuire a memoriei cache, politici de înlocuire a memoriei cache sau politici de evacuare a memoriei cache) sunt instrucțiuni de optimizare sau algoritmi pe care un program de calculator sau o structură întreținută de hardware îi poate folosi pentru a gestiona un cache de date stocate pe computer.
Memorarea în cache mărește viteza prin stocarea datelor utilizate recent sau accesate des în regiuni de memorie care sunt mai rapid sau mai puțin costisitor de accesat decât stocarea tradițională de memorie. Când memoria cache este plină, algoritmul trebuie să decidă ce elemente să elimine pentru a face loc pentru altele noi.
24. Ce anume înțelegeți prin tranzacție distribuită?
O tranzacție distribuită este orice circumstanță în care un singur eveniment provoacă alterarea a două sau mai multe surse distincte de date care nu pot fi comise atomic.
Devine mult mai complicat în lumea microserviciilor, deoarece fiecare serviciu este o unitate de lucru, iar de cele mai multe ori numeroase servicii trebuie să colaboreze pentru a face o afacere de succes.
25. Ce este mai exact foametea?
Când un fir nu poate obține acces regulat la resursele partajate, se spune că este înfometat. Acest lucru se întâmplă atunci când firele „lacome” sau firele cu „prioritate” mai mare fac resursele partajate inaccesibile pentru perioade lungi de timp.
Luați în considerare un obiect care oferă o metodă sincronizată care revine frecvent cu întârziere. Dacă un fir de execuție apelează în mod repetat această metodă, alte fire care necesită acces frecvent sincronizat la același obiect vor fi adesea blocate.
Concluzie
O sesiune de brainstorming este tot ceea ce presupune interviul de proiectare a sistemului. Am abordat cele mai frecvente întrebări de interviu System Design în această postare.
O înțelegere cuprinzătoare a metodei pe care o utilizați atunci când creați un sistem specific este esențială pentru a promova un interviu de proiectare a sistemului.
Lasă un comentariu