Sobes.tech

Реализирайте получаването на топ 5 услуги в O(N) с помощта на помощна структура

Middle+
X5 groupX5 group
76

Актуализациите на документи постъпват в услугата message Document { string Url = 1; // URL на документа, неговият уникален идентификатор uint64 PubDate = 2; // обявеното време за публикуване на документа uint64 FetchTime = 3; // времето на получаване на тази актуализация на документа, може да се счита за идентификатор на версия. Пара (Url, FetchTime) е уникална. string Text = 4; // текстът на документа uint64 FirstFetchTime = 5; // първоначално липсва, трябва да се попълни } Документите могат да пристигат в произволен ред (не в реда, в който са били актуализирани), и може да има дублиращи се съобщения. Необходимо е на изхода да се формират същите съобщения, но с коригирани полета според следните правила (всичко по-долу важи за група документи със същото поле Url): Полето Text и FetchTime трябва да са такива, каквито са в документа с най-голям FetchTime, получен досега. Полето PubDate трябва да е такова, каквото е в съобщението с най-малък FetchTime. Полето FirstFetchTime трябва да е равно на минималната стойност на FetchTime. Тоест, във всеки момент взимаме PubDate и FirstFetchTime от първата версия, получена досега (ако ги сортираме по FetchTime), а Text - от последната. Интерфейсът в кода може да бъде реализиран така: type Processor interface { Process(doc *Document) (*Document, error) } Този код ще работи в услуга, която чете съобщения от опашка (Kafka или подобна), и също така записва резултата в опашката. Ако Process връща Null, нищо не се записва в опашката.

Senior
VKVK
76

Имаш ли опит с gRPC и GraphQL? Разкажи за тях.

Senior
X5 techX5 tech
76

На какви заплатни очаквания се базирате?

Senior
X5
76

Знаеш ли продукта Loop?

Middle
wilix
76

Как се отнасяш към дежурствата? Имаш ли такъв опит?

Senior
ozon_tech
76

Как точно изглеждаше пътят на оптимистичното блокиране от получаването на съобщението от Kafka до актуализирането в базата данни?

Senior
КасперскийКасперский
76

Как получаваш задачите, от кого идват?

Middle+
SelectelSelectel
76

Имаш ли опит с оптимизация на заявки в релационни бази данни?

Middle
VKVK
76

Как използвахте Kafka и RabbitMQ като брокери? Защо два?

Senior
Ozon ФинтехOzon Финтех
76

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

Middle+
X5 groupX5 group
76

Какви са масивите и слайсовете в Go, как се различават? Как работи append и разширяването на capacity?

Senior
ClearWay
76

Какво е предимството на репликацията? Какви разходи носи тя?

Senior
ВайлдберрисВайлдберрис
76

// Имаме метод за получаване на информация за продуктите, този метод се извиква много често // има ли проблеми в този код и как да ги поправим? база данни postgress func (r *ProductRepository) GetProductDetails(ctx context.Context, productIDs []int) []Product { products := make([]Product, 0, len(productIDs)) for _, id := range productIDs { go func(id int) { var p Product query := "SELECT name, price, description FROM products WHERE id = $1" err := r.db.QueryRowContext(ctx, query, id).Scan(&p.Name, &p.Price, &p.Desc) if err != nil { r.logger.Error("error get product", "err", err) return } products = append(products, p) }(id) } return products }

Middle+
Lenta Tech
76

Влияе ли размерът на буфера на канала върху нещо в работната група?

Senior
WildberriesWildberries
76

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

Senior
КасперскийКасперский
76

Как да взаимодействате с търговците, които се намират в външния контур?

Senior
Финтехробот
76

Какви средства за синхронизация има при многопоточността в Go?

Senior
I-teco
76

Какви данни съхраняваха в Redis и как разбираха, че обявите са горещи?

Senior
Cloud.ru
76

Защо да използваме интерфейси?

Middle+
Napoleon IT
76
/412