Sobes.tech

Golang

Jei pats rašytum vienetinius testus savo kodui, kokius rašytum? Kokius kampinius atvejus patikrintum?

Senior
280

Iš kur gauti įvykio ID idempotentiškumui ir kur jį generuoti?

Senior
189

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

Kur saugojote žurnalus, kokį žurnalavimo paketą naudojote kode ir kaip žurnalai iš stdout pateko į Elasticsearch?

Senior
166

Kaip SQL lygyje suprasti, kad jau yra tokia idempotencijos raktas? Kaip naudoti ON CONFLICT?

Senior
164

Papaskok apie projektą/darbą: technologijų rinkinys, komandos užduotys

Senior
157

Kas nutiks su ID outbox'e, jei transakcija nebus patvirtinta?

Senior
140

Kokie kiti globalūs problemos yra kode? Kaip saugoti pinigus — ar galima naudoti float?

Senior
131

Koks yra problemos kopijuojant sql.DB reikšme, o ne nuoroda?

Senior
130

Kiek laiko buvo saugomi žurnalai ir kiek laiko buvo saugomi duomenys Kafka?

Senior
126

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() // Dabar saugu yra uždaryti kanalą close(p.tasks) // signalas darbuotojams: naujų užduočių nebus, skaitykite likusį p.wg.Wait() // laukiame, kol visi gorutinai baigsis p.cancel() // atšaukia kontekstą, jei reikia fmt.Println("Pool sustabdytas.") } // ForceStop priverstinai sustabdo visus darbuotojus be laukimo, kol užduotys bus baigtos. // Darbuotojai bus nedelsiant nutraukti per kontekstą. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Priverstinis pulo sustabdymas (laiko limitas: %v)...\n", timeout) // Blokuoja naujų užduočių pridėjimą p.mu.Lock() p.isOpen = false p.mu.Unlock() // Uždaro kanalą, kad darbuotojai neimtų naujų užduočių close(p.tasks) // Atšaukia kontekstą – tai nutrauks visas vykdomas užduotis p.cancel() // Suteikia ribotą laiką užbaigimui done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool priverstinai sustabdytas (visi darbuotojai baigė)") case <-time.After(timeout): fmt.Println("Pool priverstinai sustabdytas (laiko limitas, gali likti pakabintų goroutine)") } }

Senior
120

func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(advertiserID) // pridėti sandorį if err != nil { return err } partner, err := r.find(partnerID) if err != nil { return err } advertiser.Balance -= amount // apsaugoti SELECT FOR UPDATE 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
117

Ištraukite pokalbio klausimą/užduotį iš šio ekrano kopijos. Išlaikykite originalią kalbą.

Senior
117

/* Rūšiuotas mažėjimo tvarka sveikųjų skaičių sąrašas a, indeksas index ir sveikasis skaičius k. Reikia grąžinti bet kokia tvarka k skaičių iš sąrašo, kurie yra artimiausi pagal reikšmę elementui a[index]. 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] arba [5, 7] */

Senior
101

func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(totalPayouts) // pridėti transakciją jei err != null { grąžinti err } partner, err := r.find(partnerID) jei err != null { grąžinti err } reklamuotojas.Balance -= amount partner.Hold -= amount partner.Balance += amount jei err := r.save(reklamuotojas); err != null { grąžinti err } jei err := r.save(partner); err != null { grąžinti err } r.totalPayouts++ grąžinti null } funkcija (r *PayoutRepository) find(id string) (Partner, error) { p := Partner{} err := r.db.QueryRow("SELECT * FROM partners WHERE id = " + id).Scan(&p) // pridėti $1 jei err != null { jei err == sql.ErrNoRows { grąžinti p, errors.New("partneris nerastas") } grąžinti p, err } grąžinti p, null }

Senior
99

Kas yra ld, rd := 1<<62, 1<<62 algoritmo kontekste?

Senior
95

Ką tiksliai rašyti Kafka žinutėje? Kokius laukus perduoti vartotojams?

Senior
90

Duota surūšiuota mažėjimo tvarka sveikųjų skaičių sąrašas a, elemento indeksas ir sveikasis skaičius k. Reikia grąžinti bet kokia tvarka k skaičių iš sąrašo, kurie yra artimiausi reikšme prie elemento a[index]. 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] arba [5, 7]

Senior
83
/2