Sobes.tech

type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr нақты экземплярдың ip:port-ін қамтиды func NewBackend(addr string) *BackendImpl type Balancer struct { // TODO backends []*BackendImpl index int mu sync.Mutex } var _ Backend = &Balancer{} func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { if len(b.backends) == 0 { return nil, fmt.Errorf("Backends саны 0") } 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) return resp, err } // addrs барлық балансқа салынатын экземплярлардың мекенжайларын қамтиды func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImpl, len(addrs))

187

Сізде таралған жүйелерді қолдау немесе дамыту тәжірибесі бар ма?

185

Қоғамдық бұлттарды қолдандыңыз ба? Егер иә болса, қандай провайдерлер мен қызметтер?

185

Сіз архитектураны қалай өңдейсіз — командада архитекторыңыз бар ма, платформа, комитет?

184

type Balancer құрылымы { // 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("Backends саны слайсте 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, 0, len(addrs)) for _, addr := range addrs { implF := BackendImplF{ Backend: NewBackend(addr), } backends = append(backends, &implF) } return &Balancer{ backends: backends, } }

183

Жоғары RPS кезінде (мысалы, 30 000 RPS және 10 артқы жағы бар) барлық артқы жағын сызықтық іздеу қаншалықты тез жұмыс істейді?

183

Терезеде барлық таңбалар бар-жоғын қалай тез тексеруге болады (екі картаны салыстыру)?

182

Жұмыс іздеу қаншалықты белсенді? Қандай ұсыныстар бар ма?

180

Дерекқорлармен жұмыс істеген кезде ең үлкен деректер көлемі қандай болды?

180

2019 жылдан 2021 жылға дейінгі алғашқы жұмысыңыз туралы толығырақ айтыңыз.

180

/** :-))) :-(( "ab :-)" = "ab " "ab :-)))" = "ab " "ab :-)))(" = "ab (" "ab ):-)" = "ab )" ":-)" = "" **/ func deleteP(str string) string { n := len(str) res := make([]byte, 0, n) i := 0 for i < n { if str[i] == ':' && str[i+1] == '-' && (str[i+2] == ')' || str[i+2] == '(') { ch := str[i+2] i += 2 for i < n && str[i] == ch { i++ } } else { res = append(res, str[i]) } } return string(res) }

180

Қызмет қанша хостта жұмыс істеді және қанша инстанс іске қосылды?

180

Жүктемесі ең аз серверді таңдау орнына қарапайым әрі жылдамырақ жүктемені теңестіру әдістері бар ма?

179

API Gateway үшін бір жүктеме теңгергіш, ал WebSocket үшін басқа — жүйеде екі жүктеме теңгергіш бар ма?

179

Сіз жұмыс істеген ең үлкен жобаға қанша адам қатысқан? Оннан аз, ондар, жүздер ме?

178

Түзетілген кодта синтаксистік қателерді табыңыз.

177

Көп инстанциялармен бөлінген жүйеде параллель сұрауларды шектеу мәселесін қалай шешуге болады, егер пайдаланушы қате алмай, күтуі керек болса?

177

Неліктен Message Service-тен хабарламалар тікелей gRPC арқылы өтеді, Kafka арқылы емес?

176

func countSubs(s string) int { result := 0 left := 0 hm := make(map[rune]int) for right := 0; right < len(s); right++ { hm[s[right]]++ for hm[s[right]] > 1 { hm[s[left]]-- if hm[s[left]] == 0 { delete(hm, s[left]) } left++ } result += (right - left + 1) } return result }

176

Proto-файл негізінде BulkCreateUsers әдісін жүзеге асырыңыз: жобаның құрылымын, бизнес-логикасын, репозиторийін және SQL сұрауларын SOLID принциптерін сақтай отырып жасаңыз.

175
/11