Was ist Idempotenz?
Golang
Was ist pessimistische Sperrung?
// Beim Aktualisieren einer Bestellung müssen wir die Bestelldaten an mehrere Dienste senden (Drittanbieter-APIs) // die Anzahl der Dienste wächst (kann Tausende+ sein) // Wir haben den Code geschrieben, am Anfang lief alles gut, aber mit der Zeit begann unser Dienst, viel Speicher zu verbrauchen func (s *orderService) SendOrder(ctx context.Context, hosts []string, order Order) { for i := 0; i < len(hosts); i++ { go func() { // Stellen wir uns vor, das ist ein langer Netzwerkanruf response, err := s.httpClient.Send(ctx, hosts[i], order) if err != nil { s.logger.Error(ctx, "Fehler beim Senden", err) return } s.logger.Info(ctx, "Erfolg", response) }() } }
Was sind Kanäle in Go? Welche gibt es? Wie sind sie im Inneren aufgebaut?
Wie wurde das Caching von Daten implementiert? Welche Caching-Politik wurde verwendet?
Wie man alle Ereignisse einer Bestellung in eine einzige Kafka-Partition einspeist?
Welche Möglichkeiten gibt es in Go, Strings zu konkatenieren? Was ist der Unterschied zwischen + und strings.Builder?
Was ist der Kontext in Go? Worin besteht der Unterschied zwischen context.WithTimeout und context.WithDeadline?
Was passiert mit Redis und den Clients, wenn Redis voll ist und die Eviktionsrichtlinien deaktiviert sind?
Was ist die Dead Letter Queue (DLQ)?
Was ist ein Slice? Was steckt unter der Haube eines Slices? Wie funktioniert die Funktion append?
// Tabelle Produkte: // ID | cnt_view // ----------- // 1 | 100 // Zwei Benutzer haben gleichzeitig begonnen, das Produkt mit id = 1 anzusehen // und in unserer Datenbank wurden 2 parallele Transaktionen gestartet // Was wird das Ergebnis sein? 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() }
Was sind Mutex und RWMutex? Worin unterscheiden sie sich?
Wie funktioniert der Garbage Collector in Go? Wann wird er gestartet? Kann man ihn manuell starten?
Wie wurde die Zahl 25 % berechnet? Warum nicht 20 oder 30?
Was sind Strings in Go? Was stellen sie unter der Haube dar?
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 }
Gab es Nuancen und Schwierigkeiten bei der Implementierung von Kafka? War dies Ihre erste Implementierungserfahrung?
Welche Profiling-Tools gibt es in Go?
Was ist die Speicheranordnung von Strukturen in Go? Wie kann man die Felder einer Struktur im Speicher optimieren?