Sobes.tech

Golang

Co jsou to kanály v Go? Jaké existují? Jak jsou strukturovány pod kapotou?

194

// Při aktualizaci objednávky musíme odeslat údaje o objednávce na několik služeb (API třetích stran) // počet služeb roste (může být tisíce+) // napsali jsme kód, zpočátku vše fungovalo dobře, ale časem naše služba začala spotřebovávat hodně paměti func (s *orderService) SendOrder(ctx context.Context, hosts []string, order Order) { for i := 0; i < len(hosts); i++ { go func() { // Představme si, že je to dlouhý síťový volání response, err := s.httpClient.Send(ctx, hosts[i], order) if err != nil { s.logger.Error(ctx, "nepodařilo se odeslat", err) return } s.logger.Info(ctx, "úspěch", response) }() } }

Middle+
194

Co je to context v Go? Čím se liší context.WithTimeout od context.WithDeadline?

191

Jaké jsou způsoby spojování řetězců v Go? V čem je rozdíl mezi + a strings.Builder?

191

Co je to pesimistické blokování?

190

Jak zajistit, aby všechny události jednoho objednávky šly do jedné partition Kafka?

187

Co se stane s Redisem a klienty, pokud je Redis plný a politiky vyřazení jsou vypnuté?

187

Jak bylo implementováno ukládání dat do mezipaměti? Jaká politika mezipaměti byla použita?

187

Co je Dead Letter Queue (DLQ)?

184

Co je to slice? Co je pod kapotou slice? Jak funguje funkce append?

184

// tabulka zboží: // ID | cnt_view // ----------- // 1 | 100 // dva uživatelé začali současně sledovat zboží s id = 1 // a v naší databázi byly spuštěny 2 paralelní transakce // jaký bude výsledek? 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

Jak bylo vypočítáno číslo 25 %? Proč ne 20 nebo 30?

176

Co je to Mutex a RWMutex? Čím se liší?

175

Jak funguje sběrač odpadu v Go? Kdy se spouští? Lze ho spustit ručně?

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

Co jsou řetězce v Go? Co představují pod kapotou?

169

Jaké nástroje pro profilování jsou v Go?

167

Byly při zavádění Kafka nějaké nuance a potíže? Byla to vaše první zkušenost s implementací?

166

Co je to zarovnání struktur v Go? Jak optimalizovat pole struktur v paměti?

166
/3