Sobes.tech

Golang

Kendi kodun için birim testleri yazacak olsan, hangilerini yazardın? Hangi köşe durumlarını kontrol ederdin?

Senior
284

İdempotanslık için olay kimliğini nereden almalı ve nerede oluşturmalı?

Senior
193

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
182

Logları nerede sakladınız, kodda hangi loglama paketini kullandınız ve loglar stdout'tan Elasticsearch'e nasıl geçti?

Senior
167

SQL seviyesinde zaten bir idempotans anahtarının olup olmadığını nasıl anlayabiliriz? ON CONFLICT nasıl kullanılır?

Senior
167

Proje/hizmet hakkında bilgi verin: teknolojik yığın, ekip görevleri

Senior
158

İşlem onaylanmazsa, outbox'taki ID ile ne olur?

Senior
142

Koddaki diğer küresel sorunlar nelerdir? Parayı nasıl saklamalı — float kullanılabilir mi?

Senior
132

sql.DB'yi değer olarak kopyalamanın yerine göstergeyle kopyalamanın sorunu nedir?

Senior
131

Kayıtlar ne kadar süre saklandı ve Kafka'da veriler ne kadar süre saklandı?

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
124

func (p *Pool) Stop() { p.mu.Unlock() // Artık kanalı güvenle kapatabiliriz close(p.tasks) // işçilere sinyal: yeni görev yok, kalanını okuyun p.wg.Wait() // tüm goroutine'lerin tamamlanmasını bekle p.cancel() // gerekirse bağlamı iptal et fmt.Println("Havuz durduruldu.") } // ForceStop, tüm işçileri görevlerin tamamlanmasını beklemeden zorla durdurur. // İşçiler, bağlam aracılığıyla hemen kesilecektir. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Havuzu zorla durdurma (zaman aşımı: %v)...\n", timeout) // Yeni görev eklemeyi engelle p.mu.Lock() p.isOpen = false p.mu.Unlock() // Kanalı kapat, böylece işçiler yeni görev almayacak close(p.tasks) // Bağlamı iptal et – bu, tüm çalışan görevleri durduracaktır p.cancel() // Sınırlı süre ver, tamamlaması için done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Havuz zorla durduruldu (tüm işçiler tamamlandı)") case <-time.After(timeout): fmt.Println("Havuz zorla durduruldu (zaman aşımı, takılı kalan goroutines olabilir)") } }

Senior
120

func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(advertiserID) // işlem ekle if err != nil { return err } partner, err := r.find(partnerID) if err != nil { return err } advertiser.Balance -= amount // SELECT FOR UPDATE koruma 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
120

Bu ekran görüntüsünden mülakat sorusu/görevi çıkarın. Orijinal dili koruyun.

Senior
117

/* Sıralanmış artan sırayla dizili tam sayılar a, bir indeks index ve bir tam sayı k verilir. Diziden, a[index] öğesine en yakın olan k sayıyı herhangi bir sırayla geri döndürmeniz gerekir. 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] veya [5, 7] */

Senior
104

func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(totalPayouts) // bir işlem ekle 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 ekle if err != nil { if err == sql.ErrNoRows { return p, errors.New("ortak bulunamadı") } return p, err } return p, nil }

Senior
100

Algoritma bağlamında ld, rd := 1<<62, 1<<62 nedir?

Senior
96

Kafka mesajında tam olarak ne yazılmalı? Tüketicilere hangi alanlar iletilmeli?

Senior
94

Bir artış sırasına göre sıralanmış tamsayılar listesi a, bir öğe indeksi index ve bir tamsayı k verilir. Liste içinden, a[index] öğesine en yakın olan k sayıyı herhangi bir sırayla geri döndürmeniz gerekir. 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] veya [5, 7]

Senior
84
/2