Valósítsa meg a Queue módszert
Golang
Miért szeretnél váltani, és más cégeket is fontolóra veszel?
// kód a best() függvényhez // hibakezeléssel, ha nincs backend elérhető
Miért döntöttél úgy, hogy kapcsolatba lépsz a 2GIS-sel? Mi vonzott a cégnél vagy egy adott pozícióban?
Valaha dolgozott-e párhuzamos adat-hozzáféréssel egy adatbázisban? Milyen mechanizmusokat, például tranzakciókat és zárolásokat használt? Vannak-e módok ennek a problémának a megoldására anélkül, hogy az adatbázist bevonnánk?
// kód a best() függvényhez // hibakezeléssel, ha nincs backend elérhető
Hogyan kezelik ezt a kódban?
type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr egy adott példány ip:port címe func NewBackend(addr string) *BackendImpl type backentry struct { backend Backend inflight int64 } type Balancer struct { backends []*backentry mu *sync.Mutex } var _ Backend = &Balancer{} // addrs tartalmazza az összes kiegyensúlyozható példány címét 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 }
// kód a best() függvényhez // hibakezeléssel, ha nincs backend elérhető
Van-e objektum-orientált programozás a Go-ban? Ha igen, hogyan valósul meg; ha nem, miért?
Mi a legfontosabb számodra a munkában?
Mit ad vissza az olvasás egy zárt csatornából?
Hogyan szervezte meg a skálázást, és milyen mikroszerviz architektúrákkal dolgozott?
Mikor fordul elő goroutine szivárgás?
Hogyan valósítsuk meg a Status metódust, hogy az ID alapján megkapjuk a feladat állapotát?
Mi történik a programmal, ha egy külön gorutínában panic történik?
Mi történik, amikor egy kliens megszakít egy HTTP-kérést?
Miben különbözik a sync.Mutex a sync.RWMutex-től?
Írja le az új szolgáltatás fejlesztési és telepítési folyamatát: a követelmények összegyűjtésétől a fejlesztési és tesztkörnyezetekbe való telepítésig.
Hogyan történt a szolgáltatások telepítése?