Golang
Nega 2GIS bilan muloqot qilishga qaror qildingiz? Sizni kompaniya yoki aniq bir vakansiya nima bilan qiziqtirdi?
Ma'lumotlar bazasida bir vaqtning o'zida ma'lumotlarga kirish bilan ishladingizmi? Qaysi mexanizmlar, masalan, tranzaktsiyalar va bloklar, siz foydalaningiz? Bu muammoni ma'lumotlar bazasini ishtirok etmasdan hal qilishning usullari bormi?
// eng yaxshi() funksiyasi uchun kod parcha // backend mavjud emasligi holatida xatolikni boshqarish bilan
Kubernetesda xizmatni joylashtirish uchun talablarni DevOps jamoasiga qanday yetkazdingiz: xizmatning ishlashini qanday formatda hujjatlab, qanday qilib o'zaro ta'sirni qurdingiz?
Go-da qiymat qabul qiluvchi va ko‘rsatkich qabul qiluvchi metodlar o‘rtasidagi farq nima va qachon har birini tanlash kerak?
// 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
Go-da ob'ektga yo'naltirilgan dasturlash mavjudmi? Agar ha bo'lsa, qanday amalga oshiriladi; agar yo'q bo'lsa, nima uchun?
Siz uchun ishda eng muhim narsa nima?
Yakuniy kanaldan o'qish nima qaytaradi?
Qanday qilib miqyoslashni tashkil qildingiz va qaysi mikroxizmat arxitekturalari bilan ishladingiz?
Qachon goroutine oqishi yuzaga keladi?
ID bo'yicha vazifa holatini olish uchun Status metodini qanday amalga oshirish mumkin?
Alohida goroutine-da panic yuzaga kelsa, dasturga nima bo'ladi?
Bu kodda qanday boshqariladi?
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 }
sync.Mutex ilə sync.RWMutex arasındaki fərq nədir?
Yangi xizmatni ishlab chiqish va joylashtirish jarayoningizni tavsiflang: talablarni yig'ishdan boshlab ishlab chiqish va test muhitlariga joylashtirishgacha.
Xizmatlarni joylashtirish qanday amalga oshirilgan?
Queue metodini amalga oshiring