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