Golang
Come viene implementato in Go il lavoro con stati di panico e la gestione degli errori causati da situazioni di emergenza?
Cosa si è fatto esattamente con i duplicati dopo la scoperta? Dove sono stati puliti?
Quali metodi e strumenti hai utilizzato per analizzare e determinare le cause dei problemi di carico nei sistemi?
Quali comandi usi di solito nel sistema operativo Linux?
Quali approcci possono essere utilizzati per garantire la sicurezza dei thread quando si lavora con slice in un ambiente multithread?
Quali operazioni sono consentite quando si lavora con uno slice nil nel linguaggio di programmazione?
Parla di un compito difficile che sei riuscito a risolvere scrivendo uno script per il sistema Linux
Come si può regolare la quantità di dati memorizzati nella cache?
Disponibilità a ricoprire il ruolo di unico specialista Backend nel team
Qual è la ragione principale per usare il tipo sync.Map in Go?
Quali sono le buone pratiche e gli antipattern nei test unitari? Come capire se i test sono buoni?
Quali sono i vantaggi e gli svantaggi dell'utilizzo della cache nei sistemi?
func Exclude(a, b []int) []int { set := make(map[int]struct{}) for _, v := range b { set[v] = struct{}{} } result := make([]int, 0) for _, v := range a { if _, ok := set[v]; !ok { result = append(result, v) } } return result } Errore di compilazione # command-line-arguments ./main.go:39:32: errore di sintassi: nuova riga inaspettata, atteso { dopo la clausola if
Hai mai incontrato difficoltà nell'implementare interazioni tra diversi servizi?
Come viene passata una fetta (slice) a una funzione in un linguaggio di programmazione?
Cos'è il pattern Saga?
Perché non hanno preso Testcontainers?
/* Dobbiamo trasferire dati da una fonte a un consumatore. La fonte fornisce i dati in piccoli batch (~decine di record), mentre il consumatore funziona in modo più efficiente con batch più grandi. Un esempio reale è il trasferimento di dati da code di tipo Kafka al database Clickhouse. Fonte: - Quasi infinita. - La fonte non restituisce mai più di MaxItems record in una singola chiamata a Next. - All'interno di una "sessione" (una chiamata alla funzione Pipe), la fonte restituisce nuovi dati ad ogni Next. - Tuttavia, dopo un riavvio, la fonte ricomincerà 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 una chiamata a Commit, nello stesso ordine in cui sono stati restituiti da Next. Ricevitore: - Non può elaborare più di MaxItems alla volta. Livello di base: È necessario implementare la funzione func Pipe(p Producer, c Consumer) error che legge i dati dalla fonte, li raggruppa in un buffer di dimensione non superiore a MaxItems e li salva nel ricevitore, e poi conferma il progresso nella fonte. */ const MaxItems = 9999 type Producer interface { // Next restituisce: // - batch di elementi da elaborare // - cookie da confermare al termine dell'elaborazione // - errore Next() (items []any, cookie int, err error) // Commit viene usato per marcare il batch di dati come processato Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { var buf []any var cookies []int for { items, cookie, err := p.Next() if err != nil { return err } buf = append(buf, items...) cookies = append(cookies, cookie) if len(buf) >= MaxItems { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } buf = buf[:0] cookies = nil } } if len(buf) > 0 { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } } return nil }
Una tabella con (id PRIMARY KEY, data JSON) è un indice PostgreSQL abbastanza buono per la ricerca per chiave?
Qual è la differenza tra virtualizzazione e containerizzazione?