Golang
Descrivi il processo di raccolta e configurazione del servizio gRPC per test manuali o sviluppo
Come vengono implementati i meccanismi di restrizione dei livelli di isolamento delle transazioni a livello del sistema di gestione del database?
Cosa può andare storto durante la conversione di un segmento di byte in una stringa?
Quali conseguenze si verificano se i dati trasmessi attraverso il canale rimangono non letti?
Quale formato di lavoro consideri: remoto, ibrido o in ufficio?
Quali metodi possono essere utilizzati per garantire l'elaborazione di Kafka fino a 100.000 messaggi al secondo?
Come il processore centrale gestisce la distribuzione dei compiti tra le code di compiti interne e globali?
Puoi spiegare il principio di funzionamento e l'uso dell'oggetto sync.Pool in Go?
Quali operazioni esistono sui slice in Go?
Come si chiama il processo di spostamento degli elementi da una mappa all'altra?
/* Dobbiamo trasferire dati da una sorgente a un consumatore. La sorgente fornisce i dati in piccoli batch (~dieci record), mentre il consumatore funziona meglio con batch più grandi (~mille record). Un esempio reale è il trasferimento di dati da code di tipo Kafka a un database Clickhouse. Sorgente: - Quasi infinita. - La sorgente non restituisce mai più di MaxItems record in una chiamata a Next. - In una "sessione" (una chiamata alla funzione Pipe), la sorgente restituisce dati nuovi ad ogni chiamata a Next. - Tuttavia, dopo un riavvio, la sorgente ricomincia dalla posizione "confermata" precedente, indicata da cookie. Pertanto, *ogni* valore di cookie restituito da Next, dopo aver salvato i dati nel ricevitore, deve essere confermato con la chiamata a Commit, nello stesso ordine in cui sono stati restituiti da Next. Ricevitore: - Non può elaborare più di MaxItems alla volta. Livello base: È necessario implementare la funzione func Pipe(p Producer, c Consumer) error che legge i dati dalla sorgente, li raggruppa in un buffer di dimensione non superiore a MaxItems e li salva nel ricevitore, dopodiché conferma il progresso nella sorgente. Difficoltà: I metodi Next, Process e Commit sono legati a chiamate di rete e possono richiedere molto tempo. Per accelerare il processo, è necessario parallelizzare i processi di lettura, scrittura e conferma del progresso. In modo che, durante Process o Commit, la lettura dalla sorgente e la formazione del nuovo buffer continuino. */ const MaxItems = 9999 type Producer interface { // Next restituisce: // - un batch di elementi da elaborare // - una cookie da confermare quando l'elaborazione è completata // - un errore Next() (items []any, cookie int, err error) // Commit viene usato per marcare un batch di dati come processato Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
Come viene implementata l'operazione select nel linguaggio Go e come funziona con i canali?
È possibile sospendere l'esecuzione di una goroutine in modo che si blocchi su un thread di sistema specifico?
Il linguaggio Go ha il supporto integrato per gli array?
Quale meccanismo di astrazione nel linguaggio Go è destinato a rappresentare caratteri o token?
Quali metodi possono essere utilizzati per dividere un database tramite sharding?
Quali tipi di dati sono adatti per essere usati come chiave in una struttura dati Map?
Puoi spiegare il meccanismo di funzionamento del pianificatore di attività nel sistema operativo?
Puoi spiegare la struttura interna e il funzionamento di una tabella hash?
Hai esperienza nella risoluzione di problemi complessi legati all'uso di Go Modules nei tuoi progetti?