/* Микросервис архитектурасы менен колдонмо бар. Микросервис, Backend интерфейси аркылуу абстракцияланат. Микросервистин бир үлгүсүнө кирүү үчүн BackendImpl түрүн колдонсо болот, ал алдын ала ишке ашырылган. Ар бир микросервиске ондон ашык иштеп жаткан үлгүлөр бар, алардын ар бири өзүнүн дареги addr аркылуу жеткиликтүү. Бирок, микросервистин жеке үлгүлөрү ишенимдүү эмес: алар кулап, жеткиликтүү болбой же жүктөлүп кетиши мүмкүн. Ошондуктан, сиз Balancer түрүн ишке ашырышыңыз керек, ал да Backend интерфейсин ишке ашырып, кардар тараптан жүктү теңдөө иштерин жүргүзөт микросервис үлгүлөрүнүн ортосунда, ар бир жолу **аз жүктөлгөн** үлгүнү тандоого аракет кылат.
Golang
Эмне эң чоң маалымат көлөмү менен иштедиңиз жана окулуш/жазуу суроолорунун саны канча болду?
Өз тажрыйбаңыз жөнүндө кыскача айтып бере аласызбы? Эң негизги программалоо тилиңиз кайсы? Өнөр жай иштеп чыгууда канча жылдык тажрыйбаңыз бар?
Неге кодтогу жөнөкөй логика ордуна LLM колдонууга чечим кылдыңыз?
JWT серверде сессияларды сактоодон кандай артыкчылыкка ээ?
Колдонуучуларга офлайн режиминде жөнөтүлгөн билдирүүлөр кандай иштелип чыгат?
func Pipe(p Producer, c Consumer) error { // TODO buf := make([]any, 0, MaxItems) cookies := make([]int, 0) flush := func() error { if len(buf) == 0 { return nil } if err := c.Process(buf); err != nil { return err } for _, cookie := range cookies { if err := p.Commit(cookie); err != nil { return err } } buf = buf[:0] cookies = cookies[:0] return nil } for { items, cookie, err := p.Next() if err != nil { flush() return err }
Баштапкы буфер үчүн канча жаддык бөлүнгөн?
Кайсы негизги программалоо тилин колдонуп жатасың? C++ же Python колдонуп жатасыңбы?
Эмне үчүн backend.Invoke чакыруусу муфтектен тышкары жасалды?
maxSegment маселесин чечүү алгоритмин сүрөттөп бериңиз
Эгерде Consumer.Process ката кайтарса — буфердеги маалыматтар жоголбойт беле?
Балансёр түшүнүшү керек, бекенд каталар менен жооп берип жатканы жана белгиленген убакыт ичинде чекке жеткенде аны балансировкадан чыгарышы керек (Circuit Breaker)
// ең жақсы() функциясы үшін код үзіндісі // эгер артқы жүйе болмаса, қате өңдеу
Берилген S саптары, бул сапта бардык белгилер кеминде бир жолу камтылган субсаптардын санын эсептөө керек. Мисалдар: "abca" -> 3 // abc, bca, abca "aa" -> 3 // aa, a, a, "ffg" -> 2 // ffg, fg
Бул символдордун саптары. i жана j көрсөткүчтөрүнүн жуптарынын санын табыңыз (i <= j), алардын ортосунда, киргизилген, кайталанган белгилер жок. "аба" сапы үчүн жооп 5: [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") "acbb" сапы үчүн жооп ?:
Азыр жогорку жүктөөдө бир секундта эң көп суроо-талабтар канча?
Go-дан башка кандай программалоо тилдерин өзүңүз үчүн же коммерциялык өнүктүрүүдө колдонуп жатасыз?
Кайда жашайсың, кайдасың?
// TODO backends []*BackendImpl index int mu sync.Mutex func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { b.mu.Lock() index := b.index if b.index + 1 == len(b.backends) { b.index = 0 index = 0 } b.mu.Unlock() resp, err := b.backends[index].Invoke(ctx, req) b.mu.Lock() defer b.mu.Unlock() b.index += 1 return resp, err } // addr содержит ip:port конкретного экземпляра func NewBackend(addr string) *BackendImpl // addrs содержат адреса всех балансируемых экземпляров func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImpl, len(addrs)) for _, addr := range addrs { backends = append(backends, NewBackend(addr)) } return &Balancer{ backends: backends, } }