Golang
გააზიარე შენი გამოცდილება Tinkoff-ში — როგორ მიიღე სამუშაო და რა საქმიანობა გქონდა?
func collectRTT(ctx context.Context, urls []string) (map[string]time.Duration, error) { pingMap := make(map[string]time.Duration, len(urls)) var mu sync.Mutex var wg sync.WaitGroup errCh := make(chan error, 1) for _, url := range urls { wg.Add(1) go func(u string) { defer wg.Done() dur, err := rtt(ctx, u) if err != nil { select { case errCh <- fmt.Errorf("RTT შეცდომა %s, %w", u, err): default: } return } mu.Lock() pingMap[u] = dur mu.Unlock() }(url) } wg.Wait() close(errCh) if err := <-errCh; err != nil { return nil, err } return pingMap, nil }
რა არის ძირითადი პროგრამირების ენა და რა სხვა ენებს იცით, მათ შორის არასამეწარმეო გამოცდილება?
func (p *Pool) Stop() { p.mu.Unlock() // ახლა უსაფრთხოდ შეიძლება ჩაკეტოთ არხი close(p.tasks) // სიგნალი მუშაკებს: ახალი დავალებები აღარ იქნება, წაიკითხეთ დარჩენილი p.wg.Wait() // ველით ყველა გორუტინის დასრულებას p.cancel() // საჭიროების შემთხვევაში გაუქმეთ კონტექსტი fmt.Println("Pool შეჩერებულია.") } // ForceStop ძალით აჩერებს ყველა მუშაკს დავალებების დასრულების მოლოდინის გარეშე. // მუშაკები დაუყოვნებლივ გაწყდება კონტექსტის მეშვეობით. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("ძალადობრივი გაჩერება პულის (timeout: %v)...\n", timeout) // ბლოკავს ახალი დავალებების დამატებას p.mu.Lock() p.isOpen = false p.mu.Unlock() // არხის დახურვა, რათა მუშაკებმა ახალი დავალებები არ მიიღონ close(p.tasks) // კონტექსტის გაუქმება – ეს ყველა მიმდინარე დავალებას გაწყდება p.cancel() // შეზღუდული დრო მიცემულია დასრულებისთვის done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("პული ძალით გაჩერებულია (ყველა მუშაკი დასრულდა)") case <-time.After(timeout): fmt.Println("პული ძალით გაჩერებულია (тайმ-აუტ, შეიძლება დარჩეს გაჩერებული goroutine-ები)") } }
რატომ არის HAVING საჭირო და რატომ არა WHERE?
მითხარი Go-ში მონაცემთა ტიპების შესახებ.
როგორ შევცვალოთ კოდი, რომ შედეგი იყოს 456 ნაცვლად 123-ის?
რომელი ტიპის ტრანზაქციებს იცნობ? რა მიზნით გამოიყენება?
თქვი, რომ ინდექსებთან დაკავშირებული პრობლემები იყო — შეგიძლია დეტალურად მოყვე?
რა ხდება, როდესაც წერთ დახურულ არხიდან Go-ში?
რა განსხვავებაა TCP-სა და UDP-ს შორის? რატომ გამოიყენება TCP HTTPS-ისთვის?
შარდირების კონცეფციასთან შეხვედრილხარ?
გეცოდინებათ fan-in/fan-out და pipeline ნიმუშები? რა არის ეს?
შესაძლებელია თუ არა ევაკუაციის პროცესში ელემენტების დამატება ან წაშლა რუკაზე?
გორუტინა რა არის? როგორ განსხვავდება ოპერაციული სისტემის ნაკადიდან? ვინ მართავს გორუტინებს?
რა არის თქვენი ანაზღაურების მოლოდინები და სასურველი ფორმატი?
რამდენი goroutine შეიძლება შექმნათ ერთ მანქანაზე? როგორ ითვლება?
რა არის embedding და composition შორის განსხვავება Go-ში?
რამდენი TCP კავშირი შეიძლება ერთ სერვერზე იყოს მაქსიმუმ?
როგორ არის ალგორითმის სირთულე და სად არის ხე აქ?