Golang
სად ინახება Redis-ის კონფიგურაცია, თუ ის ცალკე მანქანაზეა?
რა კრიტერიუმები მნიშვნელოვანია შენთვის სამუშაოს არჩევისას? ანაზღაურების მოლოდინები?
როგორ შევქმნათ უკეთესი slice წინასწარ გამოყოფილი მეხსიერებით make-ის გამოყენებით? რატომ უნდა დავაზუსტოთ შესაძლებლობა წინასწარ?
რატომ წამოვედი?
არსებობს თუ არა რაიმე ვადა?
რამდენიმე ნაკლებად გამოცდილი კოლეგის დახმარება გითქვამთ? როგორ ხდებოდა ეს ჩვეულებრივ?
გთხოვთ, მოგვიყევით თქვენი პროფესიული გამოცდილების შესახებ და რატომ გადაწყვიტეთ სამუშაოს ძიება.
// კოდს სწორად დაარეგულირეთ ისე, რომ მოთხოვნები კონკურენტული იყოს და გამოჩნდეს პასუხის კოდი // და შეცდომის შემთხვევაში, ჩაწერეთ ის ლოგში და გააგრძელეთ დამუშავება package main import "net/http" var addrs = []string{"[link]"} func main() { for _, url := range addrs { resp, err := http.Get(url) if err != nil { log.Error(err) continue } // თუ საჭიროა, process resp } }
აჩვენეთ ელემენტის ძებნის ალგორითმი ბინარული ძებნის ხეებში მაგალითით (შედარება კვანძის გასაღთან, მარცხნივ/მარჯვნივ მოძრაობა).
HeadHunter ვებჰუკის საშუალებით პასუხს აგზავნის, ხოლო Avito — არა, უნდა იაროთ თვითონ. როგორ უნდა მოიქცეთ?
პრაქტიკაში გამოიყენეთ ტრიგერები?
რა გელით თქვენი ახალი სამუშაო ადგილისგან?
რომელი ალტერნატივა გაქვთ VACUUM FULL-ის, რომელიც ასევე გაათავისუფლებს ადგილს, მაგრამ მკაცრი ბლოკირების გარეშე?
რატომ შეირჩა ამ კონკრეტულ შემთხვევაში gRPC სერვისისთვის?
თქვენი რეზიუმეში წერია, რომ გოლანგში 3 მიკროწესვარი გქონდათ. რა კიდევ გააკეთეთ მონაცემების ნორმალიზებისა და ვალიდაციის გარდა? ეს იყო მხარდაჭერა თუ განვითარება?
როგორ მიიღებ ერთ შეკითხვაში ყველა გამყიდველის სიის, თუ გაქვს ყველა გამყიდველის და მხოლოდ დაბლოკილი გამყიდველების ცხრილი?
რა არის ოპტიმისტური ბლოკირება?
როგორ პოულობს ClickHouse სვეტებს შორის კავშირს?
რას ეფუძნებოდა Amazon Athena-ში პარტიციონირება?
պակեթ պահեստավորում միավորել ( "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 }