Какво е GOMAXPROCS? Какво ще стане, ако зададете много голямо число?
Golang
Какви са каналите в Go? Кои съществуват? Как са структурирани под капака?
// При актуализиране на поръчка, трябва да изпратим данните за поръчката към няколко услуги (API на трети страни) // броят на услугите расте (може да са хиляди+) // написахме кода, в началото всичко вървеше добре, но с времето нашата услуга започна да консумира много памет func (s *orderService) SendOrder(ctx context.Context, hosts []string, order Order) { for i := 0; i < len(hosts); i++ { go func() { // Представете си, че това е дълго мрежово повикване response, err := s.httpClient.Send(ctx, hosts[i], order) if err != nil { s.logger.Error(ctx, "неуспешно изпращане", err) return } s.logger.Info(ctx, "успех", response) }() } }
Какво е песимистично блокиране?
Какви начини има за конкатениране на низове в Go? Каква е разликата между + и strings.Builder?
Какво е контекст в Go? Каква е разликата между context.WithTimeout и context.WithDeadline?
Какво ще се случи с Redis и клиентите, ако Redis е пълен и политиките за изтласкване са изключени?
Как да направим така, че всички събития по една поръчка да попадат в една партиция на Kafka?
Как беше реализирано кеширането на данни? Каква политика за кеширане беше използвана?
Какво е Dead Letter Queue (DLQ)?
Какво е слайс? Какво е под капака на слайса? Как работи функцията append?
// таблица с стоки: // 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() }
Как беше изчислено числото 25%? Защо не 20 или 30?
Какво е Mutex и RWMutex? Как се различават?
Как работи събирачът на боклук в Go? Кога се стартира? Може ли да се стартира ръчно?
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 }
Какви са низовете в Go? Какво представляват под капака?
Какви инструменти за профилиране има в Go?
Какво е подравняването на структури в Go? Как да оптимизираме полетата на структурата в паметта?
Имаха ли нюанси и трудности при внедряването на Kafka? Това беше ли първият ви опит?