Sobes.tech

Golang

tur Response interfeysi {} tur Backend interfeysi { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr ma'lum bir nusxaning ip:port manzilini o'z ichiga oladi func NewBackend(addr string) *BackendImpl tur Balancer tuzilmasi { // TODO backends []*BackendImpl index int mu sync.Mutex } var _ Backend = &Balancer{} func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { agar len(b.backends) == 0 { return nil, fmt.Errorf("Backends ro'yxatida elementlar soni 0") } b.mu.Lock() index := b.index agar 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 barcha balanslangan nusxalarning manzillarini o'z ichiga oladi func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImpl, len(addrs))

187

Yandeksning multitrek dasturi haqida nima bilasiz?

187

API Gateway uchun bir Load Balancer, WebSocket uchun boshqacha — jami tizimda ikki LB?

185

Jamoat bulutlaridan foydalangansizmi? Agar ha, qaysi ta'minotchilar va xizmatlar bilan?

185

Arxitektura ustida qanday ishlaysiz — jamoada arxitektor, platforma, komitet bormi?

184

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("Backends soni slice 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 barcha balanslangan instansiyalar manzillarini o'z ichiga oladi func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImplF, len(addrs)) for _, addr := range addrs { implF := BackendImplF{ Backend: NewBackend(addr), } backends = append(backends, &implF) } }

183

Yuqori RPS (masalan, 30 000 RPS va 10 backend) bilan barcha backendlarni chiziqli qidirish qanday tezlikda ishlaydi?

183

Qanday qilib oynada barcha belgilar borligini tezda tekshirish mumkin (ikki xaritani taqqoslash)?

182

Qidiruvlar qanchalik faol? Balki, allaqachon takliflar bormi?

180

Siz ishlagan eng katta loyihada nechta odam ishtirok etdi? Oltitadan kam, o'nlarcha, yuzlarcha?

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

2019-yildan 2021-yilgacha bo'lgan birinchi ish joyingiz haqida batafsilroq aytib bering.

180

Xizmat qaysi hostinglarda ishlagan va nechta instansiya ishga tushirilgan?

180

Ma'lumotlar bazalarida ishlash davomida eng katta ma'lumot hajmi nima edi?

180

Yukni eng kam yuklangan backendni tanlash o'rniga, yukni muvozanatlash uchun yanada oddiy va tezroq usullar bormi?

179

Nima uchun Message Service xabarlar to'g'ridan-to'g'ri gRPC orqali yuboriladi, Kafka orqali emas?

178

Bir nechta instantsiyaga ega bo'linadigan tarqatilgan tizimda parallel so'rovlar cheklovini qanday hal qilish mumkin, agar foydalanuvchi xato olish o'rniga kutishi kerak bo'lsa?

177

Tuzilgan kodda sintaktik xatolarni toping

177

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-faylga asoslangan holda BulkCreateUsers metodini amalga oshiring: loyiha tuzilmasi, biznes mantiqi, repository va SQL so'rovlarini SOLID tamoyillariga muvofiq yarating

175
/11