Golang
Šta ste keširali? Neke direktorijume?
/* Потребно је пренети податке из извора одређеном потрошачу. При томе извор испоручује податке у малим пакетићима (~ десетине записа), а потрошач ради ефикасније са већим батчевима. Реалан пример - испорука података из редова типа Kafka у базу података Clickhouse. Извор: - Условно бесконачан. - Извор никада не враћа више од MaxItems записа у једном позиву Next. - У оквиру једне "сесије" (једног позива функције Pipe), извор сваки пут враћа нове податке за сваки позив Next. - Међутим, након поновног покретања, извор почиње од претходне "потврђене" позиције, одређене cookie-јем. Стога, *свака* вредност cookie-а коју је вратио позив Next, након чувања података у примаоцу, мора бити фиксирана позивом Commit, и то строго у истом редоследу у којем су враћени од стране Next. Прималац: - Не може обрадити више од MaxItems у једном кораку. Основни ниво: Потребно је реализовати функцију func Pipe(p Producer, c Consumer) error која чита податке из извора, групише их у буфер величине не већој од MaxItems и чува у примаоца, након чега фиксира напредак у извору. */ const MaxItems = 9999 type Producer interface { // Next враћа: // - пакет ставки за обраду // - cookie за потврду када је обрада завршена // - грешку Next() (items []any, cookie int, err error) // Commit се користи за означавање пакета података као обрађеног Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { var buf []any var cookies []int for { items, cookie, err := p.Next() if err != nil { return err } buf = append(buf, items...) cookies = append(cookies, cookie) if len(buf) >= MaxItems { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } buf = buf[:0] cookies = nil } } if len(buf) > 0 { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } } return nil }
Можете ли да набројите компаније или добављаче са којима сте имали посла?
Ispričaj o posljednjem radnom mjestu: čime si se bavio, koji si stack koristio, koji su bili teški zadaci?
Šta je slice u Go?
Можете ли да набројите главне типове позива који се користе у gRPC?
Da li je dozvoljeno dobijanje informacija iz kanala sa postavljenim zatvorenim režimom?
Da li je moguće direktno zapisivati podatke u određenu particiju Kafka, zaobilazeći ključ za hashiranje?
Можете ли објаснити механизам додавања елемента на крај структуре података, као што је листа или низ?
Koji podaci i na koji način se smeštaju u stek tokom izvršavanja programa?
Koje metode keširanja preferirate da koristite u svojim projektima i zašto?
Чиме се материјализовани приказ разликује од обичног приказа?
Koji sastavni delovi ulaze u strukturu povezane liste?
Kako se određuje vreme izvršavanja operacije dodavanja elementa po ključeve u strukturu podataka Map?
Zašto je početna veličina steka niti obično postavljena na 2 MB?
Da li ste ikada koristili strukturu ErrGroup u svojim projektima za upravljanje paralelnih zadataka?
Koje neobične ili nestandardne pakete ste koristili u svojoj praksi?
Zašto se usporava rast kriške i zašto je nemoguće stalno udvostručavati?
Gde se tokom procesa rada GitLab CI/CD izvršavaju komande?
Koje posledice mogu nastati ako se ne poštuju SOLID principi u projektovanju softvera?