Sobes.tech

Golang

Jaka była największa ilość przechowywanych danych?

117

Z jakimi bazami danych i innymi systemami przechowywania danych pracowałeś?

116

// kod dla funkcji best() // z obsługą błędów, gdy brak backendu

109

W jakim kierunku byłbyś zainteresowany rozwojem pod względem zadań i wektora kariery?

106

Dlaczego rozważasz nowe oferty i dlaczego opuściłeś swoją poprzednią firmę?

104

// kod dla funkcji best() // z obsługą błędów, gdy brak backendu

101

Jak ograniczyć liczbę goroutine, aby jednocześnie nie działało więcej niż 'threads' metod Process? Kto będzie wyciągał zadania z kanału?

100

// kod dla funkcji best() // z obsługą błędów, gdy brak backendu

92

// kod dla funkcji best() // z obsługą błędów, gdy brak backendu

90

Kto odczytuje kanał wynikowy i gdzie zapisuje wynik, aby metoda Status mogła do niego uzyskać dostęp?

88

Na ilu hostach lub instancjach działała usługa? Ile kontenerów zostało uruchomionych?

88

// kod dla funkcji best() // z obsługą błędów, gdy brak backendu

84

// kod dla funkcji best() // z obsługą błędów, gdy brak backendu

84

Jak zaimplementować metodę Status, aby uzyskać stan zadania po ID?

72

type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr содержит ip:port конкретного экземпляра func NewBackend(addr string) *BackendImpl type backentry struct { backend Backend inflight int64 } type Balancer struct { backends []*backentry mu *sync.Mutex } var _ Backend = &Balancer{} // addrs содержат адреса всех балансируемых экземпляров 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 }

68

// kod dla funkcji best() // z obsługą błędów, gdy brak backendu

67

// kod dla funkcji best() // z obsługą błędów, gdy brak backendu

57

// szukając najlepszego -- ??? // jeśli nie znajdziesz, porównaj inflight

48
/11