Sobes.tech

Golang

Ko kešējāt? Kādas direktorijas?

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

/* Mums nepieciešams pārsūtīt datus no noteikta avota noteiktam patērētājam. Šajā procesā avots sniedz datus mazās partijās (~ desmitiem ierakstu), bet patērētājs efektīvāk strādā ar lielākiem batčiem. Reāls piemērs - datu piegāde no Kafka tipa rindām uz Clickhouse datubāzi. Avots: - Nosacīti bezgalīgs. - Avots nekad neatgriezīs vairāk par MaxItems ierakstiem vienā Next izsaukumā. - Vienā "sesijā" (viena Pipe funkcijas izsaukuma laikā) avots katru reizi atgriež jaunus datus. - Tomēr, pēc pārstartēšanas, avots sāk no iepriekšējās "apstiprinātās" pozīcijas, kas norādīta ar cookie. Tādēļ, *katra* cookie vērtība, ko atgrieza Next, pēc datu saglabāšanas saņēmējā, jāapstiprina ar Commit, un tas jāizdara stingri tādā pašā secībā, kā tie tika atgriezti. Saņēmējs: - Nevar apstrādāt vairāk par MaxItems vienlaikus. Pamatlīmenis: Jāimplementē funkcija func Pipe(p Producer, c Consumer) error, kura lasa datus no avota, tos grupē buferī, kura lielums nepārsniedz MaxItems, un saglabā saņēmējā, pēc tam apstiprina progresu avotā. */ const MaxItems = 9999 type Producer interface { // Next atgriež: // - datu partiju // - cookie apstiprināšanai // - kļūdu Next() (items []any, cookie int, err error) // Commit apzīmē, ka datu partija ir apstrādāta 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

Vai jūs varat uzskaitīt uzņēmumus vai piegādātājus, ar kuriem sadarbojāt?

Junior — Middle
166

Pastāsti par savu pēdējo darba vietu: ar ko nodarbojies, kādu tehnoloģiju steku izmantoji, kādas bija grūtās uzdevumi?

Middle
OZONOZON
166

Kas ir slice Go valodā?

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

Vai jūs varētu uzskaitīt galvenos gRPC izmantotos zvanu tipus?

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

Vai ir atļauts iegūt informāciju no kanāla ar iestatītu slēgto režīmu?

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

Vai ir iespējams tieši rakstīt noteiktā Kafka daļā, neizmantojot atslēgu hashēšanai?

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

Vai jūs varat izskaidrot mehānismu, kā elementu pievieno datu struktūras, piemēram, saraksta vai masīva, beigās?

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

Kādi dati un kādā veidā tiek izvietoti stekā programmas izpildes laikā?

Junior — Middle
166

Kādus kešēšanas metodes jūs visbiežāk izmantojat savos projektos un kāpēc?

Junior — Middle
166

Kā atšķiras materializēts skats no parasta skata?

Middle
RWB
165

Kādi komponenti veido saistītā saraksta struktūru?

Junior — Middle
165

Kā tiek noteikts laiks, kas nepieciešams, lai veiktu elementa pievienošanas operāciju pēc atslēgas Map datu struktūrā?

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

Kāpēc parasti pavedienu sākuma steka lielums ir iestatīts uz 2 MB?

Junior — Middle
165

Vai kādreiz esat izmantojis ErrGroup struktūru savos projektos paralēlo uzdevumu pārvaldībai?

Junior — Middle
165

Kādus neparastus vai nestandartus paketus esat izmantojis savā praksē?

Junior — Middle
165

Kāpēc šķēles pieaugums palēninās un kāpēc to nevar pastāvīgi dubultot?

Middle
RWB
165

Kur tiek izpildīti komandas GitLab CI/CD darba procesā?

Junior — Middle
165

Kādas sekas var rasties, ja programmatūras projektēšanā netiek ievēroti SOLID principi?

Junior — Middle
Zonatelecom
165
/413