Sobes.tech

Golang

Čo ste cache-ovali? Nejaké adresáre?

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

/* Potrebujeme preniesť údaje z určitého zdroja na určitého spotrebiteľa. Pri tom zdroj odovzdáva údaje v malých balíčkoch (~ desiatky záznamov), a spotrebiteľ efektívnejšie pracuje s väčšími dávkami. Reálny príklad - dodávka údajov z frontov typu Kafka do databázy Clickhouse. Zdroj: - Podmienečne nekonečný. - Zdroj nikdy nevracia viac ako MaxItems záznamov v jednom volaní Next. - V rámci jednej "relácie" (jedného volania funkcie Pipe) zdroj vždy vráti nové údaje pri každom volaní Next. - Avšak, po reštarte začne zdroj od predchádzajúcej "potvrdenej" pozície, určené cookie. Preto, *každá* hodnota cookie, ktorú vrátil volanie Next, po uložené údajov v prijímači, musí byť fixovaná volaním Commit, a to prísne v rovnakom poradí, v akom ich vrátil Next. Prijímateľ: - Nemôže spracovať viac ako MaxItems naraz. Základná úroveň: Je potrebné implementovať funkciu func Pipe(p Producer, c Consumer) error ktorá číta údaje zo zdroja, skupinu ich do bufferu veľkosti najviac MaxItems a uloží ich do prijímateľa, a následne fixuje pokrok v zdroji. */ const MaxItems = 9999 type Producer interface { // Next vracia: // - dávku položiek na spracovanie // - cookie na potvrdenie po ukončení spracovania // - chybu Next() (items []any, cookie int, err error) // Commit sa používa na označenie dávky údajov ako spracovanej 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

Môžete uviesť spoločnosti alebo dodávateľov, s ktorými ste mali skúsenosti?

Junior — Middle
166

Povedaj mi o poslednom mieste práce: čím si sa zaoberal, aký stack si používal, aké boli ťažké úlohy?

Middle
OZONOZON
166

Čo je to slice v Go?

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

Môžete uviesť hlavné typy volaní používaných v gRPC?

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

Je povolené získavať informácie z kanála s nastaveným uzavretým režimom?

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

Je možné priamo zapisovať údaje do určitej partície Kafka, obchádzajúc kľúč pre hashovanie?

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

Môžete vysvetliť mechanizmus pridania prvku na koniec dátovej štruktúry, napríklad zoznamu alebo poľa?

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

Aké údaje a akým spôsobom sa umiestňujú na zásobník pri spustení programu?

Junior — Middle
166

Aké metódy kešovania preferujete používať vo svojich projektoch a prečo?

Junior — Middle
166

Aký je rozdiel medzi materializovaným pohľadom a bežným pohľadom?

Middle
RWB
165

Aké sú súčasti štruktúry spojeného zoznamu?

Junior — Middle
165

Ako sa určuje čas vykonávania operácie pridania prvku podľa kľúča do dátovej štruktúry Map?

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

Prečo je počiatočná veľkosť zásobníka vlákien zvyčajne nastavená na 2 MB?

Junior — Middle
165

Použili ste niekedy štruktúru ErrGroup vo svojich projektoch na správu paralelných úloh?

Junior — Middle
165

Aké nezvyčajné alebo nestandardné balíky ste použili vo svojej praxi?

Junior — Middle
165

Prečo sa spomaľuje rast plátka a prečo ho nie je možné neustále zdvojnásobovať?

Middle
RWB
165

Kde sa počas procesu práce GitLab CI/CD spúšťajú príkazy?

Junior — Middle
165

Aké dôsledky môžu nastať pri nedodržiavaní princípov SOLID pri navrhovaní softvéru?

Junior — Middle
Zonatelecom
165
/413