Golang
Heb je ooit gewerkt met gelijktijdige gegevens toegang in een database? Welke mechanismen zoals transacties en locks heb je gebruikt? Zijn er manieren om dit probleem op te lossen zonder de database te betrekken?
// code voor de best() functie // met foutafhandeling voor geen backend beschikbaar
Hoe communiceerde je de vereisten voor het implementeren van een service in Kubernetes aan het DevOps-team: in welk formaat documenteerde je de werking van de service en hoe werd de interactie opgebouwd?
Wat is het verschil tussen methoden met een waarde-ontvanger en een pointer-ontvanger in Go, en wanneer kies je elk?
// code voor de best() functie // met foutafhandeling voor geen backend beschikbaar
// code voor de best() functie // met foutafhandeling voor geen backend beschikbaar
Is er objectgeoriënteerd programmeren in Go? Zo ja, hoe wordt het geïmplementeerd; zo nee, waarom?
Wat is het belangrijkste voor jou in werk?
Wat geeft het lezen uit een gesloten kanaal terug?
Hoe heb je schaalvergroting georganiseerd en met welke microservice-architecturen heb je gewerkt?
Wanneer treedt een goroutine-lek op?
Hoe implementeer je de Status-methode om de taakstatus op te halen op basis van ID?
Wat gebeurt er met het programma als er in een aparte goroutine een panic optreedt?
Hoe wordt dit in de code afgehandeld?
type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr bevat ip:port van een specifieke instantie func NewBackend(addr string) *BackendImpl type backentry struct { backend Backend inflight int64 } type Balancer struct { backends []*backentry mu *sync.Mutex } var _ Backend = &Balancer{} // addrs bevatten de adressen van alle balanceerbare instanties 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 }
Hoe verschilt sync.Mutex van sync.RWMutex?
Beschrijf je proces van het ontwikkelen en implementeren van een nieuwe service: van het verzamelen van vereisten tot implementatie op ontwikkel- en testomgevingen.
Hoe is de deployment van services uitgevoerd?
Implementeer de Queue-methode
Hoe was het proces van het laden of bouwen van deze gegevens precies gestructureerd?