Sobes.tech

Егер өз кодыңызға юнит-тесттер жазсаңыз, қандай тесттер жазар едіңіз? Қандай шеткі жағдайларды тексерер едіңіз?

Senior
303

Идемпотенттілік үшін оқиға идентификаторын қайдан алуға және оны қайда жасауға болады?

Senior
199

Логтарды қайда сақтадыңыз, кодта қандай логтау пакетін қолдандыңыз және логтар stdout-тан Elasticsearch-ке қалай өтті?

Senior
199

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
194

SQL деңгейінде осындай идемпотенттік кілттің бар екенін қалай түсінуге болады? ON CONFLICT-ты қалай пайдалану керек?

Senior
186

Жоба/вакансия туралы айтып беріңіз: технологиялар стекі, команда міндеттері

Senior
167

Кодта басқа қандай жаһандық мәселелер бар? Ақшаны қалай сақтау керек — float қолдануға бола ма?

Senior
160

Транзакция орындалмаса, outbox-те ID-ға не болады?

Senior
156

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 // 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
155

/* Берілген тізім бойынша a, ол өсу ретімен сұрыпталған, индекс элементі index және бүтін k. a[index] мәніне ең жақын k санды кез келген тәртіпте қайтару керек. 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
154

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("Пулды күшпен тоқтату (уақыт шегі: %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("Пулды күшпен тоқтату (уақыт шегі, мүмкін тоқтап қалған горутиналар бар)") } }

Senior
149

sql.DB-ны мән бойынша көшірудің орнына көрсеткіш бойынша көшірудің қандай мәселелері бар?

Senior
138

Kafka-да логтарды қанша уақыт сақтайсыз және деректер қанша уақыт сақталады?

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
129

func (r *PayoutRepository) Payout(advertiserID, partnerID string, amount float32) error { advertiser, err := r.find(totalPayouts) // транзакцияны қосу 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) // $1 қосу if err != nil { if err == sql.ErrNoRows { return p, errors.New("серіктес табылмады") } return p, err } return p, nil }

Senior
127

Extract the interview question/task from this screenshot. Keep the original language.

Senior
127

Kafka хабарламасында нақты не жазу керек? Тұтынушыларға қандай өрістерді беру керек?

Senior
116

Алгоритм контекстінде ld, rd := 1<<62, 1<<62 дегеніміз не?

Senior
110

storage import ( "database/sql" "errors" "fmt" "time" "github.com/company/my-service/internal/event" "github.com/company/my-service/internal/metric" ) type Partner struct { ID string `db:"id" json:"id"` Balance float32 `db:"balance" json:"balance"` Hold float32 `db:"hold" json:"hold"` } type PayoutRepository struct { db sql.DB eventPublisher event.Publisher metricCollector metric.Collector totalPayouts int } func NewPayoutRepository() *PayoutRepository { db, err := sql.Open("postgres", "host=localhost user=postgres password=postgres dbname=affiliate") if err != nil { panic(err) } r := PayoutRepository{ db: db, eventPublisher: event.NewKafkaPublisher("localhost:9092"), metricCollector: metric.NewPrometheusCollector("localhost:9090"), } go func() { for range time.Tick(time.Minute) { _ = r.metricCollector.Send("TotalPayouts", r.totalPayouts) } }() return r } 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 } func (r *PayoutRepository) find(id string) (Partner, error) { p := Partner{} err := r.db.QueryRow("SELECT * FROM partners WHERE id = " + id).Scan(&p) if err != nil { if err == sql.ErrNoRows { return p, errors.New("partner not found")} } return p, err } 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
97
/2