Sobes.tech

Golang

Ja tu pats rakstītu vienību testus savam kodam, kurus rakstītu? Kādus stūri gadījumus pārbaudītu?

Senior
285

No kurienes iegūt notikuma ID idempotentībai un kur to ģenerēt?

Senior
194

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

Kā SQL līmenī saprast, ka jau ir tāds idempotences atslēga? Kā izmantot ON CONFLICT?

Senior
172

Kur jūs glabājāt žurnālus, kādu žurnālo paketi izmantojāt kodā un kā žurnāli no stdout nonāca līdz Elasticsearch?

Senior
171

Pastāsti par projektu/vakanci: tehnoloģiju steks, komandas uzdevumi

Senior
159

Kas notiks ar ID outbox, ja darījums netiks apstiprināts?

Senior
144

Kādi vēl ir globālie jautājumi kodā? Kā glabāt naudu — vai var izmantot float?

Senior
132

Kāda ir problēma, kopējot sql.DB pēc vērtības, nevis pēc norādītāja?

Senior
131

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

Cik ilgi žurnāli tika glabāti un cik ilgi dati tika glabāti Kafka?

Senior
127

func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(totalPayouts) // pievienot transakciju ja err != null { atgriezt err } partner, err := r.find(partnerID) ja err != null { atgriezt err } reklāmas devējs.Balance -= amount partner.Hold -= amount partner.Balance += amount ja err := r.save(reklāmas devējs); err != null { atgriezt err } ja err := r.save(partner); err != null { atgriezt err } r.totalPayouts++ atgriezt 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 { atgriezt p, errors.New("partneris nav atrasts") } atgriezt p, err } atgriezt p, null }

Senior
122

func (p *Pool) Stop() { p.mu.Unlock() // Tagad ir droši var 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
121

func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(advertiserID) // pievienot darījumu if err != nil { return err } partner, err := r.find(partnerID) if err != nil { return err } advertiser.Balance -= amount // aizsargāt 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
120

Izņemiet intervijas jautājumu/uzdevumu no šīs ekrānattēla. Saglabājiet oriģinālo valodu.

Senior
118

/* Sakārtots dilstošā secībā veselu skaitļu saraksts a, indekss index un vesels skaitlis k. Jāatgriež jebkādā secībā k skaitļi no saraksta, kas ir vistuvākie pēc vērtības elementam 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] vai [5, 7] */

Senior
107

Kas ir ld, rd := 1<<62, 1<<62 algoritma kontekstā?

Senior
96

Ko tieši rakstīt Kafka ziņojumā? Kādus laukus nodot patērētājiem?

Senior
95

Dotots ir kārts ar nenolaižamu veselu skaitļu sarakstu a, elementa indekss un vesels skaitlis k. Jāatgriež jebkura secība no saraksta, kas ir vistuvāk vērtībai 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] vai [5, 7]

Senior
86
/2