გთხოვთ, უფრო დეტალურად ისაუბროთ ავიტოს პროექტზე — იყო ეს ერთადერთი პროექტი სამ წელიწადში?
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-დან?
არის თუ არა შეთანხმებები სხვა დამსაქმებლებთან ან ჯერ კიდევ გადიხართ ინტერვიუების ეტაპებს?
/* Ծրագրավորողին տրված է գործառույթ գրել ծանուցումների ուղարկման ծառայություն: Պահանջներ: - Send մեթոդը պետք է ուղարկի հաղորդագրությունները միաժամանակ: - Միաժամանակ չպետք է կատարվեն ավելի քան maxworkers HTTP հարցումներ: - Եթե առնվազն մեկ ուղարկում ձախողվի, մնացածները պետք է կանգնեցվեն և վերադարձվի սխալ: - Մեթոդը պետք է ճիշտ կերպով կառավարի կոնտեքստի չեղարկումը: - Բոլոր ռեսուրսները պետք է ճիշտ կերպով ազատվեն: - Մեթոդը կարող է համաժամանակորեն կանչվել տարբեր goroutines-ներից: - Client-ը պետք է պահի հաջողությամբ ուղարկված հաղորդագրությունների քանակը: Կոդը պետք է վերանայվի, խնդիրները հայտնաբերվեն և կոդը ուղղվի:
სად უნდა გაკეთდეს defer resp.Body.Close()?
რა არის თქვენი საერთო კომერციული გამოცდილება Go-ით განვითარების სფეროში?
კი იქნება კომფორტული ტექნიკური დოკუმენტაციის მუშაობა ინგლისურ ენაზე?
მითხარი ყველა ინსტრუმენტის შესახებ — რატომ მოხვედი და რატომ წავედი?
როგორ გაქვს SQL-ის გამოცდილება? შეგიძლია დაწერო და ოპტიმიზაცია გაუკეთო შეკითხვებს?
სად მთავრდება ამ კოდის კონტექსტები?
რა არის სწრაფი თამაშები?
რა ეძებ ახალ პროექტში? რა ტექნოლოგიები გსიამოვნებს? რა არ გსურს ახალი სამუშაო ადგილას?
sentCount გადაეცემა სინქრონიზაციის გარეშე — როგორ შევცვალოთ ეს?
რა მოხდება თუ მონაცემთა ბაზის მოთხოვნაში კონტექსტი არ გადმოცემული იქნება?
როდის ინდექსი არ ეხმარება ან甚至 вредს მიაყენებს?
რა ეტაპები (stages) ჩვეულებრივ არის CI/CD პაიპლაინში Go-სერვისისთვის?