De ce vrei să te schimbi și iei în considerare alte companii?
Golang
// cod pentru funcția best() // cu gestionare a erorilor pentru cazul în care nu există backend disponibil
De ce ai decis să comunici cu 2GIS? Ce te-a atras la companie sau la o anumită poziție?
Ai lucrat vreodată cu accesul concurent la date într-o bază de date? Ce mecanisme, cum ar fi tranzacțiile și blocările, ai folosit? Există modalități de a rezolva această problemă fără a implica baza de date?
// cod pentru funcția best() // cu gestionare a erorilor pentru cazul în care nu există backend disponibil
Cum este gestionat acest lucru în cod?
type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr conține ip:port-ul unei instanțe specifice func NewBackend(addr string) *BackendImpl type backentry struct { backend Backend inflight int64 } type Balancer struct { backends []*backentry mu *sync.Mutex } var _ Backend = &Balancer{} // addrs conțin adresele tuturor instanțelor balansabile 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 }
// cod pentru funcția best() // cu gestionare a erorilor pentru cazul în care nu există backend disponibil
Există programare orientată pe obiecte în Go? Dacă da, cum este implementată; dacă nu, de ce?
Ce este cel mai important pentru tine la muncă?
Ce returnează citirea dintr-un canal închis?
Cum ai organizat scalarea și cu ce arhitecturi de microservicii ai lucrat?
Când apare o scurgere de goroutine-uri?
Cum să implementați metoda Status pentru a obține starea sarcinii după ID?
Ce se întâmplă cu programul dacă apare o panică într-o goroutine separată?
Cum diferă sync.Mutex de sync.RWMutex?
Descrie procesul tău de dezvoltare și implementare a unui nou serviciu: de la colectarea cerințelor până la implementarea în mediile de dezvoltare și testare.
Cum a fost realizat deployment-ul serviciilor?
Implementați metoda Queue
Cum a fost structurat exact procesul de încărcare sau construire a acestor date?