Sobes.tech

Golang

Ce sunt canalele în Go? Care există? Cum sunt structurate în interior?

194

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

Middle+
194

Ce este contextul în Go? Care este diferența dintre context.WithTimeout și context.WithDeadline?

191

Care sunt metodele de concatenare a șirurilor în Go? Care este diferența dintre + și strings.Builder?

191

Cum a fost implementat caching-ul datelor? Ce politică de caching a fost utilizată?

187

Cum să faci ca toate evenimentele unui comand să ajungă într-o singură partiție Kafka?

187

Ce se întâmplă cu Redis și clienții dacă Redis este plin și politicile de evacuare sunt dezactivate?

187

Ce este un slice? Ce se află sub capota unui slice? Cum funcționează funcția append?

184

Ce este coada de scrisori moarte (DLQ)?

184

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

Middle+
178

Ce sunt Mutex și RWMutex? Cu ce diferă?

175

Cum s-a calculat cifra de 25%? De ce nu 20 sau 30?

174

Cum funcționează colectorul de gunoi în Go? Când se pornește? Poate fi pornit manual?

173

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

Ce sunt șirurile în Go? Ce reprezintă sub capotă?

169

Ce instrumente de profilare există în Go?

167

Au fost nuanțe și dificultăți în implementarea Kafka? A fost prima ta experiență de implementare?

166

Ce este alinierea structurilor în Go? Cum să optimizezi câmpurile structurii în memorie?

166
/3