Sobes.tech

Golang

Ако б си сам писао јединичне тестове за свој код, које би написао? Које би углове тестирао?

Senior
277

Odakle uzeti ID događaja za idempotentnost i gde ga generisati?

Senior
187

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
181

Gde ste čuvali logove, koji paket za logovanje ste koristili u kodu i kako su logovi iz stdout prešli u Elasticsearch?

Senior
163

Kako na nivou SQL shvatiti da već postoji ključ idempotentnosti? Kako koristiti ON CONFLICT?

Senior
163

Ispričaj o projektu/poziciji: tehnološki stack, zadaci tima

Senior
156

Šta će se desiti sa ID u outbox-u ako transakcija ne bude potvrđena?

Senior
139

Koji je problem sa kopiranjem sql.DB po vrednosti, a ne po pokazivaču?

Senior
130

Koji još globalni problemi postoje u kodu? Kako čuvati novac — može li se koristiti float?

Senior
129

Koliko dugo su logovi čuvani i koliko dugo su podaci čuvani u Kafka?

Senior
124

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
123

func (p *Pool) Stop() { p.mu.Unlock() // Сада је безбедно затворити канал close(p.tasks) // сигнал радницима: нема нових задатака, прочитај остатак p.wg.Wait() // чекамо да се све горутинес заврше p.cancel() // отказујемо контекст ако је потребно fmt.Println("Pool заустављен.") } // ForceStop принудно зауставља све раднике без чекања да заврше задатке. // Радници ће бити прекинути одмах преко контекста. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Принудно заустављање пула (timeout: %v)...\n", timeout) // Блокира додавање нових задатака p.mu.Lock() p.isOpen = false p.mu.Unlock() // Затвара канал да радници не узимају нове задатке close(p.tasks) // Отказујемо контекст – ово ће прекинути све тренутне задатке p.cancel() // Дамо ограничено време за завршетак done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Пул принудно заустављен (сви радници су завршени)") case <-time.After(timeout): fmt.Println("Пул принудно заустављен (таймаут, могу остати виси goroutine-и)") } }

Senior
119

Izvadite pitanje/zadatak sa intervjua sa ovog snimka ekrana. Sačuvajte originalni jezik.

Senior
117

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

/* Sortirana lista celih brojeva a, indeks index i cijeli broj k. Treba vratiti bilo kojim redoslijedom k brojeva iz liste koji su najbliži vrijednosti elementa 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] ili [5, 7] */

Senior
99

функција (r *PayoutRepository) Payout(рекламодавацID, партнерID стринг, износ float32) грешка { рекламодавац, грешка := r.find(totalPayouts) // додај транзакцију ако грешка != nil { врати грешка } партнер, грешка := r.find(partnerID) ако грешка != nil { врати грешка } рекламодавац.Баланса -= износ партнер.Hold -= износ партнер.Баланса += износ ако err := r.save(рекламодавац); err != nil { врати err } ако err := r.save(партнер); err != nil { врати err } r.totalPayouts++ врати nil } функција (r *PayoutRepository) find(id string) (Partner, грешка) { p := Partner{} err := r.db.QueryRow("SELECT * FROM partners WHERE id = " + id).Scan(&p) // додај $1 ако err != nil { ако err == sql.ErrNoRows { врати p, errors.New("партнер не пронађен") } врати p, err } врати p, nil }

Senior
98

Šta su ld, rd := 1<<62, 1<<62 u kontekstu algoritma?

Senior
92

Šta tačno pisati u poruci Kafka? Koja polja prenositi konzumentima?

Senior
87

Dat je sortirani spisak celih brojeva a, indeks elementa index i celobrojni k. Potrebno je da vratite bilo koji redosled k brojeva iz spiska koji su najbliži vrednosti elementa 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] или [5, 7]

Senior
81
/2