Идемпотенттүүлүк эмне?
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да context деген эмне? context.WithTimeout менен context.WithDeadline ортосунда эмнеге айырма бар?
Goда жолдорлорду бириктирүүнүн кандай жолдору бар? + менен strings.Builder ортосунда кандай айырма бар?
Пессимисттик бөгөлүү деген эмне?
Redis толуп кетсе жана чыгаруу саясаты өчүрүлгөн болсо, Redis жана кардарлар менен эмне болот?
Бир заказ боюнча бардык окуялар бир Kafka бөлүмүнө кантип киргизсе болот?
Маалыматтарды кэшке салуу кандай ишке ашты? Кантип кэш саясаты колдонулду?
Dead Letter Queue (DLQ) эмне?
Слайс деген эмне? Слайстин капотунун астында эмне бар? append функциясы кантип иштейт?
// товарлар таблицасы: // ID | cnt_view // ----------- // 1 | 100 // эки колдонуучу бир убакта 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да профайлдоо үчүн кандай инструменттер бар?
Kafkaны киргизүүдө нюанстар жана кыйынчылыктар болду беле? Бул сиздин биринчи киргизүү тажрыйбаңызбы?
Go-догу түзүмдөрдүн тууралашы эмнеге? Түзүмдөрдүн талааларын эс тутумда кантип оптималдаштыруу керек?