Golang
Tinkoffdagi tajribangiz haqida gapiring — qanday ishga qabul qilindingiz va nima bilan shug'ullandingiz?
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 uchun xato %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 }
Asosiy dasturlash tili nima va boshqa qaysi tillarni bilasiz, jumladan, no-kommerciyal tajriba?
func (p *Pool) Stop() { p.mu.Unlock() // Endi mumkin xavfsiz tarzda kanalni yopish close(p.tasks) // signal ishchilarga: yangi vazifa bo'lmaydi, qolganini o'qing p.wg.Wait() // barcha goroutine'lar tugashini kutamiz p.cancel() // ehtiyot chorasi sifatida kontekstni bekor qilamiz fmt.Println("Pool to'xtatildi.") } // ForceStop majburan barcha ishchilarni vazifalar tugashini kutmasdan to'xtatadi. // Ishchilar darhol kontekst orqali to'xtatiladi. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Majburan to'xtatish (timeout: %v)...\n", timeout) // Yangi vazifalarni qo'shishni bloklaydi p.mu.Lock() p.isOpen = false p.mu.Unlock() // Kanalni yopamiz, shunda ishchilar yangi vazifa olmaydi close(p.tasks) // Kontekstni bekor qilamiz – bu bajarilayotgan barcha vazifalarni to'xtatadi p.cancel() // Yakunlash uchun cheklangan vaqt beramiz done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool majburan to'xtatildi (barcha ishchilar tugadi)") case <-time.After(timeout): fmt.Println("Pool majburan to'xtatildi (timeout, qolgan goroutine'lar bo'lishi mumkin)") } }
HAVING nima uchun kerak va nima uchun WHERE emas?
Go'dagi ma'lumot turlari haqida gapir.
Natija 123 o'rniga 456 bo'lishi uchun kodni qanday o'zgartirish mumkin?
Qaysi turdagi tranzaktsiyalarni bilasiz? Ular nima uchun kerak?
Indekslar bilan muammo bo'lganligini aytding — aniqroq ayta olasizmi?
Go'da yopiq kanalni o'qishda nima bo'ladi?
TCP va UDP o'rtasida nima farq bor? Nima uchun HTTPS uchun TCP ishlatiladi?
Shardlash tushunchasi bilan tanishdingizmi?
Fan-in/fan-out va pipeline naqshlarini bilasizmi? Bu nima?
Evakuatsiya jarayonida xaritaga elementlar qo'shish yoki olib tashlash mumkinmi?
Gorutina nima? U OSning oqimidan qanday farq qiladi? Kim gorutinlarni boshqaradi?
Sizning maosh kutishlaringiz va taqdimot uchun afzal ko'rgan formatingiz qanday?
Bir mashinada nechta goroutin yaratish mumkin? Qanday hisoblash kerak?
Go'da embedding va kompozitsiya o'rtasidagi farq nima?
Bir serverda maksimal nechta TCP ulanishlarini saqlash mumkin?
Algoritmning murakkabligi nima va bu yerda daraxt qayerda?