Golang
Goда тармак менен иштөө үчүн кайсы пакеттерди билесиң?
Индекстин селективдүүлүгү эмнеде?
Күтүүлөргө кандай карайсың? Мындай тажрыйбаң барбы?
Эсептөө кайра кайталануучулугун кантип камсыз кылынды — бардык кызматкерлер тобуна бирдей шарттар колдонулуп жатканына кепилдик берүү үчүн?
Кайсы маалыматтар базаларында иштедиңиз жана кайсы SQL суроолорду жазууңуз керек?
Контейнер кайра иштетилгенден кийин PostgreSQL маалыматтары жоголбошу үчүн эмне кылуу керек?
Kafkaнын өзгөчөлүктөрү жөнүндө айтып бер — ал кандай түзүлгөн?
Кайда кечиктирилген функциялардын аргументтери эсептелет — аныктоо учурундабы же чакыру учурундабы?
Интерфейссиз код жазса болобу?
Неге триггерлер негизинен Legacy системалар үчүн колдонулат?
Окуучу каналды жабса жана жазуучу дагы жазып жатса, эмне болот? Паникадан кантип сактануу керек?
DNS эмне жана ал кандай иштейт?
Goда жабык каналга жазуу мүмкүнбү?
Таза каналдан окуу учурунда түбөлүк блоктонуудан кантип сакталуу керек? Select деген эмне жана анын үлгүлөрү кандай?
Эмне үчүн рынокко көңүл бура баштадыңыз? Азыр өзүңүз үчүн эмне издөөдөсүз? Жаңы компанияны тандоодо эмнеге көңүл бурасыз?
Программалоодо кагылыштарды болтурбоого жардам берген механизмдер барбы?
Go-дөгү сап эмне?
Түз эфир коддоо: семафор — кантип иштейт жана буферленген каналга негизделген ишке ашыруу.
type Balancer struct { // TODO backends []*BackendImpl index int mu sync.Mutex N int K time.Duration } var _ Backend = &Balancer{} func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { if len(b.backends) == 0 { return nil, fmt.Errorf("Байланыштардын саны слайста 0") } b.mu.Lock() index := b.index for b.backends[index].banned { b.index = (b.index + 1) % len(b.backends) index = b.index } b.index = (b.index + 1) % len(b.backends) b.mu.Unlock() backend := b.backends[index] resp, err := backend.Backend.Invoke(ctx, req) if err != nil && backend.countErrors < b.N { backend.mu.Lock() backend.countErrors += 1 if backend.countErrors == b.N { backend.banned = true go func() { time.Sleep(b.K) backend.mu.Lock() defer backend.mu.Unlock() backend.banned = false backend.countErrors = 0 }() } backend.mu.Unlock() } return resp, err } // addrs бардык балансировкаланган мисалдардын даректери func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImplF, len(addrs)) for _, addr := range addrs { implF := BackendImplF{ Backend: NewBackend(addr), } backends = append(backends, &implF) } }
Бул тапшырмада бизге эмне үчүн WaitGroup керек?