Golang
Ce consecințe vor exista dacă datele transmise prin canal rămân necitite?
Care este avantajul gorutinelor în comparație cu firele în ceea ce privește eficiența și ușurința în utilizare?
Ce determină aria de acces a unei variabile declarate cu modificatorul privat?
Ce parametri pot fi configurați pentru funcționarea planificatorului de sarcini?
Ce metode pot fi utilizate pentru a asigura procesarea Kafka până la 100 de mii de mesaje pe secundă?
Cum percepiți situația când în cod nu este indicat explicit utilizarea interfeței?
Vorbește-mi despre proiectul actual la care lucrezi sau la care ai lucrat recent
Ce operații există asupra slice-urilor în Go?
Cum se numește procesul de mutare a elementelor dintr-un Map în altul?
/* Trebuie să transferăm date dintr-o sursă către un consumator. Sursa oferă date în loturi mici (~zece înregistrări), în timp ce consumatorul funcționează mai eficient cu loturi mari (~o mie de înregistrări). Un exemplu real este transferul de date din cozi de tip Kafka către o bază de date Clickhouse. Sursa: - Practic nelimitată. - Sursa nu returnează niciodată mai mult de MaxItems înregistrări într-un singur apel Next. - În cadrul unei "sesiuni" (un apel al funcției Pipe), sursa returnează date noi la fiecare apel Next. - Cu toate acestea, după repornire, sursa va începe de la poziția "confirmată" anterioară, indicată de cookie. Prin urmare, *fiecare* valoare de cookie returnată de Next, după salvarea datelor în receptor, trebuie confirmată cu un apel la Commit, în aceeași ordine în care au fost returnate de Next. Receptor: - Nu poate procesa mai mult de MaxItems odată. Nivel de bază: Este necesar să implementați funcția func Pipe(p Producer, c Consumer) error care citește date din sursă, le grupează într-un buffer de dimensiune cel mult MaxItems și le salvează în receptor, după care confirmă progresul în sursă. Dificultate: Metodele Next, Process și Commit sunt legate de apeluri de rețea și pot dura destul de mult. Pentru a accelera procesul, trebuie paralelizate procesele de citire, scriere și confirmare a progresului. Astfel, în timpul procesului Process sau Commit, citirea din sursă și formarea noului buffer continuă. */ const MaxItems = 9999 type Producer interface { // Next returnează: // - un lot de items de procesat // - un cookie pentru confirmare după finalizarea procesării // - o eroare Next() (items []any, cookie int, err error) // Commit este folosit pentru a marca un lot de date ca procesat Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
Cum este implementată operația select în limbajul Go și cum funcționează cu canalele?
Este posibil să întrerupi execuția unei goroutine astfel încât să se blocheze pe un thread sistem specific?
Limbajul Go are suport încorporat pentru array-uri?
Ce mecanism de abstractizare în limbajul Go este destinat să reprezinte caractere sau token-uri?
Ce înseamnă o valoare nulă pentru o secțiune într-un limbaj de programare?
Cum se implementează procesarea paralelă și secvențială a sarcinilor în limbajul Go?
Ce mecanisme și metode sunt utilizate pentru a proteja datele la stabilirea conexiunilor HTTPS?
Ce tipuri de date sunt potrivite pentru utilizarea ca cheie într-o structură de date Map?
Puteți explica mecanismul de funcționare al planificatorului de sarcini în sistemul de operare?
Puteți explica structura internă și funcționarea unui tabel hash?