Авито жобасы туралы толығырақ айтыңыз — бұл үш жыл бойы жалғыз жоба ма еді?
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() }
Горутинтегі msg қандай типте және оны неге аргумент ретінде беру керек?
/* Дамытушыға хабарламаларды жіберу қызметін жазу тапсырылды. Талаптар: - Send әдісі хабарламаларды параллель түрде жіберуі керек. - Бір уақытта maxworkers HTTP сұрауларынан артық орындалмауы керек. - Егер кемінде бір жіберу қателігі болса, қалғандарын тоқтатып, қате қайтару керек. - Әдіс контексттің тоқтауын дұрыс өңдеуі керек. - Барлық ресурстар дұрыс босатылуы керек. - Бұл әдіс бірнеше горутиннен бәсекелес шақырылуы мүмкін. - Client сәтті жіберілген хабарламалардың санын сақтауы керек. Кодты қарап шығыңыз, мәселелерді табыңыз және түзетіңіз.
Неліктен resultErr тікелей горутиннан қайтарылмайды?
resp.Body.Close()-ды қай жерде defer ету керек?
Басқа жұмыс берушілермен келісімдер бар ма немесе әлі де сұхбат кезеңінде ме?
Go-да дамыту бойынша жалпы коммерциялық тәжірибеңіз қандай?
Барлық құралдар туралы айтыңыз — неге қосылдыңыз және неге кеттіңіз?
Техникалық құжаттамамен ағылшын тілінде жұмыс істеу ыңғайлы бола ма?
SQL-мен қандай жұмыс тәжірибеңіз бар? Сұрауларды жаза аласыз ба және оңтайландыра аласыз ба?
Бұл кодта контексттер қайда аяқталады?
Жылдам ойындар дегеніміз не?
sentCount синхрондаусыз беріледі — оны қалай түзетуге болады?
Жаңа жобадан не іздейсіз? Қандай технологиялар қызықтырады? Жаңа жұмыс орнында көргіңіз келмейтін нәрсе қандай?
Дерекқор сұрауында контексті бермесеңіз, не болады?
Қашан индекс көмектеспейді немесе тіпті зиян келтіреді?
Go қызметі үшін CI/CD құбырында әдетте қандай кезеңдер бар?