Avito'dakı layihə haqqında daha ətraflı danış — üç il ərzində tək layihə idi?
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() }
/* İnkişaf etdiriciyə bildiriş göndərmə xidməti yazmaq tapşırığı verildi. Tələblər: - Send metodu mesajları paralel şəkildə göndərməlidir. - Eyni zamanda ən çox maxworkers HTTP sorğusu işləyə bilər. - Əgər ən azı bir göndərmə səhvlə nəticələnərsə, digər göndərmələr dayandırılmalı və xəta qaytarılmalıdır. - Metod kontekst ləğvini düzgün idarə etməlidir. - Bütün resurslar düzgün şəkildə azad edilməlidir. - Metod müxtəlif gorutinalardan eyni vaxtda çağırıla bilər. - Client uğurla göndərilən mesajların sayını saxlamalıdır. Kod nəzərdən keçirmə aparın, problemləri tapın və kodu düzəldin.
Goroutine-də msg-in tipi nədir və niyə onu arqument kimi keçirmək lazımdır?
Hansı yerdə defer resp.Body.Close() etmək lazımdır?
Go ilə inkişafda ümumi ticarət təcrübəniz nədir?
İngilis dilində texniki sənədlərlə işləmək rahat olacaqmı?
HamıAlətlər haqqında danış — niyə gəldin və niyə getdin?
Digər işəgötürənlərlə razılaşmalarınız varmı və ya hələ də müsahibə mərhələlərindəsiniz?
Tez oyunlar nədir?
SQL ilə hansı təcrübəniz var? Sorğuları yaza və optimallaşdıra bilirsinizmi?
Bu kodda kontekstlər harada bitir?
Verilənlər bazasına sorğu göndərərkən konteksti ötürməsəniz nə baş verir?
Niyə resultErr birbaşa goroutine-dən qaytarılmır?
sentCount sinxronizasiya olmadan ötürülür — bunu necə düzəltmək olar?
Yeni layihədə nə axtarırsan? Hansı texnologiyalar maraqlıdır? Yeni iş yerində görmək istəmədiyin nədir?
İndeks nə vaxt kömək etmir və ya hətta zərər verir?
Go xidməti üçün CI/CD boru xəttində adətən hansı mərhələlər (stages) mövcuddur?