Idempotentlik nima?
Golang
Go'da kanallar nima? Qanday turlari bor? Ichki tuzilishi qanday?
// Buyurtmani yangilashda, buyurtma ma'lumotlarini bir nechta xizmatlarga (uchinchi tomon API) yuborishimiz kerak // xizmatlar soni o'smoqda (ming+ bo'lishi mumkin) // kod yozdik, boshida hammasi yaxshi ishladi, lekin vaqt o'tishi bilan bizning xizmatimiz ko'p xotira iste'mol qilmaya boshladi func (s *orderService) SendOrder(ctx context.Context, hosts []string, order Order) { for i := 0; i < len(hosts); i++ { go func() { // Bu uzoq davom etadigan tarmoq chaqiruvi deb tasavvur qiling response, err := s.httpClient.Send(ctx, hosts[i], order) if err != nil { s.logger.Error(ctx, "yuborishda xato", err) return } s.logger.Info(ctx, "muvaffaqiyat", response) }() } }
Go'da context nima? context.WithTimeout va context.WithDeadline qanday farq qiladi?
Go tilida satrlarni birlashtirishning qanday usullari mavjud? + va strings.Builder o'rtasidagi farq nima?
Nima pessimist bloklash?
Bir buyurtmadagi barcha voqealarni Kafka'da bitta partitsiyaga qanday qilib yuborish mumkin?
Redis to'ldirilgan va chiqarish siyosatlari o'chirilgan bo'lsa, Redis va mijozlar bilan nima bo'ladi?
Ma'lumotlarni kesh qilish qanday amalga oshirildi? Qaysi kesh siyosati qo'llanildi?
Dead Letter Queue (DLQ) nima?
Slice nima? Slice ning ichki qismi nima? append funksiyasi qanday ishlaydi?
// mahsulotlar jadvali: // ID | cnt_view // ----------- // 1 | 100 // ikki foydalanuvchi bir vaqtning o'zida id = 1 bo'lgan mahsulotni ko'rishni boshladilar // va bizning bazamizda 2 parallel tranzaksiya ishga tushirildi // natija nima bo'ladi? 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% raqam qanday hisoblab chiqildi? Nega 20 yoki 30 emas?
Mutex va RWMutex nima? Ular qanday farq qiladi?
Go'da axirgi tozalash qanday ishlaydi? Qachon ishga tushadi? Qo'lda ishga tushirish mumkinmi?
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'da satrlar nima? Ular qanday qilib kapot ostida taqdim etiladi?
Go'da profiling uchun qanday vositalar mavjud?
Kafka ni amalga oshirilishida nuanslar va qiyinchiliklar bo'ldimi? Bu sizning birinchi amalga oshirish tajribangizmi?
Go'da tuzilma joylashuvi nima? Tuzilma maydonlarini xotirada qanday optimallashtirish mumkin?