Golang
Hogyan valósulnak meg az adatbázis-kezelő rendszer szintjén a tranzakciók izolációs szintjeinek korlátozására szolgáló mechanizmusok?
Mi lehet negatív, ha egy bájt szakaszt karakterlánccá alakítunk?
Milyen következményekkel jár, ha a csatornán keresztül továbbított adatok olvasatlanul maradnak?
Mi az előnye a goroutine-oknak a szálakhoz képest a hatékonyság és a használat kényelme szempontjából?
Milyen paraméterek állíthatók be a feladatütemező működéséhez?
Milyen módszerekkel lehet biztosítani a Kafka feldolgozását akár 100 ezer üzenet/sec?
Hogyan értékeli a helyzetet, amikor a kódban nem szerepel egyértelműen az interfész használata?
Mesélj a jelenlegi projektről, amin dolgozol vagy amin nemrég dolgoztál
Milyen műveletek léteznek a slice-eken Go-ban?
Hogyan nevezik az elemek egyik Map-ről a másikra történő áthelyezés folyamatát?
/* Adatokat kell átvinni egy forrásból egy fogyasztóhoz. A forrás kis csomagokban (~tíz rekord) adja az adatokat, míg a fogyasztó hatékonyabban működik nagyobb csomagokkal (~ezer rekord). Egy valódi példa a Kafka típusú sorokból származó adatok átadása a Clickhouse adatbázisba. Forrás: - Szinte végtelen. - A forrás soha nem ad vissza több mint MaxItems rekordot egy Next hívásban. - Egy "munkamenet" (egy Pipe függvényhívás) során a forrás minden Next hívásnál új adatokat ad. - Azonban újraindítás után a forrás a korábbi "megerősített" pozícióból kezd, amit a cookie határoz meg. Ezért minden Next által visszaadott cookie érték, miután az adatokat a fogadóba mentettük, a Commit hívással kell megerősíteni, ugyanabban a sorrendben, ahogyan a Next visszaadta. Fogadó: - Nem képes egyszerre több mint MaxItems adatot feldolgozni. Alapszint: Implementálni kell a func Pipe(p Producer, c Consumer) error függvényt, ami adatokat olvas a forrásból, azokat MaxItems-nél nem nagyobb bufferbe gyűjti, és a fogadóba menti, és ezt követően megerősíti a haladást a forrásban. Különlegesség: A Next, Process és Commit metódusok hálózati hívásokhoz kötöttek, és elég hosszú ideig tarthatnak. A folyamat felgyorsítása érdekében párhuzamosítani kell az olvasási, írási és haladási megerősítési folyamatokat. Így, a Process vagy Commit hívás közben, az olvasás a forrásból és az új buffer kialakítása folytatódhat. */ const MaxItems = 9999 type Producer interface { // Next visszaad: // - egy csomag elemet az feldolgozásra // - egy cookie-t, amit a feldolgozás befejezése után kell megerősíteni // - egy hibát Next() (items []any, cookie int, err error) // Commit a feldolgozott adatcsomagot jelöli meg Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
Hogyan valósul meg a select művelet a Go nyelvben, és hogyan működik a csatornákkal?
Lehet-e szüneteltetni egy goroutine végrehajtását úgy, hogy az egy adott rendszer szálon blokkolódjon?
A Go nyelv rendelkezik beépített támogatással tömbökhez?
Melyik absztrakciós mechanizmus van a Go nyelvben a karakterek vagy tokenek ábrázolására?
Mit jelent a null érték egy szelet esetében egy programozási nyelvben?
Hogyan valósul meg a párhuzamos és szekvenciális feladatfeldolgozás a Go nyelvben?
Milyen adattípusok alkalmasak kulcsként a Map adatstruktúrában?
Meg tudná magyarázni a feladatütemező működési mechanizmusát az operációs rendszerben?
Tudná elmagyarázni egy hash-tábla belső szerkezetét és működését?