Golang
type Balancer struct { // TODO backends []*BackendImpl index int mu sync.Mutex N int K time.Duration } var _ Backend = &Balancer{} func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { if len(b.backends) == 0 { return nil, fmt.Errorf("Backends skaičius slice 0") } b.mu.Lock() index := b.index for b.backends[index].banned { b.index = (b.index + 1) % len(b.backends) index = b.index } b.index = (b.index + 1) % len(b.backends) b.mu.Unlock() backend := b.backends[index] resp, err := backend.Backend.Invoke(ctx, req) if err != nil && backend.countErrors < b.N { backend.mu.Lock() backend.countErrors += 1 if backend.countErrors == b.N { backend.banned = true go func() { time.Sleep(b.K) backend.mu.Lock() defer backend.mu.Unlock() backend.banned = false backend.countErrors = 0 }() } backend.mu.Unlock() } return resp, err } // addrs apima visų balansuotų instancijų adresus func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImplF, len(addrs)) for _, addr := range addrs { implF := BackendImplF{ Backend: NewBackend(addr), } backends = append(backends, &implF) } }
Kokia yra vidutinė algoritminė sudėtingumas skaityti iš hash lentelės?
Ar buvo užduočių, kurias visiškai nenorėjote daryti? Kaip susidorojo su nemaloniais uždaviniais?
[vardas] paklausė: ar teko dirbti su TCP, UDP ar kitais protokolais?
Kiek turėjote Postgres instancijų projekte?
Naudojote Plane ar Telegram?
Parašykite kodą su worker pool'u, kad apdorotumėte URL sąrašą su paraleliniais HTTP užklausomis.
Papaskinkite apie komandos sudėtį ir plėtros procesus (sprintai, užduočių paskirstymas, kodo peržiūra).
Ar turi įsivaizdavimą apie srauto ir proceso skirtumą?
Kokius kriterijus renkatės naujai darbo vietai?
Ar Go atlieka šiukšlių surinkėjas yra blokuojantis ar ne? Ar jo poveikis matomas gamyboje?
Kas yra graceful shutdown?
Kaip atrodo jūsų darbo paskirstymas — ką perduodate kolegoms po kodo rašymo?
Kokiais kriterijais pasirinksi pasiūlymą, jei jų bus keletas?
Kaip veikia Go planuotojas? Papasakokite pagrindinius punktus.
Papaskink apie savo kuriamą pritaikytą logų analizės įrankį (ant OpenTelemetry). Kokia buvo tavo vaidmuo?
Kuo skiriasi Kafka nuo RabbitMQ?
Kokios konkrečios sinchronizacijos primitivas yra Go?
Kodėl dabar nusprendėte ieškoti naujo darbo ir palikti [įmonę]?
Kokios sinchronizacijos primitivas yra Go? Kuo skiriasi Mutex ir RWMutex? Kada naudoti atomics?