Sobes.tech

Golang

Als je zelf unit-tests voor je code zou schrijven, welke zou je schrijven? Welke randgevallen zou je controleren?

Senior
287

Waar het gebeurtenis-ID voor idempotentie vandaan halen en waar het te genereren?

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

Hoe op SQL-niveau te begrijpen dat er al zo'n idempotentiesleutel bestaat? Hoe gebruik je ON CONFLICT?

Senior
175

Waar hebt u de logs opgeslagen, welk loggingpakket hebt u in de code gebruikt en hoe kwamen de logs van stdout naar Elasticsearch?

Senior
171

Vertel me over het project/de vacature: technologiestack, taken van het team

Senior
159

Wat gebeurt er met de ID in de outbox als de transactie niet wordt bevestigd?

Senior
144

Welke andere wereldwijde problemen zijn er in de code? Hoe geld opslaan — kan float worden gebruikt?

Senior
135

Wat is het probleem van sql.DB kopiëren op waarde in plaats van per pointer?

Senior
132

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

Hoe lang zijn de logs bewaard gebleven en hoe lang zijn de gegevens in Kafka bewaard gebleven?

Senior
127

func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(totalPayouts) // voeg transactie toe 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) // voeg $1 toe if err != nil { if err == sql.ErrNoRows { return p, errors.New("partner niet gevonden") } return p, err } return p, nil }

Senior
123

func (p *Pool) Stop() { p.mu.Unlock() // Nu kan nu veilig de kanaal sluiten close(p.tasks) // signaal aan de workers: geen nieuwe taken, lees de rest p.wg.Wait() // wachten tot alle goroutines klaar zijn p.cancel() // annuleer de context voor de zekerheid fmt.Println("Pool gestopt.") } // ForceStop forceert het stoppen van alle workers zonder te wachten op het voltooien van taken. // De workers worden onmiddellijk onderbroken via de context. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Forceren van het stoppen van de pool (timeout: %v)...\n", timeout) // Blokkeer het toevoegen van nieuwe taken p.mu.Lock() p.isOpen = false p.mu.Unlock() // Sluit het kanaal zodat de workers geen nieuwe taken meer nemen close(p.tasks) // Annuleer de context – dit onderbreekt alle lopende taken p.cancel() // Geef een beperkte tijd voor het afronden done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool force gestopt (alle workers beëindigd)") case <-time.After(timeout): fmt.Println("Pool force gestopt (timeout, kunnen hangende goroutines blijven)") } }

Senior
121

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

Haal de sollicitatievraag/opdracht uit deze screenshot. Houd de oorspronkelijke taal.

Senior
118

/* Een gesorteerde lijst van gehele getallen a, een index index en een geheel getal k. Geef willekeurig k getallen uit de lijst terug die het dichtst bij de waarde van het element a[index] liggen. 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] of [5, 7] */

Senior
108

Wat zijn ld, rd := 1<<62, 1<<62 in de context van het algoritme?

Senior
100

Wat moet er precies in het Kafka-bericht staan? Welke velden moeten aan de consumenten worden doorgegeven?

Senior
96

Er is een gesorteerde niet-aflopende lijst van gehele getallen a, een elementindex index en een geheel getal k. Je moet in willekeurige volgorde k getallen uit de lijst teruggeven die het dichtst bij de waarde van het element a[index] liggen. 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] of [5, 7]

Senior
86
/2