Ce este idempotenta?
Golang
Ce sunt canalele în Go? Care există? Cum sunt structurate în interior?
// La actualizarea unei comenzi, trebuie să trimitem datele comenzii către mai multe servicii (API-uri terțe) // numărul de servicii crește (poate fi mii+) // am scris codul, la început totul mergea bine, dar cu timpul serviciul nostru a început să consume multă memorie func (s *orderService) SendOrder(ctx context.Context, hosts []string, order Order) { for i := 0; i < len(hosts); i++ { go func() { // Să presupunem că acesta este un apel de rețea lung response, err := s.httpClient.Send(ctx, hosts[i], order) if err != nil { s.logger.Error(ctx, "eșec la trimitere", err) return } s.logger.Info(ctx, "succes", response) }() } }
Ce este contextul în Go? Care este diferența dintre context.WithTimeout și context.WithDeadline?
Care sunt metodele de concatenare a șirurilor în Go? Care este diferența dintre + și strings.Builder?
Ce este blocarea pesimistă?
Cum a fost implementat caching-ul datelor? Ce politică de caching a fost utilizată?
Cum să faci ca toate evenimentele unui comand să ajungă într-o singură partiție Kafka?
Ce se întâmplă cu Redis și clienții dacă Redis este plin și politicile de evacuare sunt dezactivate?
Ce este un slice? Ce se află sub capota unui slice? Cum funcționează funcția append?
Ce este coada de scrisori moarte (DLQ)?
// tabelul de bunuri: // ID | cnt_view // ----------- // 1 | 100 // doi utilizatori au început să vizioneze produsul cu id = 1 în același timp // și în baza noastră de date au fost lansate 2 tranzacții paralele // care va fi rezultatul? 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() }
Ce sunt Mutex și RWMutex? Cu ce diferă?
Cum s-a calculat cifra de 25%? De ce nu 20 sau 30?
Cum funcționează colectorul de gunoi în Go? Când se pornește? Poate fi pornit manual?
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 }
Ce sunt șirurile în Go? Ce reprezintă sub capotă?
Ce instrumente de profilare există în Go?
Au fost nuanțe și dificultăți în implementarea Kafka? A fost prima ta experiență de implementare?
Ce este alinierea structurilor în Go? Cum să optimizezi câmpurile structurii în memorie?