Wat is idempotentie?
Golang
Wat zijn kanalen in Go? Welke zijn er? Hoe zijn ze van binnen opgebouwd?
// Bij het bijwerken van een bestelling moeten we de bestelgegevens naar meerdere services sturen (derde partij API's) // het aantal services groeit (kan duizenden+ zijn) // we hebben de code geschreven, in het begin ging alles goed, maar na verloop van tijd begon onze service veel geheugen te gebruiken func (s *orderService) SendOrder(ctx context.Context, hosts []string, order Order) { for i := 0; i < len(hosts); i++ { go func() { // Stel je voor dat dit een lange netwerkoproep is response, err := s.httpClient.Send(ctx, hosts[i], order) if err != nil { s.logger.Error(ctx, "fout bij verzenden", err) return } s.logger.Info(ctx, "succes", response) }() } }
Wat is de context in Go? Wat is het verschil tussen context.WithTimeout en context.WithDeadline?
Welke manieren zijn er om strings te concatenëren in Go? Wat is het verschil tussen + en strings.Builder?
Wat is pessimistische blokkering?
Hoe is het cachen van gegevens geïmplementeerd? Welke cache-beleid werd gebruikt?
Hoe zorg je ervoor dat alle gebeurtenissen van een bestelling in één Kafka-partitie terechtkomen?
Wat gebeurt er met Redis en de clients als Redis vol is en de verwijderingsbeleid is uitgeschakeld?
Wat is een slice? Wat zit er onder de motorkap van een slice? Hoe werkt de functie append?
Wat is de Dead Letter Queue (DLQ)?
// tabel goederen: // ID | cnt_view // ----------- // 1 | 100 // twee gebruikers begonnen tegelijkertijd naar het product met id = 1 te kijken // en er zijn in onze database 2 parallelle transacties gestart // wat zal het resultaat zijn? 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() }
Wat zijn Mutex en RWMutex? Hoe verschillen ze?
Hoe is het getal van 25% berekend? Waarom niet 20 of 30?
Hoe werkt de garbage collector in Go? Wanneer wordt deze gestart? Kan deze handmatig worden gestart?
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 }
Wat zijn strings in Go? Wat stellen ze voor onder de motorkap?
Welke profiling tools zijn er in Go?
waren er nuances en moeilijkheden bij de implementatie van Kafka? Was dit je eerste implementatie-ervaring?
Wat is de uitlijning van structuren in Go? Hoe optimaliseer je de velden van een structuur in het geheugen?