Haben Sie während Ihrer gesamten Berufstätigkeit Führungsaufgaben übernommen?
Golang
Mit welchen Datenbanken und anderen Datenspeichersystemen haben Sie gearbeitet?
In welche Richtung wären Sie interessiert, sich in Bezug auf Aufgaben und Karrieresektor zu entwickeln?
Warum ziehen Sie neue Angebote in Betracht und warum haben Sie Ihr vorheriges Unternehmen verlassen?
// Code für die best() Funktion // mit Fehlerbehandlung, falls kein Backend verfügbar ist
// Code für die best() Funktion // mit Fehlerbehandlung, falls kein Backend verfügbar ist
Wie kann man die Anzahl der Goroutines begrenzen, sodass nicht mehr als 'threads' Methoden von Process gleichzeitig laufen? Wer wird die Aufgaben aus dem Kanal holen?
// Code für die best() Funktion // mit Fehlerbehandlung, falls kein Backend verfügbar ist
Auf wie vielen Hosts oder Instanzen lief der Dienst? Wie viele Container wurden gestartet?
Wer liest den resultierenden Kanal und wo schreibt er dann das Ergebnis, damit die Status-Methode darauf zugreifen kann?
// Code für die best() Funktion // mit Fehlerbehandlung, falls kein Backend verfügbar ist
// Code für die best() Funktion // mit Fehlerbehandlung, falls kein Backend verfügbar ist
// Code für die best() Funktion // mit Fehlerbehandlung, falls kein Backend verfügbar ist
Implementieren Sie die Methode Queue
Wie implementiert man die Methode Status, um den Status der Aufgabe anhand der ID zu erhalten?
// Code für die best() Funktion // mit Fehlerbehandlung, falls kein Backend verfügbar ist
type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr enthält ip:port einer spezifischen Instanz func NewBackend(addr string) *BackendImpl type backentry struct { backend Backend inflight int64 } type Balancer struct { backends []*backentry mu *sync.Mutex } var _ Backend = &Balancer{} // addrs enthalten die Adressen aller balancierbaren Instanzen 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 }
Implementieren Sie die Methode Queue
// Code für die best() Funktion // mit Fehlerbehandlung, falls kein Backend verfügbar ist
// Suche nach dem Besten -- ??? // Falls nicht gefunden, vergleiche inflight