Sobes.tech

Golang

Agar o'zing kodingiz uchun birlik testlarini yozgan bo'lsangiz, qaysilarini yozgan bo'lar edingiz? Qaysi chekka holatlarni tekshirgan bo'lar edingiz?

Senior
287

Idempotlik uchun voqea ID sini qayerdan olish va uni qayerda yaratish kerak?

Senior
195

func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(advertiserID) if err != nil { return err } partner, err := r.find(partnerID) if err != nil { return err } advertiser.Balance -= amount partner.Hold -= amount partner.Balance += amount if err := r.save(advertiser); err != nil { return err } if err := r.save(partner); err != nil { return err } r.totalPayouts++ return nil }

Senior
183

SQL darajasida qanday qilib allaqachon idempotentlik kaliti mavjudligini tushunish mumkin? ON CONFLICT qanday ishlatiladi?

Senior
175

Qayerda loglarni saqladingiz, kodda qaysi loglash paketidan foydalandingiz va loglar stdout dan Elasticsearch ga qanday o'tdi?

Senior
171

Loyihani/ish taklifini haqida gapirib bering: texnologiyalar steki, jamoa vazifalari

Senior
160

Agar tranzaksiya tasdiqlanmasa, outboxdagi ID bilan nima bo'ladi?

Senior
144

Kodiqda qanday boshqa global muammolar mavjud? Pulni qanday saqlash mumkin — float ishlatish mumkinmi?

Senior
135

sql.DB ni qiymat sifatida nusxalash muammosi nima, ko'rsatkich bilan emas?

Senior
132

Loglar qancha vaqt saqlandi va Kafka'da ma'lumotlar qancha vaqt saqlandi?

Senior
127

func (r *PayoutRepository) save(p Partner) error { _, err := r.db.Exec( fmt.Sprintf("UPDATE partners SET balance = %s, hold = %s WHERE id = %s", p.Balance, p.Hold, p.ID), ) if err != nil { return err } if err := r.eventPublisher.Publish("BalanceChanged", p); err != nil { return err } return nil }

Senior
127

func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(totalPayouts) // tranzaksiya qo'shish if err != nil { return err } partner, err := r.find(partnerID) if err != nil { return err } advertiser.Balance -= amount partner.Hold -= amount partner.Balance += amount if err := r.save(advertiser); err != nil { return err } if err := r.save(partner); err != nil { return err } r.totalPayouts++ return nil } func (r *PayoutRepository) find(id string) (Partner, error) { p := Partner{} err := r.db.QueryRow("SELECT * FROM partners WHERE id = " + id).Scan(&p) // $1 qo'shish if err != nil { if err == sql.ErrNoRows { return p, errors.New("hamkor topilmadi") } return p, err } return p, nil }

Senior
123

func (p *Pool) Stop() { p.mu.Unlock() // Endi mumkin xavfsiz tarzda kanalni yopish close(p.tasks) // signal ishchilarga: yangi vazifa bo'lmaydi, qolganini o'qing p.wg.Wait() // barcha goroutine'lar tugashini kutamiz p.cancel() // ehtiyot chorasi sifatida kontekstni bekor qilamiz fmt.Println("Pool to'xtatildi.") } // ForceStop majburan barcha ishchilarni vazifalar tugashini kutmasdan to'xtatadi. // Ishchilar darhol kontekst orqali to'xtatiladi. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Majburan to'xtatish (timeout: %v)...\n", timeout) // Yangi vazifalarni qo'shishni bloklaydi p.mu.Lock() p.isOpen = false p.mu.Unlock() // Kanalni yopamiz, shunda ishchilar yangi vazifa olmaydi close(p.tasks) // Kontekstni bekor qilamiz – bu bajarilayotgan barcha vazifalarni to'xtatadi p.cancel() // Yakunlash uchun cheklangan vaqt beramiz done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool majburan to'xtatildi (barcha ishchilar tugadi)") case <-time.After(timeout): fmt.Println("Pool majburan to'xtatildi (timeout, qolgan goroutine'lar bo'lishi mumkin)") } }

Senior
121

func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(advertiserID) // tranzaktsiya qo'shish if err != nil { return err } partner, err := r.find(partnerID) if err != nil { return err } advertiser.Balance -= amount // SELECT FOR UPDATE ni himoya qilish partner.Hold -= amount partner.Balance += amount if err := r.save(advertiser); err != nil { return err } if err := r.save(partner); err != nil { return err } r.totalPayouts++ return nil }

Senior
121

Ushbu ekran tasviridan suhbat savoli/vazifasini chiqarib oling. Asl tilni saqlang.

Senior
118

/* Tartiblangan ketma-ketlikda bo‘lgan butun sonlar a, indeks index va butun son k berilgan. Ro‘yxatdan a[index] elementiga eng yaqin bo‘lgan k sonni istalgan tartibda qaytarish kerak. a=[2, 3, 5, 7, 11], index=3, k=2 -> [5, 7] a=[4, 12, 15, 15, 24], index=1, k=3 -> [12, 15, 15] a=[2, 3, 5, 7, 11], index=2, k=2 -> [3, 5] yoki [5, 7] */

Senior
111

Algoritm kontekstida ld, rd := 1<<62, 1<<62 nima?

Senior
100

Kafka xabarida aniq nima yozish kerak? Qaysi maydonlarni iste'molchilarga uzatish kerak?

Senior
97

Berilgan tartiblangan, kamayish bo'yicha emas, tartiblangan butun sonlar ro'yxati a, element indeksini index va butun son k. Ro'yxatdan a[index] elementiga eng yaqin bo'lgan k ta sonni istalgan tartibda qaytarish kerak. a=[2, 3, 5, 7, 11], index=3, k=2 -> [5, 7] a=[4, 12, 15, 15, 24], index=1, k=3 -> [12, 15, 15] a=[2, 3, 5, 7, 11], index=2, k=2 -> [3, 5] yoki [5, 7]

Senior
87
/2