Go · 47 строк
SendAll получает пачку из 50 тысяч push и число воркеров, обычно 32. Каждый воркер вызывает send и пишет результат в канал.
Отметьте строки с ошибками.
В работе: Массовая рассылка push о новых условиях по вкладам.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Плюс 1 вопрос про поведение программы — на зачёт не влияют. Ответ один на подход: после него показываем разбор.
Источник: на задачах Сбера: push-уведомления в СберБанк Онлайн. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
package pushimport ("fmt""sync")type Push struct {Token stringText string}type Result struct {Token stringErr error}// SendAll рассылает push клиентам через пул воркеров.func SendAll(pushes []Push, workers int, send func(Push) error) []Result {jobs := make(chan Push)results := make(chan Result)var wg sync.WaitGroupfor i := 0; i < workers; i++ {go func() {wg.Add(1)defer wg.Done()for p := range jobs {results <- Result{Token: p.Token, Err: send(p)}}}()}for _, p := range pushes {jobs <- p}wg.Wait()close(results)var out []Resultfor r := range results {out = append(out, r)}fmt.Printf("отправлено %d из %d\n", len(out), len(pushes))return out}