Golang
Spiega brevemente le principali differenze tra i file system ext2 e ext4.
Come si può prevenire la comparsa di condizioni di gara durante l'elaborazione parallela dei dati?
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?
Qual è il vantaggio delle goroutine rispetto ai thread in termini di efficienza e facilità d'uso?
Quali parametri è possibile configurare per il funzionamento del pianificatore di attività?
Quali metodi possono essere utilizzati per garantire l'elaborazione di Kafka fino a 100.000 messaggi al secondo?
Come percepisci la situazione quando nel codice non viene indicato esplicitamente l'uso di un'interfaccia?
Parlami del progetto attuale su cui stai lavorando o che hai recentemente lavorato
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?
Cosa significa un valore nullo per una fetta in un linguaggio di programmazione?
Quali tipi di dati sono adatti per essere usati come chiave in una struttura dati Map?