Sobes.tech

Golang

// Kada ažurirate narudžbinu, morate poslati podatke o narudžbini na više usluga (API treće strane) // broj usluga raste (može biti hiljade+) // napisali smo kod, na početku je sve išlo dobro, ali vremenom je naša usluga počela da troši mnogo memorije func (s *orderService) SendOrder(ctx context.Context, hosts []string, order Order) { for i := 0; i < len(hosts); i++ { go func() { // Zamislimo da je ovo dug poziv mreže response, err := s.httpClient.Send(ctx, hosts[i], order) if err != nil { s.logger.Error(ctx, "neuspešno slanje", err) return } s.logger.Info(ctx, "uspešno", response) }() } }

Middle+
194

Šta su kanali u Go? Koje postoje? Kako su strukturirani ispod haube?

192

Šta je context u Go? Čime se razlikuje context.WithTimeout od context.WithDeadline?

191

Šta je pesimistička blokada?

190

Koje su metode spajanja nizova u Go? Koja je razlika između + i strings.Builder?

189

Kako je implementirano keširanje podataka? Koja je politika keširanja korišćena?

187

Šta su generici u Go? Kako ih razumeš?

185

Kako osigurati da svi događaji za jednu narudžbu idu u jednu particiju Kafka?

185

Šta je Dead Letter Queue (DLQ)?

184

Šta je slice? Šta se nalazi ispod haube slice-a? Kako funkcioniše funkcija append?

184

Šta će se desiti sa Redisom i klijentima ako je Redis pun i politike istisnjenja su isključene?

181

// таблица с товарами: // ID | cnt_view // ----------- // 1 | 100 // два пользователя начали одновременно просматривать товар с id = 1 // и в нашей базе данных запущены 2 параллельные транзакции // какой будет результат? 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

Šta su Mutex i RWMutex? Čime se razlikuju?

175

Kako je izračunat broj od 25%? Zašto ne 20 ili 30?

172

Kako radi sakupljač smeća u Go? Kada se pokreće? Može li se pokrenuti ručno?

171

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+
170

Koji alati za profilisanje postoje u Go?

167

Šta su nizovi u Go? Šta predstavljaju ispod haube?

167

Da li su postojale nijanse i poteškoće prilikom implementacije Kafka? Da li je ovo bilo vaše prvo iskustvo sa implementacijom?

166

Kako locirati problem sa timeout-om u distribuiranom sistemu? Gde gledati?

164
/3