Sobes.tech

Golang

Was ist pessimistische Sperrung?

196

// 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) }() } }

Middle+
196

Was sind Kanäle in Go? Welche gibt es? Wie sind sie im Inneren aufgebaut?

194

Wie wurde das Caching von Daten implementiert? Welche Caching-Politik wurde verwendet?

193

Wie man alle Ereignisse einer Bestellung in eine einzige Kafka-Partition einspeist?

193

Welche Möglichkeiten gibt es in Go, Strings zu konkatenieren? Was ist der Unterschied zwischen + und strings.Builder?

191

Was ist der Kontext in Go? Worin besteht der Unterschied zwischen context.WithTimeout und context.WithDeadline?

191

Was passiert mit Redis und den Clients, wenn Redis voll ist und die Eviktionsrichtlinien deaktiviert sind?

189

Was ist die Dead Letter Queue (DLQ)?

184

Was ist ein Slice? Was steckt unter der Haube eines Slices? Wie funktioniert die Funktion append?

184

// 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() }

Middle+
178

Was sind Mutex und RWMutex? Worin unterscheiden sie sich?

177

Wie funktioniert der Garbage Collector in Go? Wann wird er gestartet? Kann man ihn manuell starten?

177

Wie wurde die Zahl 25 % berechnet? Warum nicht 20 oder 30?

176

Was sind Strings in Go? Was stellen sie unter der Haube dar?

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

Gab es Nuancen und Schwierigkeiten bei der Implementierung von Kafka? War dies Ihre erste Implementierungserfahrung?

169

Welche Profiling-Tools gibt es in Go?

167

Was ist die Speicheranordnung von Strukturen in Go? Wie kann man die Felder einer Struktur im Speicher optimieren?

166
/3