Golang
Da li ste ograničili dubinu skrolovanja? Spomenuli ste korišćenje bulk za početno učitavanje podataka, ali kako ste upravljali inkrementalnim ažuriranjima kada se promenila cena ili naziv proizvoda? Kako ste obezbedili sinhronizaciju Elasticsearch-a?
Regruter ne razume prioritete, jednostavno kaže 'potrebno mi je 300 kandidata' — kako da to obradimo?
пакет за складиштење 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 } return p, nil } 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 }
Koliko je udoban potpuni rad na daljinu?
Koja vrsta multitaskinga se koristi u Go? Kako planer Go prekida goroutine?
Zašto ste koristili Redis umesto in-memory keša?
Da li ste radili sa transakcijama u PostgreSQL i sa kojim nivoima izolacije?
Да ли још комуницираш са другим компанијама? Да ли већ имаш понуде?
Ispričajte o radu s Kafka: što se dešava kada se nakupi lag, koji su rizici i kako su riješeni?
Ispričaj mi o situaciji kada si predložio inicijativu i je odbranio.
Koja komanda prikazuje дискови простор?
главни пакет func main() { c := make(chan int) за опсег 3 { select { подразумевано: println(1) случај <-c: println(2) случај c <- 1: println(3) } } }
Koje su vrste međuprocesne komunikacije (IPC)?
Kako je bilo dodavanje i uklanjanje pravila ako je to bio veliki switch-case?
Kako bi trebalo da programeri koriste AI alate za generisanje ili pregled koda, i koje korake je potrebno preduzeti da bi se njihov izlaz validirao?
Da li je standardna biblioteka net/http dovoljna za pisanje produkcijskog web servera u čistom Go bez okvira?
Ispričaj mi kako se razvijaš i učiš, šta trenutno proučavaš?
```go type User struct { ID int Name string } var ( dbHits int ) func getUserInfoFromDB(id int) User { time.Sleep(100 * time.Millisecond) dbHits++ return User{ID: id, Name: fmt.Sprintf("User-%d", id), } } func main() { var wg sync.WaitGroup for i := 0; i < 5; i++ { wg.Add(1) go func(i int) { defer wg.Done() fmt.Println(getUserInfoFromDB(i)) }(42) } wg.Wait() fmt.Println("DB hits:", dbHits) } ``` Για να διορθώσετε το σφάλμα στον κώδικα που σχετίζεται με ταυτόχρονη πρόσβαση στη μεταβλητή dbHits, πρέπει να συγχρονίσετε την πρόσβαση σε αυτήν.
var defaultTxOptions = &sql.TxOptions{} const defaultCurrency = "RUB" func CreateUserWithDefaultCurrency(ctx context.Context, db *sql.DB, email, passwordHash string) error { tx, err := db.BeginTx(ctx, defaultTxOptions) if err != nil { return err } defer func() { if err != nil{ tx.Rollback() } }() _, err = tx.Exec("INSERT INTO users (email, password) VALUES (?, ?)", email, passwordHash) if err != nil { return err } rows, err := tx.Query("SELECT id FROM users WHERE email = ?", email) if err != nil { return err } defer rows.Close() id := 0 for rows.Next() { err = rows.Scan(&id) if err != nil { return err } } _, err = tx.Exec("INSERT INTO balances (user_id, currency, current_balance) VALUES (?, ?, 0)", id, defaultCurrency) if err != nil { return err } return tx.Commit() }
Kako su povezani blockchain i CAP teorema? Da li je blockchain uvek dostupan?