Golang
Care este complexitatea algoritmică medie a citirii dintr-un tabel hash?
Povesti-ne despre compoziția echipei, zonele de responsabilitate ale serviciilor și ciclul de lansare.
Ce metrici de produs colectați?
Spuneți-ne despre componența echipei și procesele de dezvoltare (sprinturi, distribuirea sarcinilor, revizuirea codului).
Cum se poate optimiza căutarea într-o bază de date? Ce sunt indicii și care este complexitatea lor?
Cum funcționează operațiile atomice?
După ce criterii separau grupurile de consumatori?
Ce interfețe ai implementa?
Ai o idee despre diferența dintre flux și proces?
Cum se garantează livrarea evenimentelor într-o rețea instabilă (rețeaua se poate întrerupe, evenimentele nu pot fi pierdute)?
Colectorul de gunoi în Go este blocant sau nu? Este efectul său vizibil în producție?
Care este diferența dintre Kafka și RabbitMQ?
Vorbiți despre locul dvs. de muncă actual și motivele pentru căutarea unei noi poziții
Ce instrumente de vizualizare a schemelor arhitecturale ai folosit și pentru ce cazuri?
Proiectarea unui sistem de mesagerie scalabil care suportă 150 milioane de utilizatori, 75 milioane DAU, 225 milioane MAU, 1,2 milioane QPS de citire / 300k de scriere în vârf, 5 milioane de utilizatori simultani, 60 PB de date noi pe an, creștere de 30% anual, SLA 99,95%, p99 <200 ms pentru citire, <300 ms pentru scriere. CONTEXT Este necesar să proiectăm un sistem de mesagerie distribuit, similar cu WhatsApp, care suportă chat-uri 1:1 și de grup, asigură livrarea mesajelor, afișează statusurile online ale utilizatorilor și permite transferul de fișiere multimedia (poze, videoclipuri, audio). Sistemul trebuie să asigure disponibilitate ridicată și latență scăzută, să suporte un paralelism înalt și să scaleze la nivel global. CERINȚE FUNCȚIONALE - Suport pentru chat-uri personale (1:1) și de grup cu posibilitatea de a adăuga/elimina participanți - Trimiterea și primirea de mesaje text și fișiere multimedia Nu se observă o implementare clară a mecanismului de criptare end-to-end la nivel de servicii sau clienți, în afară de o notă generală. - Lipsește o descriere explicită a sharding-ului și replicării bazelor de date după chat_id sau user_id pentru scalabilitate și toleranță la defecte. - Nu există un component sau mecanism clar pentru gestionarea sincronizării offline a mesajelor și a confirmărilor de livrare. - Nu este clar cum se face echilibrarea încărcăturii între baze de date și servicii, mai ales în perioadele de vârf. **Puncte critice de luat în considerare:**
Ați lucrat cu arhitectura? Povestiți câteva soluții arhitecturale
Care este volumul aproximativ de date în snapshot-uri?
Ai experiență cu CI/CD? Ce ai făcut?
Ce părere ai despre problema cu soluția în memorie? Ce se întâmplă dacă repornești serviciul?
Ai avut Keycloak pentru autorizare sau o soluție proprie?