Golang
In quale grafico hai visto il problema durante l'uso di pprof?
Di cosa ti occupavi esattamente nel tuo attuale lavoro? Qual è la tua area di responsabilità?
Cosa sono i timeout e li usi nel tuo lavoro?
Raccontami, qual è il tuo progetto attuale, di quale parte della funzionalità sei responsabile?
Quando è meglio usare Mutex e quando Channel?
Come si chiama in Go l'approccio in cui crei un canale, lo chiudi e poi ne leggi? Qual è il vantaggio di chiudere un canale rispetto a inviare un valore?
Cos'è una goroutine e come funziona?
Qual era la composizione del team? Era monofunzionale o cross-funzionale?
Su quanti host/istanze funzionava il servizio più carico?
Quali sono le caratteristiche del comportamento di una goroutine quando chiama funzioni di sistema sincrone?
Come sono strutturati i test nel team — chi cosa scrive, quale copertura, ci sono E2E?
Codifica dal vivo: aggiungi un timeout alla funzione — se l'esecuzione supera 1 secondo, restituisci un errore. Uso di select, time.After, context.
Come implementare una Dead Letter Queue (DLQ) in Kafka?
Cosa sarebbe interessante per te in un nuovo lavoro?
Cos'è TLS e a cosa serve un certificato?
Lavori ancora in [azienda]? Quando prevedi di andartene e perché?
Quali stati ha una goroutine?
Qual è la differenza tra un bilanciatore di carico L4 e uno L7?
Perché si sono usati contemporaneamente Kafka e gRPC? Quali scenari sono passati attraverso Kafka e quali attraverso gRPC?
/* Esiste un'applicazione con architettura a microservizi. Un microservizio può essere astratto tramite un'interfaccia Backend. Per accedere a un'istanza del microservizio, si può usare il tipo BackendImpl, che è già implementato. Ogni microservizio ha diverse decine di istanze in esecuzione, ciascuna accessibile tramite il proprio indirizzo addr. Tuttavia, le singole istanze del microservizio non sono affidabili: potrebbero fallire, essere inaccessibili o sovraccariche. Per questo, devi implementare il tipo Balancer, che implementa anche l'interfaccia Backend e effettua il bilanciamento del carico lato client tra le istanze del microservizio, scegliendo ogni volta l'istanza **meno caricata**. */ type Request interface{} type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr contiene ip:porta di una specifica istanza func NewBackend(addr string) *BackendImpl type Balancer struct { // TODO } var _ Backend = &Balancer{} // addrs contengono gli indirizzi di tutte le istanze bilanciate func NewBalancer(addrs []string) *Balancer { // TODO }