Sobes.tech

Golang

Kui sa kirjutaksid iseüksustestid oma koodile, milliseid kirjutaksid? Milliseid nurgaolukordi kontrolliksid?

Senior
282

Kust saada sündmuse ID idempotentsuse jaoks ja kus seda genereerida?

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

Kus te säilitas logisid, millist logimise paketti kasutasite koodis ja kuidas logid stdoutist Elasticsearchi jõudsid?

Senior
167

Kuidas SQL tasandil mõista, et selline idempotentsusvõti juba eksisteerib? Kuidas kasutada ON CONFLICT?

Senior
166

Räägi projektist/tööpakkumisest: tehnoloogiate stekk, meeskonna ülesanded

Senior
158

Mis juhtub ID-ga outboxis, kui tehing ei kinnitata?

Senior
142

Millised teised globaalsed probleemid on koodis? Kuidas raha hoida — kas floati saab kasutada?

Senior
132

Mis on probleem sql.DB kopeerimisel väärtuse järgi, mitte näidise järgi?

Senior
131

Kui kaua logisid hoiti ja kui kaua andmeid Kafka's hoiti?

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() // Tagad ir droši aizvērt kanālu close(p.tasks) // signāls darbiniekiem: jaunu uzdevumu nebūs, lasiet pārējo p.wg.Wait() // gaidām, līdz visas goroutines pabeigsies p.cancel() // gadījumā atceļam kontekstu fmt.Println("Pool apturēts.") } // ForceStop piespiedu kārtā aptur visus darbiniekus, nesagaidot uzdevumu pabeigšanu. // Darbinieki tiks nekavējoties pārtraukti caur kontekstu. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Piesaistes apturēšana (laika limits: %v)...\n", timeout) // Bloķē jaunu uzdevumu pievienošanu p.mu.Lock() p.isOpen = false p.mu.Unlock() // Aizver kanālu, lai darbinieki neņemtu jaunus uzdevumus close(p.tasks) // Atceļ kontekstu – tas pārtrauks visus pašreizējos uzdevumus p.cancel() // Dod ierobežotu laiku pabeigšanai done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool piespiedu kārtā apturēts (visi darbinieki pabeiguši)") case <-time.After(timeout): fmt.Println("Pool piespiedu kārtā apturēts (laika limits, var palikt pakarēju goroutine)") } }

Senior
120

func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(advertiserID) // lisada tehing if err != nil { return err } partner, err := r.find(partnerID) if err != nil { return err } advertiser.Balance -= amount // kaitsta 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

Tõmmake välja intervjuu küsimus/ülesanne sellest ekraanipildist. Säilitage algkeel.

Senior
117

/* Järjestatud mitte-kasvavas järjekorras täisarvude nimekiri a, indeks index ja täisarv k. Peate tagastama mis tahes järjekorras k arvu nimekirjast, mis on kõige lähemal väärtuselt elemendile 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] või [5, 7] */

Senior
102

func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(totalPayouts) // transaktsiooni lisamine kui err != null { tagasta err } partner, err := r.find(partnerID) kui err != null { tagasta err } reklāmdevējs.Balance -= amount partner.Hold -= amount partner.Balance += amount ja err := r.save(reklāmdevējs); err != null { tagasta err } ja err := r.save(partner); err != null { tagasta err } r.totalPayouts++ return null } funkcija (r *PayoutRepository) find(id string) (Partner, error) { p := Partner{} err := r.db.QueryRow("SELECT * FROM partners WHERE id = " + id).Scan(&p) // pievienot $1 ja err != null { ja err == sql.ErrNoRows { return p, errors.New("partneris nav atrasts") } return p, err } return p, null }

Senior
100

Mis on ld, rd := 1<<62, 1<<62 algoritmi kontekstis?

Senior
96

Mida täpselt kirjutada Kafka sõnumisse? Milliseid välju edastada tarbijatele?

Senior
94

Antud on järjestatud mitte-vähenevasse järjekorda täisarvude nimekiri a, elemendi indeks ja täisarv k. Võite tagastada mis tahes järjekorras k arvu nimekirjast, mis on kõige lähemal väärtuselt elemendile 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] või [5, 7]

Senior
83
/2