Sobes.tech

Αν έγραφες εσύ μονάδες δοκιμών για τον κώδικά σου, ποιες θα έγραφες; Ποια άκρα περιπτώσεις θα ελέγχατε;

Senior
285

Από πού να πάρετε το ID του συμβάντος για την ιδιομορφία και πού να το δημιουργήσετε;

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

Πώς καταλαβαίνουμε σε επίπεδο SQL ότι ήδη υπάρχει ένα κλειδί ιδιομορφίας; Πώς χρησιμοποιούμε το ON CONFLICT;

Senior
172

Πού αποθηκεύσατε τα αρχεία καταγραφής, ποιο πακέτο καταγραφής χρησιμοποιήσατε στον κώδικα και πώς τα αρχεία καταγραφής από το stdout πήγαν στο Elasticsearch;

Senior
171

Πες μου για το έργο/θέση εργασίας: τεχνολογική στοίβα, καθήκοντα της ομάδας

Senior
159

Τι θα συμβεί με το ID στο outbox αν η συναλλαγή δεν ολοκληρωθεί;

Senior
144

Ποια άλλα παγκόσμια προβλήματα υπάρχουν στον κώδικα; Πώς αποθηκεύουμε χρήματα — μπορούμε να χρησιμοποιήσουμε float;

Senior
132

Ποιο είναι το πρόβλημα με το να αντιγράφεις το sql.DB κατά τιμή αντί για δείκτη;

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

Πόσο καιρό διατηρούνταν τα αρχεία καταγραφής και πόσο καιρό διατηρούνταν τα δεδομένα στο Kafka;

Senior
127

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
122

func (p *Pool) Stop() { p.mu.Unlock() // Τώρα είναι ασφαλές να κλείσουμε το κανάλι close(p.tasks) // σήμα στους εργαζόμενους: δεν θα υπάρχουν νέες εργασίες, διαβάστε το υπόλοιπο p.wg.Wait() // περιμένουμε να ολοκληρωθούν όλα τα goroutines p.cancel() // ακυρώνουμε το πλαίσιο, αν χρειάζεται fmt.Println("Pool σταμάτησε.") } // ForceStop αναγκαστικά σταματά όλους τους εργαζόμενους χωρίς να περιμένει την ολοκλήρωση των εργασιών. // Οι εργαζόμενοι θα διακοπούν αμέσως μέσω του πλαισίου. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Αναγκαστική διακοπή του pool (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("Pool αναγκαστικά σταμάτησε (όλοι οι εργαζόμενοι τερματίστηκαν)") case <-time.After(timeout): fmt.Println("Pool αναγκαστικά σταμάτησε (timeout, ενδέχεται να παραμείνουν goroutines σε αναμονή)") } }

Senior
121

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
120

Αποσπάστε την ερώτηση/εργασία της συνέντευξης από αυτό το στιγμιότυπο οθόνης. Διατηρήστε τη γλώσσα του πρωτοτύπου.

Senior
118

/* Μια ταξινομημένη σε μη φθίνουσα λίστα ακέραιων αριθμών a, ένα δείκτη index και ένας ακέραιος αριθμός k. Πρέπει να επιστρέψετε σε οποιαδήποτε σειρά k αριθμούς από τη λίστα που είναι οι πιο κοντινοί σε τιμή με το στοιχείο 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
107

Τι είναι τα ld, rd := 1<<62, 1<<62 στο πλαίσιο του αλγορίθμου;

Senior
96

Τι ακριβώς να γράψετε στο μήνυμα Kafka; Ποια πεδία να μεταδώσετε στους καταναλωτές;

Senior
95

Δίνεται μια ταξινομημένη σε μη φθίνουσα σειρά λίστα ακέραιων αριθμών a, μια θέση στοιχείου index και ένας ακέραιος k. Πρέπει να επιστρέψετε σε οποιαδήποτε σειρά k αριθμούς από τη λίστα, που είναι οι πιο κοντινοί σε τιμή στο στοιχείο 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
86
/2