Avito'dagi loyiha haqida batafsilroq aytib bering — bu uch yil ichida yagona loyiha edimi?
Golang
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() }
Goroutine'dagi msg ning turi nima va nima uchun uni argument sifatida o'tkazish kerak?
/* Dasturchiga bildirishnoma yuborish xizmatini yozish vazifasi berildi. Talablar: - Send metodi xabarlarni parallel tarzda yuborishi kerak. - Bir vaqtning o'zida maksimal maxworkers HTTP so'rovlari bajarilishi mumkin. - Agar kamida bir yuborish xato bilan tugasa, qolganlarini to'xtatish va xato qaytarish kerak. - Metod kontekst bekor qilishni to'g'ri ishlov berishi kerak. - Barcha resurslar to'g'ri bo'shatilishi kerak. - Metod turli gorutinalardan konkurent ravishda chaqirilishi mumkin. - Client muvaffaqiyatli yuborilgan xabarlar sonini saqlashi kerak. Kod ko'rib chiqishni amalga oshiring, muammolarni toping va kodni tuzating.
Nima uchun resultErr to'g'ridan-to'g'ri gorutindən qaytarilmaydi?
Qaysi joyda defer resp.Body.Close() qilish kerak?
Boshqa ish beruvchilar bilan kelishuvlar mavjudmi yoki hozirda suhbat bosqichlaridasizmi?
Go bilan dasturlash bo'yicha umumiy tijoriy tajribangiz qanday?
HammaAsboblar haqida gapir — nima uchun kelding va nima uchun ketding?
Ingliz tilida texnik hujjat bilan ishlash qulay bo'ladimi?
SQL bilan qanday tajribangiz bor? So'rovlarni yozish va optimallashtirishni bilasizmi?
Ushbu kodda kontekstlar qayerda tugaydi?
Tezkor o'yinlar nima?
sentCount sinxronizatsiya qilmasdan uzatilyapti — buni qanday tuzatish mumkin?
Yangi loyihada nima qidiryapsiz? Qaysi texnologiyalar sizni qiziqtiradi? Yangi ish joyida nima ko'rishni istamaysiz?
Ma'lumotlar bazasiga so'rov yuborishda kontekstni o'tkazmasangiz nima bo'ladi?
Qachon indeks yordam bermaydi yoki hatto zarar keltiradi?
Go-xizmat uchun CI/CD pipelineida odatda qanday bosqichlar (stages) mavjud?