Sobes.tech

Golang

Co bylo cachováno? Nějaké adresáře?

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

/* Potřebujeme přenést data z nějakého zdroje k nějakému příjemci. Zdroj dodává data v malých dávkách (~desítky záznamů), zatímco příjemce pracuje efektivněji s většími dávkami. Reálný příklad je přenos dat z front typu Kafka do databáze Clickhouse. Zdroj: - Téměř nekonečný. - Zdroj nikdy nevrátí více než MaxItems záznamů v jednom volání Next. - V rámci jedné "seance" (jedno volání funkce Pipe) zdroj při každém Next vrací nová data. - Po restartu však zdroj začne od předchozí "potvrzené" pozice, kterou určuje cookie. Proto musí být každá hodnota cookie, kterou Next vrátí, po uložení dat do příjemce potvrzena voláním Commit, a to ve stejném pořadí, v jakém byla vrácena. Příjemce: - Nedokáže zpracovat více než MaxItems najednou. Základní úroveň: Je třeba implementovat funkci func Pipe(p Producer, c Consumer) error, která čte data ze zdroje, seskupuje je do bufferu o velikosti nejvýše MaxItems a ukládá je do příjemce, později potvrzuje pokrok ve zdroji. */ const MaxItems = 9999 type Producer interface { // Next vrací: // - dávku položek k zpracování // - cookie k potvrzení po dokončení zpracování // - chybu Next() (items []any, cookie int, err error) // Commit slouží k označení dávky dat jako zpracované 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 uvést společnosti nebo dodavatele, se kterými jste měli zkušenosti?

Junior — Middle
166

Pověz mi o posledním místě práce: čím ses zabýval, jaký stack jsi používal, jaké byly složité úkoly?

Middle
OZONOZON
166

Co je to slice v Go?

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

Můžete vyjmenovat hlavní typy volání používané v gRPC?

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

Je povoleno získávat informace z kanálu s nastaveným uzavřeným režimem?

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

Lze přímo zapisovat data do určité partitiony Kafka, obcházejíc klíč pro hashování?

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

Můžete vysvětlit mechanismus přidání prvku na konec datové struktury, například seznamu nebo pole?

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

Jaká data a jakým způsobem jsou umístěna na zásobníku při spuštění programu?

Junior — Middle
166

Jaké metody cachování preferujete používat ve svých projektech a proč?

Junior — Middle
166

Čím se liší materializovaný pohled od běžného pohledu?

Middle
RWB
165

Jaké komponenty tvoří strukturu spojového seznamu?

Junior — Middle
165

Jak je určena doba provádění operace přidání prvku podle klíče do datové struktury Map?

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

Proč je obvykle počáteční velikost zásobníku vláken nastavena na 2 MB?

Junior — Middle
165

Použili jste někdy ve svých projektech strukturu ErrGroup pro správu paralelních úkolů?

Junior — Middle
165

Jaké neobvyklé nebo nestandardní balíčky jste ve své praxi použili?

Junior — Middle
165

Proč se zpomaluje růst plátku a proč ho nelze neustále zdvojnásobovat?

Middle
RWB
165

Kde se během procesu práce GitLab CI/CD spouštějí příkazy?

Junior — Middle
165

Jaké důsledky mohou nastat při nedodržování principů SOLID při navrhování softwaru?

Junior — Middle
Zonatelecom
165
/413