Sobes.tech

Какво кеширахте? Някакви директории?

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

Разкажи за последното си работно място: с какво се занимаваше, какъв стек използваше, какви бяха трудните задачи?

Middle
OZONOZON
166

Какво е слайс в Go?

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

Можете ли да изброите основните типове повиквания, използвани в gRPC?

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

Допустимо ли е да получавате информация от канал с активиран затворен режим?

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

Може ли директно да записвате данни в определена партиция на Kafka, пропускайки ключа за хеширане?

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

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

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

Какви данни и по какъв начин се поставят в стека при изпълнение на програмата?

Junior — Middle
166

Кои методи за кеширане предпочитате да използвате във вашите проекти и защо?

Junior — Middle
166

Каква е разликата между материализирано изглед и обикновено изглед?

Middle
RWB
165

Кои компоненти влизат в структурата на свързан списък?

Junior — Middle
165

Как се определя времето за изпълнение на операцията за добавяне на елемент по ключ в структурата данни Map?

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

Защо обикновено началният размер на стека при нишките е 2 МБ?

Junior — Middle
165

Потребявали ли сте някога структурата ErrGroup в проектите си за управление на паралелни задачи?

Junior — Middle
165

Какви необичайни или нестандартни пакети сте използвали в практиката си?

Junior — Middle
165

Защо растежът на слайса се забавя и защо не може постоянно да се удвоява?

Middle
RWB
165

Къде се изпълняват командите по време на работния процес на GitLab CI/CD?

Junior — Middle
165

Какви последствия могат да възникнат при неспазване на принципите SOLID при проектирането на софтуер?

Junior — Middle
Zonatelecom
165
/413