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("Пулду күч менен токтотуу (тайм-аут: %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-догу маалымат түрлөрү жөнүндө мага айтып бер.
Кодду кандай өзгөртсө болот, натыйжа 123 ордуна 456 болот?
Кайсы транзакция түрлөрүн билесиң? Алар эмне үчүн керек?
Индекстер менен байланыштуу көйгөйлөр болгонун айттың — конкреттүү айтып бере аласызбы?
Goда жабылган каналдан окуу кандай болот?
TCP менен UDPнин айырмасы эмнеде? Неге үчүн HTTPS үчүн TCP колдонулат?
Шардирөө түшүнүгү менен тааныш болдубу?
Fan-in/fan-out жана pipeline үлгүлөрүн билесизби? Алар эмне?
Эвакуация процесинде картага элементтерди кошуу же алып салуу мүмкүнбү?
Горутина деген эмне? Ал операциялык тутумдун агымынан эмнеге айырмаланат? Ким башкарат гурутиналарды?
Сиздин маяна күтүүлөрүңүз жана сунуштоо үчүн эң жакшы формат кандай?
Бир машинанын ичинде канча goroutine түзө аласыз? Кантип эсептөө керек?
Go-догу embedding жана composition ортосундагы айырма эмнеде?
Бир серверде максимум канча TCP байланышын сактоо мүмкүн?
Алгоритмдин татаалдуулугу кандай жана бул жерде дарак кайда?