Ați folosit modelele Inbox și Outbox?
Golang
Sarcină: «Ping-pong cu timeout» Scrieți o funcție pingPong care: - Inițiază două goroutine: una generează mesaje "ping", cealaltă — "pong". - Goroutine-urile trebuie să schimbe mesaje printr-un canal comun strict pe rând. - Schimbul continuă timp de 3 secunde, apoi programul trebuie să se încheie (shutdown elegant). - Folosiți un context pentru anulare cu timeout. - Afișați fiecare mesaj pe ecran împreună cu timpul (în milisecunde de la start). Exemplu de ieșire așteptată: 0ms: ping
Sarcină simplă de live coding (concurență de bază) Condiție: Scrieți o funcție fetchAll(urls []string) map[string]string, care pentru fiecare URL efectuează o cerere HTTP GET în mod concurent și returnează o hartă în care cheia este URL-ul, iar valoarea este corpul răspunsului (șir). Dacă cererea eșuează (eroare, nu 200), valoarea va fi un șir gol. Restricții: - Nu se pot folosi biblioteci externe (doar cele standard). - Nu se poate modifica semnătura. - Programul nu trebuie să cadă în cazul unui panic în http.Get. Exemplu de intrare: ["[link]" "[link]" "[link]"]
package main import ( "fmt" ) func a(p *string) { s2 := "string2" *p = s2 } func main() { str1 := "string1" p := &str1 fmt.Println(*p) a(&p) fmt.Println(*p) }
Unde au fost stocate jurnalele?
Cum au asigurat idempotenta?
Ce să spui intervievatorului (dacă te întreabă) "Aș folosi un pool de workeri cu un număr fix de workeri, un canal pentru sarcini și sync.WaitGroup. Workeri vor executa cererile, iar timeout-ul și anularea vor fi controlate prin context. Voi aduna rezultatele într-un buffer, protejat de un mutex (sau printr-un canal separat)." Acum e rândul tău Scrie codul în acest chat. Îl voi verifica și îți voi oferi feedback. Dacă nu știi de unde să începi, cere o sugestie. Mult noroc!
Completează elementele cu slice fără mutex pentru a avea toate cele 1000 de elemente.
Ce este un pointer și ce se întâmplă dacă argumentul unei funcții este un pointer?
// toate elementele slice-ului trebuie să fie unice + să conțină în total 1000 de elemente // programul nu trebuie să se blocheze inutil din cauza time.sleep func main() { checkIncrement := map[int]int32{} var data []int for i := 0; i < 1000; i++ { go func() { data = append(data, i) if _, found := checkIncrement[i]; found { fmt.Println(i) panic("increment duplicat") } checkIncrement[i] = 1 }() } time.Sleep(2 * time.Second) fmt.Println(len(data)) }
Care este diferența dintre DELETE și TRUNCATE?
Vorbește despre blocajele în Postgres.
Ai auzit despre tracing distribuit?
Cum ați folosit Redis?
Spune-mi despre ultimul tău proiect.