Sobes.tech

Разкажи повече за проекта в Авито — това беше единственият проект за три години?

Senior
235

func (c *Client) Send(ctx context.Context, messages []Message, maxWorkers int) error { sem := make(chan struct{}, maxWorkers) var wg sync.WaitGroup var resultErr error var once sync.Once for _, msg := range messages { wg.Add(1) go func(msg Message) { defer wg.Done() sem <- struct{}{} defer func() { <-sem }() body, err := json.Marshal(msg) if err != nil { once.Do(func() { resultErr = err; cancel() }) return } req, _ := http.NewRequestWithContext( ctx, http.MethodPost, c.url, bytes.NewReader(body), ) req.Header.Set("Content-Type", "application/json") resp, err := c.httpClient.Do(req) if err != nil { once.Do(func() { resultErr = err; cancel()}) return } defer resp.Body.Close() if resp.StatusCode >= 500 { once.Do(func() { resultErr = fmt.Errorf("server error") cancel()}) return } c.sentCount.Add(1) time.Sleep(time.Second) }(msg) } wg.Wait() }

Senior
224

Какъв тип е msg в горутината и защо трябва да го предавате като аргумент?

Senior
221

Защо resultErr не се връща директно от горутината?

Senior
200

Имате ли договорки с други работодатели или все още преминавате етапите на интервюта?

Senior
195

Къде трябва да се направи defer resp.Body.Close()?

Senior
195

/* На разработчика беше възложена задачата да напише услуга за изпращане на известия. Изисквания: - Методът Send трябва да изпраща съобщения паралелно. - Не трябва да се изпълняват повече от maxworkers HTTP заявки едновременно. - Ако поне една изпращане се провали, останалите трябва да бъдат спряни и да се върне грешка. - Методът трябва правилно да обработва анулирането на контекста. - Всички ресурси трябва да бъдат правилно освободени. - Методът може да бъде извикван конкурентно от различни goroutines. - Client трябва да поддържа броя на успешно изпратените съобщения. Трябва да се направи преглед на кода, да се намерят проблеми и да се коригира кодът.

Senior
194

Какъв е вашият общ търговски опит в разработката с Go?

Senior
187

Ще бъде ли удобно да работите с техническа документация на английски език?

Senior
181

Разкажи ми за ВсичкиИнструменти — защо дойде и защо си тръгнал?

Senior
177

Какъв опит имаш с SQL? Можеш ли да пишеш и оптимизираш заявки?

Senior
176

Къде завършват контекстите в този код?

Senior
172

Какви са бързите игри?

Senior
162

sentCount се предава без синхронизация — как да го поправим?

Senior
161

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

Senior
160

Какво ще стане, ако не предадете контекста в заявката към базата данни?

Senior
157

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

Senior
140

Какви етапи (stages) обикновено има в CI/CD pipeline за Go услуга?

Senior
135