Sobes.tech

Golang

Cos'è GOMAXPROCS? Cosa succede se si imposta un numero molto grande?

195

// Quando si aggiorna un ordine, dobbiamo inviare i dati dell'ordine a diversi servizi (API di terze parti) // il numero di servizi sta crescendo (potenzialmente migliaia+) // abbiamo scritto il codice, all'inizio tutto andava bene, ma col tempo il nostro servizio ha iniziato a consumare molta memoria func (s *orderService) SendOrder(ctx context.Context, hosts []string, order Order) { for i := 0; i < len(hosts); i++ { go func() { // Immaginiamo che sia una lunga chiamata di rete response, err := s.httpClient.Send(ctx, hosts[i], order) if err != nil { s.logger.Error(ctx, "fallimento nell'invio", err) return } s.logger.Info(ctx, "successo", response) }() } }

Middle+
194

Cosa sono i canali in Go? Quali ci sono? Come sono strutturati sotto il cofano?

194

Cos'è il contesto in Go? In cosa si differenziano context.WithTimeout e context.WithDeadline?

191

Quali sono i metodi di concatenazione delle stringhe in Go? Qual è la differenza tra + e strings.Builder?

189

Come è stato implementato il caching dei dati? Quale politica di caching è stata utilizzata?

187

Come fare in modo che tutti gli eventi di un ordine vadano in una singola partizione Kafka?

187

Cos'è la Dead Letter Queue (DLQ)?

184

Cos'è uno slice? Cosa c'è sotto il cofano di uno slice? Come funziona la funzione append?

184

Cosa succede con Redis e i clienti se Redis è pieno e le politiche di espulsione sono disattivate?

183

// tabella prodotti: // ID | cnt_view // ----------- // 1 | 100 // due utenti hanno iniziato a guardare il prodotto con id = 1 contemporaneamente // e nel nostro database sono state avviate 2 transazioni in parallelo // quale sarà il risultato? postgresql func IncrementView(ctx context.Context, db *sql.DB, id int64) error { tx, err := db.BeginTx(ctx, nil) if err != nil { return err } defer tx.Rollback() var cnt int err = tx.QueryRowContext(ctx, "SELECT cnt_view FROM goods WHERE id = $1", id, ).Scan(&cnt) if err != nil { return err } cnt++ _, err = tx.ExecContext(ctx, "UPDATE goods SET cnt_view = $1 WHERE id = $2", cnt, id, ) if err != nil { return err } return tx.Commit() }

Middle+
178

Cos'è Mutex e RWMutex? In cosa si differenziano?

175

func (r *OrderRepository) GetActiveOrderIDs(ctx context.Context, offset, limit int) ([]uint32, error) { var ( res []uint32 args []interface{} ) query := `SELECT id FROM "order" WHERE is_terminated = false LIMIT $1 OFFSET $2;` args = append(args, limit, offset) rows, err := r.slave.Query(ctx, query, args...) if err != nil { return nil, err } for rows.Next() { var orderID uint32 if err = rows.Scan(&orderID); err != nil { return nil, err } res = append(res, orderID) } return res, nil }

Middle+
172

Come è stato calcolato il 25%? Perché non 20 o 30?

172

Come funziona il garbage collector in Go? Quando viene avviato? Può essere avviato manualmente?

171

Cosa sono le stringhe in Go? Cosa rappresentano sotto il cofano?

169

Quali strumenti di profiling ci sono in Go?

167

Ci sono state sfumature e difficoltà nell'implementazione di Kafka? È stata la tua prima esperienza di implementazione?

166

Cos'è l'allineamento delle strutture in Go? Come ottimizzare i campi della struttura in memoria?

166
/3