Sobes.tech

Golang

Šta ste keširali? Neke direktorijume?

Senior
МВидео/эльдорадо
166

/* Потребно је пренети податке из извора одређеном потрошачу. При томе извор испоручује податке у малим пакетићима (~ десетине записа), а потрошач ради ефикасније са већим батчевима. Реалан пример - испорука података из редова типа 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 }

Middle
Яндекс
166

Можете ли да набројите компаније или добављаче са којима сте имали посла?

Junior — Middle
166

Ispričaj o posljednjem radnom mjestu: čime si se bavio, koji si stack koristio, koji su bili teški zadaci?

Middle
OZONOZON
166

Šta je slice u Go?

Middle
Бюро 1440Бюро 1440
166

Можете ли да набројите главне типове позива који се користе у gRPC?

Junior — Middle
СБЕР дейвайсыСБЕР дейвайсы
166

Da li je dozvoljeno dobijanje informacija iz kanala sa postavljenim zatvorenim režimom?

Junior — Middle
ГазпромГазпром
X5 groupX5 group
AvitoAvito
+1
166

Da li je moguće direktno zapisivati podatke u određenu particiju Kafka, zaobilazeći ključ za hashiranje?

Junior — Middle
Самокат Тех
166

Можете ли објаснити механизам додавања елемента на крај структуре података, као што је листа или низ?

Junior — Middle
Lamoda Tech
Startribe
Самокат Тех
+2
166

Koji podaci i na koji način se smeštaju u stek tokom izvršavanja programa?

Junior — Middle
166

Koje metode keširanja preferirate da koristite u svojim projektima i zašto?

Junior — Middle
166

Чиме се материјализовани приказ разликује од обичног приказа?

Middle
RWB
165

Koji sastavni delovi ulaze u strukturu povezane liste?

Junior — Middle
165

Kako se određuje vreme izvršavanja operacije dodavanja elementa po ključeve u strukturu podataka Map?

Junior — Middle
ЯндексЯндекс
165

Zašto je početna veličina steka niti obično postavljena na 2 MB?

Junior — Middle
165

Da li ste ikada koristili strukturu ErrGroup u svojim projektima za upravljanje paralelnih zadataka?

Junior — Middle
165

Koje neobične ili nestandardne pakete ste koristili u svojoj praksi?

Junior — Middle
165

Zašto se usporava rast kriške i zašto je nemoguće stalno udvostručavati?

Middle
RWB
165

Gde se tokom procesa rada GitLab CI/CD izvršavaju komande?

Junior — Middle
165

Koje posledice mogu nastati ako se ne poštuju SOLID principi u projektovanju softvera?

Junior — Middle
Zonatelecom
165
/413