Saqlangan ma'lumotlarning eng katta hajmi qanday edi?
Golang
Qaysi ma'lumotlar bazalari va boshqa ma'lumotlarni saqlash tizimlari bilan ishladingiz?
// eng yaxshi() funksiyasi uchun kod parcha // backend mavjud emasligi holatida xatolikni boshqarish bilan
Vazifalar va karyera vektori nuqtai nazaridan qaysi yo'nalishda rivojlanishga qiziqasiz?
Nima uchun yangi takliflarni ko'rib chiqyapsiz va nima uchun oldingi kompaniyangizni tark etdingiz?
// eng yaxshi() funksiyasi uchun kod parcha // backend mavjud emasligi holatida xatolikni boshqarish bilan
Process metodlarining bir vaqtning o'zida 'threads' sonidan ko'p ishlamasligini qanday cheklash mumkin? Kanaldan vazifalarni kim olib chiqadi?
// eng yaxshi() funksiyasi uchun kod parcha // backend mavjud emasligi holatida xatolikni boshqarish bilan
// eng yaxshi() funksiyasi uchun kod parcha // backend mavjud emasligi holatida xatolikni boshqarish bilan
Xizmat qancha host yoki instanslarda ishlagan? Nechta konteyner ishga tushirilgan?
Kim natijaviy kanalni o'qiydi va keyin natijani qayerga yozadi, shunda Status metodi unga kirishishi mumkin?
// eng yaxshi() funksiyasi uchun kod parcha // backend mavjud emasligi holatida xatolikni boshqarish bilan
// eng yaxshi() funksiyasi uchun kod parcha // backend mavjud emasligi holatida xatolikni boshqarish bilan
Queue metodini amalga oshiring
ID bo'yicha vazifa holatini olish uchun Status metodini qanday amalga oshirish mumkin?
// eng yaxshi() funksiyasi uchun kod parcha // backend mavjud emasligi holatida xatolikni boshqarish bilan
type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr contains ip:port of a specific instance func NewBackend(addr string) *BackendImpl type backentry struct { backend Backend inflight int64 } type Balancer struct { backends []*backentry mu *sync.Mutex } var _ Backend = &Balancer{} // addrs contain the addresses of all balancable instances func NewBalancer(addrs []string) *Balancer { data := make([]*backentry,len(addrs)) for i,addr := range addrs{ data[i] = &backentry{ backend: NewBackend(addr), inflight: 0, } } return &Balancer{backends:data} } func(b *Balancer)Invoke(ctx context.Context, req Request) (Response, error){ b.mu.Lock() entry := b.best() atomic.AddInt64(&entry.inflight,1) b.mu.Unlock() defer atomic.AddInt64(&entry.inflight,-1) return entry.backend.Invoke(ctx,req) } func(b *Balancer) best() *backentry{ var best *backentry for _,entry := b.backends{ if best == nil || atomic.LoadInt64(&entry.inflight) < atomic.LoadInt64(&best.inflight){ best = entry } } return best }
Queue metodini amalga oshiring
// eng yaxshi() funksiyasi uchun kod parcha // backend mavjud emasligi holatida xatolikni boshqarish bilan
// eng yaxshi -- ??? // agar topilmasa, inflight bilan solishtiring