Golang
Parlami del bug più memorabile in produzione: cos'era, come l'hai risolto e quali conclusioni hai tratto?
Parlami della tua ultima esperienza lavorativa
Come funziona il garbage collector in Go? Descrivi le fasi e l'algoritmo.
Hai scritto molte attività tecniche. Per favore, raccontami quali compiti di prodotto hanno aiutato a risolvere.
Quali metriche? Con quali strumenti registreremo queste metriche?
Impressione generale del colloquio, livello del candidato, raccomandazioni
Cosa sono le sonde (probes) in Kubernetes, come configurarle e quali sono i tipi?
Ora vogliamo andare su HeadHunter e cercare candidati per filtri — come architettarlo?
Cosa mostrerà il codice con slice e passaggio a una funzione? Come funziona il passaggio di uno slice a una funzione?
Hai esperienza di partecipazione a screening tecnici o colloqui?
Compito: c'è un callback che si attiva 100.000 volte al secondo, fornendo dati binari. È necessario consegnarli al server centrale. Quali sono le insidie e le buone pratiche?
Implementa una funzione che accetta []any e delta int. È necessario aumentare di delta solo le prime occorrenze di numeri unici (int). Altri tipi e numeri ripetuti devono essere lasciati invariati. La funzione deve restituire la lista aggiornata e 2 numeri: updated – quanti numeri unici sono stati modificati, duplicates – quanti elementi numerici sono risultati duplicati func IncrementUniqueIntsInMixed(xs []any, delta int) ([]any, int, int) { // il tuo codice } // Esempio: xs := []any{1, "a", 5, "b", 1, 0, 5} u, d, s := IncrementUniqueIntsInMixed(xs, 3) // xs == []any{4, "a", 8, "b", 1, 3, 5} // u == 3 // numeri unici: 1, 5, 0 // d == 2 // numeri duplicati: secondo 1, secondo 5
Cos'è una goroutine? In cosa consiste la sua leggerezza?
// Esiste un'interfaccia Backend con il metodo Execute // È necessario scrivere un bilanciatore di carico // Il bilanciatore soddisfa l'interfaccia Backend // Il compito del bilanciatore è accettare una richiesta e delegarla a uno dei backend disponibili // Il bilanciatore contiene in sé una collezione di backend // Durante l'esecuzione di una richiesta, il bilanciatore sceglie uno dei backend secondo un certo algoritmo // // Algoritmo Least Connection, controllo dello stato e recupero automatico, sicurezza thread-safe tramite atomic, trasmissione del contesto per l'annullamento, soglia di errori per disconnettere un backend // Request rappresenta la richiesta in ingresso per il Backend. type Request struct { // Payload – dati arbitrari della richiesta. Payload []byte } // Response rappresenta la risposta dal Backend. type Response struct { // Payload – dati arbitrari della risposta. Payload []byte } // Backend – interfaccia che definisce il metodo per eseguire una richiesta type Backend interface { Execute(ctx context.Context, req Request) (Response, error) } type Balancer struct { backends []Backend } func NewBalancer(backends []Backend) *Balancer { return &Balancer{backends: backends} } func (b *Balancer) Execute(ctx context.Context, req Request) (Response, error) { // todo: implementare la logica del bilanciatore return Response{}, nil } type TestBackend struct { }
Come hai calcolato che il p95 è diminuito del 16%?
Il timeout è lo stesso per tutti? Come verrà calcolato questo timeout?
// Stringa s fornita. Trova la lunghezza della sottostringa più lunga senza caratteri ripetuti. // Esempi: // s = "abcabcbb", risposta: 3 ("abc") // s = "cccccccc", risposta: 1 ("c") // s = "pwwkew", risposta: 3 ("wke") // s = "", risposta: 0 // La stringa s è composta da lettere inglesi, numeri, simboli e spazi func lengthOfLongestSubstring(s string) int { return 0 }
Cosa succede quando inserisci [sito] nel browser? Raccontami nel massimo dettaglio quali protocolli vengono utilizzati
Hai utilizzato approcci per transazioni distribuite?
Quale colore degli oggetti viene rimosso alla fine del lavoro del raccoglitore di rifiuti?