Sobes.tech

Golang

Hai svolto compiti di leadership durante tutto il tuo lavoro?

117

Con quali database e altri sistemi di archiviazione dati hai lavorato?

114

In quale direzione saresti interessato a svilupparti in termini di compiti e vettore di carriera?

106

Perché stai considerando nuove offerte e perché hai lasciato la tua precedente azienda?

104

// codice per la funzione best() // con gestione degli errori per nessun backend disponibile

103

// codice per la funzione best() // con gestione degli errori per nessun backend disponibile

101

Come limitare il numero di goroutine in modo che non più di 'threads' metodi di Process vengano eseguiti contemporaneamente? Chi preleverà i compiti dal canale?

93

// codice per la funzione best() // con gestione degli errori per nessun backend disponibile

92

Su quante host o istanze operava il servizio? Quanti container sono stati avviati?

88

Chi legge il canale risultante e dove scrive il risultato in modo che il metodo Status possa accedervi?

88

// codice per la funzione best() // con gestione degli errori per nessun backend disponibile

86

// codice per la funzione best() // con gestione degli errori per nessun backend disponibile

84

// codice per la funzione best() // con gestione degli errori per nessun backend disponibile

78

Come implementare il metodo Status per ottenere lo stato del compito tramite ID?

72

// codice per la funzione best() // con gestione degli errori per nessun backend disponibile

65

type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr contiene ip:port di una istanza specifica func NewBackend(addr string) *BackendImpl type backentry struct { backend Backend inflight int64 } type Balancer struct { backends []*backentry mu *sync.Mutex } var _ Backend = &Balancer{} // addrs contengono gli indirizzi di tutte le istanze bilanciate 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 }

64

// codice per la funzione best() // con gestione degli errori per nessun backend disponibile

55

// cercando il migliore -- ??? // se non trovato, confronta inflight

48
/11